149 lines
4.1 KiB
C++
149 lines
4.1 KiB
C++
#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);
|
||
}
|