void CActionScope::InstallProceduralClip(const SProceduralEntry &proc, int layer, const SAnimBlend &blend, float duration) { SProcSequencer &procSeq = m_procSequencers[layer]; if (procSeq.proceduralClip) { procSeq.proceduralClip->OnExit(blend.duration); procSeq.proceduralClip.reset(); } if (proc.type != 0) { CryCreateClassInstance<IProceduralClip>(proc.typeString.c_str(), procSeq.proceduralClip); if (procSeq.proceduralClip) { const char *contextName = procSeq.proceduralClip->GetContextName(); if (contextName) { IProceduralContext *context = m_actionController.FindOrCreateProceduralContext(contextName); procSeq.proceduralClip->SetContext(context); } IEntity* pEntity = gEnv->pEntitySystem->GetEntity(GetEntityId()); // TODO: Handle invalid entity! procSeq.proceduralClip->Initialise(*pEntity, *GetCharInst(), *this, *m_pAction); procSeq.proceduralClip->INTERNAL_OnEnter(blend.duration, duration, *((SProceduralParams*)&proc.animRef)); } } }
void CActionScope::InstallProceduralClip(const SProceduralEntry &proc, int layer, const SAnimBlend &blend, float duration) { if ((BIT(layer) & m_mutedProcLayerMask) == BIT(layer)) { return; } SProcSequencer &procSeq = m_procSequencers[layer]; if (procSeq.proceduralClip) { procSeq.proceduralClip->OnExit(blend.duration); procSeq.proceduralClip.reset(); } const bool isNone = proc.IsNoneType(); if (!isNone) { CRY_ASSERT(gEnv && gEnv->pGame && gEnv->pGame->GetIGameFramework()); static IProceduralClipFactory &s_proceduralClipFactory = gEnv->pGame->GetIGameFramework()->GetMannequinInterface().GetProceduralClipFactory(); procSeq.proceduralClip = s_proceduralClipFactory.CreateProceduralClip(proc.typeNameHash); if (procSeq.proceduralClip) { const char* contextName = procSeq.proceduralClip->GetContextName(); if (contextName) { IProceduralContext* context = m_actionController.FindOrCreateProceduralContext(contextName); procSeq.proceduralClip->SetContext(context); } IEntity* pEntity = gEnv->pEntitySystem->GetEntity(GetEntityId()); // TODO: Handle invalid entity! procSeq.proceduralClip->Initialise(*pEntity, *GetCharInst(), *this, *m_pAction); procSeq.proceduralClip->INTERNAL_OnEnter(blend.duration, duration, proc.pProceduralParams); } } }