195 lines
5.3 KiB
C++
195 lines
5.3 KiB
C++
|
|
#include "stdafx.h"
|
|||
|
|
#include "DnWorldTrapProp.h"
|
|||
|
|
#include "DnPartyTask.h"
|
|||
|
|
#include "DNUserSession.h"
|
|||
|
|
//#include "DnActorClassDefine.h"
|
|||
|
|
#include "DnMonsterActor.h"
|
|||
|
|
|
|||
|
|
CDnWorldTrapProp::CDnWorldTrapProp( CMultiRoom *pRoom )
|
|||
|
|
: CDnWorldActProp( pRoom )
|
|||
|
|
, CDnDamageBase( DamageObjectTypeEnum::Prop )
|
|||
|
|
, m_iActivateType( LOOP )
|
|||
|
|
, m_nIdleElementIndex( -1 )
|
|||
|
|
, m_nActivateElementIndex( -1 )
|
|||
|
|
, m_nNowActionElementIndex( -1 )
|
|||
|
|
, m_bIdle( false )
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CDnWorldTrapProp::~CDnWorldTrapProp()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CDnWorldTrapProp::Initialize( CEtWorldSector *pParentSector, const char *szPropName, EtVector3 &vPos, EtVector3 &vRotate, EtVector3 &vScale )
|
|||
|
|
{
|
|||
|
|
if( CDnWorldActProp::Initialize( pParentSector, szPropName, vPos, vRotate, vScale ) == false ) return false;
|
|||
|
|
if( m_hMonster ) *m_hMonster->GetMatEx() = *GetMatEx();
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CDnWorldTrapProp::InitializeTable( int nTableID )
|
|||
|
|
{
|
|||
|
|
if( CDnWorldActProp::InitializeTable( nTableID ) == false ) return false;
|
|||
|
|
|
|||
|
|
if( GetData() )
|
|||
|
|
{
|
|||
|
|
TrapStruct *pStruct = (TrapStruct *)GetData();
|
|||
|
|
int nMonsterTableID = pStruct->nMonsterTableID;
|
|||
|
|
bool bResult = false;
|
|||
|
|
|
|||
|
|
//#61146 TrapŸ<70><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٸ<EFBFBD><D9B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
#ifdef PER_ADD_PROP_TRAP_DIFFICULT_SET
|
|||
|
|
bResult = InitializeMonsterActorProp( nMonsterTableID, pStruct->MonsterWeight );
|
|||
|
|
#else
|
|||
|
|
bResult = InitializeMonsterActorProp( nMonsterTableID );
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
if( bResult )
|
|||
|
|
{
|
|||
|
|
// m_hMonster->SetUniqueID( STATIC_INSTANCE(CDnActor::s_dwUniqueCount)++ );
|
|||
|
|
|
|||
|
|
m_HitComponent.Initialize( m_hMonster, &m_Cross, GetMySmartPtr(), this );
|
|||
|
|
|
|||
|
|
m_iActivateType = pStruct->ActivateType;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CDnWorldTrapProp::CreateObject()
|
|||
|
|
{
|
|||
|
|
bool bResult = CDnWorldActProp::CreateObject();
|
|||
|
|
|
|||
|
|
if( bResult )
|
|||
|
|
{
|
|||
|
|
m_nIdleElementIndex = GetElementIndex( "Idle" );
|
|||
|
|
m_nActivateElementIndex = GetElementIndex( "Activate" );
|
|||
|
|
|
|||
|
|
//if( LOOP == m_iActivateType )
|
|||
|
|
// GetElement( m_nActivateElementIndex )->szNextActionName.assign( "Activate" );
|
|||
|
|
//else
|
|||
|
|
//if( BOUNDING_BOX_CHECK == m_iActivateType )
|
|||
|
|
// GetElement( m_nActivateElementIndex )->szNextActionName.assign( "Idle" );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return bResult;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CDnWorldTrapProp::SetActionQueue( const char *szActionName, int nLoopCount , float fBlendFrame , float fStartFrame )
|
|||
|
|
{
|
|||
|
|
//if( LOOP == m_iActivateType && strcmp( szActionName, "Idle" ) == 0 )
|
|||
|
|
//{
|
|||
|
|
// //SetActionQueue( "Activate" );
|
|||
|
|
// szActionName = "Activate";
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
CDnWorldActProp::SetActionQueue( szActionName, nLoopCount, fBlendFrame, fStartFrame );
|
|||
|
|
//if( strcmp( szActionName, "Idle" ) == 0 )
|
|||
|
|
// m_bIdle = true;
|
|||
|
|
//else
|
|||
|
|
// m_bIdle = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> idle <20><> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>⼭ <20>ٲ<EFBFBD><D9B2>ش<EFBFBD>.
|
|||
|
|
void CDnWorldTrapProp::OnFinishAction( const char* szPrevAction, LOCAL_TIME time )
|
|||
|
|
{
|
|||
|
|
//if( LOOP == m_iActivateType && strcmp( szPrevAction, "Idle" )/*false == m_bIdle*/ )
|
|||
|
|
// SetActionQueue( "Activate" );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CDnWorldTrapProp::Process( LOCAL_TIME LocalTime, float fDelta )
|
|||
|
|
{
|
|||
|
|
CDnWorldActProp::Process( LocalTime, fDelta );
|
|||
|
|
if( !m_Handle ) return;
|
|||
|
|
if( m_nIdleElementIndex == -1 ) return;
|
|||
|
|
//OutputDebug( "TrapFrame : %.2f\n", CDnActionBase::m_fFrame );
|
|||
|
|
|
|||
|
|
m_nNowActionElementIndex = GetElementIndex( GetCurrentAction() );
|
|||
|
|
|
|||
|
|
switch( m_iActivateType )
|
|||
|
|
{
|
|||
|
|
case BOUNDING_BOX_CHECK:
|
|||
|
|
{
|
|||
|
|
if( m_nIdleElementIndex == m_nNowActionElementIndex )
|
|||
|
|
{
|
|||
|
|
SOBB Box;
|
|||
|
|
GetBoundingBox( Box );
|
|||
|
|
|
|||
|
|
for( DWORD i=0; i<CDnPartyTask::GetInstance(GetRoom()).GetUserCount(); i++ )
|
|||
|
|
{
|
|||
|
|
CDNUserSession *pSession = CDnPartyTask::GetInstance(GetRoom()).GetUserData(i);
|
|||
|
|
DnActorHandle hActor = pSession->GetActorHandle();
|
|||
|
|
if( !hActor ) continue;
|
|||
|
|
if( hActor->IsDie() ) continue;
|
|||
|
|
|
|||
|
|
if( Box.IsInside( *hActor->GetPosition() ) == true ) {
|
|||
|
|
CmdAction( "Activate" );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
//case LOOP:
|
|||
|
|
// {
|
|||
|
|
// if( m_nActivateElementIndex == m_nNowActionElementIndex )
|
|||
|
|
// {
|
|||
|
|
// CEtActionBase::ActionElementStruct* pElement = GetElementIndex( m_nActivateElementIndex );
|
|||
|
|
// if( (pElement->dwLength / s_fDefaultFps) - m_fFrame - fDelta < 0.0f )
|
|||
|
|
//
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
// break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnWorldTrapProp::OnSignal( SignalTypeEnum Type, void *pPtr, LOCAL_TIME LocalTime, LOCAL_TIME SignalStartTime,
|
|||
|
|
LOCAL_TIME SignalEndTime, int nSignalIndex )
|
|||
|
|
{
|
|||
|
|
m_HitComponent.OnSignal( Type, pPtr, LocalTime, SignalStartTime, SignalEndTime, nSignalIndex );
|
|||
|
|
|
|||
|
|
CDnWorldActProp::OnSignal( Type, pPtr, LocalTime, SignalStartTime, SignalEndTime, nSignalIndex );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
// Ʈ<><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD>ü<EFBFBD><C3BC> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ȯ<EFBFBD>ϰ<EFBFBD> <20>¾ƾ<C2BE> <20>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD>涧<EFBFBD><E6B6A7><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
|
|||
|
|
void CDnWorldTrapProp::OnChangeAction( const char *szPrevAction )
|
|||
|
|
{
|
|||
|
|
//// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ʈ<><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Activate <20>Ǹ<D7BC> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
|
|||
|
|
//if( LOOP == m_iActivateType )
|
|||
|
|
//{
|
|||
|
|
// if( m_szAction == "Activate" )
|
|||
|
|
// ActionSync( "Activate" );
|
|||
|
|
//}
|
|||
|
|
//else
|
|||
|
|
//{
|
|||
|
|
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD> <20>ʴ<EFBFBD> <20>̻<EFBFBD> idle <20><> <20>ݺ<EFBFBD><DDBA>DZ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// // idle <20><EFBFBD><D7BC><EFBFBD> <20><><EFBFBD>쿣 idle <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD> <20><> <20>ѹ<EFBFBD><D1B9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
// // Idle <20><EFBFBD><D7BC><EFBFBD> ª<><C2AA> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>. (#17409)
|
|||
|
|
// const char* pCurrentAction = GetCurrentAction();
|
|||
|
|
// if( stricmp(pCurrentAction, "Idle") == 0 || stricmp(pCurrentAction, "off") )
|
|||
|
|
// {
|
|||
|
|
// if( stricmp(szPrevAction, "Idle") != 0 )
|
|||
|
|
// {
|
|||
|
|
// ActionSync( pCurrentAction );
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
// else
|
|||
|
|
// ActionSync( pCurrentAction );
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
// <20><EFBFBD><D7BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>.
|
|||
|
|
if( m_nActionIndex != m_nPrevActionIndex )
|
|||
|
|
ActionSync( GetCurrentAction() );
|
|||
|
|
}
|