From 8c3eb725e137518a4aa3c24245cc32614b596b2f Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Sun, 30 Aug 2026 19:12:41 +0700 Subject: [PATCH] Show the tilemap palette for picking --- src/game.clj | 72 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 55 insertions(+), 17 deletions(-) diff --git a/src/game.clj b/src/game.clj index de8580b..2ac96a4 100644 --- a/src/game.clj +++ b/src/game.clj @@ -179,29 +179,41 @@ (set-tile! game layer at-row at-col nil) (do-neighbors! layer at-row at-col (fn [l r c] - (when (tile-at game l r c) - (set-random-tile! game l r c))))) + (when-let [tile (tile-at game l r c)] + (when (contains? (:tags tile) :randomized) + (set-random-tile! game l r c)))))) + + ;; (when (contains? (:tags tile) :randomized) + +(defn set-tile2! [game layer row col tile] + ) (defn handle-game-input [config game] (update-as-> [g game] (assoc g :event-queue []) - (cond-> g - (rl/key-pressed? rl/key-space) - (update :editor-mode not) + (when (not (:editor-mode game)) + (cond-> g + (rl/key-pressed? rl/key-space) + (update :editor-mode not) - ;; (rl/key-pressed? rl/key-r) - ;; (assoc :layers (object-array (* rows cols))) + ;; (rl/key-pressed? rl/key-r) + ;; (assoc :layers (object-array (* rows cols))) - (rl/mouse-button-pressed? rl/mouse-button-left) - (assoc :drag-mode :draw) + (rl/mouse-button-pressed? rl/mouse-button-left) + (assoc :drag-mode :draw) - (rl/mouse-button-pressed? rl/mouse-button-right) - (assoc :drag-mode :erase) + (rl/mouse-button-pressed? rl/mouse-button-right) + (assoc :drag-mode :erase) - (or (rl/mouse-button-released? rl/mouse-button-left) - (rl/mouse-button-released? rl/mouse-button-right)) - (dissoc :drag-mode)) + (or (rl/mouse-button-released? rl/mouse-button-left) + (rl/mouse-button-released? rl/mouse-button-right)) + (dissoc :drag-mode))) + + #_(when (and (:editor-mode game) + (rl/mouse-button-pressed? rl/mouse-button-left)) + (let [{mx :x my :y} (rl/get-mouse-position)] + (doseq))) (when (rl/mouse-button-pressed? rl/mouse-button-middle) (do-grid [r 10 c 20] @@ -249,7 +261,8 @@ (do-grid [row rows col cols] (when-let [[tilemap [tx ty]] (tile-at game layer row col)] (draw-tile! game tilemap tx ty (* col cell-size scale) (* row cell-size scale) scale)))) - (when (not (contains? game :draw-drag)) + (when (and (not (contains? game :draw-drag)) + (not (:editor-mode game))) (let [{mx :x my :y :as mouse-pos} (rl/get-mouse-position)] ;; TODO: Maybe better if we create a get-tilemap-by-name (draw-tile! game (get (:tilemaps game) 0) 3 3 mx my scale))) @@ -259,7 +272,30 @@ (rl/vec2-seg 0 0) (float 0.0) rl/white) (when (:editor-mode game) (rl/draw-rectangle-lines-ex!* (rl/rect-seg 0 0 screen-width screen-height) 5.0 rl/green) - (doseq [[idx [k {:keys [width height seg]}]] (into [] (map-indexed vector) (:tilemaps game)) + (rl/draw-rectangle!* 0 0 screen-width screen-height color-tint-gray) + (let [[_ texture cells] (first (:atlases game)) + {:keys [width height seg]} texture] + (doseq [[r c] cells] + (let [padding 10 + curr-size (* cell-size scale) + pos-x (+ (* padding (inc c)) (* c curr-size)) + pos-y (+ (* padding (inc r)) (* r curr-size)) + dst-rec (rl/rect-seg pos-x pos-y curr-size curr-size) + mouse-pos (rl/get-mouse-position) + {mx :x my :y} mouse-pos] + (rl/draw-texture-pro!* seg + (rl/rect-seg (* c cell-size) (* r cell-size) cell-size cell-size) + dst-rec + (rl/vec2-seg 0 0) (float 0.0) + rl/white) + (rl/draw-rectangle-lines!* pos-x pos-y curr-size curr-size rl/white) + + (when (rl/collision-point-rec? mouse-pos {:x pos-x :y pos-y :width curr-size :height curr-size}) + (rl/draw-rectangle-lines!* pos-x pos-y curr-size curr-size rl/green) + (when (rl/mouse-button-pressed? rl/mouse-button-left) + (swap! e/game-state assoc :selected-tile [r c]) + (swap! e/game-state dissoc :editor-mode)))))) + #_(doseq [[idx [k {:keys [width height seg]}]] (into [] (map-indexed vector) (:tilemaps game)) :let [padding 10]] (rl/draw-texture-pro!* seg (rl/rect-seg 0 0 width height) @@ -268,7 +304,9 @@ (rl/draw-text!* "EDIT MODE" (- screen-width 100) 10 16 rl/green))) (defn watch-game [config game] - {}) + {:mouse-pos (rl/get-mouse-position) + :current-layer (:current-layer game) + :current-tilemap (:current-tilemap game)}) (defn unload-game [game])