Main interface into an action controller, managing fragment playback on a specific entity. More...
#include
Public Member Functions | |
virtual void | OnEvent (const SGameObjectEvent &event)=0 |
virtual void | OnAnimationEvent (ICharacterInstance *pCharacter, const AnimEventInstance &event)=0 |
virtual void | Reset ()=0 |
virtual void | Flush ()=0 |
virtual uint32 | GetTotalScopes () const =0 |
virtual void | SetScopeContext (uint32 scopeContextID, IEntity &entity, ICharacterInstance *pCharacter, const IAnimationDatabase *animDatabase)=0 |
virtual void | ClearScopeContext (uint32 scopeContextID, bool flushAnimations=true)=0 |
virtual bool | IsScopeActive (uint32 scopeID) const =0 |
virtual ActionScopes | GetActiveScopeMask () const =0 |
virtual IEntity & | GetEntity () const =0 |
virtual EntityId | GetEntityId () const =0 |
virtual IScope * | GetScope (uint32 scopeID)=0 |
virtual const IScope * | GetScope (uint32 scopeID) const =0 |
virtual uint32 | GetScopeID (const char *name) const =0 |
virtual FragmentID | GetFragID (uint32 crc) const =0 |
virtual TagID | GetGlobalTagID (uint32 crc) const =0 |
virtual TagID | GetFragTagID (FragmentID fragID, uint32 crc) const =0 |
virtual const CTagDefinition * | GetTagDefinition (FragmentID fragID) const =0 |
virtual void | Queue (IAction &action, float time=-1.0f)=0 |
virtual void | Requeue (IAction &action)=0 |
virtual void | Update (float timePassed)=0 |
Updates the action controller, should be called by the user each frame for fragments to be played. | |
virtual SAnimationContext & | GetContext ()=0 |
virtual const SAnimationContext & | GetContext () const =0 |
virtual void | Pause ()=0 |
virtual void | Resume (uint32 resumeFlags=ERF_Default)=0 |
virtual void | SetFlag (EActionControllerFlags flag, bool enable)=0 |
virtual void | SetTimeScale (float timeScale)=0 |
virtual float | GetTimeScale () const =0 |
virtual bool | IsActionPending (uint32 userToken) const =0 |
virtual bool | IsDifferent (const FragmentID fragID, const TagState &fragmentTags, const ActionScopes &scopeMask) const =0 |
virtual bool | CanInstall (const IAction &action, const ActionScopes &scopeMask, float timeStep, float &timeTillInstall) const =0 |
virtual bool | QueryDuration (IAction &action, float &fragmentDuration, float &transitionDuration) const =0 |
virtual void | SetSlaveController (IActionController &target, uint32 targetContext, bool enslave, const IAnimationDatabase *piOptionTargetDatabase)=0 |
virtual void | RegisterListener (IMannequinListener *listener)=0 |
virtual void | UnregisterListener (IMannequinListener *listener)=0 |
virtual class IProceduralContext * | FindOrCreateProceduralContext (const CryClassID &contextId)=0 |
virtual const class IProceduralContext * | FindProceduralContext (const CryClassID &contextId) const =0 |
virtual class IProceduralContext * | FindProceduralContext (const CryClassID &contextId)=0 |
virtual class IProceduralContext * | CreateProceduralContext (const CryClassID &contextId)=0 |
virtual QuatT | ExtractLocalAnimLocation (FragmentID fragID, TagState fragTags, uint32 scopeID, uint32 optionIdx)=0 |
virtual void | Release ()=0 |
virtual const SMannParameter * | GetParam (const char *paramName) const =0 |
virtual const SMannParameter * | GetParam (uint32 paramNameCRC) const =0 |
virtual bool | RemoveParam (const char *paramName)=0 |
virtual bool | RemoveParam (uint32 paramNameCRC)=0 |
virtual void | SetParam (const char *paramName, const SMannParameter ¶m)=0 |
virtual void | SetParam (const SMannParameter ¶m)=0 |
virtual void | ResetParams ()=0 |
template | |
bool | GetParam (const char *paramName, PODTYPE &value) const |
template | |
bool | GetParam (uint32 paramNameCRC, PODTYPE &value) const |
template | |
void | SetParam (const char *paramName, const PODTYPE &value) |
template | |
void | SetParam (uint32 paramNameCRC, const PODTYPE &value) |
Main interface into an action controller, managing fragment playback on a specific entity.
|
pure virtual |
Should be called when the specified character encounters an animation event
#include
#include
#include
class CAnimationEventsComponent final : public IEntityComponent
{
public:
static void ReflectType(Schematyc::CTypeDesc& desc) { /* Reflect the component GUID in here. */ }
// Override the ProcessEvent function to receive the callback whenever an animation event is triggered by any character
virtual void ProcessEvent(const SEntityEvent& event) override
{
// Check if this is the animation event
if (event.event == ENTITY_EVENT_ANIM_EVENT)
{
// Retrieve the animation event info from the first parameter
const AnimEventInstance& animEvent = reinterpret_cast(event.nParam[0]);
// Retrieve the character that this even occurred on
ICharacterInstance* pCharacter = reinterpret_cast(event.nParam[1]);
// Now forward the event to the action controller
m_pActionController->OnAnimationEvent(pCharacter, animEvent);
}
}
// Subscribe to animation events
virtual uint64 GetEventMask() const override { return BIT64(ENTITY_EVENT_ANIM_EVENT); }
protected:
// The action controller we want to forward events to
IActionController* m_pActionController;
};
|
pure virtual |
Queues the specified action / fragment for playback
#include
#include
// Creates a Mannequin action controller for the specified entity
void QueueFragment(IActionController& actionController, ICharacterInstance& character, IEntity& entity)
{
// For the sake of this example, load the controller definition from /Animations/Mannequin/MyDatabase.adb
const char* szAnimationDatabasePath = "Animations/Mannequin/MyDatabase.adb";
// Assume that we have a scope context named "MyContext", created via the Mannequin Editor
const char* szScopeContextName = "MyContext";
// Automatically queue a fragment with name "Idle", assumed to have been created via the Mannequin Editor
const char* szFragmentName = "Idle";
// Query the Mannequin interface from the game framework
IMannequin &mannequin = gEnv->pGameFramework->GetMannequinInterface();
IAnimationDatabaseManager& databaseManager = mannequin.GetAnimationDatabaseManager();
const SControllerDef& controllerDefinition = actionController.GetContext().controllerDef;
// Load the animation database from disk
const IAnimationDatabase *pAnimationDatabase = databaseManager.Load(szAnimationDatabasePath);
// Activate the specified context for this entity, and assign it to the specified character instance
const TagID contextId = controllerDefinition.m_scopeContexts.Find(szScopeContextName);
actionController.SetScopeContext(contextId, entity, &character, pAnimationDatabase);
// Query the specified fragment from the controller definition
const TagID fragmentId = controllerDefinition.m_fragmentIDs.Find(szFragmentName);
// Create the action with the specified fragment id
// Note that this should be stored, since _smart_ptr will destroy the action at the end of the scope
// Ideally this should be destroyed just before the action controller.
_smart_ptr pFragment = new TAction(0, fragmentId);
// Queue the fragment to start playing immediately on next update
actionController.Queue(*pFragment.get());
}