X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=gacela.lisp;h=d5d28525a2f56718f986c9704f302937858eee39;hb=4cb43f867b6a2fcf40ced44ac937d8930005d01e;hp=a98446b823a7114b705053b0f8433e45dfa4426b;hpb=bc8ba05fc1837e2421e7b53420b655c7806c006a;p=gacela.git diff --git a/gacela.lisp b/gacela.lisp index a98446b..d5d2852 100644 --- a/gacela.lisp +++ b/gacela.lisp @@ -15,7 +15,7 @@ ;;; along with this program. If not, see . -(in-package :gacela) +(in-package :gacela :nicknames '(gg)) ;;; Default values for Gacela (defvar *width-screen* 640) @@ -204,22 +204,19 @@ (maphash (lambda (key res) (free-resource key)) resources-table))) -;;; Gacela Server for development mode -(let (socket clients) - (defun start-server (port) - (when (null socket) (setq socket (si::socket port :server #'eval-from-clients)))) +;;; Connection with Gacela Skin +(let (socket) + (defun start-skin-client (port) + (when (null socket) (setq socket (si::socket port :host "localhost")))) - (defun check-server-connections () - (when (and socket (si::listen socket)) (push (si:accept socket) clients))) + (defun eval-from-skin () + (when (si::listen socket) + (secure-block socket (eval (read socket))))) - (defun eval-from-clients () - (dolist (cli clients) (when (si::listen cli) (eval (read cli))))) - - (defun stop-server () + (defun stop-skin-client () (when socket - (dolist (cli clients) (si::close cli)) (si::close socket) - (setq socket nil clients nil)))) + (setq socket nil)))) ;;; GaCeLa Functions @@ -234,31 +231,37 @@ (let ((frame-time (- (SDL_GetTicks) time))) (cond ((< frame-time time-per-frame) (SDL_Delay (- time-per-frame frame-time))))))) - + (defmacro run-game (title &body code) - `(progn + `(let ((game-function (lambda () ,@code))) (init-video-mode) (SDL_WM_SetCaption ,title "") - (init-frame-time) - (check-server-connections) - (eval-from-clients) - (refresh-running-mobs) - (process-events) - (do () ((quit?)) - (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) - (logic-mobs) - (render-mobs) - (glLoadIdentity) - ,@code - (SDL_GL_SwapBuffers) - (delay-frame) - (init-frame-time) - (check-server-connections) - (eval-from-clients) - (refresh-running-mobs) - (process-events) - (setq running nil)))) + (set-game-code game-function) + (cond ((not (game-running?)) + (init-frame-time) + (process-events) + (game-loop))))) + +(let (running game-code) + (defun game-loop () + (setq running t) + (do () ((quit?)) + (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) + (glLoadIdentity) + (when (functionp game-code) (funcall game-code)) + (SDL_GL_SwapBuffers) + (delay-frame) + (init-frame-time) + (eval-from-skin) + (process-events)) + (setq running nil)) + + (defun game-running? () + running) + + (defun set-game-code (game-function) + (setq game-code game-function))) (defun quit-game () (free-all-resources)