X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=graphics%2Fview.lisp;fp=graphics%2Fview.lisp;h=49650be1f50fe1a3904645e118fdc5bc633e4f88;hb=9f21da385b7cdb222f226b9d5d22ef0c75154b24;hp=4303e4aac69ddd73d3f5cb7207dd5bc8d45f32b9;hpb=99720244c4c1b58b7037da88b7bec93d91a45a25;p=rulp%2Frulp.git diff --git a/graphics/view.lisp b/graphics/view.lisp index 4303e4a..49650be 100644 --- a/graphics/view.lisp +++ b/graphics/view.lisp @@ -46,7 +46,7 @@ DEBUG-INFO can be used to display the content on screen for test and debug purpo (sdl2:with-init (:video) (with-playground (window *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-text-solid font *tr-string* 0 0 0 0)) + (font-surface (sdl2-ttf:render-utf8-solid font *tr-string* 0 0 0 0)) (font-texture (sdl2:create-texture-from-surface *renderer* font-surface))) (sdl2:free-surface font-surface) font-texture)) @@ -58,8 +58,7 @@ DEBUG-INFO can be used to display the content on screen for test and debug purpo 2 (width +plane+) (height +plane+)))) (sdl2:with-event-loop (:method :poll) (:quit () t) - (:keydown (:keysym keysym) - (declare (ignore keysym)) + (:keydown () ;; FIXME: incorporate into input.lisp. check for input every now and then outside keydown (when (sdl2:keyboard-state-p :scancode-up) (setf (cdr *viewpoint-offset*) (+ (cdr *viewpoint-offset*) 10))) (when (sdl2:keyboard-state-p :scancode-down) (setf (cdr *viewpoint-offset*) (+ (cdr *viewpoint-offset*) -10))) @@ -68,7 +67,7 @@ DEBUG-INFO can be used to display the content on screen for test and debug purpo (when (sdl2:keyboard-state-p :scancode-p) (setf *viewpoint-zoom* (+ *viewpoint-zoom* 0.2))) ; FIXME: find the scancode for the plus sign (when (sdl2:keyboard-state-p :scancode-m) (setf *viewpoint-zoom* (+ *viewpoint-zoom* -0.2))) ) - (:mousebuttondown (:x x :y y :state state) + (:mousebuttondown () (setf *is-mouse-hold* t) ) (:mousebuttonup () @@ -99,7 +98,6 @@ DEBUG-INFO can be used to display the content on screen for test and debug purpo (multiple-value-bind (x y) (sdl2:mouse-state) (setf *mouse-position* (cons x y))) ;; mouse-holding-event - ;; FIXME: absolutely horrible. to be moved inside input.lisp for better functionalities (when *is-mouse-hold* (loop :for action :in (mouse-actions *mouse-keybinds*) :do (when action (eval (car action))) ; FIXME: replace eval with a more safer DSL eval @@ -113,37 +111,36 @@ DEBUG-INFO can be used to display the content on screen for test and debug purpo (sdl2:render-clear *renderer*) ;; local viewpoint + ;; NOTE: generalize (sdl2:set-render-target *renderer* viewpoint-texture) (sdl2:render-clear *renderer*) (render-plane-and-contents *renderer* +plane+) - ;; NOTE: grid-render supports multiple colors for grids - (grid-render *renderer* +plane+ (car *viewpoint-offset*) (cdr *viewpoint-offset*) - (floor (* (width +plane+) *viewpoint-zoom*)) - (floor (* (height +plane+) *viewpoint-zoom*))) - (indexes-render *renderer* +plane+ (car *viewpoint-offset*) (cdr *viewpoint-offset*) - (floor (* (width +plane+) *viewpoint-zoom*)) - (floor (* (height +plane+) *viewpoint-zoom*))) + (when *is-grid* + (grid-render *renderer* +plane+ (car *viewpoint-offset*) (cdr *viewpoint-offset*) + (floor (* (width +plane+) *viewpoint-zoom*)) + (floor (* (height +plane+) *viewpoint-zoom*)))) + (when *is-indexes* + (indexes-render *renderer* +plane+ (car *viewpoint-offset*) (cdr *viewpoint-offset*) + (floor (* (width +plane+) *viewpoint-zoom*)) + (floor (* (height +plane+) *viewpoint-zoom*)))) + (sdl2:set-render-draw-color *renderer* 0 255 0 155) + (sdl2:set-render-draw-color *renderer* 0 0 0 255) (sdl2:set-render-target *renderer* window-texture) - (sdl2:render-copy *renderer* viewpoint-texture - :source-rect nil - :dest-rect (sdl2:make-rect (car *viewpoint-offset*) - (cdr *viewpoint-offset*) - (floor (* (width +plane+) *viewpoint-zoom*)) ; NOTE: hardcoded to +plane+, change to dynamic - (floor (* (height +plane+) *viewpoint-zoom*))) - ) - ;; Grid creation - ;; NOTE: grid creation should be done before, so to render on global, but it should be limited with actual viewpoint restrictions - ;; to reduce cycles - ;; (when *is-grid* - ;; (grid-render *renderer* +plane+)) - ;; Indexes creation - ;; (when *is-indexes* - ;; (indexes-render *renderer* +plane+)) + (let ((viewpoint-rectangle (sdl2:make-rect (car *viewpoint-offset*) + (cdr *viewpoint-offset*) + (floor (* (width +plane+) *viewpoint-zoom*)) ; NOTE: hardcoded +plane+ usage + (floor (* (height +plane+) *viewpoint-zoom*))))) + (sdl2:render-copy *renderer* viewpoint-texture + :source-rect nil + :dest-rect viewpoint-rectangle) + (sdl2:free-rect viewpoint-rectangle)) + ;; pointer section (when *pointer* (sdl2:set-render-draw-color *renderer* 128 250 33 255) (let ((select-rectangle (screen-destination (nth *pointer* (entities-list +plane+)) +plane+))) - (sdl2:render-draw-rect *renderer* select-rectangle)) + (sdl2:render-draw-rect *renderer* select-rectangle) + (sdl2:free-rect select-rectangle)) ) ;; entries generation ;; (loop :for entry :in (reverse *entries-list*)