-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathengine_default.go
54 lines (48 loc) · 1.38 KB
/
engine_default.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
package ecs
// defaultEngine is simple a composition of an defaultEntityManager and a defaultSystemManager.
type defaultEngine struct {
entityManager EntityManager
systemManager SystemManager
}
// Run calls the Process() method for each System
// until ShouldEngineStop is set to true.
func (e *defaultEngine) Run() {
shouldStop := false
for !shouldStop {
for _, system := range e.systemManager.Systems() {
state := system.Process(e.entityManager)
if state == StateEngineStop {
shouldStop = true
break
}
}
}
}
// Tick calls the Process() method for each System exactly once
func (e *defaultEngine) Tick() {
for _, system := range e.systemManager.Systems() {
if state := system.Process(e.entityManager); state == StateEngineStop {
break
}
}
}
// Setup calls the Setup() method for each System
// and initializes ShouldEngineStop and ShouldEnginePause with false.
func (e *defaultEngine) Setup() {
for _, sys := range e.systemManager.Systems() {
sys.Setup()
}
}
// Teardown calls the Teardown() method for each System.
func (e *defaultEngine) Teardown() {
for _, sys := range e.systemManager.Systems() {
sys.Teardown()
}
}
// NewDefaultEngine creates a new Engine and returns its address.
func NewDefaultEngine(entityManager EntityManager, systemManager SystemManager) Engine {
return &defaultEngine{
entityManager: entityManager,
systemManager: systemManager,
}
}