shootas
This commit is contained in:
@@ -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)))))))))
|
||||||
|
|||||||
Reference in New Issue
Block a user