forked from metin2/client
Solution refactoring and restructuring, removed Boost dependency, removed unused tools
This commit is contained in:
148
src/EterGrnLib/ModelInstanceMotion.cpp
Normal file
148
src/EterGrnLib/ModelInstanceMotion.cpp
Normal file
@ -0,0 +1,148 @@
|
||||
#include "StdAfx.h"
|
||||
#include "ModelInstance.h"
|
||||
#include "Model.h"
|
||||
|
||||
void CGrannyModelInstance::CopyMotion(CGrannyModelInstance * pModelInstance, bool bIsFreeSourceControl)
|
||||
{
|
||||
if (!pModelInstance->IsMotionPlaying())
|
||||
return;
|
||||
|
||||
if (m_pgrnCtrl)
|
||||
GrannyFreeControl(m_pgrnCtrl);
|
||||
|
||||
float localTime = GetLocalTime();
|
||||
m_pgrnAni = pModelInstance->m_pgrnAni;
|
||||
m_pgrnCtrl = GrannyPlayControlledAnimation(localTime, m_pgrnAni, m_pgrnModelInstance);
|
||||
|
||||
if (!m_pgrnCtrl)
|
||||
return;
|
||||
|
||||
GrannySetControlSpeed(m_pgrnCtrl, GrannyGetControlSpeed(pModelInstance->m_pgrnCtrl));
|
||||
GrannySetControlLoopCount(m_pgrnCtrl, GrannyGetControlLoopCount(pModelInstance->m_pgrnCtrl));
|
||||
|
||||
GrannySetControlEaseIn(m_pgrnCtrl, true);
|
||||
GrannySetControlEaseOut(m_pgrnCtrl, false);
|
||||
|
||||
GrannySetControlRawLocalClock(m_pgrnCtrl, GrannyGetControlRawLocalClock(pModelInstance->m_pgrnCtrl));
|
||||
|
||||
GrannyFreeControlOnceUnused(m_pgrnCtrl);
|
||||
|
||||
if (bIsFreeSourceControl)
|
||||
{
|
||||
GrannyFreeControl(pModelInstance->m_pgrnCtrl);
|
||||
pModelInstance->m_pgrnCtrl = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
bool CGrannyModelInstance::IsMotionPlaying()
|
||||
{
|
||||
if (!m_pgrnCtrl)
|
||||
return false;
|
||||
|
||||
if (GrannyControlIsComplete(m_pgrnCtrl))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CGrannyModelInstance::SetMotionPointer(const CGrannyMotion * pMotion, float blendTime, int loopCount, float speedRatio)
|
||||
{
|
||||
// TEST
|
||||
if (!m_pgrnWorldPoseReal)
|
||||
return;
|
||||
// END_OF_TEST
|
||||
|
||||
granny_model_instance * pgrnModelInstance = m_pgrnModelInstance;
|
||||
if (!pgrnModelInstance)
|
||||
return;
|
||||
|
||||
float localTime = GetLocalTime();
|
||||
|
||||
bool isFirst=false;
|
||||
if (m_pgrnCtrl)
|
||||
{
|
||||
//float durationLeft = GrannyGetControlDurationLeft(m_pgrnCtrl);
|
||||
//float easeOutTime = (blendTime < durationLeft) ? blendTime : durationLeft;
|
||||
//float oldCtrlFinishTime = GrannyEaseControlOut(m_pgrnCtrl, blendTime); //easeOutTime);
|
||||
GrannySetControlEaseOutCurve(m_pgrnCtrl, localTime, localTime + blendTime, 1.0f, 1.0f, 0.0f, 0.0f);
|
||||
|
||||
GrannySetControlEaseIn(m_pgrnCtrl, false);
|
||||
GrannySetControlEaseOut(m_pgrnCtrl, true);
|
||||
|
||||
//Tracef("easeOut %f\n", easeOutTime);
|
||||
GrannyCompleteControlAt(m_pgrnCtrl, localTime + blendTime);
|
||||
//GrannyCompleteControlAt(m_pgrnCtrl, oldCtrlFinishTime);
|
||||
//GrannyCompleteControlAt(m_pgrnCtrl, localTime);
|
||||
GrannyFreeControlIfComplete(m_pgrnCtrl);
|
||||
}
|
||||
else
|
||||
{
|
||||
isFirst=true;
|
||||
}
|
||||
|
||||
m_pgrnAni = pMotion->GetGrannyAnimationPointer();
|
||||
m_pgrnCtrl = GrannyPlayControlledAnimation(localTime, m_pgrnAni, pgrnModelInstance);
|
||||
if (!m_pgrnCtrl)
|
||||
return;
|
||||
|
||||
GrannySetControlSpeed(m_pgrnCtrl, speedRatio);
|
||||
GrannySetControlLoopCount(m_pgrnCtrl, loopCount);
|
||||
|
||||
if (isFirst)
|
||||
{
|
||||
GrannySetControlEaseIn(m_pgrnCtrl, false);
|
||||
GrannySetControlEaseOut(m_pgrnCtrl, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
GrannySetControlEaseIn(m_pgrnCtrl, true);
|
||||
GrannySetControlEaseOut(m_pgrnCtrl, false);
|
||||
if (blendTime > 0.0f)
|
||||
GrannySetControlEaseInCurve(m_pgrnCtrl, localTime, localTime + blendTime, 0.0f, 0.0f, 1.0f, 1.0f);
|
||||
}
|
||||
|
||||
//GrannyEaseControlIn(m_pgrnCtrl, blendTime, false);
|
||||
GrannyFreeControlOnceUnused(m_pgrnCtrl);
|
||||
//Tracef("easeIn %f\n", blendTime);
|
||||
}
|
||||
|
||||
void CGrannyModelInstance::ChangeMotionPointer(const CGrannyMotion* pMotion, int loopCount, float speedRatio)
|
||||
{
|
||||
granny_model_instance * pgrnModelInstance = m_pgrnModelInstance;
|
||||
if (!pgrnModelInstance)
|
||||
return;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD> <20>պκ<D5BA><CEBA><EFBFBD> <20><>ŵ <20>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> LocalTime <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. - [levites]
|
||||
float fSkipTime = 0.3f;
|
||||
float localTime = GetLocalTime() - fSkipTime;
|
||||
|
||||
if (m_pgrnCtrl)
|
||||
{
|
||||
GrannySetControlEaseIn(m_pgrnCtrl, false);
|
||||
GrannySetControlEaseOut(m_pgrnCtrl, false);
|
||||
GrannyCompleteControlAt(m_pgrnCtrl, localTime);
|
||||
GrannyFreeControlIfComplete(m_pgrnCtrl);
|
||||
}
|
||||
|
||||
m_pgrnAni = pMotion->GetGrannyAnimationPointer();
|
||||
m_pgrnCtrl = GrannyPlayControlledAnimation(localTime, m_pgrnAni, pgrnModelInstance);
|
||||
if (!m_pgrnCtrl)
|
||||
return;
|
||||
|
||||
GrannySetControlSpeed(m_pgrnCtrl, speedRatio);
|
||||
GrannySetControlLoopCount(m_pgrnCtrl, loopCount);
|
||||
GrannySetControlEaseIn(m_pgrnCtrl, false);
|
||||
GrannySetControlEaseOut(m_pgrnCtrl, false);
|
||||
|
||||
GrannyFreeControlOnceUnused(m_pgrnCtrl);
|
||||
}
|
||||
|
||||
void CGrannyModelInstance::SetMotionAtEnd()
|
||||
{
|
||||
if (!m_pgrnCtrl)
|
||||
return;
|
||||
|
||||
//Tracef("%f\n", endingTime);
|
||||
float endingTime = GrannyGetControlLocalDuration(m_pgrnCtrl);
|
||||
GrannySetControlRawLocalClock(m_pgrnCtrl, endingTime);
|
||||
}
|
Reference in New Issue
Block a user