gravity working through manager
[physics.git] / src / entityManager.cpp
CommitLineData
054d658f 1#include "entityManager.h"
a483ed75
PG
2#include "debug.h"
3
33b8c69b
PG
4#include <set>
5#include <iostream>
6
054d658f
PG
7#include "Entities/Entity.h"
8#include "Entities/Particle.h"
9#include "Entities/PhysicsEntity.h"
10
ad9f1fb6
PG
11/// ***** Private Method Headers *****
12void updateParticles(float);
13void updatePhysics(float);
14
15/// ***** Private Variables *****
f72f4a59 16typedef std::set<Particle*> setPart;
ad9f1fb6
PG
17setPart particles_To_Add;
18setPart active_Particles;
19setPart particles_To_Remove;
20bool clearParticles;
21
f72f4a59 22typedef std::set<PhysicsEntity*> setPhys;
ad9f1fb6
PG
23setPhys physics_To_Add;
24setPhys active_Physics;
25setPhys physics_To_Remove;
26bool clearPhysics;
27
28/// ***** Public Methods *****
29
d388f0ec 30void manager::init()
ad9f1fb6
PG
31{
32}
d388f0ec 33void manager::clean()
ad9f1fb6
PG
34{
35}
36
d388f0ec 37void manager::add(Entity* e)
ad9f1fb6
PG
38{
39 {
d388f0ec
PG
40 Particle* p = dynamic_cast<Particle*>(e);
41 if( p != 0 )
42 {
43 particles_To_Add.insert(p);
44 return;
45 }
ad9f1fb6
PG
46 }
47
48 {
d388f0ec
PG
49 PhysicsEntity* p = dynamic_cast<PhysicsEntity*>(e);
50 if( p != 0 )
51 {
52 physics_To_Add.insert(p);
53 return;
54 }
ad9f1fb6
PG
55 }
56
57 std::cerr << "ENTITY TYPE NOT SUPPORTED BY addEntity()!!";
58 std::cerr << std::endl;
59}
d388f0ec 60void manager::remove(Entity* e)
ad9f1fb6
PG
61{
62 {
d388f0ec
PG
63 Particle* p = dynamic_cast<Particle*>(e);
64 if( p != 0 )
65 {
66 particles_To_Remove.insert(p);
67 return;
68 }
ad9f1fb6
PG
69 }
70
71 {
d388f0ec
PG
72 PhysicsEntity* p = dynamic_cast<PhysicsEntity*>(e);
73 if( p != 0 )
74 {
75 physics_To_Remove.insert(p);
76 return;
77 }
ad9f1fb6
PG
78 }
79
80 std::cerr << "ENTITY TYPE NOT SUPPORTED BY deleteEntity()!!";
81 std::cerr << std::endl;
82}
83
d388f0ec 84void manager::clear()
ad9f1fb6
PG
85{
86 clearParticles = true;
87 clearPhysics = true;
88}
89
d388f0ec 90void manager::handleInput()
ad9f1fb6
PG
91{
92 // TODO
93}
d388f0ec 94void manager::update(float time_step)
ad9f1fb6
PG
95{
96 updateParticles(time_step);
97 updatePhysics(time_step);
98}
d388f0ec 99void manager::draw()
ad9f1fb6
PG
100{
101 // update active Particle*s
102 for( setPart::iterator it = active_Particles.begin();
103 it != active_Particles.end();
104 it++ )
105 {
106 (*it)->draw();
107 }
108
109 // update active PhysicsEntity*s
110 for( setPhys::iterator it = active_Physics.begin();
111 it != active_Physics.end();
112 it++ )
113 {
114 (*it)->draw();
115 }
a483ed75 116
ad9f1fb6
PG
117}
118
119/// ***** Private Methods *****
120void updateParticles(float time_step)
121{
122 // add new Particle*s to Active
123 for( setPart::iterator it = particles_To_Add.begin();
124 it != particles_To_Add.end();
125 it++ )
126 {
127 active_Particles.insert(*it);
128 }
129 particles_To_Add.clear();
130
131 // remove dead Particle*s from Active
132 for( setPart::iterator it = particles_To_Remove.begin();
133 it != particles_To_Remove.end();
134 it++ )
135 {
136 active_Particles.erase(*it);
137 }
138 particles_To_Remove.clear();
139
140 // update active Particle*s
141 for( setPart::iterator it = active_Particles.begin();
142 it != active_Particles.end();
143 it++ )
144 {
145 (*it)->update(time_step);
146 }
147}
148void updatePhysics(float time_step)
149{
150 // add new PhysicsEntity*s to Active
151 for( setPhys::iterator it = physics_To_Add.begin();
152 it != physics_To_Add.end();
153 it++ )
154 {
155 active_Physics.insert(*it);
156 }
157 physics_To_Add.clear();
158
159 // remove dead PhysicsEntity*s from Active
160 for( setPhys::iterator it = physics_To_Remove.begin();
161 it != physics_To_Remove.end();
162 it++ )
163 {
164 active_Physics.erase(*it);
165 }
166 physics_To_Remove.clear();
167
168 // update active PhysicsEntity*s
169 for( setPhys::iterator it = active_Physics.begin();
170 it != active_Physics.end();
171 it++ )
172 {
173 (*it)->update(time_step);
174 }
175}