add dev level and get info pads working

This commit is contained in:
Travis Shears 2026-04-26 12:21:34 +02:00
parent 7e75b665f5
commit 276c7c562b
Signed by: travisshears
GPG key ID: CB9BF1910F3F7469
10 changed files with 246 additions and 13 deletions

View file

@ -46,6 +46,7 @@
(def tutorial-map-tmx (load-tiled-xml-file "./tiled/tutorial.tmx")) (def tutorial-map-tmx (load-tiled-xml-file "./tiled/tutorial.tmx"))
(def level-001-map-tmx (load-tiled-xml-file "./tiled/level_001.tmx")) (def level-001-map-tmx (load-tiled-xml-file "./tiled/level_001.tmx"))
(def dev-map-tmx (load-tiled-xml-file "./tiled/dev.tmx"))
(defn parse-gid [gid] (defn parse-gid [gid]
(let [gid-long (Long/parseLong (str gid)) (let [gid-long (Long/parseLong (str gid))
@ -91,7 +92,9 @@
{:player-1 (extract-pos player-1) {:player-1 (extract-pos player-1)
:player-2 (extract-pos player-2)})})) :player-2 (extract-pos player-2)})}))
(def levels {:levels {:level-001 (parse-map level-001-map-tmx) (def levels {:levels {:level-001 (parse-map level-001-map-tmx)
:tutorial (parse-map tutorial-map-tmx)} :tutorial (parse-map tutorial-map-tmx)
:dev (parse-map dev-map-tmx)}
:colliders colliders}) :colliders colliders})
(pprint (get-in levels [:levels :tutorial :objects])) (pprint (get-in levels [:levels :tutorial :objects]))

View file

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.10" tiledversion="1.12.1" orientation="orthogonal" renderorder="right-down" width="50" height="50" tilewidth="25" tileheight="25" infinite="0" nextlayerid="4" nextobjectid="12">
<tileset firstgid="1" source="walls.tsx"/>
<layer id="1" name="Tile Layer 1" width="50" height="50">
<data encoding="csv">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2147483651,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,10,1,1,1,0,0,1,1,1,2147483658,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,4,11,2147483652,0,0,0,0,0,0,4,11,2147483652,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2147483650,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</data>
</layer>
<objectgroup id="2" name="spawns">
<object id="1" name="player_1" x="612.159" y="713.357">
<point/>
</object>
<object id="2" name="player_2" x="638.166" y="712.787">
<point/>
</object>
</objectgroup>
<objectgroup id="3" name="objects">
<object id="5" type="info_pad" x="600" y="700" width="25" height="25">
<properties>
<property name="content" value="[a] is left wheel forward [d] is right wheel forward"/>
</properties>
</object>
<object id="6" x="625" y="700" width="25" height="25">
<properties>
<property name="content" value="[a] is left wheel forward [d] is right wheel forward"/>
</properties>
</object>
<object id="11" type="info_pad" x="600" y="600" width="25" height="25">
<properties>
<property name="content" value="[q] is left wheel reverse [e] is right wheel reverse"/>
</properties>
</object>
</objectgroup>
</map>

View file

@ -6,15 +6,26 @@
"/Users/she0001t/personal_projects/fennel_love2d_experiments/two_player_cleaning_game/assets" "/Users/she0001t/personal_projects/fennel_love2d_experiments/two_player_cleaning_game/assets"
], ],
"fileStates": { "fileStates": {
"dev.tmx": {
"expandedObjectLayers": [
2
],
"scale": 2.9815,
"selectedLayer": 2,
"viewCenter": {
"x": 635.7538151936944,
"y": 649.3375817541506
}
},
"level_001.tmx": { "level_001.tmx": {
"expandedObjectLayers": [ "expandedObjectLayers": [
2 2
], ],
"scale": 0.5497, "scale": 0.92,
"selectedLayer": 1, "selectedLayer": 1,
"viewCenter": { "viewCenter": {
"x": 624.886301619065, "x": 528.804347826087,
"y": 614.8808440967802 "y": 1036.9565217391303
} }
}, },
"map_tileset.tsx": { "map_tileset.tsx": {
@ -28,6 +39,7 @@
}, },
"tutorial.tmx": { "tutorial.tmx": {
"expandedObjectLayers": [ "expandedObjectLayers": [
3,
2 2
], ],
"scale": 3.1565, "scale": 3.1565,
@ -64,6 +76,7 @@
"tutorial.tmx", "tutorial.tmx",
"map_tileset.tsx" "map_tileset.tsx"
], ],
"textEdit.monospace": true,
"tileset.lastUsedFormat": "tsx", "tileset.lastUsedFormat": "tsx",
"tileset.tileSize": { "tileset.tileSize": {
"height": 25, "height": 25,

File diff suppressed because one or more lines are too long

View file

@ -5,7 +5,11 @@
; (local assets (require "src/assets.fnl")) ; (local assets (require "src/assets.fnl"))
(local utils (require "src/utils.fnl")) (local utils (require "src/utils.fnl"))
; (local colors (require "src/colors.fnl")) ; (local colors (require "src/colors.fnl"))
(local tutorial (require "src/levels/tutorial.fnl")) ; (local tutorial (require "src/levels/tutorial.fnl"))
(local dev (require "src/levels/dev.fnl"))
(local level dev)
(local debug false)
(var pool nil) (var pool nil)
@ -16,7 +20,6 @@
:canvas-w canvas-w :canvas-w canvas-w
:canvas-h canvas-h :canvas-h canvas-h
:scale scale})) :scale scale}))
(local debug true)
; (lambda create-charging-station [x y] ; (lambda create-charging-station [x y]
@ -75,7 +78,7 @@
(fn love.load [] (fn love.load []
(love.window.setMode screen.screen-w screen.screen-h) (love.window.setMode screen.screen-w screen.screen-h)
; (tset screen :canvas (love.graphics.newCanvas screen.canvas-w screen.canvas-h)) ; (tset screen :canvas (love.graphics.newCanvas screen.canvas-w screen.canvas-h))
(set pool (tutorial.load screen)) (set pool (level.load screen))
(pool:flush) (pool:flush)
(pool:emit :load) (pool:emit :load)
; (utils.debug-print pool) ; (utils.debug-print pool)

View file

@ -4,12 +4,18 @@
(local levels (require "levels.fnl")) (local levels (require "levels.fnl"))
(local assets (require "src/assets.fnl")) (local assets (require "src/assets.fnl"))
(lambda info-pad [x y name] (lambda info-pad [obj]
(let [pad {: x : y : name :hitbox [x y 25 25]} (let [
x obj.x
y obj.y
content obj.content
pad {: x : y : content :hitbox [x y 25 25]}
(w h) (assets.objects-sprite:getDimensions)] (w h) (assets.objects-sprite:getDimensions)]
(lambda pad.load [self] (lambda pad.load [self]
(set self.quad (love.graphics.newQuad 75 0 25 25 w h))) (set self.quad (love.graphics.newQuad 75 0 25 25 w h)))
(lambda pad.on-hit [self]
(beholder.trigger "NOTIFICATION" self.content))
(fn pad.draw-debug [self] (fn pad.draw-debug [self]
(color.set-color :black) (color.set-color :black)

View file

@ -1,3 +1,4 @@
(local utils (require "src/utils.fnl"))
(local beholder (require "libs/beholder")) (local beholder (require "libs/beholder"))
(local color (require "src/colors.fnl")) (local color (require "src/colors.fnl"))
(local levels (require "levels.fnl")) (local levels (require "levels.fnl"))
@ -25,9 +26,23 @@
(local width 19) (local width 19)
(local height 15) (local height 15)
(local player { :x 50 :y 50 :w 25 :h 25 :speed 80 :battery 100 :rot 0 :hitbox [50 50 width height] }) (local player {
:x 50 :y 50 :w 25 :h 25 :speed 80 :battery 100 :rot 0
:hitbox [50 50 width height]
:init-move false ; nudge the player at start of game to trigger starting collisions
})
(lambda handle-collisions [cols]
(each [_ col (pairs cols)]
(when col.other.on-hit (col.other:on-hit))
(beholder.trigger "PLAYER.HIT" col.other)))
(fn player.update [self dt] (fn player.update [self dt]
(when (= self.init-move false)
(set self.init-move true)
(let [(x y cols len) (bump-world:move self self.x self.y bump-filter)]
(handle-collisions cols)))
(let [ (let [
d-key (love.keyboard.isDown :d) d-key (love.keyboard.isDown :d)
a-key (love.keyboard.isDown :a) a-key (love.keyboard.isDown :a)
@ -45,6 +60,7 @@
new-x (dir-fn self.x (* self.speed dt (math.cos self.rot))) new-x (dir-fn self.x (* self.speed dt (math.cos self.rot)))
new-y (dir-fn self.y (* self.speed dt (math.sin self.rot))) new-y (dir-fn self.y (* self.speed dt (math.sin self.rot)))
(x y cols len) (bump-world:move self new-x new-y bump-filter)] (x y cols len) (bump-world:move self new-x new-y bump-filter)]
(handle-collisions cols)
(set self.x x) (set self.x x)
(set self.y y)) (set self.y y))
(if (> self.battery 0) (if (> self.battery 0)

View file

@ -0,0 +1,72 @@
(local bump (require "libs/bump"))
(local color (require "src/colors.fnl"))
(local nata (require "libs/nata"))
(local utils (require "src/utils.fnl"))
(local camera (require "src/systems/camera.fnl"))
(local beholder (require "libs/beholder"))
(local player (require "src/entities/player.fnl"))
(local walls (require "src/systems/walls.fnl"))
(local hud (require "src/systems/hud.fnl"))
(local levels (require "levels.fnl"))
(local info-pad (require "src/entities/info-pad.fnl"))
(lambda load-objects [level-key pool]
(each [_ object (pairs (. levels :levels level-key :objects))]
; (debug-print object)
(case object.type
"info_pad" (pool:queue (info-pad object))
))
)
(lambda collider-manager [bump-world]
(local collider-manager {})
(lambda collider-manager.addToGroup [self group-name entity]
(when (= group-name :hitbox)
; (utils.debug-print {:adding entity})
(bump-world:add entity (unpack entity.hitbox))))
collider-manager)
; (lambda register-notifications []
; (beholder.observe "PLAYER.HIT" (lambda [other]
; (when (= other.object-type :info-pad)
; (beholder.trigger "NOTIFICATION" "[a] is left wheel forward [d] is right wheel forward"))
; (utils.debug-print {: other}))))
; (beholder.observe "PLAYER.HIT" :info-pad (lambda [info-pad-name]
; (case info-pad-name
; :controls (beholder.trigger "NOTIFICATION" "[a] is left wheel forward [d] is right wheel forward")
; ))))
(fn load [screen]
; (register-notifications)
(let [
canvas (love.graphics.newCanvas screen.canvas-w screen.canvas-h)
level-key :dev
bump-world (bump.newWorld 25)
pool (nata.new {
:data {
: screen
: canvas
: bump-world
: level-key
}
:groups {
; gravity = {filter = {'gravity'}},
:hitbox {:filter [:hitbox]}
; :post-draw {:filter [:post-draw]}
}
:systems [
(nata:oop)
(collider-manager bump-world)
camera
walls
(hud {: screen})
]
})]
(pool:queue (player {: bump-world : level-key}))
(load-objects level-key pool)
pool))
{
: load
}

View file

@ -26,8 +26,19 @@
(bump-world:add entity (unpack entity.hitbox)))) (bump-world:add entity (unpack entity.hitbox))))
collider-manager) collider-manager)
(lambda register-notifications []
(beholder.observe "PLAYER.HIT" (lambda [other]
(when (= other.object-type :info-pad)
(beholder.trigger "NOTIFICATION" "[a] is left wheel forward [d] is right wheel forward"))
(utils.debug-print {: other}))))
; (beholder.observe "PLAYER.HIT" :info-pad (lambda [info-pad-name]
; (case info-pad-name
; :controls (beholder.trigger "NOTIFICATION" "[a] is left wheel forward [d] is right wheel forward")
; ))))
(fn load [screen] (fn load [screen]
(register-notifications)
(let [ (let [
canvas (love.graphics.newCanvas screen.canvas-w screen.canvas-h) canvas (love.graphics.newCanvas screen.canvas-w screen.canvas-h)
bump-world (bump.newWorld 25) bump-world (bump.newWorld 25)

View file

@ -5,14 +5,39 @@
(var screen nil) (var screen nil)
(local hud { (local hud {
:player-battery 0 :player-battery 0
:notification nil
:notification-life 0
}) })
(lambda draw-notification [self]
(when (and self.notification (> self.notification-life 0))
(love.graphics.push)
(love.graphics.translate 0 (- 400 20))
(color.set-color :cream)
(love.graphics.rectangle "fill" 0 0 screen.canvas-w 20)
(color.set-color :dark-purple)
(color.set-color :dark-purple)
(love.graphics.line 0 0 screen.canvas-w 0)
(love.graphics.setFont self.font)
(love.graphics.print self.notification 3 3)
(love.graphics.pop)))
(fn hud.load [self] (fn hud.load [self]
(set self.font (love.graphics.newFont 10)) (set self.font (love.graphics.newFont 10))
(set self.font-small (love.graphics.newFont 6)) (set self.font-small (love.graphics.newFont 6))
(beholder.observe "PLAYER.BATTERY" (lambda [bat] (beholder.observe "PLAYER.BATTERY" (lambda [bat]
(set self.player-battery bat)))) (set self.player-battery bat)))
(beholder.observe "NOTIFICATION" (lambda [text]
(set self.notification text)
; set life of notification to 5 seconds
(set self.notification-life 5))))
(lambda hud.update [self dt]
(when (> self.notification-life 0)
(set self.notification-life (- self.notification-life dt))))
(lambda draw-header [self] (lambda draw-header [self]
(color.set-color :cream) (color.set-color :cream)
@ -55,7 +80,8 @@
(fn hud.draw90 [self] (fn hud.draw90 [self]
(draw-side-walls self) (draw-side-walls self)
(draw-footer self) (draw-footer self)
(draw-header self)) (draw-header self)
(draw-notification self))
(lambda [{:screen s}] (lambda [{:screen s}]
(set screen s) (set screen s)