-
Notifications
You must be signed in to change notification settings - Fork 0
/
EntityManager.pde
109 lines (91 loc) · 2.45 KB
/
EntityManager.pde
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
class EntityManager {
List<Entity> entities;
Map<Class,List<Entity>> entitiesByClass;
EntityManager() {
this.entities = new CopyOnWriteArrayList<Entity>();
this.entitiesByClass = new HashMap<Class,List<Entity>>();
}
void add(Entity entity) {
int insertIndex = this.entities.size();
for (int i = insertIndex - 1; i >= 0; i--) {
if (entity.zIndex >= this.entities.get(i).zIndex) {
insertIndex = i + 1;
break;
}
}
this.entities.add(insertIndex, entity);
List<Class<? extends Entity>> entityClasses = new ArrayList();
Class baseClass = entity.getClass();
Class superClass = baseClass.getSuperclass();
entityClasses.add(baseClass);
while (Entity.class.isAssignableFrom(superClass)) {
entityClasses.add(superClass);
superClass = superClass.getSuperclass();
}
for (Class entityClass : entityClasses) {
List classList = this.entitiesByClass.getOrDefault(entityClass, new ArrayList<Entity>());
classList.add(entity);
this.entitiesByClass.put(entityClass, classList);
}
}
void remove(Entity entity) {
this.entities.remove(entity);
this.getByClassNoCopy(entity.getClass()).remove(entity);
}
void clear() {
for (Entity entity : this.entities) {
entity.delete();
}
}
<E extends Entity> List<E> getByClassNoCopy(Class<E> entityClass) {
this.entitiesByClass.putIfAbsent(entityClass, new ArrayList<Entity>());
return (List<E>)this.entitiesByClass.get(entityClass);
}
<E extends Entity> List<E> getByClass(Class<E> entityClass) {
return new ArrayList<E>(this.getByClassNoCopy(entityClass));
}
int getCount() {
return this.entities.size();
}
void OnTick() {
for (Entity entity : this.entities) {
entity.OnTick();
}
}
void OnDraw(Camera camera) {
for (Entity entity : this.entities) {
if (!camera.getIsNodeVisible(entity)) continue;
entity.OnDrawInternal();
}
}
void OnKeyPressed() {
for (Entity entity : this.entities) {
entity.OnKeyPressed();
}
}
void OnKeyReleased() {
for (Entity entity : this.entities) {
entity.OnKeyReleased();
}
}
void OnInputStart(String inputName) {
for (Entity entity : this.entities) {
entity.OnInputStart(inputName);
}
}
void OnInputEnd(String inputName) {
for (Entity entity : this.entities) {
entity.OnInputEnd(inputName);
}
}
void OnMousePressed() {
for (Entity entity : this.entities) {
entity.OnMousePressed();
}
}
void OnMouseMoved() {
for (Entity entity : this.entities) {
entity.OnMouseMoved();
}
}
}