[corman-sdl-cvs] CVS update: corman-sdl/ffi/engine.lisp
Luke J Crook
lcrook at common-lisp.net
Thu Jul 8 08:48:34 UTC 2004
Update of /project/corman-sdl/cvsroot/corman-sdl/ffi
In directory common-lisp.net:/tmp/cvs-serv6276/ffi
Modified Files:
engine.lisp
Log Message:
Date: Thu Jul 8 01:48:34 2004
Author: lcrook
Index: corman-sdl/ffi/engine.lisp
diff -u corman-sdl/ffi/engine.lisp:1.1 corman-sdl/ffi/engine.lisp:1.2
--- corman-sdl/ffi/engine.lisp:1.1 Tue Apr 13 10:09:40 2004
+++ corman-sdl/ffi/engine.lisp Thu Jul 8 01:48:34 2004
@@ -73,15 +73,21 @@
(return obj)
(setf obj (dl-next obj))))))
-(defstruct (zlevel)
- zorder
- start
- end)
-
+;;;;; End: Link list functions
+;;;;;
+(defun create-display-list ()
+ (let ((display-list nil))
+ (defun init-display-list ()
+ (setf display-list nil))
+ (defun display-list ()
+ display-list)))
-(defvar objects nil)
+(defstruct (level)
+ zorder
+ start
+ end)
(defclass sprite ()
(
@@ -90,32 +96,46 @@
(y :accessor sprite-y :initform 0 :initarg :y)
(zorder :accessor sprite-zorder :initform 0 :initarg :zorder)))
+(defun new-level (zorder)
+ (make-level :zorder zorder))
-(defun addto-level (zlevel obj)
+(defun addto-level (level object)
(cond
- ((null (zlevel-end zlevel))
- (setf (zlevel-end zlevel) (dl-list obj))
- (setf (zlevel-start zlevel) (zlevel-end zlevel)))
+ ((null (level-end level))
+ (setf (level-end level) (dl-list object))
+ (setf (level-start level) (level-end level)))
(t
- (setf (zlevel-end zlevel) (dl-append obj (zlevel-end zlevel))))))
+ (setf (level-end level) (dl-append object (level-end level))))))
+
+;Removes a node from the level.
+(defun remove-node-from-level (level object)
+ (when (null (dl-next object))
+ (setf (level-end level) (dl-prev object)))
+ (when (null (dl-prev object))
+ (setf (level-start level) (dl-next object)))
+ (dl-remove object))
+
+;Finds the node containing object, then calls remove-node-from-level
+(defun remove-from-level (level object)
+ (let ((obj (dl-find (level-start level)
+ #'(lambda (node)
+ (if (equal (dl-data node) object)
+ node
+ nil)))))
+ (when obj
+ (remove-node-from-level level obj))))
-(defun add-level (objects level)
+(defun add-level (level objects)
(cond
- ((null (zlevel-end zlevel))
- (setf (zlevel-end zlevel) (dl-list obj))
- (setf (zlevel-start zlevel) (zlevel-end zlevel)))
+ ((null objects)
+ (setf objects (dl-list level)))
+ ((null (level-end level))
+ (setf (level-end level) (dl-list objects))
+ (setf (level-start level) (level-end level)))
(t
- (setf (zlevel-end zlevel) (dl-append obj (zlevel-end zlevel))))))
+ (setf (level-end level) (dl-append objects (level-end level))))))
-(defun remove-from-level (zlevel obj)
- (when (null (dl-next obj))
- (setf (zlevel-end zlevel) (dl-prev obj)))
- (when (null (dl-prev obj))
- (setf (zlevel-start zlevel) (dl-next obj)))
- (dl-remove obj))
-(defun new-zlevel (zorder)
- (make-zlevel :zorder zorder))
(defun new-find-zlevel (zorder)
#'(lambda (dl)
More information about the Corman-sdl-cvs
mailing list