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

185 lines
4.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "stdafx.h"
#include "RTToolActorProcessor.h"
#include "RTCutSceneRenderer.h"
#include "DnCutSceneActor.h"
#include "DnCutSceneActProp.h"
#include "EtWorldSector.h"
#include "Fade.h"
#include <wx/wx.h>
#include "ToolData.h"
CRTToolActorProcessor::CRTToolActorProcessor(void) : m_pFade( NULL )
{
}
CRTToolActorProcessor::~CRTToolActorProcessor(void)
{
}
void CRTToolActorProcessor::AddObjectToPlay( S_CS_ACTOR_INFO* pNewObject )
{
ICustomActorProcessor::AddObjectToPlay( pNewObject );
m_vlPrevFrame.push_back( 0.0f );
m_vlPrevActionIndex.push_back( -1 );
}
void CRTToolActorProcessor::AddPropToPlay( S_CS_PROP_INFO* pPropInfo )
{
ICustomActorProcessor::AddPropToPlay( pPropInfo );
CEtWorldSector* pSector = m_pWorld->GetSector( 0.0f, 0.0f );
CEtWorldProp* pProp = pSector->GetPropFromCreateUniqueID( pPropInfo->iPropID );
_ASSERT( pProp );
if( pProp )
m_vlpProps.push_back( pPropInfo );
}
void CRTToolActorProcessor::ShowSubtitle( const wchar_t* pSubtitle )
{
TOOL_DATA.GetRenderer()->ShowSubtitle( pSubtitle );
}
void CRTToolActorProcessor::HideSubtitle( void )
{
TOOL_DATA.GetRenderer()->HideSubtitle();
}
void CRTToolActorProcessor::SetPropAction( CEtWorldProp* pProp, const char* pActionName, LOCAL_TIME AbsoluteTime, float fFrame )
{
CDnCutSceneActProp* pActProp = static_cast<CDnCutSceneActProp*>(pProp);
pActProp->SetAction( pActionName, 0.0f, 0.0f );
}
void CRTToolActorProcessor::ShowProp( CEtWorldProp* pProp, bool bShow )
{
CDnCutSceneWorldProp* pWorldProp = static_cast<CDnCutSceneWorldProp*>(pProp);
pWorldProp->Show( bShow );
}
void CRTToolActorProcessor::CalcAniDistance( S_CS_ACTOR_INFO* pActorInfo, float fCurFrame, float fPrevFrame, EtVector3& DistVec )
{
if( NULL == pActorInfo )
return;
if( pActorInfo->strNowActionName.empty() )
return;
pActorInfo->hObject->CalcAniDistance( pActorInfo->vlAniIndex.at(pActorInfo->iNowAniIndex),
fCurFrame, fPrevFrame, DistVec );
}
int CRTToolActorProcessor::GetActionIndex( int iActorIndex, const char* pActionName )
{
if( (int)m_vlpActors.size() < iActorIndex )
return -1;
if( 0 == strlen(pActionName) )
return -1;
S_CS_ACTOR_INFO* pActorInfo = m_vlpActors.at( iActorIndex );
return pActorInfo->iNowAniIndex;
}
float CRTToolActorProcessor::GetActorScale( int iActorIndex )
{
if( (int)m_vlpActors.size() < iActorIndex )
return 1.0f;
S_CS_ACTOR_INFO* pActorInfo = m_vlpActors.at( iActorIndex );
CDnCutSceneActor* pDnActor = static_cast<CDnCutSceneActor*>(pActorInfo->pActor);
return pDnActor->GetScale();
}
void CRTToolActorProcessor::Process( LOCAL_TIME LocalTime, float fDelta )
{
int iNumActor = (int)m_vlpActors.size();
for( int iActor = 0; iActor < iNumActor; ++iActor )
{
S_CS_ACTOR_INFO* pActorInfo = GetActorInfoByIndex( iActor );
if( pActorInfo->bHided )
{
//OutputDebug( "[CutScene] %s Hided\n", pActorInfo->strActorName.c_str() );
continue;
}
//int iAniIndex = pDnActor->GetElementIndex( pActorInfo->strNowActionName.c_str() );
if( pActorInfo->strNowActionName.empty() )
{
//OutputDebug( "[CutScene] %s iAniIndex == -1\n", pActorInfo->strActorName.c_str() );
// <20>׼<EFBFBD><D7BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
pActorInfo->hObject->Update( pActorInfo->matExFinal );
continue;
}
CDnCutSceneActor* pDnCutSceneActor = static_cast<CDnCutSceneActor*>(pActorInfo->pActor);
MatrixEx matExFinalPos = pActorInfo->matExFinal;
EtVector3 vAniDistance;
pActorInfo->hObject->CalcAniDistance( pActorInfo->vlAniIndex[pActorInfo->iNowAniIndex],
pActorInfo->fFrame, 0.0f, vAniDistance );
matExFinalPos.MoveLocalYAxis( -vAniDistance.y );
pDnCutSceneActor->SetMatrixEx( matExFinalPos );
if( pActorInfo->iNowAniIndex != m_vlPrevActionIndex.at(iActor) )
pDnCutSceneActor->OnChangeAction();
pDnCutSceneActor->ProcessSignal( pDnCutSceneActor->GetElement(pActorInfo->iNowAniIndex), LocalTime,
pActorInfo->fFrame,
m_vlPrevFrame.at(iActor) );
pActorInfo->hObject->SetAniFrame( pActorInfo->vlAniIndex[pActorInfo->iNowAniIndex], pActorInfo->fFrame );
pActorInfo->hObject->Update( pActorInfo->matExFinal );
pDnCutSceneActor->UpdateSignal( LocalTime, fDelta );
m_vlPrevFrame[ iActor ] = pActorInfo->fFrame;
m_vlPrevActionIndex[ iActor ] = pActorInfo->iNowAniIndex;
}
}
void CRTToolActorProcessor::FadeIn( float fSpeed, DWORD dwColor )
{
m_pFade->FadeIn( fSpeed, dwColor );
}
void CRTToolActorProcessor::FadeOut( float fSpeed, DWORD dwColor )
{
m_pFade->FadeOut( fSpeed, dwColor );
}
// #54681 - <20>÷<EFBFBD><C3B7>̾<EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Hideó<65><C3B3>.
void CRTToolActorProcessor::ShowEffect( void * pActor, bool bShow )
{
CDnCutSceneActor * pCSActor = static_cast< CDnCutSceneActor * >( pActor );
pCSActor->Show( bShow );
}