My Project
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE > Class Template Reference

AssetManager manages a set of asset entities of a certain type. More...

#include <AssetManager.h>

Inheritance diagram for ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE >:
ParaEngine::IAttributeFields ParaEngine::IObject ParaEngine::CRefCounted

Public Types

typedef AssetManager< IDTYPE, ClassImpType, ETYPE > MyType_t
 
typedef std::map< std::string, ETYPE * > AssetItemsNameMap_t
 
typedef std::map< AssetKey, ETYPE * > AssetItemsSet_t
 
- Public Types inherited from ParaEngine::IAttributeFields
typedef ParaEngine::weak_ptr< IObject, IAttributeFieldsWeakPtr_type
 
- Public Types inherited from ParaEngine::IObject
typedef ParaEngine::weak_ptr< IObjectWeakPtr_type
 

Public Member Functions

 ATTRIBUTE_DEFINE_CLASS (AssetManager)
 
virtual IAttributeFieldsGetChildAttributeObject (const std::string &sName)
 get attribute by child object. More...
 
virtual int GetChildAttributeObjectCount (int nColumnIndex=0)
 get the number of child objects (row count) in the given column. More...
 
virtual int GetChildAttributeColumnCount ()
 we support multi-dimensional child object. More...
 
virtual IAttributeFieldsGetChildAttributeObject (int nRowIndex, int nColumnIndex=0)
 
virtual const std::string & GetIdentifier ()
 
virtual void SetIdentifier (const std::string &sName)
 
virtual void Cleanup ()
 delete all asset item from memory. More...
 
void GetLowerCaseString (std::string &outNameLowered, const AssetKey &key)
 get the lower cased key string.
 
virtual bool DeleteEntity (ETYPE *entity)
 decrease the reference count on the entity, and if it is negative, the asset will be unloaded. More...
 
void DeleteByName (const std::string &name)
 delete the object by user specified name. More...
 
IDTYPE * GetByName (const std::string &name)
 check if there is a object with a specified name, and return the pointer to it. More...
 
ETYPE * get (const AssetKey &key)
 check if there is a object with a specified asset key, and return the pointer to it. More...
 
IDTYPE * NewEntity (const AssetKey &key)
 just create the entity instance without adding to the manager. More...
 
bool AddEntity (const std::string &name, IDTYPE *pEntity)
 insert entity to the manager. More...
 
pair< IDTYPE *, bool > CreateEntity (const string &name, const AssetKey &key)
 Create a new entity object and add it to the manager. More...
 
IDTYPE * GetEntity (const string &name)
 get the entity by its entity key name
 
void LoadAsset ()
 initialize all assets created so far to accelerate loading during game play. More...
 
void UnloadAsset ()
 uninitialize all assets created so far to save some memory
 
void GarbageCollectAll ()
 Garbage Collect(free resources of) all unused entity. More...
 
bool CheckRefresh (const std::string &sEntityName)
 check if the entity exist, if so call Refresh(). More...
 
virtual int PrintToFile (CParaFile *pOutputFile)
 print all asset file to a given file. More...
 
virtual void InitDeviceObjects ()
 
virtual void RestoreDeviceObjects ()
 
virtual void InvalidateDeviceObjects ()
 
virtual void DeleteDeviceObjects ()
 
virtual void RendererRecreated ()
 callback of listening the event that renderer was recreated on Android/WP8 all opengl related id has already become invalid at this time, no need to release them, just recreate them all in this function.
 
- Public Member Functions inherited from ParaEngine::IAttributeFields
virtual int GetAttributeClassID ()
 attribute class ID should be identical, unless one knows how overriding rules work. More...
 
virtual const char * GetAttributeClassName ()
 a static string, describing the attribute class object's name
 
virtual const char * GetAttributeClassDescription ()
 a static string, describing the attribute class object
 
virtual int InstallFields (CAttributeClass *pClass, bool bOverride)
 this class should be implemented if one wants to add new attribute. More...
 
 ATTRIBUTE_METHOD1 (IAttributeFields, GetName_s, const char **)
 
 ATTRIBUTE_METHOD1 (IAttributeFields, SetName_s, const char *)
 
 ATTRIBUTE_METHOD (IAttributeFields, PrintObject_s)
 
 ATTRIBUTE_METHOD (IAttributeFields, AddRef_s)
 
 ATTRIBUTE_METHOD1 (IAttributeFields, GetRefCount_s, int *)
 
 ATTRIBUTE_METHOD1 (IAttributeFields, SetTime_s, int)
 
 ATTRIBUTE_METHOD1 (IAttributeFields, GetTime_s, int *)
 
 ATTRIBUTE_METHOD (IAttributeFields, Release_s)
 
virtual bool IsModified ()
 whether some of the fields are modified.It is up to the implementation class to provide this functionality if necessary. More...
 
virtual void SetModified (bool bModified)
 set whether any field has been modified. More...
 
virtual bool ValidateFields ()
 validate all fields and return true if validation passed. More...
 
virtual string GetValidationMessage ()
 get the recent validation message due to the most recent call to ValidateFields()
 
virtual bool ResetField (int nFieldID)
 Reset the field to its initial or default value. More...
 
virtual bool InvokeEditor (int nFieldID, const std::string &sParameters)
 Invoke an (external) editor for a given field. More...
 
virtual bool AddChildAttributeObject (IAttributeFields *pChild, int nRowIndex=-1, int nColumnIndex=0)
 add child object. More...
 
virtual void * QueryObjectByName (const std::string &sObjectType)
 convert to object of a given type. More...
 
virtual void * QueryObject (int nObjectType)
 convert to object of a given type. More...
 
virtual int GetTime ()
 get the current local time in case it is animated in milli seconds frames. More...
 
virtual void SetTime (int nTime)
 
virtual CDynamicAttributeFieldGetDynamicField (const std::string &sName)
 Get a dynamic field with a given name. More...
 
virtual CDynamicAttributeFieldGetDynamicField (int nIndex)
 Get a dynamic field with a given index. More...
 
virtual const char * GetDynamicFieldNameByIndex (int nIndex)
 get field name by index
 
virtual int GetDynamicFieldCount ()
 how many dynamic field this object currently have. More...
 
virtual int SetDynamicField (const std::string &sName, const CVariable &value)
 set a dynamic field with a given name. More...
 
virtual int AddDynamicField (const std::string &sName, ATTRIBUTE_FIELDTYPE dwType)
 add dynamic field and return field index
 
virtual void RemoveAllDynamicFields ()
 remove all dynamic fields
 
virtual int SaveDynamicFieldsToString (std::string &output)
 save only text dynamic fields to fieldname = value text strings. More...
 
virtual int LoadDynamicFieldsFromString (const std::string &input)
 load only text dynamic fields from string More...
 
CAttributeClassGetAttributeClass ()
 get the main attribute class object. More...
 
void PrintObject ()
 print the content of this object to a text file at temp/doc/[ClassName].txt. More...
 
- Public Member Functions inherited from ParaEngine::IObject
virtual void Clone (IObject *obj) const
 Clone the object's contains to a pointer. More...
 
virtual IObjectClone () const
 Clone the object's contains and return a pointer to the newly created object. More...
 
virtual bool Equals (const IObject *obj) const
 Compare the object with another object. More...
 
virtual const ITypeGetType () const
 
virtual std::string ToString () const
 
WeakPtr_typeGetWeakReference ()
 get weak reference object. More...
 
virtual int ProcessObjectEvent (const ObjectEvent &event)
 this function is only used to backward compatibility of ParaObject:AddEvent() function. More...
 
- Public Member Functions inherited from ParaEngine::CRefCounted
void addref () const
 add reference count of the object. More...
 
bool delref () const
 decrease reference count of the object. More...
 
int GetRefCount () const
 get the reference count
 
virtual int Release ()
 
CRefCountedAddToAutoReleasePool ()
 addref and releases the ownership sometime soon automatically (usually at the end of the current frame). More...
 

Static Public Member Functions

static MyType_tGetInstance ()
 
- Static Public Member Functions inherited from ParaEngine::IAttributeFields
static HRESULT GetAttributeClassID_s (IAttributeFields *cls, int *p1)
 
static HRESULT GetAttributeClassName_s (IAttributeFields *cls, const char **p1)
 
static bool OpenWithDefaultEditor (const char *sFilename, bool bWaitOnReturn=false)
 Open a given file with the default registered editor in the game engine. More...
 

Public Attributes

std::string m_sName
 identifier
 
AssetItemsNameMap_t m_names
 human readable name of asset object, which can be used as key to retrieve entity from its manager Internally we use the key object to uniquely identify an assset.SIdentifer can be nil.
 
AssetItemsSet_t m_items
 A set of all asset entities.
 
AssetItemsNameMap_t m_lowercase_item_maps
 mapping from lower cased AssetKey to asset entity.
 

Additional Inherited Members

- Protected Member Functions inherited from ParaEngine::IAttributeFields
virtual CAttributeClassCreateAttributeClass ()
 initialize fields
 
virtual CDynamicAttributesSetGetDynamicAttributes (bool bCreateIfNotExist=false)
 
- Protected Attributes inherited from ParaEngine::IObject
WeakPtr_type m_weak_reference
 
- Protected Attributes inherited from ParaEngine::CRefCounted
int m_refcount
 

Detailed Description

template<class IDTYPE, class ClassImpType = IDTYPE, class ETYPE = AssetEntity>
class ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE >

AssetManager manages a set of asset entities of a certain type.

IDTYPE must be AssetEntity derived class. ClassImpType is the actually implement of the type. We can access the singleton via AssetManager<type>::GetInstance()

Member Function Documentation

§ AddEntity()

template<class IDTYPE, class ClassImpType = IDTYPE, class ETYPE = AssetEntity>
bool ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE >::AddEntity ( const std::string &  name,
IDTYPE *  pEntity 
)
inline

insert entity to the manager.

return true if succeed.

§ CheckRefresh()

template<class IDTYPE, class ClassImpType = IDTYPE, class ETYPE = AssetEntity>
bool ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE >::CheckRefresh ( const std::string &  sEntityName)
inline

check if the entity exist, if so call Refresh().

Parameters
sEntityNamethe asset entity key
bLazyLoadif true it will be lazy loaded.

§ Cleanup()

template<class IDTYPE, class ClassImpType = IDTYPE, class ETYPE = AssetEntity>
virtual void ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE >::Cleanup ( )
inlinevirtual

delete all asset item from memory.

They can never be used again. instead, they must be recreated to use.

clean up items

Reimplemented in ParaEngine::EffectManager.

§ CreateEntity()

template<class IDTYPE, class ClassImpType = IDTYPE, class ETYPE = AssetEntity>
pair<IDTYPE*, bool> ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE >::CreateEntity ( const string &  name,
const AssetKey key 
)
inline

Create a new entity object and add it to the manager.

an asset entity will only be created if there is no asset which the same key. we will assign a new named asset reference, even if the object has been created before thus we can assign different names to the same asset object. This is useful in scripting.

Parameters
namea human readable name associated with the object. it can be "", in which case it does not have a human readable name.
keythe asset key object to be used for creating this asset.
Returns
: pair.first always contains the object pointer whose asset key is key. if pair.second is true, the object is newly created; otherwise, it is already been created before. ` *
See also
: get(std::string name)

we will assign a new named asset reference, even if the object has been created elsewhere thus we can assign different names to the same object

return false if the object already exists

§ DeleteByName()

template<class IDTYPE, class ClassImpType = IDTYPE, class ETYPE = AssetEntity>
void ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE >::DeleteByName ( const std::string &  name)
inline

delete the object by user specified name.

CAUTION: be sure that there is no other asset referencing this named asset before calling this function. because the point to the asset will be invalid after this call.So use UnloadAsset(), if one just wants to temporarily remove the asset.

§ DeleteEntity()

template<class IDTYPE, class ClassImpType = IDTYPE, class ETYPE = AssetEntity>
virtual bool ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE >::DeleteEntity ( ETYPE *  entity)
inlinevirtual

decrease the reference count on the entity, and if it is negative, the asset will be unloaded.

CAUTION: be sure that there is no named asset referencing this asset before calling this function. because the point to the asset will be invalid after this call.So use UnloadAsset(), if one just wants to temporarily remove the asset. return: return true, if the reference count is negative and that object is deleted from the memory, otherwise false.

Note
: it does not delete name mapping. To delete a named entity, please use DeleteByName()

Reimplemented in ParaEngine::EffectManager.

§ GarbageCollectAll()

template<class IDTYPE, class ClassImpType = IDTYPE, class ETYPE = AssetEntity>
void ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE >::GarbageCollectAll ( )
inline

Garbage Collect(free resources of) all unused entity.

§ get()

template<class IDTYPE, class ClassImpType = IDTYPE, class ETYPE = AssetEntity>
ETYPE* ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE >::get ( const AssetKey key)
inline

check if there is a object with a specified asset key, and return the pointer to it.

Returns
: a pointer to the object is returned if found, otherwise, return NULL.

§ GetByName()

template<class IDTYPE, class ClassImpType = IDTYPE, class ETYPE = AssetEntity>
IDTYPE* ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE >::GetByName ( const std::string &  name)
inline

check if there is a object with a specified name, and return the pointer to it.

Returns
: a pointer to the object is returned if found, otherwise, return NULL.

§ GetChildAttributeColumnCount()

template<class IDTYPE, class ClassImpType = IDTYPE, class ETYPE = AssetEntity>
virtual int ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE >::GetChildAttributeColumnCount ( )
inlinevirtual

we support multi-dimensional child object.

by default objects have only one column.

Reimplemented from ParaEngine::IAttributeFields.

§ GetChildAttributeObject()

template<class IDTYPE, class ClassImpType = IDTYPE, class ETYPE = AssetEntity>
virtual IAttributeFields* ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE >::GetChildAttributeObject ( const std::string &  sName)
inlinevirtual

get attribute by child object.

used to iterate across the attribute field hierarchy.

Reimplemented from ParaEngine::IAttributeFields.

§ GetChildAttributeObjectCount()

template<class IDTYPE, class ClassImpType = IDTYPE, class ETYPE = AssetEntity>
virtual int ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE >::GetChildAttributeObjectCount ( int  nColumnIndex = 0)
inlinevirtual

get the number of child objects (row count) in the given column.

please note different columns can have different row count.

Reimplemented from ParaEngine::IAttributeFields.

§ LoadAsset()

template<class IDTYPE, class ClassImpType = IDTYPE, class ETYPE = AssetEntity>
void ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE >::LoadAsset ( )
inline

initialize all assets created so far to accelerate loading during game play.

§ NewEntity()

template<class IDTYPE, class ClassImpType = IDTYPE, class ETYPE = AssetEntity>
IDTYPE* ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE >::NewEntity ( const AssetKey key)
inline

just create the entity instance without adding to the manager.

the caller is responsible to delete the entity and manage device lost. Use CreateEntity for manager managed entity.

§ PrintToFile()

template<class IDTYPE, class ClassImpType = IDTYPE, class ETYPE = AssetEntity>
virtual int ParaEngine::AssetManager< IDTYPE, ClassImpType, ETYPE >::PrintToFile ( CParaFile pOutputFile)
inlinevirtual

print all asset file to a given file.

Each asset is on a single line, in the following format: [AssetFileName]

Parameters
pOutputFileto which file object the result is written to
Returns
: the number of results are returned.

The documentation for this class was generated from the following file: