-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtrap.go
87 lines (70 loc) · 1.29 KB
/
trap.go
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package main
import (
"math/rand"
tl "github.com/JoelOtter/termloop"
)
const (
trapColour = tl.ColorMagenta
trapChar = '❖'
)
var hazard = 40 + rand.Intn(80)
// Traps -
type Traps struct {
*tl.Entity
coords map[Coord]int
}
// NewTraps -
func NewTraps(size int) *Traps {
t := new(Traps)
t.Entity = tl.NewEntity(1, 1, 1, 1)
t.coords = make(map[Coord]int)
for len(t.coords) < size {
pos := NewRandomCoord()
t.coords[pos] = 1
}
return t
}
// Collide -
func (t *Traps) Collide(collision tl.Physical) {
// check if its a trap collision
if _, ok := collision.(*Knights); ok {
traps := []Coord{}
for tc := range t.coords {
if gameObjects[objKnights].Contains(tc) {
traps = append(traps, tc)
continue
}
}
for _, trp := range traps {
t.teleport(trp)
}
}
}
// Contains -
func (t *Traps) Contains(c Coord) bool {
_, exists := t.coords[c]
return exists
}
func (t *Traps) teleport(c Coord) {
delete(t.coords, c)
newPos := NewRandomCoord()
t.coords[newPos] = 1
}
// Draw -
func (t *Traps) Draw(screen *tl.Screen) {
if t == nil {
return
}
for c := range t.coords {
screen.RenderCell(c.X, c.Y, &tl.Cell{
Fg: trapColour,
Ch: trapChar,
})
}
}
// Tick -
func (t *Traps) Tick(ev tl.Event) {
if ticks%hazard == 0 {
t.coords[NewRandomCoord()] = 1
}
}