-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSignal.go
35 lines (29 loc) · 865 Bytes
/
Signal.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
package talosecs
var signals []any
// TryAddSignal adds a new signal to the game flow. If signal of same type was already added, it will be cancelled and return false.
func TryAddSignal[T any](signal T) bool {
if _, isExist := GetSignal[T](); isExist {
return false
}
signals = append(signals, signal)
return true
}
// GetSignal returns registered signal of type T. If there is no signal now, returns false.
func GetSignal[T any]() (T, bool) {
for _, signal := range signals {
if typedSignal, ok := signal.(T); ok {
return typedSignal, true
}
}
var defaultT T
return defaultT, false
}
// SuspendSignal of type T. It means that signal will not be passed to a next updateSystems.
func SuspendSignal[T any]() {
for i, signal := range signals {
if _, ok := signal.(T); ok {
signals = append(signals[:i], signals[i+1:]...)
break
}
}
}