示例#1
0
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));
        }
    }
}
示例#2
0
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);
		}
	}
}