(local entity (require :lib.entity)) (local vec (require :lib.vec)) (local cell (require :lib.cell)) (local cells (require :lib.cells)) (fn init [self pos vel] (setmetatable {entity.position pos entity.velocity vel entity.duration 120} self)) (fn draw [self game id] (love.graphics.setColor 1 1 1 (/ (entity.duration self) 120)) (love.graphics.setLineWidth 0.3) (love.graphics.line 0 0 (. self entity.velocity :x) (. self entity.velocity :y))) (fn collide [self game id x y] (when (> (cell.aliveness (. game.grid x y)) 0) (tset game.entities id nil) ;; TODO: less boom-y thing? (tset game.grid x y (cell.init cells.boom (/ (entity.duration self) 180))))) {entity.init init entity.draw draw entity.collide collide}