Changeset View
Changeset View
Standalone View
Standalone View
source/graphics/ObjectManager.h
Show All 12 Lines | |||||
* | * | ||||
* You should have received a copy of the GNU General Public License | * You should have received a copy of the GNU General Public License | ||||
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>. | * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>. | ||||
*/ | */ | ||||
#ifndef INCLUDED_OBJECTMANAGER | #ifndef INCLUDED_OBJECTMANAGER | ||||
#define INCLUDED_OBJECTMANAGER | #define INCLUDED_OBJECTMANAGER | ||||
#include <vector> | |||||
#include <map> | |||||
#include <set> | |||||
#include "ps/CStr.h" | #include "ps/CStr.h" | ||||
#include "lib/file/vfs/vfs_path.h" | #include "lib/file/vfs/vfs_path.h" | ||||
#include <set> | |||||
#include <map> | |||||
#include <unordered_map> | |||||
#include <vector> | |||||
class CActorDef; | |||||
class CMeshManager; | class CMeshManager; | ||||
class CObjectBase; | class CObjectBase; | ||||
class CObjectEntry; | class CObjectEntry; | ||||
class CSkeletonAnimManager; | class CSkeletonAnimManager; | ||||
class CSimulation2; | class CSimulation2; | ||||
class CTerrain; | class CTerrain; | ||||
/////////////////////////////////////////////////////////////////////////////////////////// | /////////////////////////////////////////////////////////////////////////////////////////// | ||||
// CObjectManager: manager class for all possible actor types | // CObjectManager: manager class for all possible actor types | ||||
class CObjectManager | class CObjectManager | ||||
{ | { | ||||
NONCOPYABLE(CObjectManager); | NONCOPYABLE(CObjectManager); | ||||
public: | public: | ||||
// Unique identifier of an actor variation | // Unique identifier of an actor variation | ||||
struct ObjectKey | struct ObjectKey | ||||
{ | { | ||||
ObjectKey(const CStrW& name, const std::vector<u8>& var) | ObjectKey(const CStrW& name, u8 lod, const std::vector<u8>& var) | ||||
: ActorName(name), ActorVariation(var) {} | : ActorName(name), LOD(lod), ActorVariation(var) {} | ||||
bool operator< (const CObjectManager::ObjectKey& a) const; | bool operator< (const CObjectManager::ObjectKey& a) const; | ||||
private: | private: | ||||
CStrW ActorName; | CStrW ActorName; | ||||
u8 LOD; | |||||
std::vector<u8> ActorVariation; | std::vector<u8> ActorVariation; | ||||
}; | }; | ||||
public: | public: | ||||
// constructor, destructor | // constructor, destructor | ||||
CObjectManager(CMeshManager& meshManager, CSkeletonAnimManager& skeletonAnimManager, CSimulation2& simulation); | CObjectManager(CMeshManager& meshManager, CSkeletonAnimManager& skeletonAnimManager, CSimulation2& simulation); | ||||
~CObjectManager(); | ~CObjectManager(); | ||||
// Provide access to the manager classes for meshes and animations - they're | // Provide access to the manager classes for meshes and animations - they're | ||||
// needed when objects are being created and so this seems like a convenient | // needed when objects are being created and so this seems like a convenient | ||||
// place to centralise access. | // place to centralise access. | ||||
CMeshManager& GetMeshManager() const { return m_MeshManager; } | CMeshManager& GetMeshManager() const { return m_MeshManager; } | ||||
CSkeletonAnimManager& GetSkeletonAnimManager() const { return m_SkeletonAnimManager; } | CSkeletonAnimManager& GetSkeletonAnimManager() const { return m_SkeletonAnimManager; } | ||||
void UnloadObjects(); | void UnloadObjects(); | ||||
CObjectEntry* FindObject(const CStrW& objname); | CActorDef* FindActorDef(const CStrW& actorName); | ||||
void DeleteObject(CObjectEntry* entry); | |||||
CObjectBase* FindObjectBase(const CStrW& objname); | CObjectEntry* FindObjectVariation(const CObjectEntry* entry, const std::vector<std::set<CStr>>& selections); | ||||
CObjectEntry* FindObjectVariation(const CStrW& objname, u8 LODLevel, const std::vector<std::set<CStr>>& selections); | |||||
CObjectEntry* FindObjectVariation(const CStrW& objname, const std::vector<std::set<CStr> >& selections); | CObjectEntry* FindObjectVariation(const CActorDef* actor, u8 LODLevel, const std::vector<std::set<CStr>>& selections); | ||||
CObjectEntry* FindObjectVariation(CObjectBase* base, const std::vector<std::set<CStr> >& selections); | |||||
/** | /** | ||||
* Get the terrain object that actors managed by this manager should be linked | * Get the terrain object that actors managed by this manager should be linked | ||||
* with (primarily for the purpose of decals) | * with (primarily for the purpose of decals) | ||||
*/ | */ | ||||
CTerrain* GetTerrain(); | CTerrain* GetTerrain(); | ||||
/** | /** | ||||
Stan: u32? | |||||
* Reload any scripts that were loaded from the given filename. | * Reload any scripts that were loaded from the given filename. | ||||
* (This is used to implement hotloading.) | * (This is used to implement hotloading.) | ||||
*/ | */ | ||||
Status ReloadChangedFile(const VfsPath& path); | Status ReloadChangedFile(const VfsPath& path); | ||||
private: | private: | ||||
CObjectEntry* FindObjectVariation(const CObjectBase* base, const std::vector<std::set<CStr>>& selections); | |||||
CMeshManager& m_MeshManager; | CMeshManager& m_MeshManager; | ||||
CSkeletonAnimManager& m_SkeletonAnimManager; | CSkeletonAnimManager& m_SkeletonAnimManager; | ||||
CSimulation2& m_Simulation; | CSimulation2& m_Simulation; | ||||
std::map<ObjectKey, CObjectEntry*> m_Objects; | // TODO: define a hash and switch to unordered_map | ||||
std::map<CStrW, CObjectBase*> m_ObjectBases; | std::map<ObjectKey, std::unique_ptr<CObjectEntry>> m_Objects; | ||||
std::unordered_map<CStrW, std::unique_ptr<CActorDef>> m_ActorDefs; | |||||
}; | }; | ||||
#endif | #endif |
Wildfire Games · Phabricator
u32?