blob: 063372750f0cfa30e81c7a386ca928e5b455ae50 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
(local entity (require :lib.entity))
(local vec (require :lib.vec))
(local cell (require :lib.cell))
(local cells (require :lib.cells))
(fn init [self pos]
(setmetatable {entity.position pos
entity.velocity {:x 0 :y 0}
:target-spin 0
:direction 0}
self))
(fn steer [self game id controls]
;; TODO: smooth turning
(when controls.left
(set self.target-spin (- self.target-spin 0.15)))
;; (set self.direction (% (- self.direction 0.1) (* math.pi 2)))
(when controls.right
(set self.target-spin (+ self.target-spin 0.15)))
(set self.direction (% (+ self.direction (* self.target-spin 0.1)) (* math.pi 2)))
(set self.target-spin (* self.target-spin 0.9))
(when controls.up
(local v (entity.velocity self))
(set v.x (+ v.x (* (math.cos self.direction) 0.02)))
(set v.y (+ v.y (* (math.sin self.direction) 0.02)))
(when (> (vec.mag v) 0.8)
(tset self entity.velocity (vec.mul v (/ 0.8 (vec.mag v)))))))
(fn draw [self game id]
(love.graphics.setColor 1 1 1)
(love.graphics.rotate self.direction)
(love.graphics.polygon :fill -0.6 -0.4 0.6 0 -0.6 0.4))
(fn collide [self game id x y]
(print "ow!")
(tset game.entities id nil)
(tset game.grid x y (cell.init cells.boom)))
{entity.init init entity.steer steer entity.draw draw entity.collide collide}
|