123
This commit is contained in:
135
CryAnimation/CryCharManager.h
Normal file
135
CryAnimation/CryCharManager.h
Normal file
@@ -0,0 +1,135 @@
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// CryEngine Source code
|
||||
//
|
||||
// File:CryCharManager.h
|
||||
// Implementation of CryCharManager class
|
||||
//
|
||||
// History:
|
||||
// August 16, 2002: Created by Sergiy Migdalskiy <sergiy@crytek.de>
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _CRY_CHAR_MANAGER_HEADER_
|
||||
#define _CRY_CHAR_MANAGER_HEADER_
|
||||
|
||||
#include <ICryAnimation.h>
|
||||
#include "AnimObjectManager.h"
|
||||
|
||||
class CControllerManager;
|
||||
class CryCharInstance;
|
||||
class CAnimObjectManager;
|
||||
|
||||
#include "CryCharBody.h"
|
||||
|
||||
extern float g_YLine;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// This class contains a list of character bodies and list of character instances.
|
||||
// On attempt to create same character second time only new instance will be created.
|
||||
// Only this class can create actual characters.
|
||||
class CryCharManager : public ICryCharManager
|
||||
{
|
||||
public:
|
||||
CryCharManager (ISystem * pSystem);
|
||||
~CryCharManager ();
|
||||
|
||||
// Loads a cgf and the corresponding caf file and creates an animated object,
|
||||
// or returns an existing object.
|
||||
virtual ICryCharInstance * MakeCharacter(const char * szFilename, unsigned nFlags);
|
||||
|
||||
// loads the character model (which is ref-counted, so you must assign it to an autopointer)
|
||||
virtual ICryCharModel* LoadModel(const char* szFileName, unsigned nFlags = 0);
|
||||
|
||||
// Reduces reference counter for object and deletes object if counter is 0
|
||||
virtual void RemoveCharacter (ICryCharInstance * pCryCharInstance, unsigned nFlags);
|
||||
|
||||
// Deletes itself
|
||||
virtual void Release();
|
||||
|
||||
// returns the controller manager used by this character manager
|
||||
CControllerManager * GetControllerManager();
|
||||
|
||||
void RegisterBody (CryCharBody*);
|
||||
void UnregisterBody (CryCharBody*);
|
||||
|
||||
// puts the size of the whole subsystem into this sizer object, classified,
|
||||
// according to the flags set in the sizer
|
||||
void GetMemoryUsage(class ICrySizer* pSizer)const;
|
||||
|
||||
//! Executes a script command
|
||||
//! Returns true if the command was executed, or false if not
|
||||
//! All the possible values for nCommand are in the CryAnimationScriptCommands.h
|
||||
//! file in the CryAnimationScriptCommandEnum enumeration. All the parameter/result
|
||||
//! structures are also there.
|
||||
bool ExecScriptCommand (int nCommand, void* pParams = NULL, void* pResult = NULL);
|
||||
|
||||
// should be called every frame
|
||||
void Update();
|
||||
|
||||
//! Cleans up all resources - currently deletes all bodies and characters (even if there are references on them)
|
||||
virtual void ClearResources();
|
||||
|
||||
//! The specified animation will be unloaded from memory; it will be loaded back upon the first invokation (via StartAnimation())
|
||||
void UnloadAnimation (const char* szFileName);
|
||||
|
||||
//! Starts loading the specified animation. fWhenRequired is the timeout, in seconds, from the current moment,
|
||||
//! when the animation data will actually be needed
|
||||
void StartLoadAnimation (const char* szFileName, float fWhenRequired);
|
||||
|
||||
//! Unloads animations older than the given number of frames
|
||||
void UnloadOldAnimations (int numFrames);
|
||||
|
||||
// returns statistics about this instance of character animation manager
|
||||
// don't call this too frequently
|
||||
virtual void GetStatistics(Statistics& rStats);
|
||||
|
||||
//! Locks all models in memory
|
||||
void LockResources();
|
||||
|
||||
//! Unlocks all models in memory
|
||||
void UnlockResources();
|
||||
protected:
|
||||
|
||||
// destroys all characters
|
||||
void CleanupInstances();
|
||||
|
||||
// asserts the cache validity
|
||||
void ValidateBodyCache();
|
||||
|
||||
// deletes all registered bodies; the character instances got deleted even if they're still referenced
|
||||
void CleanupBodyCache();
|
||||
|
||||
// Finds a cached or creates a new CryCharBody instance and returns it
|
||||
// returns NULL if the construction failed
|
||||
CryCharBody* FetchBody (const string& strFileName);
|
||||
|
||||
// locks or unlocks the given body if needed, depending on the hint and console variables
|
||||
void DecideModelLockStatus(CryCharBody* pBody, unsigned nHints);
|
||||
void ClearDecals();
|
||||
private:
|
||||
CControllerManager * m_pControllerManager;
|
||||
// manager of animated objects.
|
||||
CAnimObjectManager * m_pAnimObjectManager;
|
||||
|
||||
class OrderByFileName
|
||||
{
|
||||
public:
|
||||
bool operator () (const CryCharBody* pLeft, const CryCharBody* pRight);
|
||||
bool operator () (const string& strLeft, const CryCharBody* pRight);
|
||||
bool operator () (const CryCharBody* pLeft, const string& strRight);
|
||||
};
|
||||
// this is the set of all existing instances of crycharbody
|
||||
typedef std::vector<CryCharBody*> CryCharBodyCache;
|
||||
CryCharBodyCache m_arrBodyCache;
|
||||
|
||||
// temporary locked objects with LockResources
|
||||
CryCharBody_AutoArray m_arrTempLock;
|
||||
|
||||
//typedef std::vector<CryCharBody_AutoPtr> CryCharBodyAutoArray;
|
||||
// this is the array of bodies that are kept locked even if the number of characters drops to zero
|
||||
CryCharBody_AutoSet m_setLockedBodies;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user