Elaztek Developer Hub
Blamite Game Engine - blam!  00398.09.22.23.2015.blamite
The core library for the Blamite Game Engine.
GameEntityManager.h
Go to the documentation of this file.
1 
2 #ifndef _Demo_GameEntityManager_H_
3 #define _Demo_GameEntityManager_H_
4 
6 #include "GameEntity.h"
7 
8 namespace Demo
9 {
10  class GraphicsSystem;
11  class LogicSystem;
12 
14  {
15  public:
17  {
20  };
21 
22  typedef std::vector<GameEntityVec> GameEntityVecVec;
23 
24  private:
25  struct Region
26  {
27  size_t slotOffset;
28  size_t count;
29  size_t bufferIdx;
30 
31  Region( size_t _slotOffset, size_t _count, size_t _bufferIdx ) :
32  slotOffset( _slotOffset ),
33  count( _count ),
34  bufferIdx( _bufferIdx )
35  {
36  }
37  };
38 
39  //We assume mCurrentId never wraps
40  Ogre::uint32 mCurrentId;
41  GameEntityVec mGameEntities[Ogre::NUM_SCENE_MEMORY_MANAGER_TYPES];
42 
43  std::vector<GameEntityTransform*> mTransformBuffers;
44  std::vector<Region> mAvailableTransforms;
45 
46  GameEntityVecVec mScheduledForRemoval;
47  size_t mScheduledForRemovalCurrentSlot;
48  std::vector<size_t> mScheduledForRemovalAvailableSlots;
49 
50  Mq::MessageQueueSystem *mGraphicsSystem;
51  LogicSystem *mLogicSystem;
52 
53  Ogre::uint32 getScheduledForRemovalAvailableSlot(void);
54  void destroyAllGameEntitiesIn( GameEntityVec &container );
55 
56  void aquireTransformSlot( size_t &outSlot, size_t &outBufferIdx );
57  void releaseTransformSlot( size_t bufferIdx, GameEntityTransform *transform );
58 
59  public:
61  LogicSystem *logicSystem );
63 
81  GameEntity* addGameEntity( Ogre::SceneMemoryMgrTypes type,
82  const MovableObjectDefinition *moDefinition,
83  const Ogre::Vector3 &initialPos,
84  const Ogre::Quaternion &initialRot,
85  const Ogre::Vector3 &initialScale );
86 
92  void removeGameEntity( GameEntity *toRemove );
93 
95  void _notifyGameEntitiesRemoved( size_t slot );
96 
98  void finishFrameParallel(void);
99  };
100 }
101 
102 #endif
Demo::Mq::MessageQueueSystem::queueSendMessage
void queueSendMessage(MessageQueueSystem *dstSystem, Mq::MessageId messageId, const T &msg)
Queues message 'msg' to be sent to a destination MessageQueueSystem.
Definition: MessageQueueSystem.h:66
Demo::GameEntityManager::GameEntityVecVec
std::vector< GameEntityVec > GameEntityVecVec
Definition: GameEntityManager.h:22
Demo::GameEntity::mTransform
GameEntityTransform * mTransform[NUM_GAME_ENTITY_BUFFERS]
Definition: GameEntity.h:53
Demo::GameEntityTransform::qRot
Ogre::Quaternion qRot
Definition: GameEntity.h:31
Demo::Mq::GAME_ENTITY_REMOVED
@ GAME_ENTITY_REMOVED
Definition: MqMessages.h:17
Demo::GameEntityTransform::vPos
Ogre::Vector3 vPos
Definition: GameEntity.h:30
GameEntity.h
Demo::GameEntityTransform
Definition: GameEntity.h:28
Demo::GameEntityManager::addGameEntity
GameEntity * addGameEntity(Ogre::SceneMemoryMgrTypes type, const MovableObjectDefinition *moDefinition, const Ogre::Vector3 &initialPos, const Ogre::Quaternion &initialRot, const Ogre::Vector3 &initialScale)
Creates a GameEntity, adding it to the world, and scheduling for the Graphics thread to create the ap...
Definition: GameEntityManager.cpp:50
Demo
Definition: BaseSystem.cpp:5
Demo::GameEntityTransform::vScale
Ogre::Vector3 vScale
Definition: GameEntity.h:32
Demo::GameEntityManager::_notifyGameEntitiesRemoved
void _notifyGameEntitiesRemoved(size_t slot)
Must be called by LogicSystem when Mq::GAME_ENTITY_SCHEDULED_FOR_REMOVAL_SLOT message arrives.
Definition: GameEntityManager.cpp:93
Demo::LogicSystem::_notifyGameEntityManager
void _notifyGameEntityManager(GameEntityManager *mgr)
Definition: LogicSystem.h:31
Demo::GameEntity::OrderById
static bool OrderById(const GameEntity *_l, const GameEntity *_r)
Definition: GameEntity.h:82
GameEntityManager.h
Demo::GameEntity::mType
Ogre::SceneMemoryMgrTypes mType
Definition: GameEntity.h:54
Demo::GameEntityManager::removeGameEntity
void removeGameEntity(GameEntity *toRemove)
Removes the GameEntity from the world.
Definition: GameEntityManager.cpp:81
Demo::LogicSystem
Definition: LogicSystem.h:14
Demo::GameEntityManager
Definition: GameEntityManager.h:13
Demo::GameEntityManager::CreatedGameEntity::gameEntity
GameEntity * gameEntity
Definition: GameEntityManager.h:18
Demo::Mq::GAME_ENTITY_SCHEDULED_FOR_REMOVAL_SLOT
@ GAME_ENTITY_SCHEDULED_FOR_REMOVAL_SLOT
Definition: MqMessages.h:19
Demo::GameEntity
Definition: GameEntity.h:35
Demo::MovableObjectDefinition
Definition: GameEntity.h:20
Demo::GameEntityManager::GameEntityManager
GameEntityManager(Mq::MessageQueueSystem *graphicsSystem, LogicSystem *logicSystem)
Definition: GameEntityManager.cpp:11
Demo::Mq::MessageQueueSystem
Definition: MessageQueueSystem.h:16
NUM_GAME_ENTITY_BUFFERS
#define NUM_GAME_ENTITY_BUFFERS
Definition: GameEntity.h:11
Demo::GameEntityManager::finishFrameParallel
void finishFrameParallel(void)
Must be called every frame from the LOGIC THREAD.
Definition: GameEntityManager.cpp:185
Demo::GameEntityManager::CreatedGameEntity
Definition: GameEntityManager.h:16
Demo::cNumTransforms
const size_t cNumTransforms
Definition: GameEntityManager.cpp:9
Demo::GameEntityVec
std::vector< GameEntity * > GameEntityVec
Definition: GameEntity.h:88
Demo::GameEntity::mTransformBufferIdx
size_t mTransformBufferIdx
Definition: GameEntity.h:60
Demo::GameEntityManager::CreatedGameEntity::initialTransform
GameEntityTransform initialTransform
Definition: GameEntityManager.h:19
LogicSystem.h
MessageQueueSystem.h
Demo::GameEntityManager::~GameEntityManager
~GameEntityManager()
Definition: GameEntityManager.cpp:21
Demo::Mq::GAME_ENTITY_ADDED
@ GAME_ENTITY_ADDED
Definition: MqMessages.h:16