forked from zllangct/ecs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
utility.go
80 lines (61 loc) · 1.21 KB
/
utility.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
package ecs
import (
"reflect"
"unsafe"
)
type IUtilityGetter interface {
getWorld() IWorld
}
type UtilityGetter struct {
world *IWorld
}
func (g UtilityGetter) getWorld() IWorld {
return *g.world
}
type UtilityObject interface {
__UtilityIdentification()
}
type UtilityPointer[T UtilityObject] interface {
IUtility
*T
}
type IUtility interface {
Type() reflect.Type
getPointer() unsafe.Pointer
setSystem(sys ISystem)
setWorld(world IWorld)
}
type utilityIdentification struct{}
func (u utilityIdentification) __UtilityIdentification() {}
type Utility[T UtilityObject] struct {
utilityIdentification
w IWorld
sys ISystem
}
func (u *Utility[T]) setWorld(w IWorld) {
u.w = w
}
func (u *Utility[T]) setSystem(sys ISystem) {
u.sys = sys
}
func (u *Utility[T]) GetSystem() ISystem {
return u.sys
}
func (u *Utility[T]) getPointer() unsafe.Pointer {
return unsafe.Pointer(u)
}
func (u *Utility[T]) Type() reflect.Type {
return TypeOf[T]()
}
func (u *Utility[T]) GetRequirements() map[reflect.Type]IRequirement {
return u.sys.GetRequirements()
}
func (u *Utility[T]) SystemPause() {
u.sys.pause()
}
func (u *Utility[T]) SystemResume() {
u.sys.resume()
}
func (u *Utility[T]) SystemStop() {
u.sys.stop()
}