diff options
Diffstat (limited to 'lib/game.fnl')
-rw-r--r-- | lib/game.fnl | 47 |
1 files changed, 40 insertions, 7 deletions
diff --git a/lib/game.fnl b/lib/game.fnl index 229f433..a0218b3 100644 --- a/lib/game.fnl +++ b/lib/game.fnl @@ -4,7 +4,7 @@ (local vec (require :lib.vec)) (local entity (require :lib.entity)) (local player (require :lib.player)) -(local death (require :lib.death)) +(local transition (require :lib.transition)) (local fv (require :fennel.view)) (fn lerp* [a b c d x] @@ -21,8 +21,11 @@ (fn update [self] ;; (set ship-pos.x (+ self.ship.x 0.02)) ;; (set ship-pos.y (+ self.ship.y 0.005)) + (var grid-alive? true) (set self.radius (lerp* 0 1 self.radius self.target-radius 0.3)) + (when (= self.tick 0) + (set grid-alive? false) (for [x 0 (- self.width 1)] (for [y 0 (- self.height 1)] (fn get [v] @@ -31,8 +34,10 @@ (% (+ v.y y) self.height))) (if (. self.grid x y) ;; check if alive - (tset self.grid-alt x y (cell.update (. self.grid x y) + (do + (tset self.grid-alt x y (cell.update (. self.grid x y) get)) + (set grid-alive? true)) ;; check for neighbors and then use one at random (do (var neighbors []) @@ -70,10 +75,29 @@ (if (= (entity.duration e) 0) (tset self.entities id nil)))) ;; TODO: we should do this for only the first death frame - (if (not self.entities.player) + (if self.pause + (do + (set self.pause nil) + (state.init transition + :pause + self + self)) + (not self.entities.player) ;; TODO: new game - (state.init death self ((. (getmetatable self) :inner-init) - (getmetatable self) 1 self)) + (state.init transition + :death + self + ((. (getmetatable self) :inner-init) + (getmetatable self) 1 self) + self.level) + (not grid-alive?) + (state.init transition + :win + self + ((. (getmetatable self) :inner-init) + (getmetatable self) (+ self.level 1) self) + self.level) + true nil)) (fn id [x] x) @@ -156,6 +180,8 @@ ;; (love.graphics.print :Gaming)) (fn keypressed [self key scancode repeat] + (when (= key "escape") + (set self.pause true)) (when (= key "=") (set self.target-radius (math.max @@ -185,7 +211,10 @@ :level level :tick 0 :rate 6 - :entities {:player (entity.init player {:x 31.5 :y 31.5})} + :ship-pos {:x 31.5 :y 31.5} + :entities (if (= level -1) + {} + {:player (entity.init player {:x 31.5 :y 31.5})}) :grid (new-grid width height #(if (= (math.random 6) 1) (if (> $1 44) (cell.init cells.life) @@ -197,7 +226,11 @@ } self))) +;; what the hell (fn init [self] - (self.inner-init self 1)) + (state.init transition + :menu + (self.inner-init self -1) + (self.inner-init self 1))) {: inner-init state.draw draw state.init init state.update update state.keypressed keypressed} |