My Project
AttributesManager.h
1 #pragma once
2 #include "IAttributeFields.h"
3 #include "ObjectFactory.h"
4 #include "unordered_ref_array.h"
5 
6 namespace ParaEngine
7 {
10  {
11  public:
14  static CAttributesManager& GetSingleton();
15  public:
18  CAttributeClass* GetAttributeClassByName(const std::string& sClassName);
20  IAttributeFields* CreateObject(const std::string& sClassName);
21 
25  bool RegisterObjectFactory(const std::string& sClassName, CObjectFactory* pObjectFactory);
26  CObjectFactory* GetObjectFactory(const std::string& sClassName);
27 
29  void PrintManual(const string& filepath);
31  void PrintObject(const string& filepath, IAttributeFields* pObj);
32 
34  // implementation of IAttributeFields
35 
37  virtual int GetAttributeClassID(){return ATTRIBUTE_CLASSID_CAttributesManager;}
39  virtual const char* GetAttributeClassName(){static const char name[] = "Attributes Manager"; return name;}
41  virtual const char* GetAttributeClassDescription(){static const char desc[] = ""; return desc;}
43  virtual int InstallFields(CAttributeClass* pClass, bool bOverride);
44 
45  ATTRIBUTE_METHOD(CAttributesManager, PrintManual_s){cls->PrintManual("attr_manual.txt");return S_OK;}
46  protected:
47  map<int, CAttributeClass*> m_classes;
48  map<std::string, CAttributeClass*> m_classNames;
49  map<std::string, CObjectFactory*> m_factory_map;
50  unordered_ref_array<CObjectFactory*> m_object_factories;
51 
53  void AddAttributeClass(int nClassID, CAttributeClass* pClass);
54 
55  private:
58  void PrintField(CParaFile& file, CAttributeField* pField, void* pObj = NULL);
61  void PrintClass(CParaFile& file, CAttributeClass* pClass, void* pObj = NULL);
62 
63  friend class CAttributeField;
64  friend class CAttributeClass;
65  friend class IAttributeFields;
66  };
67 }
virtual const char * GetAttributeClassName()
a static string, describing the attribute class object&#39;s name
Definition: AttributesManager.h:39
for a single attribute field
Definition: AttributeField.h:19
void AddAttributeClass(int nClassID, CAttributeClass *pClass)
nClassID must not exist prior to calling this function.
Definition: AttributesManager.cpp:51
an attribute class is a collection of attribute fields.
Definition: AttributeClass.h:10
virtual int InstallFields(CAttributeClass *pClass, bool bOverride)
this class should be implemented if one wants to add new attribute.
Definition: AttributesManager.cpp:34
different physics engine has different winding order.
Definition: EventBinding.h:32
a central place for managing all attributes of all classes in ParaEngine.
Definition: AttributesManager.h:9
the virtual factory class for dynamically registered object class instantiation.
Definition: ObjectFactory.h:8
virtual int GetAttributeClassID()
attribute class ID should be identical, unless one knows how overriding rules work.
Definition: AttributesManager.h:37
similar to unordered array except that it will automatically call addref/Release when obj is added/re...
Definition: unordered_ref_array.h:12
A common interface for all classes implementing IAttributeFields By implementing this class&#39;s virtual...
Definition: IAttributeFields.h:59
it presents a real or virtual file in ParaEngine.
Definition: ParaFile.h:31
virtual const char * GetAttributeClassDescription()
a static string, describing the attribute class object
Definition: AttributesManager.h:41
void PrintManual(const string &filepath)
print the manual of all classes in the manager to a text file.
Definition: AttributesManager.cpp:112
void PrintObject()
print the content of this object to a text file at temp/doc/[ClassName].txt.
Definition: IAttributeFields.cpp:115
bool RegisterObjectFactory(const std::string &sClassName, CObjectFactory *pObjectFactory)
register a factory class for creating object.
Definition: AttributesManager.cpp:90
CAttributeClass * GetAttributeClassByID(int nClassID)
Get attribute class object by ID, return NULL if it does not exists.
Definition: AttributesManager.cpp:60
IAttributeFields * CreateObject(const std::string &sClassName)
try to create object using registered factory attribute class or factory class
Definition: AttributesManager.cpp:72