#ifndef _OBJECTMANAGER_H #define _OBJECTMANAGER_H #include #include #include "Singleton.h" #include "CStr.h" #include "ObjectBase.h" class CObjectEntry; class CBaseEntity; class CMatrix3D; // access to sole CObjectManager object #define g_ObjMan CObjectManager::GetSingleton() // Slight hack, to allow ScEd to place either entities or objects class CObjectThing { public: virtual ~CObjectThing() {} virtual void Create(CMatrix3D& transform, int playerID)=0; virtual void SetTransform(CMatrix3D& transform)=0; virtual CObjectEntry* GetObjectEntry()=0; }; /////////////////////////////////////////////////////////////////////////////////////////// // CObjectManager: manager class for all possible actor types class CObjectManager : public Singleton { public: struct ObjectKey { ObjectKey(const CStr& name, const CObjectBase::variation_key& var) : ActorName(name), ActorVariation(var) {} CStr ActorName; CObjectBase::variation_key ActorVariation; }; struct SObjectType { // name of this object type (derived from directory name) CStr m_Name; // index in parent array int m_Index; // list of objects of this type (found from the objects directory) std::map m_Objects; std::map m_ObjectBases; }; public: CObjectThing* m_SelectedThing; // constructor, destructor CObjectManager(); ~CObjectManager(); int LoadObjects(); void AddObjectType(const char* name); CObjectEntry* FindObject(const char* objname); void AddObject(ObjectKey& key, CObjectEntry* entry, int type); void DeleteObject(CObjectEntry* entry); CObjectBase* FindObjectBase(const char* objname); CObjectEntry* FindObjectVariation(const char* objname, CObjectBase::variation_key vars, CObjectBase::variation_key::iterator& vars_it); CObjectEntry* FindObjectVariation(CObjectBase* base, CObjectBase::variation_key vars, CObjectBase::variation_key::iterator& vars_it); // Get all names, quite slowly. (Intended only for ScEd.) void GetAllObjectNames(std::vector& names); //CBaseEntity* m_SelectedEntity; void SetSelectedEntity(CBaseEntity* thing); void SetSelectedObject(CObjectEntry* thing); std::vector m_ObjectTypes; }; // Global comparison operator bool operator< (const CObjectManager::ObjectKey& a, const CObjectManager::ObjectKey& b); #endif