18 #ifndef INCLUDED_COMPONENTMANAGER 19 #define INCLUDED_COMPONENTMANAGER 28 #include <boost/random/linear_congruential.hpp> 31 #include <unordered_map> 73 std::unique_ptr<JS::PersistentRootedValue>
ctor;
134 ComponentTypeId
LookupCID(
const std::string& cname)
const;
264 bool DumpDebugState(std::ostream& stream,
bool includeDebugInfo)
const;
340 #endif // INCLUDED_COMPONENTMANAGER An entity initialisation parameter node.
Definition: ParamNode.h:150
void SubscribeToMessageType(MessageTypeId mtid)
Subscribe the current component type to the given message type.
Definition: ComponentManager.cpp:549
Definition: IComponent.h:32
void FlushDestroyedComponents()
Does the actual destruction of components from DestroyComponentsSoon.
Definition: ComponentManager.cpp:885
void Script_RegisterInterface(const std::string &name)
Definition: ComponentManager.cpp:342
std::map< MessageTypeId, std::vector< ComponentTypeId > > m_GlobalMessageSubscriptions
Definition: ComponentManager.h:315
void ResetState()
Resets the dynamic simulation state (deletes all entities, resets entity ID counters; doesn't unload/...
Definition: ComponentManager.cpp:478
bool EntityExists(entity_id_t ent) const
Returns true if the entity with id ent exists.
Definition: ComponentManager.cpp:874
void FlattenDynamicSubscriptions()
Definition: ComponentManager.cpp:567
void AddMockComponent(CEntityHandle ent, InterfaceId iid, IComponent &component)
Adds an externally-created component, so that it is returned by QueryInterface but does not get destr...
Definition: ComponentManager.cpp:776
void BroadcastMessage(const CMessage &msg)
Send a message, not targeted at any particular entity.
Definition: ComponentManager.cpp:1019
std::unordered_map< entity_id_t, IComponent * > InterfaceListUnordered
Definition: ComponentManager.h:233
entity_id_t AddEntity(const std::wstring &templateName, entity_id_t ent)
Constructs an entity based on the given template, and adds it the world with entity ID ent...
Definition: ComponentManager.cpp:829
std::unordered_map< entity_id_t, SEntityComponentCache * > m_ComponentCaches
Definition: ComponentManager.h:324
void SetRNGSeed(u32 seed)
Initializes the random number generator with a seed determined by the host.
Definition: ComponentManager.cpp:516
std::pair< entity_id_t, IComponent * > InterfacePair
Definition: ComponentManager.h:231
int InterfaceId
Definition: ComponentManager.h:45
AllocFunc alloc
Definition: ComponentManager.h:69
int MessageTypeId
Definition: ComponentManager.h:47
InterfaceId iid
Definition: ComponentManager.h:68
entity_id_t m_NextLocalEntityId
Definition: ComponentManager.h:333
int Script_AddEntity(const std::wstring &templateName)
Definition: ComponentManager.cpp:464
InterfaceList GetEntitiesWithInterface(InterfaceId iid) const
Definition: ComponentManager.cpp:959
DeallocFunc dealloc
Definition: ComponentManager.h:70
~CComponentManager()
Definition: ComponentManager.cpp:118
bool SerializeState(std::ostream &stream) const
Definition: ComponentManagerSerialization.cpp:180
Object wrapping an entity_id_t, with a SEntityComponentCache to support fast QueryInterface() / CmpPt...
Definition: Entity.h:79
std::string schema
Definition: ComponentManager.h:72
ScriptInterface & GetScriptInterface()
Definition: ComponentManager.h:272
CSimContext & m_SimContext
Definition: ComponentManager.h:302
friend class TestComponentManager
Definition: ComponentManager.h:337
IComponent * QueryInterface(entity_id_t ent, InterfaceId iid) const
Definition: ComponentManager.cpp:941
std::vector< InterfacePair > InterfaceList
Definition: ComponentManager.h:232
void(*)(IComponent *) DeallocFunc
Definition: IComponent.h:37
IComponent::AllocFunc AllocFunc
Definition: ComponentManager.h:50
void Script_RegisterComponentType_Common(int iid, const std::string &cname, JS::HandleValue ctor, bool reRegister, bool systemComponent)
Definition: ComponentManager.cpp:159
std::string GenerateSchema() const
Definition: ComponentManager.cpp:1091
#define ASSERT(expr)
same as ENSURE in debug mode, does nothing in release mode.
Definition: debug.h:318
IComponent::DeallocFunc DeallocFunc
Definition: ComponentManager.h:51
Definition: ComponentManager.h:65
void Script_RegisterSystemComponentType(int iid, const std::string &cname, JS::HandleValue ctor)
Definition: ComponentManager.cpp:331
Contains pointers to various 'global' objects that are needed by the simulation code, to allow easy access without using real (evil) global variables.
Definition: SimContext.h:32
void LoadComponentTypes()
Definition: ComponentManager.cpp:123
std::map< std::string, MessageTypeId > m_MessageTypeIdsByName
Definition: ComponentManager.h:317
entity_id_t m_NextEntityId
Definition: ComponentManager.h:332
const entity_id_t SYSTEM_ENTITY
Entity ID for singleton 'system' components.
Definition: Entity.h:43
CMessage * ConstructMessage(int mtid, JS::HandleValue data)
Definition: ComponentManager.cpp:427
void RegisterMessageType(MessageTypeId mtid, const char *name)
Definition: ComponentManager.cpp:543
CEntityHandle LookupEntityHandle(entity_id_t ent, bool allowCreate=false)
Returns a CEntityHandle with id ent.
Definition: ComponentManager.cpp:807
boost::rand48 m_RNG
Definition: ComponentManager.h:335
const CParamNode & Script_GetTemplate(const std::string &templateName)
Definition: ComponentManager.cpp:390
void Script_PostMessage(int ent, int mtid, JS::HandleValue data)
Definition: ComponentManager.cpp:442
std::map< std::string, ComponentTypeId > m_ComponentTypeIdsByName
Definition: ComponentManager.h:316
EComponentTypeType
Definition: ComponentManager.h:57
int Script_AddLocalEntity(const std::wstring &templateName)
Definition: ComponentManager.cpp:471
ComponentTypeId LookupCID(const std::string &cname) const
Definition: ComponentManager.cpp:611
uint32_t u32
Definition: types.h:39
std::vector< std::unordered_map< entity_id_t, IComponent * > > m_ComponentsByInterface
Definition: ComponentManager.h:312
bool m_CurrentlyHotloading
Definition: ComponentManager.h:307
std::map< ComponentTypeId, std::map< entity_id_t, IComponent * > > m_ComponentsByTypeId
Definition: ComponentManager.h:313
void Script_BroadcastMessage(int mtid, JS::HandleValue data)
Definition: ComponentManager.cpp:453
std::vector< int > Script_GetEntitiesWithInterface(int iid)
Definition: ComponentManager.cpp:407
Definition: ComponentManager.h:39
NONCOPYABLE(CComponentManager)
std::map< std::string, InterfaceId > m_InterfaceIdsByName
Definition: ComponentManager.h:319
int ComponentTypeId
Definition: ComponentManager.h:46
const InterfaceListUnordered & GetEntitiesWithInterfaceUnordered(InterfaceId iid) const
Definition: ComponentManager.cpp:981
CEntityHandle AllocateEntityHandle(entity_id_t ent)
Definition: ComponentManager.cpp:791
ScriptInterface m_ScriptInterface
Definition: ComponentManager.h:301
std::unique_ptr< JS::PersistentRootedValue > ctor
Definition: ComponentManager.h:73
CComponentManager(CSimContext &, std::shared_ptr< ScriptContext > cx, bool skipScriptFunctions=false)
Definition: ComponentManager.cpp:59
void RegisterComponentType(InterfaceId, ComponentTypeId, AllocFunc, DeallocFunc, const char *, const std::string &schema)
Definition: ComponentManager.cpp:521
std::map< MessageTypeId, std::string > m_MessageTypeNamesById
Definition: ComponentManager.h:318
void PostMessage(entity_id_t ent, const CMessage &msg)
Send a message, targeted at a particular entity.
Definition: ComponentManager.cpp:992
A list of components that are dynamically subscribed to a particular message.
Definition: DynamicSubscription.h:36
void MarkScriptedComponentForSystemEntity(CComponentManager::ComponentTypeId cid)
Definition: ComponentManager.cpp:538
void Script_RegisterComponentType(int iid, const std::string &cname, JS::HandleValue ctor)
Definition: ComponentManager.cpp:325
Definition: ComponentManager.h:61
std::string name
Definition: ComponentManager.h:71
bool ComputeStateHash(std::string &outHash, bool quick) const
Definition: ComponentManagerSerialization.cpp:98
void InitSystemEntity()
Set up an empty SYSTEM_ENTITY.
Definition: ComponentManager.cpp:822
std::map< MessageTypeId, CDynamicSubscription > m_DynamicMessageSubscriptionsNonsync
Definition: ComponentManager.h:321
void SubscribeGloballyToMessageType(MessageTypeId mtid)
Subscribe the current component type to all messages of the given message type.
Definition: ComponentManager.cpp:558
void SendGlobalMessage(entity_id_t ent, const CMessage &msg)
Definition: ComponentManager.cpp:1044
std::vector< IComponent * > Script_GetComponentsWithInterface(int iid)
Definition: ComponentManager.cpp:418
entity_id_t AllocateNewLocalEntity()
Returns a new local entity ID that has never been used before.
Definition: ComponentManager.cpp:656
void Script_ReRegisterComponentType(int iid, const std::string &cname, JS::HandleValue ctor)
Definition: ComponentManager.cpp:337
bool DeserializeState(std::istream &stream)
Definition: ComponentManagerSerialization.cpp:297
bool DumpDebugState(std::ostream &stream, bool includeDebugInfo) const
Definition: ComponentManagerSerialization.cpp:49
std::string LookupComponentTypeName(ComponentTypeId cid) const
Definition: ComponentManager.cpp:619
Definition: ComponentManager.h:59
bool AddComponent(CEntityHandle ent, ComponentTypeId cid, const CParamNode ¶mNode)
Constructs a component of type 'cid', initialised with data 'paramNode', and attaches it to entity 'e...
Definition: ComponentManager.cpp:678
bool LoadScript(const VfsPath &filename, bool hotload=false)
Load a script and execute it in a new function scope.
Definition: ComponentManager.cpp:145
ComponentTypeId m_CurrentComponent
Definition: ComponentManager.h:306
ComponentTypeId m_NextScriptComponentTypeId
Definition: ComponentManager.h:331
std::map< MessageTypeId, std::vector< ComponentTypeId > > m_LocalMessageSubscriptions
Definition: ComponentManager.h:314
IComponent * ConstructComponent(CEntityHandle ent, ComponentTypeId cid)
Allocates a component object of type 'cid', and attaches it to entity 'ent'.
Definition: ComponentManager.cpp:716
void RegisterComponentTypeScriptWrapper(InterfaceId, ComponentTypeId, AllocFunc, DeallocFunc, const char *, const std::string &schema)
Definition: ComponentManager.cpp:529
std::vector< entity_id_t > m_DestructionQueue
Definition: ComponentManager.h:329
entity_id_t GetId() const
Definition: Entity.h:88
void Script_RegisterMessageType(const std::string &name)
Definition: ComponentManager.cpp:364
std::map< ComponentTypeId, ComponentType > m_ComponentTypesById
Definition: ComponentManager.h:310
CEntityHandle GetSystemEntity()
Returns a CEntityHandle with id SYSTEM_ENTITY.
Definition: ComponentManager.h:149
Abstraction around a SpiderMonkey JS::Realm.
Definition: ScriptInterface.h:71
std::map< IComponent *, std::set< MessageTypeId > > m_DynamicMessageSubscriptionsNonsyncByComponent
Definition: ComponentManager.h:322
IComponent *(*)(const ScriptInterface &scriptInterface, JS::HandleValue ctor) AllocFunc
Definition: IComponent.h:36
void DestroyComponentsSoon(entity_id_t ent)
Destroys all the components belonging to the specified entity when FlushDestroyedComponents is called...
Definition: ComponentManager.cpp:880
std::vector< CComponentManager::ComponentTypeId > m_ScriptedSystemComponents
Definition: ComponentManager.h:311
void RemoveComponentDynamicSubscriptions(IComponent *component)
Definition: ComponentManager.cpp:593
Definition: ComponentManager.h:60
void Script_RegisterGlobal(const std::string &name, JS::HandleValue value)
Definition: ComponentManager.cpp:385
u32 entity_id_t
Entity ID type.
Definition: Entity.h:23
CEntityHandle m_SystemEntity
Definition: ComponentManager.h:304
ComponentTypeId GetScriptWrapper(InterfaceId iid)
Definition: ComponentManager.cpp:627
EComponentTypeType type
Definition: ComponentManager.h:67
void DynamicSubscriptionNonsync(MessageTypeId mtid, IComponent *component, bool enabled)
Subscribe the given component instance to all messages of the given message type. ...
Definition: ComponentManager.cpp:577
entity_id_t AllocateNewEntity()
Returns a new entity ID that has never been used before.
Definition: ComponentManager.cpp:649
void AddSystemComponents(bool skipScriptedComponents, bool skipAI)
Add all system components to the system entity (skip the scripted components or the AI components on ...
Definition: ComponentManager.cpp:688