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)))
(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)))))))
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)))