44#include " Pedestrian.h"
55#include " PhysicsComponents.h"
66#include " GameMapManager.h"
7+ #include " Projectile.h"
78
89GameObjectsManager gGameObjectsManager ;
910
@@ -40,29 +41,38 @@ void GameObjectsManager::UpdateFrame()
4041 DestroyPendingObjects ();
4142
4243 // update pedestrians
43- for (Pedestrian* currentPed : mPedestriansList ) // warning: dont add or remove peds during this loop
44+ for (Pedestrian* currObject : mPedestriansList ) // warning: dont add or remove peds during this loop
4445 {
45- if (mDeleteList .contains (¤tPed ->mDeleteObjectsNode ))
46+ if (mDeleteList .contains (&currObject ->mDeleteObjectsNode ))
4647 continue ;
4748
48- currentPed ->UpdateFrame ();
49+ currObject ->UpdateFrame ();
4950 }
5051
5152 // update cars
52- for (Vehicle* currentCar : mCarsList ) // warning: dont add or remove cars during this loop
53+ for (Vehicle* currObject : mCarsList ) // warning: dont add or remove cars during this loop
5354 {
54- if (mDeleteList .contains (¤tCar ->mDeleteObjectsNode ))
55+ if (mDeleteList .contains (&currObject ->mDeleteObjectsNode ))
5556 continue ;
5657
57- currentCar->UpdateFrame ();
58+ currObject->UpdateFrame ();
59+ }
60+
61+ // update projectiles
62+ for (Projectile* currObject: mProjectilesList ) // warning: dont add or remove cars during this loop
63+ {
64+ if (mDeleteList .contains (&currObject->mDeleteObjectsNode ))
65+ continue ;
66+
67+ currObject->UpdateFrame ();
5868 }
5969}
6070
6171void GameObjectsManager::DebugDraw ()
6272{
6373}
6474
65- Pedestrian* GameObjectsManager::CreatePedestrian (const glm::vec3& startPosition , cxx::angle_t startRotation )
75+ Pedestrian* GameObjectsManager::CreatePedestrian (const glm::vec3& position , cxx::angle_t heading )
6676{
6777 GameObjectID pedestrianID = GenerateUniqueID ();
6878
@@ -73,15 +83,14 @@ Pedestrian* GameObjectsManager::CreatePedestrian(const glm::vec3& startPosition,
7383 mObjectsList .insert (&instance->mObjectsNode );
7484
7585 // init
76- instance->Spawn (startPosition, startRotation );
86+ instance->Spawn (position, heading );
7787 return instance;
7888}
7989
80- Vehicle* GameObjectsManager::CreateCar (const glm::vec3& startPosition , cxx::angle_t carRotation , CarStyle* carStyle)
90+ Vehicle* GameObjectsManager::CreateCar (const glm::vec3& position , cxx::angle_t heading , CarStyle* carStyle)
8191{
82- StyleData& styleData = gGameMap .mStyleData ;
83-
84- debug_assert (styleData.IsLoaded ());
92+ debug_assert (gGameMap .mStyleData .IsLoaded ());
93+ debug_assert (carStyle);
8594 GameObjectID carID = GenerateUniqueID ();
8695
8796 Vehicle* instance = mCarsPool .create (carID);
@@ -92,22 +101,53 @@ Vehicle* GameObjectsManager::CreateCar(const glm::vec3& startPosition, cxx::angl
92101
93102 // init
94103 instance->mCarStyle = carStyle;
95- instance->Spawn (startPosition, carRotation );
104+ instance->Spawn (position, heading );
96105 return instance;
97106}
98107
99- Vehicle* GameObjectsManager::CreateCar (const glm::vec3& position, cxx::angle_t carRotation , eCarModel carModel)
108+ Vehicle* GameObjectsManager::CreateCar (const glm::vec3& position, cxx::angle_t heading , eCarModel carModel)
100109{
101- StyleData& styleData = gGameMap .mStyleData ;
102- debug_assert (styleData.IsLoaded ());
103-
104- for (CarStyle& currStyle: styleData.mCars )
110+ Vehicle* vehicle = nullptr ;
111+ for (CarStyle& currStyle: gGameMap .mStyleData .mCars )
105112 {
106113 if (currStyle.mModelId == carModel)
107- return CreateCar (position, carRotation, &currStyle);
114+ {
115+ vehicle = CreateCar (position, heading, &currStyle);
116+ break ;
117+ }
108118 }
109- debug_assert (false );
110- return nullptr ;
119+ debug_assert (vehicle);
120+ return vehicle;
121+ }
122+
123+ Projectile* GameObjectsManager::CreateProjectile (const glm::vec3& position, cxx::angle_t heading, eProjectileType typeID)
124+ {
125+ Projectile* projectile = nullptr ;
126+ debug_assert (typeID < eProjectileType_COUNT);
127+ for (ProjectileStyle& currStyle: gGameMap .mStyleData .mProjectiles )
128+ {
129+ if (currStyle.mTypeID == typeID)
130+ {
131+ projectile = CreateProjectile (position, heading, &currStyle);
132+ break ;
133+ }
134+ }
135+ debug_assert (projectile);
136+ return projectile;
137+ }
138+
139+ Projectile* GameObjectsManager::CreateProjectile (const glm::vec3& position, cxx::angle_t heading, ProjectileStyle* desc)
140+ {
141+ debug_assert (gGameMap .mStyleData .IsLoaded ());
142+ debug_assert (desc);
143+
144+ Projectile* instance = mProjectilesPool .create (desc);
145+ debug_assert (instance);
146+ mObjectsList .insert (&instance->mObjectsNode );
147+ mProjectilesList .insert (&instance->mProjectilesListNode );
148+ // init
149+ instance->Spawn (position, heading);
150+ return instance;
111151}
112152
113153Vehicle* GameObjectsManager::GetCarByID (GameObjectID objectID) const
@@ -185,14 +225,21 @@ void GameObjectsManager::DestroyGameObject(GameObject* object)
185225
186226 case eGameObjectType_Car:
187227 {
188- Vehicle* car = static_cast <Vehicle*>(object);
228+ Vehicle* vehicle = static_cast <Vehicle*>(object);
189229
190- mCarsList .remove (&car ->mCarsListNode );
191- mCarsPool .destroy (car );
230+ mCarsList .remove (&vehicle ->mCarsListNode );
231+ mCarsPool .destroy (vehicle );
192232 }
193233 break ;
194234
195235 case eGameObjectType_Projectile:
236+ {
237+ Projectile* projectile = static_cast <Projectile*>(object);
238+
239+ mProjectilesList .remove (&projectile->mProjectilesListNode );
240+ mProjectilesPool .destroy (projectile);
241+ }
242+ break ;
196243 case eGameObjectType_Powerup:
197244 case eGameObjectType_Decoration:
198245 case eGameObjectType_Obstacle:
0 commit comments