(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))
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)))
(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 ()
(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
(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*)