!B (Sandbox) (CE-21795) Importing models with multisubmaterials via fbx switches...
[CRYENGINE.git] / Code / CryEngine / CrySchematyc2 / ObjectManager.h
blob2f3e01bfcb912b5e4b81166d79a020181e81188e
1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
3 #pragma once
5 #include <CryMemory/CrySizer.h>
6 #include <CryMemory/PoolAllocator.h>
8 #include <CrySchematyc2/IObjectManager.h>
10 #include "Object.h"
11 #include "Lib.h"
13 // #SchematycTODO : Finish implementing object pool and look-up system!!!
15 namespace Schematyc2
17 // Object manager.
18 ////////////////////////////////////////////////////////////////////////////////////////////////////
19 class CObjectManager : public IObjectManager
21 public:
23 CObjectManager();
25 ~CObjectManager();
27 // IObjectManager
28 virtual IObject* CreateObject(const SObjectParams& params) override;
29 virtual void DestroyObject(IObject* pObject) override;
30 virtual IObject* GetObjectById(const ObjectId& objectId) override;
31 //virtual IObject* GetObjectByEntityId(const ExplicitEntityId& entityId) override;
32 virtual void VisitObjects(const IObjectVisitor& visitor) override;
33 virtual void VisitObjects(const IObjectConstVisitor& visitor) const override;
34 virtual void SendSignal(const ObjectId& objectId, const SGUID& signalGUID, const TVariantConstArray& inputs = TVariantConstArray()) override;
35 virtual void SendSignal(const ExplicitEntityId& entityId, const SGUID& signalGUID, const TVariantConstArray& inputs = TVariantConstArray()) override;
36 virtual void BroadcastSignal(const SGUID& signalGUID, const TVariantConstArray& inputs = TVariantConstArray()) override;
37 // ~IObjectManager
39 private:
41 static const uint32 POOL_SIZE = 256;
42 static const uint32 MAX_POOL_COUNT = 256;
43 static const uint32 POOL_INDEX_SHIFT = 0;
44 static const uint32 POOL_INDEX_MASK = 0x000000ff;
45 static const uint32 BUCKET_INDEX_SHIFT = 8;
46 static const uint32 BUCKET_INDEX_MASK = 0x0000ff00;
47 static const uint32 SALT_SHIFT = 16;
48 static const uint32 SALT_MASK = 0x00ff0000;
50 class CPool
52 public:
54 CPool();
56 bool Allocate(void*& ptr, uint32& iBucket, uint32& salt);
57 void Free(uint32 iBucket);
58 void* Get(uint32 iBucket, uint32 salt);
60 private:
62 struct SBucket
64 union
66 uint32 iNextFreeBucket;
67 uint8 storage[sizeof(CObject)];
70 uint32 salt;
73 SBucket m_buckets[POOL_SIZE];
74 uint32 m_iFirstFreeBucket;
77 DECLARE_SHARED_POINTERS(CPool)
79 typedef stl::TPoolAllocator<CObject> TObjectAllocator;
80 typedef VectorMap<ObjectId, CObject*> TObjectMap;
81 typedef std::vector<CPoolPtr> TPoolVector;
83 bool CreateObject(const SObjectParams& params, CObject*& pObject, ObjectId& objectId);
84 void DestroyObject(const ObjectId& objectId);
85 CObject* GetObjectImpl(const ObjectId& objectId);
87 ObjectId m_nextObjectId;
88 TObjectAllocator m_objectAllocator;
89 TObjectMap m_objects;
90 TPoolVector m_pools;
91 bool m_bDestroying;