Spinning Topp Logo BlackTopp Studios
inc
areaeffectmanager.cpp
1 // © Copyright 2010 - 2016 BlackTopp Studios Inc.
2 /* This file is part of The Mezzanine Engine.
3 
4  The Mezzanine Engine is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 3 of the License, or
7  (at your option) any later version.
8 
9  The Mezzanine Engine is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with The Mezzanine Engine. If not, see <http://www.gnu.org/licenses/>.
16 */
17 /* The original authors have included a copy of the license specified above in the
18  'Docs' folder. See 'gpl.txt'
19 */
20 /* We welcome the use of the Mezzanine engine to anyone, including companies who wish to
21  Build professional software and charge for their product.
22 
23  However there are some practical restrictions, so if your project involves
24  any of the following you should contact us and we will try to work something
25  out:
26  - DRM or Copy Protection of any kind(except Copyrights)
27  - Software Patents You Do Not Wish to Freely License
28  - Any Kind of Linking to Non-GPL licensed Works
29  - Are Currently In Violation of Another Copyright Holder's GPL License
30  - If You want to change our code and not add a few hundred MB of stuff to
31  your distribution
32 
33  These and other limitations could cause serious legal problems if you ignore
34  them, so it is best to simply contact us or the Free Software Foundation, if
35  you have any questions.
36 
37  Joseph Toppi - toppij@gmail.com
38  John Blackwood - makoenergy02@gmail.com
39 */
40 #ifndef _areaeffectmanager_cpp
41 #define _areaeffectmanager_cpp
42 
43 #include "areaeffectmanager.h"
44 
45 #include "fieldofforce.h"
46 #include "gravityfield.h"
47 #include "gravitywell.h"
48 
49 #include "Physics/physicsmanager.h"
50 
51 #include "actormanager.h"
52 #include "entresol.h"
53 #include "world.h"
54 
55 #include <sstream>
56 #include <algorithm>
57 
58 namespace Mezzanine
59 {
60  ///////////////////////////////////////////////////////////////////////////////
61  // AreaEffectUpdateWorkUnit Methods
62 
64  { }
65 
67  { return *this; }
68 
70  TargetManager(Target) { }
71 
73  { }
74 
75  ///////////////////////////////////////////////////////////////////////////////
76  // Utility
77 
79  {
80  for( AreaEffectManager::AreaEffectIterator AE = this->TargetManager->AreaEffects.begin() ; AE != this->TargetManager->AreaEffects.end() ; ++AE )
81  {
82  (*AE)->_Update();
83  (*AE)->ApplyEffect();
84  }
85  }
86 
87  ///////////////////////////////////////////////////////////////////////////////
88  // AreaEffectManager Methods
89 
90  const String AreaEffectManager::ImplementationName = "DefaultAreaEffectManager";
91  const ManagerBase::ManagerType AreaEffectManager::InterfaceType = ManagerBase::MT_AreaEffectManager;
92 
94  WorldManager(Creator),
95  AreaEffectUpdateWork(NULL),
96  ThreadResources(NULL)
97  {
101 
103  }
104 
106  WorldManager(Creator),
107  AreaEffectUpdateWork(NULL),
108  ThreadResources(NULL)
109  {
110  /// @todo This class currently doesn't initialize anything from XML, if that changes this constructor needs to be expanded.
111 
115 
117  }
118 
120  {
121  this->Deinitialize();
122  this->DestroyAllAreaEffects();
124 
125  delete this->AreaEffectUpdateWork;
126  }
127 
128  ///////////////////////////////////////////////////////////////////////////////
129  // Prefab AreaEffect Type Creation
130 
132  {
134  if( AEFactIt != this->AreaEffectFactories.end() ) {
135  FieldOfForce* Ret = static_cast<FieldOfForceFactory*>( (*AEFactIt).second )->CreateFieldOfForce( Name, this->ParentWorld );
136  this->AreaEffects.push_back( Ret );
137  if( AddToWorld ) {
138  Ret->AddToWorld();
139  }
140  return Ret;
141  }else{
142  MEZZ_EXCEPTION(ExceptionBase::INVALID_STATE_EXCEPTION,"Attempting to create a FieldOfForce AreaEffect without it's factory registered.");
143  }
144  }
145 
147  {
149  if( AEFactIt != this->AreaEffectFactories.end() ) {
150  FieldOfForce* Ret = static_cast<FieldOfForceFactory*>( (*AEFactIt).second )->CreateFieldOfForce( Name, AEShape, this->ParentWorld );
151  this->AreaEffects.push_back( Ret );
152  if( AddToWorld ) {
153  Ret->AddToWorld();
154  }
155  return Ret;
156  }else{
157  MEZZ_EXCEPTION(ExceptionBase::INVALID_STATE_EXCEPTION,"Attempting to create a FieldOfForce AreaEffect without it's factory registered.");
158  }
159  }
160 
162  {
164  if( AEFactIt != this->AreaEffectFactories.end() ) {
165  FieldOfForce* Ret = static_cast<FieldOfForceFactory*>( (*AEFactIt).second )->CreateFieldOfForce( SelfRoot, this->ParentWorld );
166  this->AreaEffects.push_back( Ret );
167  return Ret;
168  }else{
169  MEZZ_EXCEPTION(ExceptionBase::INVALID_STATE_EXCEPTION,"Attempting to create a FieldOfForce AreaEffect without it's factory registered.");
170  }
171  }
172 
174  {
176  if( AEFactIt != this->AreaEffectFactories.end() ) {
177  GravityField* Ret = static_cast<GravityFieldFactory*>( (*AEFactIt).second )->CreateGravityField( Name, this->ParentWorld );
178  this->AreaEffects.push_back( Ret );
179  if( AddToWorld ) {
180  Ret->AddToWorld();
181  }
182  return Ret;
183  }else{
184  MEZZ_EXCEPTION(ExceptionBase::INVALID_STATE_EXCEPTION,"Attempting to create a GravityField AreaEffect without it's factory registered.");
185  }
186  }
187 
189  {
191  if( AEFactIt != this->AreaEffectFactories.end() ) {
192  GravityField* Ret = static_cast<GravityFieldFactory*>( (*AEFactIt).second )->CreateGravityField( Name, AEShape, this->ParentWorld );
193  this->AreaEffects.push_back( Ret );
194  if( AddToWorld ) {
195  Ret->AddToWorld();
196  }
197  return Ret;
198  }else{
199  MEZZ_EXCEPTION(ExceptionBase::INVALID_STATE_EXCEPTION,"Attempting to create a GravityField AreaEffect without it's factory registered.");
200  }
201  }
202 
204  {
206  if( AEFactIt != this->AreaEffectFactories.end() ) {
207  GravityField* Ret = static_cast<GravityFieldFactory*>( (*AEFactIt).second )->CreateGravityField( SelfRoot, this->ParentWorld );
208  this->AreaEffects.push_back( Ret );
209  return Ret;
210  }else{
211  MEZZ_EXCEPTION(ExceptionBase::INVALID_STATE_EXCEPTION,"Attempting to create a GravityField AreaEffect without it's factory registered.");
212  }
213  }
214 
216  {
218  if( AEFactIt != this->AreaEffectFactories.end() ) {
219  GravityWell* Ret = static_cast<GravityWellFactory*>( (*AEFactIt).second )->CreateGravityWell( Name, this->ParentWorld );
220  this->AreaEffects.push_back( Ret );
221  if( AddToWorld ) {
222  Ret->AddToWorld();
223  }
224  return Ret;
225  }else{
226  MEZZ_EXCEPTION(ExceptionBase::INVALID_STATE_EXCEPTION,"Attempting to create a GravityWell AreaEffect without it's factory registered.");
227  }
228  }
229 
231  {
233  if( AEFactIt != this->AreaEffectFactories.end() ) {
234  GravityWell* Ret = static_cast<GravityWellFactory*>( (*AEFactIt).second )->CreateGravityWell( Name, AEShape, this->ParentWorld );
235  this->AreaEffects.push_back( Ret );
236  if( AddToWorld ) {
237  Ret->AddToWorld();
238  }
239  return Ret;
240  }else{
241  MEZZ_EXCEPTION(ExceptionBase::INVALID_STATE_EXCEPTION,"Attempting to create a GravityWell AreaEffect without it's factory registered.");
242  }
243  }
244 
246  {
248  if( AEFactIt != this->AreaEffectFactories.end() ) {
249  GravityWell* Ret = static_cast<GravityWellFactory*>( (*AEFactIt).second )->CreateGravityWell( SelfRoot, this->ParentWorld );
250  this->AreaEffects.push_back( Ret );
251  return Ret;
252  }else{
253  MEZZ_EXCEPTION(ExceptionBase::INVALID_STATE_EXCEPTION,"Attempting to create a GravityWell AreaEffect without it's factory registered.");
254  }
255  }
256 
257  ///////////////////////////////////////////////////////////////////////////////
258  // AreaEffect Management
259 
260  AreaEffect* AreaEffectManager::CreateAreaEffect(const String& TypeName, const String& InstanceName, const NameValuePairMap& Params, const Boole AddToWorld)
261  {
262  FactoryIterator AEFactIt = this->AreaEffectFactories.find( TypeName );
263  if( AEFactIt != this->AreaEffectFactories.end() ) {
264  AreaEffect* Ret = (*AEFactIt).second->CreateAreaEffect( InstanceName, this->ParentWorld, Params );
265  this->AreaEffects.push_back( Ret );
266  if( AddToWorld ) {
267  Ret->AddToWorld();
268  }
269  return Ret;
270  }else{
271  MEZZ_EXCEPTION(ExceptionBase::INVALID_STATE_EXCEPTION,"Attempting to create an AreaEffect of unknown type.");
272  }
273  }
274 
276  {
277  FactoryIterator AEFactIt = this->AreaEffectFactories.find( SelfRoot.Name() );
278  if( AEFactIt != this->AreaEffectFactories.end() ) {
279  AreaEffect* Ret = (*AEFactIt).second->CreateAreaEffect( SelfRoot, this->ParentWorld );
280  this->AreaEffects.push_back( Ret );
281  return Ret;
282  }else{
283  MEZZ_EXCEPTION(ExceptionBase::INVALID_STATE_EXCEPTION,"Attempting to create an AreaEffect of unknown type.");
284  }
285  }
286 
288  {
289  return this->AreaEffects.at(Index);
290  }
291 
293  {
294  for( ConstAreaEffectIterator it = this->AreaEffects.begin() ; it != this->AreaEffects.end() ; ++it )
295  {
296  if(Name == (*it)->GetName())
297  return (*it);
298  }
299  return NULL;
300  }
301 
303  {
304  return this->AreaEffects.size();
305  }
306 
308  {
309  AreaEffectIterator AEIt = ( Index < this->GetNumAreaEffects() ? this->AreaEffects.begin() + Index : this->AreaEffects.end() );
310  if( AEIt != this->AreaEffects.end() )
311  {
312  FactoryIterator AEFactIt = this->AreaEffectFactories.find( (*AEIt)->GetDerivedSerializableName() );
313  if( AEFactIt != this->AreaEffectFactories.end() ) {
314  (*AEFactIt).second->DestroyAreaEffect( (*AEIt) );
315  }else{
316  MEZZ_EXCEPTION(ExceptionBase::INVALID_STATE_EXCEPTION,"Attempting to destroy an AreaEffect of unknown type.");
317  }
318 
319  this->AreaEffects.erase(AEIt);
320  }
321  }
322 
324  {
325  AreaEffectIterator AEIt = std::find( this->AreaEffects.begin(), this->AreaEffects.end(), ToBeDestroyed );
326  if( AEIt != this->AreaEffects.end() )
327  {
328  FactoryIterator AEFactIt = this->AreaEffectFactories.find( (*AEIt)->GetDerivedSerializableName() );
329  if( AEFactIt != this->AreaEffectFactories.end() ) {
330  (*AEFactIt).second->DestroyAreaEffect( (*AEIt) );
331  }else{
332  MEZZ_EXCEPTION(ExceptionBase::INVALID_STATE_EXCEPTION,"Attempting to destroy an AreaEffect of unknown type.");
333  }
334 
335  this->AreaEffects.erase(AEIt);
336  }
337  }
338 
340  {
341  for( AreaEffectIterator AEIt = this->AreaEffects.begin() ; AEIt != this->AreaEffects.end() ; ++AEIt )
342  {
343  FactoryIterator AEFactIt = this->AreaEffectFactories.find( (*AEIt)->GetDerivedSerializableName() );
344  if( AEFactIt != this->AreaEffectFactories.end() ) {
345  (*AEFactIt).second->DestroyAreaEffect( (*AEIt) );
346  }else{
347  MEZZ_EXCEPTION(ExceptionBase::INVALID_STATE_EXCEPTION,"Attempting to destroy an AreaEffect of unknown type.");
348  }
349  }
350  this->AreaEffects.clear();
351  }
352 
354  { return this->AreaEffects.begin(); }
355 
357  { return this->AreaEffects.end(); }
358 
360  { return this->AreaEffects.begin(); }
361 
363  { return this->AreaEffects.end(); }
364 
365  ///////////////////////////////////////////////////////////////////////////////
366  // AreaEffectFactory Management
367 
369  {
370  this->AreaEffectFactories.insert(std::pair<String,AreaEffectFactory*>(ToBeAdded->GetTypeName(),ToBeAdded));
371  }
372 
374  {
375  this->RemoveAreaEffectFactory(ToBeRemoved->GetTypeName());
376  }
377 
379  {
380  FactoryIterator AEFactIt = this->AreaEffectFactories.find(ImplName);
381  if( AEFactIt != this->AreaEffectFactories.end() )
382  { this->AreaEffectFactories.erase(AEFactIt); }
383  }
384 
386  {
387  this->DestroyAreaEffectFactory(ToBeDestroyed->GetTypeName());
388  }
389 
391  {
392  FactoryIterator AEFactIt = this->AreaEffectFactories.find(ImplName);
393  if( AEFactIt != this->AreaEffectFactories.end() ) {
394  delete AEFactIt->second;
395  this->AreaEffectFactories.erase(AEFactIt);
396  }
397  }
398 
400  {
401  for( FactoryIterator AEFactIt = this->AreaEffectFactories.begin() ; AEFactIt != this->AreaEffectFactories.end() ; ++AEFactIt )
402  { delete (*AEFactIt).second; }
403  this->AreaEffectFactories.clear();
404  }
405 
406  ///////////////////////////////////////////////////////////////////////////////
407  // Utility
408 
410  {
411  // Do nothing currently
412  }
413 
415  {
416  for( AreaEffectManager::AreaEffectIterator AE = this->AreaEffects.begin() ; AE != this->AreaEffects.end() ; ++AE )
417  {
418  (*AE)->_Update();
419  (*AE)->ApplyEffect();
420  }
421  }
422 
424  {
425  if( !this->Initialized )
426  {
427  WorldManager::Initialize(); // Verify we have a world
428 
429  this->TheEntresol->GetScheduler().AddWorkUnitMain( this->AreaEffectUpdateWork, "AreaEffectUpdateWork" );
430 
431  Physics::PhysicsManager* PhysicsMan = static_cast<Physics::PhysicsManager*>( this->ParentWorld->GetManager(ManagerBase::MT_PhysicsManager) );
432  if( PhysicsMan ) {
433  this->AreaEffectUpdateWork->AddDependency( PhysicsMan->GetSimulationWork() );
435  }
436 
437  Mezzanine::ActorManager* ActorMan = static_cast<ActorManager*>( this->ParentWorld->GetManager(ManagerBase::MT_ActorManager) );
438  if( ActorMan ) {
440  }
441 
442  this->Initialized = true;
443  }
444  }
445 
447  {
448  if( this->Initialized )
449  {
452 
453  this->Initialized = false;
454  }
455  }
456 
458  { return this->AreaEffectUpdateWork; }
459 
460  ///////////////////////////////////////////////////////////////////////////////
461  // Type Identifier Methods
462 
465 
468 
469  ///////////////////////////////////////////////////////////////////////////////
470  // DefaultAreaEffectManagerFactory Methods
471 
473  { }
474 
476  { }
477 
480 
483 
485  { return new AreaEffectManager(Creator); }
486 
488  { return new AreaEffectManager(Creator,XMLNode); }
489 
491  { delete ToBeDestroyed; }
492 }//Mezzanine
493 
494 #endif
virtual void AddDependency(iWorkUnit *NewDependency)
Force this WorkUnit to Start after another has completed.
Definition: workunit.cpp:99
This is the base class for all collision shapes.
virtual void DestroyAllAreaEffects()
Destroys all actors currently within this manager.
WorldManager * GetManager(const Whole ManagerToGet)
This is will find the manager of a given type.
Definition: world.cpp:324
virtual void AddToWorld()
Adds the object to the World.
Definition: areaeffect.cpp:147
AreaEffectContainer::iterator AreaEffectIterator
Iterator type for AreaEffect instances stored by this class.
WorldTriggerUpdateWorkUnit * GetWorldTriggerUpdateWork()
Gets a pointer to the work unit that updates all WorldTriggers.
bool Boole
Generally acts a single bit, true or false.
Definition: datatypes.h:173
virtual void Pause(const UInt32 PL)
Sets the pause state of this manager, or has no effect depending on the value passed in...
A factory type for the creation of GravityWell objects.
Definition: gravitywell.h:148
virtual void AddWorkUnitMain(iWorkUnit *MoreWork, const String &WorkUnitName)
Add a normal Mezzanine::Threading::iWorkUnit to this For fcheduling.
A manager responsible for the storage and management of all areaeffects in use.
void DestroyManager(WorldManager *ToBeDestroyed)
Destroys a Manager created by this factory.
AreaEffectIterator EndAreaEffect()
Gets an iterator to one passed the last AreaEffect in this manager.
ManagerType
A listing of Manager Types.
Definition: managerbase.h:65
static String GetSerializableName()
Get the name of the the XML tag the proxy class will leave behind as its instances are serialized...
A factory type for the creation of GravityField objects.
Definition: gravityfield.h:115
virtual void AddAreaEffectFactory(AreaEffectFactory *ToBeAdded)
Adds/registers a AreaEffect factory with this manager, allowing it to be constructed through this API...
virtual void RemoveWorkUnitMain(iWorkUnit *LessWork)
Remove a WorkUnit from the main pool of WorkUnits (and not from the groups of Affinity or MonpolyWork...
virtual void Deinitialize()
Removes this manager from any necessary configuration so it can be safely disposed of...
#define MEZZ_EXCEPTION(num, desc)
An easy way to throw exceptions with rich information.
Definition: exception.h:3048
virtual String GetImplementationTypeName() const
This Allows any manager name to be sent to a stream. Primarily used for logging.
virtual void DestroyAreaEffect(const Whole Index)
Destroys an areaeffect at the specified index.
This is a gravity well implementation of the AreaEffect class.
Definition: gravitywell.h:53
AreaEffectUpdateWorkUnit & operator=(const AreaEffectUpdateWorkUnit &Other)
Protected assignment operator. THIS IS NOT ALLOWED.
static String GetSerializableName()
Get the name of the the XML tag the proxy class will leave behind as its instances are serialized...
Threading::FrameScheduler & GetScheduler()
Gets the core structure responsible for scheduling work in the Entresol main loop.
Definition: entresol.cpp:495
AreaEffectUpdateWorkUnit * GetAreaEffectUpdateWork()
Gets the work unit responsible for updating area effects stored by this manager.
virtual ~AreaEffectManager()
Class destructor.
virtual void DestroyAreaEffectFactory(AreaEffectFactory *ToBeDestroyed)
Removes and destroys a AreaEffect factory in this manager.
AreaEffectUpdateWorkUnit(const AreaEffectUpdateWorkUnit &Other)
Protected copy constructor. THIS IS NOT ALLOWED.
This is a Mezzanine::Threading::iWorkUnit for the updating of AreaEffects.
This is an implementation of the AreaEffect class that alters gravity in a region.
Definition: gravityfield.h:52
A thread specific collection of double-buffered and algorithm specific resources. ...
This class is used to define area's in the world that have unique effects.
Definition: areaeffect.h:65
This is field that applies force in a direction, and doesn't tamper with gravity. ...
Definition: fieldofforce.h:56
AreaEffectIterator BeginAreaEffect()
Gets an iterator to the first AreaEffect in this manager.
A light-weight handle for manipulating nodes in DOM tree.
Definition: node.h:89
virtual Whole GetNumAreaEffects() const
Gets the number of actors stored in this manager.
uint32_t UInt32
An 32-bit unsigned integer.
Definition: datatypes.h:126
virtual void Initialize()
Configures this manager for use prior to entering the main loop.
String GetManagerImplName() const
Gets the name of the manager that is created by this factory.
static const ManagerBase::ManagerType InterfaceType
A ManagerType enum value used to describe the type of interface/functionality this manager provides...
Entresol * TheEntresol
The actual pointer to the Entresol core class.
Definition: managerbase.h:108
A base factory type for the creation of AreaEffect objects.
Definition: areaeffect.h:249
static String GetSerializableName()
Get the name of the the XML tag the proxy class will leave behind as its instances are serialized...
virtual String GetTypeName() const =0
Gets the name of the AreaEffect that is created by this factory.
virtual void DestroyAllAreaEffectFactories()
Destroys all AreaEffect factories in this manager.
GravityWell * CreateGravityWell(const String &Name, const Boole AddToWorld=true)
Creates a new GravityWell.
virtual AreaEffect * GetAreaEffect(const Whole Index) const
Gets an AreaEffect by Index.
std::list< NameValuePair > NameValuePairList
This is a datatype mostly used for describing settings or parameters that can't be declared in advanc...
Definition: datatypes.h:206
Thrown when the available information should have worked but failed for unknown reasons.
Definition: exception.h:113
FactoryMap::iterator FactoryIterator
Iterator type for AreaEffectFactory instances stored by this class.
This is the base class for all managers that belong to a single world instance.
Definition: worldmanager.h:55
virtual void ClearDependencies()
Drop any information about what work units this one depends on.
Definition: workunit.cpp:110
virtual void Initialize()
Configures this manager for use prior to entering the main loop.
This is simply a place for storing all the Physics Related functions.
virtual ~AreaEffectUpdateWorkUnit()
Class destructor.
Threading::DefaultWorkUnit * GetSimulationWork()
Gets a pointer to the work unit that steps the simulation.
AreaEffectManager(World *Creator)
Class constructor.
World * ParentWorld
A pointer to the world that created this manager.
Definition: worldmanager.h:60
FieldOfForce * CreateFieldOfForce(const String &Name, const Boole AddToWorld=true)
Creates a new FieldOfForce.
FactoryMap AreaEffectFactories
A map containing all registered AreaEffect type factories.
WorldManager * CreateManager(World *Creator, const NameValuePairList &Params)
Creates a manager of the type represented by this factory.
virtual ~DefaultAreaEffectManagerFactory()
Class destructor.
ManagerBase::ManagerType GetManagerType() const
Gets the type of manager that is created by this factory.
The bulk of the engine components go in this namspace.
Definition: actor.cpp:56
AreaEffect * CreateAreaEffect(const String &TypeName, const String &InstanceName, const NameValuePairMap &Params, const Boole AddToWorld=true)
Creates a new AreaEffect.
unsigned long Whole
Whole is an unsigned integer, it will be at least 32bits in size.
Definition: datatypes.h:151
AreaEffectUpdateWorkUnit * AreaEffectUpdateWork
The work unit that updates all the actors stored by this manager.
This class represents a world for objects to interact within.
Definition: world.h:74
ActorUpdateWorkUnit * GetActorUpdateWork()
Gets the work unit responsible for updating actors stored by this manager.
AreaEffectManager * TargetManager
A pointer to the manager this work unit is processing.
virtual void MainLoopInitialize()
Does all of the necessary configuration to prepare for the start of the main loop.
const Char8 * Name() const
ptrdiff_tGet the name of this Node.
static const String ImplementationName
A String containing the name of this manager implementation.
std::map< String, String > NameValuePairMap
This is a datatype mostly used for describing settings or parameters that can't be declared in advanc...
Definition: datatypes.h:209
std::string String
A datatype used to a series of characters.
Definition: datatypes.h:159
virtual void DoWork(Threading::DefaultThreadSpecificStorage::Type &CurrentThreadStorage)
This does any required update of the Graphical Scene graph and REnders one frame. ...
GravityField * CreateGravityField(const String &Name, const Boole AddToWorld=true)
Creates a new GravityField.
virtual void RemoveAreaEffectFactory(AreaEffectFactory *ToBeRemoved)
Removes a AreaEffect factory from this manager.
A manager responsible for the storage and management of all actors that exist in a world...
Definition: actormanager.h:94
AreaEffectContainer AreaEffects
Container storing all AreaEffects belonging to this manager.
virtual ManagerType GetInterfaceType() const
This returns the type of this manager.
A factory type for the creation of FieldOfForce objects.
Definition: fieldofforce.h:161
Boole Initialized
Simple Boole indicating whether or not this manager has been initialized.
Definition: managerbase.h:111
AreaEffectContainer::const_iterator ConstAreaEffectIterator
Const Iterator type for AreaEffect instances stored by this class.