123
This commit is contained in:
67
CryAnimation/CryModEffMorph.cpp
Normal file
67
CryAnimation/CryModEffMorph.cpp
Normal file
@@ -0,0 +1,67 @@
|
||||
#include "stdafx.h"
|
||||
#include "CryModEffMorph.h"
|
||||
|
||||
CryModEffMorph::CryModEffMorph(/*CryModelAnimationContainer* pAnimations*/)
|
||||
// :m_pAnimations(pAnimations)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
// starts the morphing sequence
|
||||
void CryModEffMorph::StartMorph (int nMorphTargetId, const CryCharMorphParams& rParams)
|
||||
{
|
||||
m_Params = rParams;
|
||||
m_nMorphTargetId = nMorphTargetId;
|
||||
m_fTime = rParams.fStartTime;
|
||||
m_nFlags = rParams.nFlags;
|
||||
}
|
||||
|
||||
void CryModEffMorph::stop()
|
||||
{
|
||||
m_nMorphTargetId = -1;
|
||||
}
|
||||
|
||||
// advances the current time of the played animation and returns the blending factor by which this animation affects the bone pose
|
||||
void CryModEffMorph::Tick (float fDeltaTime)
|
||||
{
|
||||
if (m_nMorphTargetId < 0)
|
||||
return;
|
||||
|
||||
if (!(m_nFlags & m_Params.FLAGS_FREEZE))
|
||||
m_fTime += fDeltaTime * m_Params.fSpeed;
|
||||
|
||||
if (!(m_nFlags & m_Params.FLAGS_NO_BLENDOUT) && m_fTime > m_Params.fBlendIn + m_Params.fBlendOut + m_Params.fLength)
|
||||
// we're finished
|
||||
m_nMorphTargetId = -1;
|
||||
}
|
||||
|
||||
// returns the blending for the morph target
|
||||
float CryModEffMorph::getBlending()const
|
||||
{
|
||||
float fTimeStable = m_fTime - m_Params.fBlendIn;
|
||||
|
||||
if (fTimeStable < 0) // blending in...
|
||||
return m_fTime*m_Params.fAmplitude/m_Params.fBlendIn;
|
||||
|
||||
if (m_nFlags & m_Params.FLAGS_NO_BLENDOUT)
|
||||
return m_Params.fAmplitude; // never blending out - stable morph
|
||||
|
||||
float fTimeBlendOut = fTimeStable - m_Params.fLength;
|
||||
|
||||
if (fTimeBlendOut < 0)
|
||||
return m_Params.fAmplitude;
|
||||
|
||||
return m_Params.fAmplitude * (1 - fTimeBlendOut/m_Params.fBlendOut);
|
||||
}
|
||||
|
||||
// returns false when this morph target is inactive
|
||||
bool CryModEffMorph::isActive()const
|
||||
{
|
||||
return m_nMorphTargetId >= 0;
|
||||
}
|
||||
|
||||
// returns the morph target, or -1 if none
|
||||
int CryModEffMorph::getMorphTargetId () const
|
||||
{
|
||||
return m_nMorphTargetId;
|
||||
}
|
||||
Reference in New Issue
Block a user