OSDN Git Service

layers/planes: connected with screen flyweight
[rulp/rulp.git] / graphics / view.lisp
index e5d4b2e..1553351 100644 (file)
@@ -26,8 +26,8 @@
 first element"
   (let ((plane-info (nth number (cdr (assoc :planes map-info)))))
     (values
-     (make-instance 'rulp.layers:screen
-                    :image (merge-pathnames map-path (cdr (assoc :image-path plane-info))))
+     (make-instance 'rulp.layers:plane
+                    :background (merge-pathnames map-path (cdr (assoc :image-path plane-info))))
      (cdr (assoc :grid-dimension plane-info))
      )
     ;; FIXME: generalize... somehow
@@ -41,6 +41,7 @@ first element"
           :collect
           (make-instance 'entity
                          :image (merge-pathnames map-path (cdr (assoc :image-path entity-info)))
+                         :size (if (assoc :size entity-info) (cdr (assoc :size entity-info)) 1)
                          :name (assoc :name entity-info)
                          )
           )
@@ -93,10 +94,10 @@ even when away from keyboard")
 DEBUG-INFO can be used to display the content on screen for test and debug purposes."
   (declare (ignore fps))
   (sdl2:with-init (:video)
-    (with-playground (window *renderer* :title title)
+    (with-playground (window rulp.render:*renderer* :title title)
       (setf *tr-texture* (let* ((font (sdl2-ttf:open-font "media/IBMPlex.ttf" 100)) ;; FIXME: this crashes the program under windows, throws error on linux but works anyway
                                 (font-surface (sdl2-ttf:render-utf8-solid font *tr-string* 0 0 0 0))
-                                (font-texture (sdl2:create-texture-from-surface *renderer* font-surface)))
+                                (font-texture (sdl2:create-texture-from-surface rulp.render:*renderer* font-surface)))
                            (sdl2:free-surface font-surface)
                            font-texture))
       (multiple-value-bind (p g) (create-plane *map-info* *map-path*)
@@ -104,8 +105,8 @@ DEBUG-INFO can be used to display the content on screen for test and debug purpo
         (setf *plane-grid* g))
       (setf *entities-list* (create-entities *map-info* *map-path*))
       (let (;; (mouse-button-previous nil)
-            (window-texture (sdl2:get-render-target *renderer*))
-            (viewpoint-texture (sdl2:create-texture *renderer* (sdl2:get-window-pixel-format window)
+            (window-texture (sdl2:get-render-target rulp.render:*renderer*))
+            (viewpoint-texture (sdl2:create-texture rulp.render:*renderer* (sdl2:get-window-pixel-format window)
                                                     2 (width *plane*) (height *plane*))) ;camping into the ramhog
             (viewpoint-rectangle (sdl2:make-rect 0 0 10 10)))
         (sdl2:with-event-loop (:method :poll)
@@ -168,64 +169,62 @@ DEBUG-INFO can be used to display the content on screen for test and debug purpo
                    (mouse-event *mouse-position* :dragp t))
 
                  ;; trick to avoid functions to change the global draw-color
-                 (sdl2:set-render-draw-color *renderer* 0 0 0 255)
+                 (sdl2:set-render-draw-color rulp.render:*renderer* 0 0 0 255)
 
                  ;; local viewpoint
                  ;; NOTE: generalize
                  (when *changep*
                    (sdl2:destroy-texture viewpoint-texture)
-                   (setf viewpoint-texture (sdl2:create-texture *renderer*
+                   (setf viewpoint-texture (sdl2:create-texture rulp.render:*renderer*
                                                                 (sdl2:get-window-pixel-format window)
                                                                 2
                                                                 (width *plane*)
                                                                 (height *plane*)))
-                   (sdl2:set-render-target *renderer* viewpoint-texture)
-                   (sdl2:render-clear *renderer*)
-                   (render-plane-and-entities *renderer*)
+                   (sdl2:set-render-target rulp.render:*renderer* viewpoint-texture)
+                   (sdl2:render-clear rulp.render:*renderer*)
+                   (render-plane-and-entities rulp.render:*renderer*)
                    (when *is-grid*
-                     (grid-render *renderer* 0 0 (width *plane*) (height *plane*))
+                     (grid-render rulp.render:*renderer* 0 0 (width *plane*) (height *plane*))
                      )
                    (when *is-indexes*
-                     (indexes-render *renderer* 0 0 (width *plane*) (height *plane*)))
-                   (sdl2:set-render-draw-color *renderer* 0 0 0 255)
+                     (indexes-render rulp.render:*renderer* 0 0 (width *plane*) (height *plane*)))
+                   (sdl2:set-render-draw-color rulp.render:*renderer* 0 0 0 255)
                    (setf *changep* nil)
                    ;; pointer section
                    (when *pointer* ;; NOTE: to test this out
-                     (sdl2:set-render-draw-color *renderer* 128 250 33 255)
+                     (sdl2:set-render-draw-color rulp.render:*renderer* 128 250 33 255)
                      (multiple-value-bind (coordinates size) (grid-layout (car (coordinate (nth *pointer* *entities-list*)))
                                                                           (cdr (coordinate (nth *pointer* *entities-list*)))
                                                                           :size (size (nth *pointer* *entities-list*)))
                        (let ((select-rectangle (sdl2:make-rect (car coordinates) (cdr coordinates) size size)))
-                         (sdl2:render-draw-rect *renderer* select-rectangle)
+                         (sdl2:render-draw-rect rulp.render:*renderer* select-rectangle)
                          (sdl2:free-rect select-rectangle)))
-                     (sdl2:set-render-draw-color *renderer* 0 0 0 255)
+                     (sdl2:set-render-draw-color rulp.render:*renderer* 0 0 0 255)
                      ))
 
 
 
                  ;; display viewpoint on window
-                 (sdl2:set-render-target *renderer* window-texture)
-                 (sdl2:render-clear *renderer*)
+                 (sdl2:set-render-target rulp.render:*renderer* window-texture)
+                 (sdl2:render-clear rulp.render:*renderer*)
                  (setf (sdl2:rect-x viewpoint-rectangle) (car *viewpoint-offset*))
                  (setf (sdl2:rect-y viewpoint-rectangle) (cdr *viewpoint-offset*))
                  (setf (sdl2:rect-width viewpoint-rectangle) (floor (* (width *plane*) *viewpoint-zoom*)))
                  (setf (sdl2:rect-height viewpoint-rectangle) (floor (* (height *plane*) *viewpoint-zoom*)))
-                 (sdl2:render-copy *renderer* viewpoint-texture
+                 (sdl2:render-copy rulp.render:*renderer* viewpoint-texture
                                    :source-rect nil
                                    :dest-rect viewpoint-rectangle)
 
                  ;; entries visualization
                  (loop :for entry :in rulp.entries:*entries-list*
-                       :do (rulp.entries:render-entry
-                            *renderer*
-                            (rulp.entries:make-plist entry)))
+                       :do (rulp.entries:render-entry rulp.render:*renderer* entry))
                  ;; (loop :for entry :in *active-entries*
-                 ;;       :do (display-entry *renderer* entry))
+                 ;;       :do (display-entry rulp.render:*renderer* entry))
 
                  ;; debug infos
                  (when debug-info
-                   (tr-write (format nil "~A" debug-info) 0 0 10 15 *renderer*))
-                 (sdl2:render-present *renderer*)
+                   (tr-write (format nil "~A" debug-info) 0 0 10 15 rulp.render:*renderer*))
+                 (sdl2:render-present rulp.render:*renderer*)
                  ;; updating grids and dimension
                  ;;  FIXME: i hate this, find a better way to dinamically change the window dimension
                  (multiple-value-bind (new-width new-height) (sdl2:get-window-size window)