master
Josha von Gizycki 5 years ago
parent 6e5bfecf21
commit e1163421c5

2
.gitignore vendored

@ -13,3 +13,5 @@ pom.xml.asc
.nrepl-port .nrepl-port
figwheel_server.log figwheel_server.log
resources/public/js resources/public/js
*.iml
.idea

@ -34,16 +34,6 @@
:s (assoc obj :y (+ y pxs)) :s (assoc obj :y (+ y pxs))
obj))) obj)))
(defn bump-into [obj obj2]
(let [{:keys [x y w h d]} obj
{ox :x oy :y ow :w oh :h} obj2]
(case d
:w (assoc obj :x (+ ox ow 1))
:e (assoc obj :x (dec (- ox w)))
:n (assoc obj :y (+ oy oh 1))
:s (assoc obj :y (dec (- oy h)))
obj)))
(defn bump-inside-container [obj container] (defn bump-inside-container [obj container]
(let [{:keys [x y w h d]} obj (let [{:keys [x y w h d]} obj
{cx :x cy :y cw :w ch :h} container] {cx :x cy :y cw :w ch :h} container]
@ -55,12 +45,8 @@
obj))) obj)))
(defn pps->px [gamestate obj] (defn pps->px [gamestate obj]
(let [prev (get-in gamestate [:timing :prev]) (* (:pps obj)
now (get-in gamestate [:timing :now]) (-> gamestate :timing :elapsed)))
secs (/ (- now prev) 1000)
secs (-> gamestate :timing :elapsed)
pps (:pps obj)]
(* pps secs)))
(defn move-inside [obj container pxs] (defn move-inside [obj container pxs]
(let [moved (moved-object obj pxs)] (let [moved (moved-object obj pxs)]

@ -18,7 +18,10 @@
;; difference between prev and now in seconds ;; difference between prev and now in seconds
:elapsed 0} :elapsed 0}
;; width and height of the canvas ;; width and height of the canvas
:dimensions {:w (* 16 11 3) :dimensions {;; 16px tile size
;; 11 tiles wide, 9 high
;; 3 times zoom
:w (* 16 11 3)
:h (* 16 9 3)} :h (* 16 9 3)}
:input {:dir :?} :input {:dir :?}
;; currently active scene ;; currently active scene
@ -29,6 +32,8 @@
(def reloaded (atom false)) (def reloaded (atom false))
(defn nao [] (.now js/performance))
(defn curr-fps (defn curr-fps
"calculates the current fps using the elapsed time" "calculates the current fps using the elapsed time"
[elapsed] [elapsed]
@ -65,7 +70,7 @@
(defn update-step (defn update-step
"updates timing information and the current scene" "updates timing information and the current scene"
[gamestate] [gamestate]
(let [now (.now js/performance) (let [now (nao)
secs (elapsed-seconds gamestate now) secs (elapsed-seconds gamestate now)
scene (curr-scene gamestate) scene (curr-scene gamestate)
continue? (continue-running? (:continue? gamestate))] continue? (continue-running? (:continue? gamestate))]
@ -78,7 +83,7 @@
(if continue? (if continue?
(run-scene-update $ scene) (run-scene-update $ scene)
scene)) scene))
(assoc-in $ [:timing :prev] (.now js/performance))))) (assoc-in $ [:timing :prev] (nao)))))
(defn draw-fps (defn draw-fps
"draws the current fps" "draws the current fps"

@ -90,10 +90,7 @@
(if (and (not (-> scenestate :map-def :def)) (if (and (not (-> scenestate :map-def :def))
(some? @map-def)) (some? @map-def))
(let [loaded-def (walk/keywordize-keys @map-def) (let [loaded-def (walk/keywordize-keys @map-def)
zoom (get-in scenestate [:map-def :zoom]) zoom (get-in scenestate [:map-def :zoom])]
viewport (:viewport scenestate)
{mw :width mh :height
tw :tilewidth th :tileheight} loaded-def]
(-> scenestate (-> scenestate
(assoc-in [:map-def :def] loaded-def) (assoc-in [:map-def :def] loaded-def)
(update-in [:map-def :def] (update-in [:map-def :def]
@ -113,7 +110,6 @@
(defn draw-scene [gamestate scenestate] (defn draw-scene [gamestate scenestate]
(let [viewport (:viewport scenestate) (let [viewport (:viewport scenestate)
{:keys [x y w h background]} viewport
ctx (:ctx gamestate)] ctx (:ctx gamestate)]
(when (-> scenestate :map-def :def) (when (-> scenestate :map-def :def)
(tileset/draw-viewport (:map-def scenestate) (tileset/draw-viewport (:map-def scenestate)

@ -1,5 +1,4 @@
(ns topdown2d.tileset (ns topdown2d.tileset)
(:require [topdown2d.collision :as coll]))
(defn next-animation-cycle [animation curr-cycle] (defn next-animation-cycle [animation curr-cycle]
(let [curr-ix (.indexOf animation curr-cycle) (let [curr-ix (.indexOf animation curr-cycle)
@ -15,7 +14,7 @@
(defn tick-animation [tileset-def anim-def now] (defn tick-animation [tileset-def anim-def now]
(let [map-def (:def tileset-def) (let [map-def (:def tileset-def)
{:keys [ids last-cycle curr-id tileset]} anim-def {:keys [last-cycle curr-id tileset]} anim-def
animation (->> (map-def->tileset map-def tileset) animation (->> (map-def->tileset map-def tileset)
:tiles :tiles
(filter #(= curr-id (:id %))) (filter #(= curr-id (:id %)))
@ -32,7 +31,7 @@
:curr-id (:tileid next-cycle)) :curr-id (:tileid next-cycle))
anim-def))) anim-def)))
(defn ix->coords [ix width height] (defn ix->coords [ix width]
(let [x (rem ix width)] (let [x (rem ix width)]
[(dec x) [(dec x)
(/ (- ix x) width)])) (/ (- ix x) width)]))
@ -40,8 +39,7 @@
(defn layer->dest [tileset layer] (defn layer->dest [tileset layer]
(map-indexed (map-indexed
(fn [ix tile] (fn [ix tile]
(let [{:keys [width height]} layer (let [[dxc dyc] (ix->coords ix (:width layer))
[dxc dyc] (ix->coords ix width height)
{:keys [target-width target-height]} tileset] {:keys [target-width target-height]} tileset]
{:tile tile {:tile tile
:x (* dxc target-width) :x (* dxc target-width)
@ -52,9 +50,8 @@
(defn draw-tile [ctx tileset image tileid dest] (defn draw-tile [ctx tileset image tileid dest]
(let [{:keys [tileheight tilewidth (let [{:keys [tileheight tilewidth
tiles-x tiles-y tiles-x target-width target-height]} tileset
target-width target-height]} tileset [x y] (ix->coords tileid tiles-x)
[x y] (ix->coords tileid tiles-x tiles-y)
sx (* x tilewidth) sx (* x tilewidth)
sy (* y tileheight)] sy (* y tileheight)]
(.drawImage ctx image (.drawImage ctx image
@ -83,12 +80,9 @@
(defn draw-viewport [map-def ctx viewport] (defn draw-viewport [map-def ctx viewport]
(let [def (:def map-def) (let [def (:def map-def)
{:keys [tileheight tilewidth
height width layers]} def
tileset-id (:tileset viewport)
image (:image viewport) image (:image viewport)
tileset (:tileset-def viewport)] tileset (:tileset-def viewport)]
(doseq [layer layers] (doseq [layer (:layers def)]
(doseq [dest layer (doseq [dest layer
:let [dx (- (:x dest) (:x viewport)) :let [dx (- (:x dest) (:x viewport))
dy (- (:y dest) (:y viewport))]] dy (- (:y dest) (:y viewport))]]

Loading…
Cancel
Save