almost drawing engine. at least no syntax errors...

This commit is contained in:
Dan Ballard 2011-08-06 17:20:23 -07:00
parent 3a3c66bba5
commit bfda5bc4df
3 changed files with 34 additions and 17 deletions

View File

@ -2,26 +2,31 @@
(defclass engine-object (game-object)
((start-time :initarg :start-time :accessor start-time :initform 0)
;; time till fully active
(activation-time :initarg :activation-time :accessor activation-time :initform 0)))
(defmethod activate ((object engine-object) start-time)
(setf (start-time object) start-time))
(defclass engine-model (model)
((template-vertices :initarg :template-vertices :accessor template-vertices :initform nil)
(template-colors :initarg :template-colors :accessor template-colors :initform nil)))
(defun generate-step-2d-array (2darr time)
(let ((len-arr (length 2darr))
(len-row (length (aref 2darr 0))))
(len-row (length (first 2darr))))
(make-2d-array len-arr len-row
(loop for i from 0 to len-arr collecting
(loop for j from 0 to len-row collecting
(let ((item (aref (aref 2darr i) j)))
(if (listp item)
(converge (first item) (second item) (third item) time)
item)))))))
(loop for row in 2darr collecting
(loop for item in row collecting
;(let ((item (aref (aref 2darr i) j)))
(if (listp item)
(converge (first item) (second item) (third item) time)
item))))))
; take 2 seconds to fully fire
(defmethod regen-model ((model engine-model) time)
(format t "REGNE MODEL~%")
(setf (vertices model) (generate-step-2d-array (template-vertices model) time))
(setf (colors model) (generate-step-2d-array (template-colors model) time)))
@ -38,9 +43,9 @@
((0 255 2) (0 255 2) (64 255 2))))
(defmethod draw ((model engine-model) time)
(if (and (generated-model model) (< (- time (start-time model)) (activation-time model)))
(regen-model model time))
(defmethod draw ((object engine-object) time)
(if (< (- time (start-time object)) (activation-time object))
(regen-model (model object) time))
(call-next-method))

View File

@ -147,7 +147,8 @@
(defun thruster-on (key)
(case key
; ((:sdl-key-w) ; + z
((:sdl-key-w) ; + z
(activate-attachment *self* :thruster (wall-time)))
; (progn
;(setf (aref (acceleration (motion *self*)) 2) (- *acceleration*))
;(engine-start (engine *self*) (wall-time))))
@ -167,7 +168,8 @@
(defun thruster-off (key)
(case key
;((:sdl-key-w) ; + z
((:sdl-key-w) ; + z
(deactivate-attachment *self* :thruster))
; (progn
; (setf (aref (acceleration (motion *self*)) 2) 0)
; (engine-stop (engine *self*))))
@ -256,13 +258,12 @@
:attachments
(list :thruster
(make-instance 'engine-object
:activation-time 2
:model (make-instance 'engine-model
:template-vertices *thruster-vertices*
:template-colors *thruster-colors*)
:body (make-instance 'body
:coords (vector 0 0 3)))))))
:coords (vector 0 0 3))))))
;:engines (list :engines (list :thrust
; (make-instance 'engine-object
; :motion (make-instance 'motion :coords (vector 0 0.5 3.0))

View File

@ -12,10 +12,19 @@
;(defmethod coords ((object game-object))
; (coords (body object)))
(defmethod activate ((object game-object) sym start-time)
(defgeneric activate (object start-time))
(defgeneric activate-attachment (object sym start-time))
(defgeneric deactivate (object))
(defgeneric deactivate-attachment (object sym))
(defmethod activate-attachment ((object game-object) sym start-time)
(push sym (active-attachments object))
(activate (getf (attachments object) sym) start-time))
(defmethod deactivate-attachment ((object game-object) sym)
(setf (active-attachments object) (remove sym (active-attachments object))))
(defmethod draw :before ((object game-object) time)
(gl:push-matrix)
(gl:translate (aref (coords (body object)) 0) (aref (coords (body object)) 1) (aref (coords (body object)) 2))
@ -27,4 +36,6 @@
(gl:pop-matrix))
(defmethod draw ((object game-object) time)
(draw (model object) time))
(draw (model object) time)
(loop for a in (active-attachments object) do
(draw (getf (attachments object) a) time)))