1
0
forked from 0ad/0ad
0ad/source/graphics/ObjectManager.h
Ykkrosh 2ea40a23a3 VS2005 compatibility fixes and warning adjustments:
Updated DLLs.
Added DirectX headers/libraries, since they're not in the platform SDK.
Fixed invalid STL iterator usage.
Disabled STL in stack trace, since it breaks.
Added comments for some reported warnings.
Corrected some apparent off-by-one errors.
Defined strlen_s to strnlen.
Probably broke pre-beta2 versions of VC2005.

This was SVN commit r2454.
2005-07-02 21:42:55 +00:00

88 lines
2.3 KiB
C++
Executable File

#ifndef _OBJECTMANAGER_H
#define _OBJECTMANAGER_H
#include <vector>
#include <map>
#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<CObjectManager>
{
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<ObjectKey, CObjectEntry*> m_Objects;
std::map<CStr, CObjectBase*> 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, const CObjectBase::variation_key& vars, CObjectBase::variation_key::const_iterator vars_it);
CObjectEntry* FindObjectVariation(CObjectBase* base, const CObjectBase::variation_key& vars, CObjectBase::variation_key::const_iterator vars_it);
// Get all names, quite slowly. (Intended only for ScEd.)
void GetAllObjectNames(std::vector<CStr>& names);
//CBaseEntity* m_SelectedEntity;
void SetSelectedEntity(CBaseEntity* thing);
void SetSelectedObject(CObjectEntry* thing);
std::vector<SObjectType> m_ObjectTypes;
};
// Global comparison operator
bool operator< (const CObjectManager::ObjectKey& a, const CObjectManager::ObjectKey& b);
#endif