]> git.jsancho.org Git - gacela.git/blobdiff - gacela.lisp
(no commit message)
[gacela.git] / gacela.lisp
index b5d611dabe09af9e1eaea50368bf46ab0a565b37..955cbc3628a9824256a6590ab3d3a379b814bb49 100644 (file)
 (defvar *width-screen* 640)
 (defvar *height-screen* 480)
 (defvar *bpp-screen* 32)
-(defvar *title-screen* "Happy Hacking!!")
 (defvar *frames-per-second* 20)
-(defvar *transparent-color* '(:red 0 :green 0 :blue 0))
-(defvar *background-color* '(:red 0 :green 0 :blue 0))
 
 ;;; SDL Initialization Subsystem
 (let (initialized)
@@ -38,7 +35,7 @@
 
 
 ;;; Video Subsystem
-(let (screen flags current-width current-height)
+(let (screen flags current-width current-height current-bpp)
 
   (defun init-video-mode (&key (width *width-screen*) (height *height-screen*) (bpp *bpp-screen*))
     (cond ((null screen)
           (setq screen (SDL_SetVideoMode width height bpp flags))
           (init-GL)
           (resize-screen-GL width height)
-          (setq current-width width current-height height))
+          (setq current-width width current-height height current-bpp bpp))
          (t t)))
 
-  (defun resize-screen (width height bpp)
+  (defun resize-screen (width height &optional (bpp current-bpp))
     (setq screen (SDL_SetVideoMode width height bpp flags))
     (resize-screen-GL width height)
     (setq current-width width current-height height))
   (defun apply-mode-change ()
     (resize-screen-GL current-width current-height))
 
-  (defun fill-screen (color)
-    (init-video-mode)
-    (fill-surface screen (getf color :red) (getf color :green) (getf color :blue)))
-
-  (defun flip ()
-    (cond ((null screen) nil)
-         (t (SDL_Flip screen))))
-
   (defun quit-video-mode ()
     (setq screen nil)))
 
@@ -84,7 +73,9 @@
     (cond ((not (3d-mode?))
           (setq mode '3d)
           (init-video-mode)
+          (glClearDepth 1)
           (glEnable GL_DEPTH_TEST)
+          (glDepthFunc GL_LEQUAL)
           (apply-mode-change))))
 
   (defun 3d-mode? ()
@@ -93,8 +84,8 @@
 (defun init-GL ()
   (glShadeModel GL_SMOOTH)
   (glClearColor 0 0 0 0)
-  (glClearDepth 1)
-  (glDepthFunc GL_LEQUAL)
+;  (glClearDepth 1)
+;  (glDepthFunc GL_LEQUAL)
 ;  (glEnable GL_BLEND)
 ;  (glBlendFunc GL_SRC_ALPHA GL_ONE)
   (glHint GL_PERSPECTIVE_CORRECTION_HINT GL_NICEST)
     (maphash (lambda (key res) (free-resource key)) resources-table)))
 
 
-;;; Connection with Gacela Skin
-(let (socket)
-  (defun start-skin-client (port)
-    (when (null socket) (setq socket (si::socket port :host "localhost"))))
-
-  (defun eval-from-skin ()
-    (when (si::listen socket)
-      (secure-block socket (eval (read socket)))))
-
-  (defun stop-skin-client ()
-    (when socket
-      (si::close socket)
-      (setq socket nil))))
+;;; Connection with Gacela Clients
+(let (server-socket clients)
+  (defun start-server (port)
+    (cond ((null server-socket) (setq server-socket (si::socket port :server #'check-connections)))))
+
+  (defun check-connections ()
+    (cond ((and server-socket (listen server-socket)) (setq clients (cons (si::accept server-socket) clients)))))
+
+  (defun eval-from-clients ()
+    (labels ((eval-clients (cli-socks)
+                          (cond (cli-socks
+                                 (let ((cli (car cli-socks)))
+                                   (cond ((si::listen cli)
+                                          (secure-block cli (eval (read cli)))
+                                          (si::close cli)
+                                          (eval-clients (cdr cli-socks)))
+                                         (t
+                                          (cons cli (eval-clients (cdr cli-socks))))))))))
+           (setq clients (eval-clients clients))))
+
+  (defun stop-server ()
+    (cond (server-socket (si::close server-socket) (setq server-socket nil)))
+    (cond (clients
+          (labels ((close-clients (cli-socks)
+                                  (si::close (car cli-socks))
+                                  (close-clients (cdr cli-socks))))
+                  (close-clients clients))
+          (setq clients nil)))))
 
 
 ;;; GaCeLa Functions
     (setq running t)
     (do () ((quit?))
        (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT))
-       (glLoadIdentity)
+       (to-origin)
        (when (functionp game-code) (funcall game-code))
        (SDL_GL_SwapBuffers)
        (delay-frame)
        (init-frame-time)
-       (eval-from-skin)
+       (check-connections)
+       (eval-from-clients)
        (process-events))
     (setq running nil))