-
Notifications
You must be signed in to change notification settings - Fork 59
/
Copy pathSystemManager.cpp
executable file
·63 lines (53 loc) · 1.41 KB
/
SystemManager.cpp
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
#include "SystemManager.h"
#include "World.h"
#include "EntitySystem.h"
#include "SystemBitManager.h"
namespace artemis {
SystemManager::SystemManager(World& world) {
this->world = &world;
}
Bag<EntitySystem*> & SystemManager::getSystems() {
return bagged;
}
void SystemManager::initializeAll() {
for(int i=0; i< bagged.getCount(); i++) {
bagged.get(i)->initialize();
}
}
EntitySystem* SystemManager::setSystem(EntitySystem* stm) {
bool bitFlag = false;
int index = 0;
//Check if system is known.
for(int i=0; i< bagged.getCount(); i++)
{
if(typeid(*stm) == typeid(*bagged.get(i))){
bitFlag = true;
index = i;
}
}
//Check if stm pointer doesn't point to an existing system
//Else add system to manager
if(bagged.get(index) != stm){
//If it doesn't point to an existing system
//Check if the new system is already known
if(bitFlag){
//Delete newly made system.
delete stm;
//Point to existing system in bag.
stm = bagged.get(index);
}
else{
stm->setWorld(world);
systems[&typeid(*stm)] = stm;
bagged.add(stm);
stm->setSystemBit(SystemBitManager::getBitFor(typeid(*stm)));
}
}
return stm;
}
SystemManager::~SystemManager(){
systems.clear();
bagged.deleteData();
bagged.clear();
}
};