This commit is contained in:
2026-07-10 22:49:57 -06:00
parent 1836dffb3d
commit 445863ee41

View File

@@ -24,20 +24,23 @@
(let [id (swap! entity-id inc)] (let [id (swap! entity-id inc)]
(swap! state update-in [:entities] conj {(-> id str keyword) entity}))) (swap! state update-in [:entities] conj {(-> id str keyword) entity})))
(defn on-shoot [state entity-id player-sprite e] (defn on-shoot [state entity-id entity-layer player-sprite e]
(.log js/console e) (.log js/console e)
(let [speed 15 (let [speed 15
image "/sprite/projectile.png" image "/sprite/projectile.png"
start-x (.-x player-sprite) start-x (.-x player-sprite)
start-y (.-y player-sprite) start-y (.-y player-sprite)
target-x (.. e -global -x) position (.toLocal ^js entity-layer (.-global e))
target-y (.. e -global -y) target-x (.-x position)
dx (- start-x target-x) target-y (.-y position)
dy (- start-y target-y) dx (- target-x start-x)
dy (- target-y start-y)
h (js/Math.sqrt (+ (* dx dx) (* dy dy))) h (js/Math.sqrt (+ (* dx dx) (* dy dy)))
vx (* (/ dx h) speed) vx (* (/ dx h) speed)
vy (* (/ dy h) speed)] vy (* (/ dy h) speed)]
(.log js/console "tx " target-x " ty " target-y " dx " dx " dy " dy " h " h) (.log js/console "tx " target-x " ty " target-y " dx " dx " dy " dy " h " h)
(.log js/console "sx " start-x " sy " start-y)
(.log js/console player-sprite)
(add-entity state entity-id {:sprite image (add-entity state entity-id {:sprite image
:hyp h :hyp h
:x start-x :x start-x
@@ -73,24 +76,24 @@
(let [dt (.-deltaTime t) (let [dt (.-deltaTime t)
{world-layer :world-layer} layers {world-layer :world-layer} layers
{:keys [player entities]} (-> @state {:keys [player entities]} (-> @state
(update/update-entities dt layers) (update/update-entities dt layers)
(update/update-player dt layers) (update/update-player dt layers)
(->> (swap! state merge))) (->> (swap! state merge)))
sx (- (/ (.. app -screen -width) 2) (player :x)) sx (- (/ (.. app -screen -width) 2) (player :x))
sy (- (/ (.. app -screen -height) 2) (player :y)) sy (- (/ (.. app -screen -height) 2) (player :y))
entity-renderables (->> (vals entities) entity-renderables (->> (vals entities)
(remove #(nil? (% :renderable))) (remove #(nil? (% :renderable)))
(vector)) (vec))
world-renderables (vector {:renderable world-layer :x sx :y sy}) world-renderables (vector {:renderable world-layer :x sx :y sy})
player-renderables (vector player player-renderables (vector player
(assoc player :renderable (:shootbox player))) (assoc player :renderable (:shootbox player)))
things-to-update (concat player-renderables entity-renderables world-renderables)] things-to-update (concat player-renderables entity-renderables world-renderables)]
(println player-renderables (count player-renderables) (count things-to-update))
(doseq [thing things-to-update] (doseq [thing things-to-update]
; TODO: Add lerp here, we shouldn't just launch things around with their X/Y
; instead if the difference between curr-pos and tar-pos is > than vel try to move it to their every frame via vel
(let [{renderable :renderable (let [{renderable :renderable
x :x x :x
y :y} thing] y :y} thing]
(println "Rendering thing " renderable x y)
(set! (.. renderable -x) x) (set! (.. renderable -x) x)
(set! (.. renderable -y) y))))) (set! (.. renderable -y) y)))))
@@ -116,14 +119,14 @@
(init-input-handlers state) (init-input-handlers state)
(add-entity state entity-id {:x 500 :y 500 :sprite "https://pixijs.com/assets/bunny.png"}) (add-entity state entity-id {:x 500 :y 500 :sprite "https://pixijs.com/assets/bunny.png"})
(-> stage (-> stage
(.addChild world-layer) ; Bottom of the layer stack (.addChild world-layer) ; Bottom of the layer stack
(.addChild entity-layer) ; Middle of the layer stack (.addChild entity-layer) ; Middle of the layer stack
(.addChild ui-layer)) ; Top of the layer stack (.addChild ui-layer)) ; Top of the layer stack
(let [e (merge {:x (-> width (/ 2) (int)) (let [e (merge {:x (-> width (/ 2) (int))
:y (-> height (/ 2) (int))} :y (-> height (/ 2) (int))}
base-player) base-player)
p (entity/render entity-layer e) p (entity/render entity-layer e)
sb (entity/player-shoot-box entity-layer (partial on-shoot state entity-id p)) sb (entity/player-shoot-box entity-layer (partial on-shoot state entity-id entity-layer p))
player (assoc e :renderable p :shootbox sb)] player (assoc e :renderable p :shootbox sb)]
(swap! state update-in [:player] merge player) (swap! state update-in [:player] merge player)
(.. app -ticker (add (partial ticker app state layers))))))))) (.. app -ticker (add (partial ticker app state layers)))))))))