[corman-sdl-cvs] CVS update: corman-sdl/engine/engine.lisp

Luke J Crook lcrook at common-lisp.net
Tue Apr 20 01:07:56 UTC 2004


Update of /project/corman-sdl/cvsroot/corman-sdl/engine
In directory common-lisp.net:/tmp/cvs-serv28960/engine

Modified Files:
	engine.lisp 
Log Message:

Date: Mon Apr 19 21:07:56 2004
Author: lcrook

Index: corman-sdl/engine/engine.lisp
diff -u corman-sdl/engine/engine.lisp:1.3 corman-sdl/engine/engine.lisp:1.4
--- corman-sdl/engine/engine.lisp:1.3	Mon Apr 19 04:20:15 2004
+++ corman-sdl/engine/engine.lisp	Mon Apr 19 21:07:55 2004
@@ -113,7 +113,6 @@
         (y :accessor sprite-y :initform 0 :initarg :y)
         (zorder :accessor sprite-zorder :initform 0 :initarg :zorder)))
 
-
 (defun addto-bitplane (bitplane obj)
     (cond 
         ((null (bitplane-end bitplane))
@@ -133,46 +132,43 @@
     (make-bitplane :zorder zorder))
 
 (defun get-zorder (obj)
-    (if (bitplane-p obj)
-        (bitplane-zorder obj)
-        (if (dl-p obj)
+    (cond 
+        ((bitplane-p obj)
+            (bitplane-zorder obj))
+        ((dl-p obj)
             (bitplane-zorder (dl-data obj)))))
     
-(defun find-bitplane (bitplane zorder)
-    (let ((bp bitplane) (quit nil))
+(defun find-bitplane (zorder bitplanes)
+    (let ((bp bitplanes) (quit nil))
+        (sdl:fformat "bp == ~A, zorder == ~A~%" bp zorder)
         (loop
-            (when (equal quit t) (return (values bp nil)))
-            (cond
-                ((equal zorder (get-zorder bp))
-                    (return (values bp t)))
-                ((< zorder (get-zorder bp))
-                    (if (null (dl-next bp))
-                        (setf quit t)
-                        (setf bp (dl-next bp))))
-                (t
-                    (return (values bp nil)))
-                (t
-                    (if (null (dl-next bp))
-                        (setf quit t)
-                        (setf bp (dl-next bp))))))))
-
-(defun return-zlevel (objects zorder)
-    "Returns the zlevel with the specified zorder.
-    zlevel may already exist or may be created it does not already exist"
-    (when (null objects)
-        (setf objects (dl-list (new-zlevel zorder))))
-    (let ((obj nil) (found nil))
-        (multiple-value-bind (obj found)
-            (find-zlevel objects zorder)
-            (cond 
-                (found
-                    obj)
-                ((null found)
-                    (dl-append (new-zlevel zorder) obj))))
-        (values obj)))
+            (when (equal quit t) (return (values bp 'n)))
+            (if (> zorder (get-zorder bp))          ; if test > current
+                (when (null (dl-next bp))   
+                        (setf quit t)               ; end of list when next is null
+                        (setf bp (dl-next bp)))     ; next node
+                (if (equal zorder (get-zorder bp))  
+                    (return (values bp 'c))         ; test == curent, return
+                    (return (values bp 'p)))))))    ; test < current, return
+
+(defun return-bitplane (zorder bitplanes)
+    (when (null bitplanes)
+        (setf objects (dl-list (new-bitplane zorder)))
+        (setf bitplanes objects))
+    (multiple-value-bind (bitplane pos) (find-bitplane zorder bitplanes)
+        (cond
+            ((equal pos 'c)
+                (values (dl-data bitplane)))
+            ((equal pos 'p)
+                (values (dl-data (dl-insert (new-bitplane zorder) bitplane))))
+            ((equal pos 'n)
+                (values (dl-data (dl-append (new-bitplane zorder) bitplane)))))))
+
 
 (defun add-object (spr)
-    (addto-level (dl-data (return-zlevel objects (sprite-zorder spr))) spr))
+    (addto-bitplane 
+        (return-bitplane (sprite-zorder spr) objects)
+        spr))
             
             
 





More information about the Corman-sdl-cvs mailing list