diff --git a/11/tutorial-11.lisp b/11-clip-rendering-and-sprite-sheets.lisp similarity index 55% rename from 11/tutorial-11.lisp rename to 11-clip-rendering-and-sprite-sheets.lisp index d4ff3f8..79e4d43 100644 --- a/11/tutorial-11.lisp +++ b/11-clip-rendering-and-sprite-sheets.lisp @@ -1,8 +1,9 @@ -(defpackage #:sdl2-tutorial-11 - (:use :common-lisp) - (:export :main)) +(defpackage #:sdl2-tutorial-11-clip-rendering-and-sprite-sheets + (:use :cl) + (:export :run) + (:import-from :sdl2-tutorial-utils :asset-pathname)) -(in-package :sdl2-tutorial-11) +(in-package :sdl2-tutorial-11-clip-rendering-and-sprite-sheets) (defparameter *screen-width* 640) (defparameter *screen-height* 480) @@ -21,15 +22,16 @@ :accessor tex-texture :initform nil))) -(defun load-texture-from-file (renderer filename) +(defun load-texture-from-file (renderer pathname) (let ((tex (make-instance 'tex :renderer renderer))) (with-slots (renderer texture width height) tex - (let ((surface (sdl2-image:load-image filename))) + (let ((surface (sdl2-image:load-image pathname))) (setf width (sdl2:surface-width surface)) (setf height (sdl2:surface-height surface)) (sdl2:set-color-key surface :true (sdl2:map-rgb (sdl2:surface-format surface) 0 #xFF #xFF)) - (setf texture (sdl2:create-texture-from-surface renderer surface)))) + (setf texture (sdl2:create-texture-from-surface renderer surface)) + (sdl2:free-surface surface))) tex)) (defun render (tex x y &key clip) @@ -45,46 +47,45 @@ (defmacro with-window-renderer ((window renderer) &body body) `(sdl2:with-init (:video) (sdl2:with-window (,window - :title "SDL2 Tutorial" + :title "SDL2 Tutorial 11" :w *screen-width* :h *screen-height* :flags '(:shown)) (sdl2:with-renderer (,renderer ,window :index -1 :flags '(:accelerated)) ,@body)))) -(defun main() +(defun run () (with-window-renderer (window renderer) (sdl2-image:init '(:png)) - (let ((spritesheet-tex (load-texture-from-file renderer "11/spritesheet.png")) - (sprite-clips '(:top-left (0 0 100 100) - :top-right (100 0 100 100) - :bottom-left (0 100 100 100) - :bottom-right (100 100 100 100)))) + (let ((spritesheet-tex (load-texture-from-file renderer (asset-pathname #P"assets/11/spritesheet.png"))) + (top-left (sdl2:make-rect 0 0 100 100)) + (top-right (sdl2:make-rect 100 0 100 100)) + (bottom-left (sdl2:make-rect 0 100 100 100)) + (bottom-right (sdl2:make-rect 100 100 100 100))) (sdl2:with-event-loop (:method :poll) (:quit () t) (:idle () (sdl2:set-render-draw-color renderer #xFF #xFF #xFF #xFF) (sdl2:render-clear renderer) - (let ((rect (apply #'sdl2::make-rect (getf sprite-clips :top-left)))) - (render spritesheet-tex 0 0 :clip rect)) + (render spritesheet-tex + 0 + 0 + :clip top-left) - (let ((rect (apply #'sdl2::make-rect (getf sprite-clips :top-right)))) - (render spritesheet-tex - (- *screen-width* (sdl2:rect-width rect)) - 0 - :clip rect)) + (render spritesheet-tex + (- *screen-width* (sdl2:rect-width top-right)) + 0 + :clip top-right) - (let ((rect (apply #'sdl2::make-rect (getf sprite-clips :bottom-left)))) - (render spritesheet-tex - 0 - (- *screen-height* (sdl2:rect-height rect)) - :clip rect)) + (render spritesheet-tex + 0 + (- *screen-height* (sdl2:rect-height bottom-left)) + :clip bottom-left) - (let ((rect (apply #'sdl2::make-rect (getf sprite-clips :bottom-right)))) - (render spritesheet-tex - (- *screen-width* (sdl2:rect-width rect)) - (- *screen-height* (sdl2:rect-height rect)) - :clip rect)) + (render spritesheet-tex + (- *screen-width* (sdl2:rect-width bottom-right)) + (- *screen-height* (sdl2:rect-height bottom-right)) + :clip bottom-right) (sdl2:render-present renderer)))))) diff --git a/11/spritesheet.png b/assets/11/spritesheet.png similarity index 100% rename from 11/spritesheet.png rename to assets/11/spritesheet.png diff --git a/sdl2-tutorial.asd b/sdl2-tutorial.asd index 7f6e217..ccf7e90 100644 --- a/sdl2-tutorial.asd +++ b/sdl2-tutorial.asd @@ -15,7 +15,7 @@ (:file "08-geometry-rendering") (:file "09-the-viewport") (:file "10-color-keying") - (:file "11/tutorial-11") + (:file "11-clip-rendering-and-sprite-sheets") (:file "12/tutorial-12") (:file "13/tutorial-13") (:file "14/tutorial-14")