moveable viewport - 'n stuff'

master
Josha von Gizycki 7 years ago
parent 9db2244933
commit 0c87dad736

@ -5,7 +5,8 @@
</head>
<body>
<div style="display:none">
<img src="img/walkcycle/hero-awesome.png" id="player">
<img src="img/walkcycle/hero-awesome.png" id="demo-player">
<img src="img/maps/CastleExample_3.png" id="demo-background">
</div>
<canvas id="gamecanvas" height="400" width="600"

@ -1,4 +1,4 @@
(ns topdown2d.objects)
(ns topdown2d.collision)
(defn in? [obj container]
(let [{:keys [x y w h]} obj
@ -71,11 +71,3 @@
(if (in? moved container)
moved
(bump-inside-container obj container))))
(defn move-inside-gamestate [gamestate obj]
(let [pxs (pps->px gamestate obj)
container (assoc
(:dimensions gamestate)
:x 0
:y 0)]
(move-inside obj container pxs)))

@ -89,14 +89,14 @@
0 0
(get-in gamestate [:dimensions :w])
(get-in gamestate [:dimensions :h]))
(.fillText
(:ctx gamestate)
(int (get-in gamestate [:timing :fps]))
0 10)
(let [scenekey (:scene gamestate)
scene (scenekey (:scenes gamestate))
drawfunc (:draw scene)]
(drawfunc gamestate scene)))
(drawfunc gamestate scene))
(.fillText
(:ctx gamestate)
(int (get-in gamestate [:timing :fps]))
0 10))
(defn mainloop
"transforms the given gamestate by invoking a series of update

@ -1,25 +1,19 @@
(ns topdown2d.demoscene
(:require
[topdown2d.objects :as objects]
[topdown2d.collision :as collision]
[topdown2d.input :as input]
[topdown2d.sprites :as sprites]))
(defn init [gamestate scenedata]
(assoc scenedata
:data {
:bumper {
:x 100
:y 80
:w 50
:h 50
}
:player {
:x 0 :y 0
:x (- (/ (get-in gamestate [:dimensions :w]) 2) 32)
:y (- (/ (get-in gamestate [:dimensions :h]) 2) 32)
:w 64 :h 64
:pps 150
:d :?
:sprite {
:image (.getElementById js/document "player")
:image (.getElementById js/document "demo-player")
:size 64
:d :s
:rows {
@ -28,15 +22,26 @@
:? 2
}
:cycle {
:count 8
:from 1
:pos 0
:from 1 :count 8
:last-cycle 0
; seconds per cycle
:spc 0.08
}
}
}
:viewport {
:image (.getElementById js/document "demo-background")
:keep-in {
:x 0 :y 0
:w 2239 :h 2235
}
:x 1 :y 1
:d :?
:pps 350
:w (get-in gamestate [:dimensions :w])
:h (get-in gamestate [:dimensions :h])
}
}))
(defn update-player [gamestate player dir]
@ -50,17 +55,30 @@
(sprites/proc-cycle gamestate p)
p))))
(defn update-viewport [gamestate viewport dir]
(collision/move-inside
(assoc viewport :d dir)
(:keep-in viewport)
(collision/pps->px gamestate viewport)))
(defn update-scene [gamestate scenedata]
(let [player (get-in scenedata [:data :player])
viewport (get-in scenedata [:data :viewport])
dir (input/dirinput)]
(assoc-in scenedata
[:data :player]
(update-player gamestate player dir))))
(-> scenedata
(assoc-in [:data :player]
(update-player gamestate player dir))
(assoc-in [:data :viewport]
(update-viewport gamestate viewport dir)))))
(defn draw-scene [gamestate scenedata]
(let [{{:keys [bumper player]} :data} scenedata
ctx (:ctx gamestate)]
(let [{:keys [x y w h]} bumper]
(.fillRect ctx
x y w h))
(sprites/draw gamestate player)))
(let [viewport (get-in scenedata [:data :viewport])
{:keys [x y w h background]} viewport]
(.drawImage
(:ctx gamestate)
(:image viewport)
x y w h
0 0 w h))
(sprites/draw
gamestate
(get-in scenedata [:data :player])))

Loading…
Cancel
Save