-
Notifications
You must be signed in to change notification settings - Fork 7
/
ObjectIDs.go
69 lines (61 loc) · 1.62 KB
/
ObjectIDs.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
package levels
import (
"github.com/inkyblackness/hacked/editor/event"
"github.com/inkyblackness/hacked/ss1/content/archive/level"
)
type objectIDs struct {
list []level.ObjectID
}
func (coords objectIDs) contains(pos level.ObjectID) bool {
for _, entry := range coords.list {
if entry == pos {
return true
}
}
return false
}
func (coords *objectIDs) filterInvalid(lvl *level.Level) {
hasInvalid := false
for _, id := range coords.list {
obj := lvl.Object(id)
if (obj == nil) || (obj.InUse == 0) {
hasInvalid = true
}
}
if hasInvalid {
var newList []level.ObjectID
for _, id := range coords.list {
obj := lvl.Object(id)
if (obj != nil) && (obj.InUse != 0) {
newList = append(newList, id)
}
}
coords.list = newList
}
}
func (coords *objectIDs) registerAt(registry event.Registry) {
registry.RegisterHandler(coords.onObjectSelectionSetEvent)
registry.RegisterHandler(coords.onObjectSelectionAddEvent)
registry.RegisterHandler(coords.onObjectSelectionRemoveEvent)
}
func (coords *objectIDs) onObjectSelectionSetEvent(evt ObjectSelectionSetEvent) {
coords.list = evt.objects
}
func (coords *objectIDs) onObjectSelectionAddEvent(evt ObjectSelectionAddEvent) {
coords.list = append(coords.list, evt.objects...)
}
func (coords *objectIDs) onObjectSelectionRemoveEvent(evt ObjectSelectionRemoveEvent) {
newList := make([]level.ObjectID, 0, len(coords.list))
for _, oldEntry := range coords.list {
keep := true
for _, removedEntry := range evt.objects {
if oldEntry == removedEntry {
keep = false
}
}
if keep {
newList = append(newList, oldEntry)
}
}
coords.list = newList
}