DragonNest/Client/EtActionTool/CSCRRotate.cpp
2024-12-19 09:48:26 +08:00

137 lines
No EOL
3.5 KiB
C++

#include "StdAfx.h"
#include "ActionSignal.h"
#include "ActionObject.h"
#include "CSCRRotate.h"
// Override - CSignalCustomRender
CSignalCustomRender * CSCRRotate::Clone()
{
return new CSCRRotate( m_szSignalName.c_str() );
}
void CSCRRotate::Initialize()
{
m_LocalTime = 0;
m_bActivate = true;
}
void CSCRRotate::Release()
{
}
void CSCRRotate::OnSelect( bool bFirst )
{
EtVector3 vPos[2];
float fSize = 30.f;
EtVector3 vAxis = (EtVector3)m_pSignal->GetProperty(3)->GetVariableVector3();
vPos[0] = EtVector3( 0.f, 0.f, fSize ) + vAxis;
vPos[1] = EtVector3( 0.f, 0.f, -fSize ) + vAxis;
EternityEngine::DrawLine3D( vPos[0], vPos[1], 0xFFFFFF00 );
vPos[0] = EtVector3( 0.f, fSize, 0.f ) + vAxis;
vPos[1] = EtVector3( 0.f, -fSize, 0.f ) + vAxis;
EternityEngine::DrawLine3D( vPos[0], vPos[1], 0xFFFFFF00 );
vPos[0] = EtVector3( fSize, 0.f, 0.f ) + vAxis;
vPos[1] = EtVector3( -fSize, 0.f, 0.f ) + vAxis;
EternityEngine::DrawLine3D( vPos[0], vPos[1], 0xFFFFFF00 );
EtVector3 vAni = ((CActionObject*)m_pSignal->GetParent()->GetParent())->GetAniDistance();
CString szFrame;
szFrame.Format( "%.1f, %.1f, %.1f", vAni.x, vAni.y, vAni.z );
EternityEngine::DrawText2D( EtVector2( 0.f, 50.f ), szFrame );
}
void CSCRRotate::OnUnSelect()
{
}
void CSCRRotate::OnModify()
{
}
void CSCRRotate::OnProcess( LOCAL_TIME LocalTime, float fDelta )
{
//fDelta = ( LocalTime - m_LocalTime ) * 0.001f;
//m_LocalTime = LocalTime;
float fStartSpeed = m_pSignal->GetProperty(0)->GetVariableFloat();
float fEndSpeed = m_pSignal->GetProperty(1)->GetVariableFloat();
bool bLeft = m_pSignal->GetProperty(2)->GetVariableBool();
EtVector3 vAxis = (EtVector3)m_pSignal->GetProperty(3)->GetVariableVector3();
CActionObject *pObject = (CActionObject *)m_pSignal->GetParent()->GetParent();
EtAniObjectHandle hHandle = pObject->GetObjectHandle();
float fSpeed = 0.0f;
// ¼Óµµ( ȸÀü°¢·® )
if( fStartSpeed == fEndSpeed )
{
fSpeed = fStartSpeed;
}
else
{
float frame = pObject->GetCurFrame();
float w = ( frame - m_pSignal->GetStartFrame() ) / ( m_pSignal->GetEndFrame() - m_pSignal->GetStartFrame() );
//float w = 1.f / ( m_pSignal->GetEndFrame() - m_pSignal->GetStartFrame() ) * ( frame - m_pSignal->GetStartFrame() );
fSpeed = fStartSpeed + ( ( fEndSpeed - fStartSpeed ) * w );
}
// ¹æÇâ.
if( bLeft )
fSpeed = -fSpeed;
pObject->SetRotationSpeed( fSpeed );
pObject->SetAxisPosition( vAxis );
//fSpeed *= fDelta;
//CString szFrame;
////szFrame.Format( "_____________Speed : %.2f, Time : %.4f", fSpeed, fDelta );
//szFrame.Format( "_____________Frame : %.2f, Time : %.2f", frame, m_pSignal->GetEndFrame() );
//EternityEngine::DrawText2D( EtVector2( 0.f, 0.f ), szFrame );
//pObject->RotateObject( EtToRadian( fSpeed ), vAxis, true );
//pObject->RotateObject( fSpeed, vAxis, true );
// //(frame < m_pSignal->GetEndFrame()) );
//if( frame >= m_pSignal->GetEndFrame() )
// fSpeed = 0.0f;
//pObject->SetRotationSpeed( fSpeed );
//EtMatrix mat;
//EtMatrixRotationY( &mat, fSpeed );
//EtMatrixMultiply( &mat, &mat, hHandle->GetWorldMat() );
//hHandle->Update( &mat );
}
void CSCRRotate::OnInputReceive( int nReceiverState, LOCAL_TIME LocalTime, CInputReceiver *pReceiver )
{
}
void CSCRRotate::OnStartSignal()
{
CActionObject *pObject = (CActionObject *)m_pSignal->GetParent()->GetParent();
pObject->SetRotate( true );
}
void CSCRRotate::OnEndSignal()
{
CActionObject *pObject = (CActionObject *)m_pSignal->GetParent()->GetParent();
pObject->SetRotate( false );
}