My Project
|
Biped Animation controller. More...
#include <XFileAnimInstance.h>
Public Member Functions | |
HRESULT | InitObject (CMultiAnim *pMA, double dTimeCurrent) |
HRESULT | InitDeviceObjects () |
HRESULT | InvalidateDeviceObjects () |
HRESULT | RestoreDeviceObjects () |
void | Cleanup () |
void | LoadBipedState (const char *sTargetAnim, const Matrix4 *mxWorld) |
virtual void | Animate (double dTimeDelta) |
virtual void | AdvanceTime (double dTimeDelta) |
Draw() method will call this function automatically. | |
HRESULT | Draw (SceneState *sceneState) |
virtual CAnimInstance * | GetAnimInstance () |
![]() | |
ATTRIBUTE_DEFINE_CLASS (CAnimInstanceBase) | |
virtual int | InstallFields (CAttributeClass *pClass, bool bOverride) |
this class should be implemented if one wants to add new attribute. More... | |
ATTRIBUTE_METHOD1 (CAnimInstanceBase, GetRenderCount_s, int *) | |
ATTRIBUTE_METHOD1 (CAnimInstanceBase, SetRenderCount_s, int) | |
ATTRIBUTE_METHOD1 (CAnimInstanceBase, IsAnimIDMapEnabled_s, bool *) | |
ATTRIBUTE_METHOD1 (CAnimInstanceBase, EnableAnimIDMap_s, bool) | |
ATTRIBUTE_METHOD (CAnimInstanceBase, ResetAnimation_s) | |
ATTRIBUTE_METHOD1 (CAnimInstanceBase, GetCurrentAnimation_s, int *) | |
ATTRIBUTE_METHOD1 (CAnimInstanceBase, ShowMesh_s, DWORD) | |
ATTRIBUTE_METHOD1 (CAnimInstanceBase, GetSizeScale_s, float *) | |
ATTRIBUTE_METHOD1 (CAnimInstanceBase, SetSizeScale_s, float) | |
ATTRIBUTE_METHOD1 (CAnimInstanceBase, GetSpeedScale_s, float *) | |
ATTRIBUTE_METHOD1 (CAnimInstanceBase, SetSpeedScale_s, float) | |
ATTRIBUTE_METHOD1 (CAnimInstanceBase, IsUseGlobalTime_s, bool *) | |
ATTRIBUTE_METHOD1 (CAnimInstanceBase, SetUseGlobalTime_s, bool) | |
ATTRIBUTE_METHOD1 (CAnimInstanceBase, GetAnimFrame_s, int *) | |
ATTRIBUTE_METHOD1 (CAnimInstanceBase, SetAnimFrame_s, int) | |
ATTRIBUTE_METHOD1 (CAnimInstanceBase, IsAnimationEnabled_s, bool *) | |
ATTRIBUTE_METHOD1 (CAnimInstanceBase, EnableAnimation_s, bool) | |
virtual int | GetRenderCount () |
this function is called to update the render frame number of this object. More... | |
virtual void | SetRenderCount (int nCount) |
void | EnableAnimIDMap (bool bEnable) |
set whether the m_mapAnimIDs will be used. More... | |
bool | IsAnimIDMapEnabled () |
get whether the m_mapAnimIDs will be used.Disabled by default | |
map< int, int > * | GetAnimIDMap () |
one can use the returned map to set and get the animation ID mapping. More... | |
void | ApplyLocalTransformToVec3 (Vector3 *pOut, const Vector3 *pV) |
pOut = m_mxLocalTransform (X) pV; | |
void | ApplyLocalTransformToVec1 (float *pOut, float *pV) |
virtual void | LoadAnimation (const char *sName, float *fSpeed, bool bAppend=false) |
Play or append the specified animation. More... | |
virtual void | LoadAnimation (int nAnimID, float *fSpeed, bool bAppend=false) |
virtual void | LoadDefaultStandAnim (float *fSpeed) |
virtual void | LoadDefaultWalkAnim (float *fSpeed) |
virtual bool | HasAnimId (int nAnimID) |
check to see if the underlying model has a given animation id. More... | |
virtual int | GetCurrentAnimation () |
get the ID of the current animation. More... | |
virtual void | ResetAnimation () |
reset the animation and blending animation. More... | |
virtual void | SetModelColor (LinearColor modelColor) |
set model color, different race might have different color | |
virtual void | ShowMesh (BOOL bShow, int nIndex) |
a model might has several meshes, you can show or hide them by setting the bit field of a DWORD. More... | |
virtual void | ShowMesh (DWORD dwBitfields) |
virtual void | SetLocalTransform (Matrix4 mXForm) |
when calling draw method, the mxWorld is pre-multiplied by a location transform matrix | |
virtual void | Animate (double dTimeDelta, int nRenderNumber=0) |
animate the model. More... | |
virtual HRESULT | Draw (SceneState *sceneState, const Matrix4 *mxWorld, CParameterBlock *paramBlock=NULL) |
simply call this function to draw and advance time. More... | |
virtual void | BuildShadowVolume (SceneState *sceneState, ShadowVolume *pShadowVolume, LightParams *pLight, Matrix4 *mxWorld) |
virtual void | SetSizeScale (float fScale) |
get the size scale scale normally this is 1.0f | |
virtual float | GetSizeScale () |
get the size scale | |
virtual void | GetCurrentRadius (float *fRadius) |
normally this will read the radius of the current animation and calculate the correct size after scaling | |
virtual void | GetCurrentSize (float *fWidth, float *fDepth) |
normally this will read the radius of the current animation and calculate the correct size after scaling | |
virtual void | SetSpeedScale (float fScale) |
set the scale factor that will be pre-multiplied to the loaded model and animation the animation speed is changed, one should later call GetCurrentSpeed to update the animation's displacement speed. More... | |
virtual float | GetSpeedScale () |
Get the scale factor that will be pre-multiplied to the loaded model and animation. More... | |
virtual void | GetCurrentSpeed (float *fSpeed) |
normally this will read the move speed of the current animation and calculate the correct(scaled) speed | |
virtual void | GetSpeedOf (const char *sName, float *fSpeed) |
normally this will read the move speed of the specified animation and calculate the correct(scaled) speed | |
virtual void | SetUseGlobalTime (bool bUseGlobalTime) |
whether to use global time to sync animation. More... | |
virtual bool | IsUseGlobalTime () |
whether to use global time to sync animation. More... | |
virtual void | SetAnimFrame (int nFrame) |
set the current animation frame number relative to the beginning of current animation. More... | |
virtual int | GetAnimFrame () |
get the current animation frame number relative to the beginning of current animation. More... | |
virtual void | SetBlendingFactor (float fBlendingFactor) |
set the blending factor between the current and blend animation. More... | |
virtual bool | HasAnimation (int nAnimID) |
whether an animation id exist | |
virtual bool | HasAlphaBlendedObjects () |
return true if the object contains alpha blended render pass. More... | |
virtual int | GetValidAnimID (int nAnimID) |
look for a valid animation ID for nAnimID. More... | |
void | EnableAnimation (bool bAnimated) |
whether animation is enabled. More... | |
bool | IsAnimationEnabled () const |
![]() | |
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 | GetChildAttributeColumnCount () |
we support multi-dimensional child object. More... | |
virtual int | GetChildAttributeObjectCount (int nColumnIndex=0) |
get the number of child objects (row count) in the given column. More... | |
virtual IAttributeFields * | GetChildAttributeObject (int nRowIndex, int nColumnIndex=0) |
virtual IAttributeFields * | GetChildAttributeObject (const std::string &sName) |
get attribute by child object. 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 const std::string & | GetIdentifier () |
virtual void | SetIdentifier (const std::string &sID) |
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 CDynamicAttributeField * | GetDynamicField (const std::string &sName) |
Get a dynamic field with a given name. More... | |
virtual CDynamicAttributeField * | GetDynamicField (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... | |
CAttributeClass * | GetAttributeClass () |
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... | |
![]() | |
virtual void | Clone (IObject *obj) const |
Clone the object's contains to a pointer. More... | |
virtual IObject * | Clone () 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 IType * | GetType () const |
virtual std::string | ToString () const |
WeakPtr_type & | GetWeakReference () |
get weak reference object. More... | |
virtual int | ProcessObjectEvent (const ObjectEvent &event) |
this function is only used to backward compatibility of ParaObject:AddEvent() function. More... | |
![]() | |
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 () |
CRefCounted * | AddToAutoReleasePool () |
addref and releases the ownership sometime soon automatically (usually at the end of the current frame). More... | |
Protected Member Functions | |
void | PlayAnimation (bool bContinue) |
void | SmoothLoiter () |
HRESULT | GetAnimationIndex () |
DWORD | GetAnimIndex (char sString[]) |
HRESULT | AddCallbackKeysAndCompress (LPD3DXANIMATIONCONTROLLER pAC, LPD3DXKEYFRAMEDANIMATIONSET pAS, DWORD dwNumCallbackKeys, D3DXKEY_CALLBACK aKeys[], DWORD dwCompressionFlags, FLOAT fCompression) |
HRESULT | SetupCallbacksAndCompression () |
void | SetSounds (bool bSounds) |
virtual HRESULT | ResetTime () |
![]() | |
virtual CAttributeClass * | CreateAttributeClass () |
initialize fields | |
virtual CDynamicAttributesSet * | GetDynamicAttributes (bool bCreateIfNotExist=false) |
Protected Attributes | |
CMultiAnim * | m_pMA |
DWORD | m_dwMultiAnimIdx |
CAnimInstance * | m_pAI |
DWORD | m_dwAnimIdxLoiter |
CSoundManager * m_pSM; // pointer to sound management interface. | |
DWORD | m_dwAnimIdxWalk |
DWORD | m_dwAnimIdxJog |
DWORD | m_dwAnimIdxSwim |
DWORD | m_dwAnimIdxSpeak |
DWORD | m_dwAnimIdxAction [ACTION_NO_MAX] |
Matrix4 | m_mxOrientation |
double | m_dTimePrev |
CallbackDataTiny m_CallbackData[ 2 ]; // Data to pass to callback handler. | |
double | m_dTimeCurrent |
bool | m_bPlaySounds |
DWORD | m_dwCurrentTrack |
Matrix4 | m_mxWorld |
char | m_szASName [22] |
ID3DXAnimationCallbackHandler * m_pCallbackHandler; // pointer to callback inteface to handle callback keys. | |
char | m_szASNameTarget [22] |
![]() | |
LinearColor | m_modelColor |
color of this model | |
Matrix4 | m_mxLocalTransform |
mesh local world xform: center in the origin | |
float | m_fSizeScale |
scale parameters | |
float | m_fSpeedScale |
int | m_nRenderCount |
the last render frame count that this object is rendered. More... | |
map< int, int > | m_mapAnimIDs |
a mapping from one animation ID to another ID. More... | |
bool | m_bEnableAnimIDMap |
whether the m_mapAnimIDs will be used. More... | |
bool | m_bEnableAnimation |
whether animation is enabled, true by default. More... | |
![]() | |
WeakPtr_type | m_weak_reference |
![]() | |
int | m_refcount |
Additional Inherited Members | |
![]() | |
typedef ParaEngine::weak_ptr< IObject, IAttributeFields > | WeakPtr_type |
![]() | |
typedef ParaEngine::weak_ptr< IObject > | WeakPtr_type |
![]() | |
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... | |
Biped Animation controller.
this is a managed resource by CParaWorldAsset class please see MultiAnimationEntity assets type for more information. Each biped has a pointer to MultiAnimationEntity instance. each MultiAnimationEntity instance has many animation instances(CBipedAnimInstance). The CBipedObject class call LoadBipedState() at its frame move(Animate()) function to tell this animation instance which animation it should be playing and where to render the animation in the world coordinates. Then call Animate(). call the AdvanceTime and Draw method to render this animation. Please see the biped class for examples of using this type of asset.
Note 1: Note that assets are all managed automatically by the assets manager, the scene objects does not need to take care of memory management of this assets. Each time the biped class wants to use it, it queries it from the MultiAnimationEntity, which in turn is another type of assets in paraworld engine.
Note 2: Biped has a set of predefined actions, but any single x file may not contain all of them. So there is a tree like degradation structure. That is actions are reorganized in a tree, with each action assigned to a tree node. Upon initializing those actions, we will start from the top of the tree. If a node(action) does not find it's exact action in the x file, then its parent's action index is used. The process is recursive. So that all actions will be assigned an action index in the index file. The worst case will be all nodes has index the same as the root node which is the loiter(idle) action. The following is the predefined action. Loiter–>Walk–>jog –>swim –>jump–>jump forward/backward –>sidestep right/left –>Speak–>say good bye –>say hello –>action0–>action1–>action2~action5 –>action6–>action7~action10 There is a constriant: if the parent is default, then all its descendants are set to default regardless there is an exact animation in the file or not.
Note 2: Biped callback is generally used to play footstep sound. PLease refer to CBipedHandlerTiny, CallbackDataTiny SetupCallbacksAndCompression() only walk,jog has callbacks, other actions not AddCallbackKeysAndCompress(...) every animation needs compression. Note 2: I have removed any callbacks during animation. I have commented old code which add sounds through callback. Currently, sound is managed externally by the GUI engine.