X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=gacela.lisp;h=31fe8abada40e5140ebbe26211e557660dbe5995;hb=fd0956a0072b3db8808880bd3d4dbf17d941265d;hp=955cbc3628a9824256a6590ab3d3a379b814bb49;hpb=9199dc2f83bc4be3647e40031223c86d666656e9;p=gacela.git diff --git a/gacela.lisp b/gacela.lisp index 955cbc3..31fe8ab 100644 --- a/gacela.lisp +++ b/gacela.lisp @@ -15,7 +15,12 @@ ;;; along with this program. If not, see . -(in-package :gacela :nicknames '(gg)) +(eval-when (compile load) (make-package 'gacela :nicknames '(gg) :use '(lisp))) + +(eval-when (compile load eval) + (when (not (find-package 'gacela)) (make-package 'gacela :nicknames '(gg) :use '(lisp))) + (in-package 'gacela :nicknames '(gg) :use '(lisp))) + ;;; Default values for Gacela (defvar *width-screen* 640) @@ -35,9 +40,9 @@ ;;; Video Subsystem -(let (screen flags current-width current-height current-bpp) +(let (screen flags (current-width *width-screen*) (current-height *height-screen*) current-bpp) - (defun init-video-mode (&key (width *width-screen*) (height *height-screen*) (bpp *bpp-screen*)) + (defun init-video-mode (&key (width current-width) (height current-height) (bpp *bpp-screen*)) (cond ((null screen) (init-sdl) (SDL_GL_SetAttribute SDL_GL_DOUBLEBUFFER 1) @@ -51,8 +56,8 @@ (t t))) (defun resize-screen (width height &optional (bpp current-bpp)) - (setq screen (SDL_SetVideoMode width height bpp flags)) - (resize-screen-GL width height) + (cond (screen (setq screen (SDL_SetVideoMode width height bpp flags)) + (resize-screen-GL width height))) (setq current-width width current-height height)) (defun apply-mode-change () @@ -61,25 +66,22 @@ (defun quit-video-mode () (setq screen nil))) -(let ((mode '2d)) - (defun set-2d-mode () - (cond ((3d-mode?) - (setq mode '2d) - (init-video-mode) - (glDisable GL_DEPTH_TEST) - (apply-mode-change)))) - - (defun set-3d-mode () - (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? () - (eq mode '3d))) +(defun set-2d-mode () + (cond ((not (3d-mode?)) + (init-video-mode) + (glDisable GL_DEPTH_TEST) + (apply-mode-change)))) + +(defun set-3d-mode () + (cond ((3d-mode?) + (init-video-mode) + (glClearDepth 1) + (glEnable GL_DEPTH_TEST) + (glDepthFunc GL_LEQUAL) + (apply-mode-change)))) + +(defun 3d-mode? () + (eq (getf (get-game-properties) :mode) '3d)) (defun init-GL () (glShadeModel GL_SMOOTH) @@ -136,7 +138,7 @@ (let ((audio nil)) (defun init-audio () - (cond ((null audio) (progn (init-sdl) (setq audio (Mix_OpenAudio 22050 2 4096)))) + (cond ((null audio) (progn (init-sdl) (setq audio (Mix_OpenAudio 22050 MIX_DEFAULT_FORMAT 2 4096)))) (t audio))) (defun quit-audio () @@ -244,10 +246,27 @@ (SDL_Delay (- time-per-frame frame-time))))))) -(defmacro run-game (title &body code) +(let ((ptitle "") (pwidth *width-screen*) (pheight *height-screen*) (pbpp *bpp-screen*) (pfps *frames-per-second*) (pmode '2d)) + (defun set-game-properties (&key title width height bpp fps mode) + (init-video-mode) + (when title (progn (setq ptitle title) (SDL_WM_SetCaption title ""))) + (when (or width height bpp) + (progn + (when width (setq pwidth width)) + (when height (setq pheight height)) + (when bpp (setq pbpp bpp)) + (resize-screen pwidth pheight pbpp))) + (when fps (progn (setq pfps fps) (set-frames-per-second fps))) + (when mode (progn (setq pmode mode) (if (eq mode '3d) (set-3d-mode) (set-2d-mode)))) + (get-game-properties)) + + (defun get-game-properties () + (list :title ptitle :width pwidth :height pheight :bpp pbpp :fps pfps :mode pmode))) + + +(defmacro run-game (&body code) `(let ((game-function (lambda () ,@code))) (init-video-mode) - (SDL_WM_SetCaption ,title "") (set-game-code game-function) (cond ((not (game-running?)) (init-frame-time) @@ -277,7 +296,7 @@ (defun quit-game () (free-all-resources) -; (quit-audio) + (quit-audio) (quit-video-mode) (quit-all-mobs) ; (clear-events)