-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathLayer.go
75 lines (61 loc) · 1.36 KB
/
Layer.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
package talosecs
type Layer struct {
Active bool
initSystems []InitSystem
updateSystems []UpdateSystem
}
func NewLayer() *Layer { return &Layer{Active: true} }
func AddSystem(layer *Layer, system any) {
if isInitialized {
panic("Can't add Systems after init!")
}
isSystem := false
if initSystem, ok := system.(InitSystem); ok {
layer.initSystems = append(layer.initSystems, initSystem)
isSystem = true
}
if updateSystem, ok := system.(UpdateSystem); ok {
layer.updateSystems = append(layer.updateSystems, updateSystem)
isSystem = true
}
if !isSystem {
panic("Not a system!")
}
}
// Add adds system to the layer. Also returns this layer, so you can add another system.
func (layer *Layer) Add(system any) *Layer {
AddSystem(layer, system)
return layer
}
func (layer *Layer) Init() {
for _, initSystem := range layer.initSystems {
initSystem.Init()
}
}
func (layer *Layer) Update() {
if layer.Active {
for _, updateSystem := range layer.updateSystems {
updateSystem.Update()
}
}
}
var layers []*Layer
func AddLayer(layer *Layer) bool {
for _, registeredLayer := range layers {
if registeredLayer == layer {
return false
}
}
layers = append(layers, layer)
return true
}
func initLayers() {
for _, layer := range layers {
layer.Init()
}
}
func updateLayers() {
for _, layer := range layers {
layer.Update()
}
}