Browse Source

Piece dragging partially working

master
Macoy Madson 3 years ago
parent
commit
e2def859bd
  1. 32
      src/Main.cake

32
src/Main.cake

@ -284,17 +284,21 @@
(printf "%s\n" fogleman-board-string)
(return true))
(defun-local game-piece-position-to-screen-position (piece (* (const board-piece)) &return vec2)
(defun-local game-piece-grid-position-to-screen-position (piece (* (const board-piece)) &return vec2)
(var piece-position vec2 (array (type-cast (vec-x (path piece > grid-position)) float)
(type-cast (vec-y (path piece > grid-position)) float)))
;; Transfer to pixel space
(set piece-position (vec2-multiply (array (repeat g-game-board-cell-size-px)) piece-position))
;; Add in moving position
(set piece-position (vec2-add piece-position (path piece > moving-position)))
;; Add board offset
(set piece-position (vec2-add piece-position g-game-board-inner-top-left-px))
(return piece-position))
(defun-local game-piece-position-to-screen-position (piece (* (const board-piece)) &return vec2)
(var piece-position vec2 (game-piece-grid-position-to-screen-position piece))
;; Add in moving position
(set piece-position (vec2-add piece-position (path piece > moving-position)))
(return piece-position))
(defun-local game-piece-get-screen-size (piece (* (const board-piece)) &return vec2)
(var piece-grid-size vec2
(array
@ -496,6 +500,7 @@ Rush Hour database from Michael Fogleman.\n\n")
;;
;; Game loop
;;
(var selected-piece (* board-piece) null)
(var exit-reason (* (const char)) null)
(while (not exit-reason)
(var event SDL_Event)
@ -508,9 +513,13 @@ Rush Hour database from Michael Fogleman.\n\n")
(var mouse-x int 0)
(var mouse-y int 0)
(var mouse-buttons Uint32 (SDL_GetMouseState (addr mouse-x) (addr mouse-y)))
(var mouse-button-state Uint32 (SDL_GetMouseState (addr mouse-x) (addr mouse-y)))
(var hovered-piece (* board-piece) (pick-game-piece-from-screen-position mouse-x mouse-y))
(if (bit-and mouse-button-state SDL_BUTTON_LMASK)
(block
(unless selected-piece ;; If holding, allow dragging even when not exactly on piece
(set selected-piece (pick-game-piece-from-screen-position mouse-x mouse-y))))
(set selected-piece nullptr))
(SDL_RenderClear renderer)
(unless (= 0 (SDL_RenderCopy renderer background-texture null null))
@ -538,10 +547,17 @@ Rush Hour database from Michael Fogleman.\n\n")
(on-each-existing-board-piece ;; Draw pieces
piece piece-index
(when (= hovered-piece piece)
(continue))
(var piece-position vec2 (game-piece-position-to-screen-position piece))
(if (= selected-piece piece)
(scope
(var piece-position vec2 (game-piece-grid-position-to-screen-position piece))
(var mouse-board-pos vec2 (array (type-cast mouse-x float) (type-cast mouse-y float)))
(set mouse-board-pos (vec2-subtract mouse-board-pos piece-position))
(set (path piece > moving-position)
mouse-board-pos))
;; Reset positions on release
(set (path piece > moving-position) (array 0)))
(var piece-position vec2 (game-piece-position-to-screen-position piece))
(var piece-size vec2 (game-piece-get-screen-size piece))
(var selected-piece-origin vec2 piece-2-1-origin)

Loading…
Cancel
Save