137 lines
4.3 KiB
C++
137 lines
4.3 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
#include "DnCannonMonsterActor.h"
|
|||
|
|
#include "DnProjectile.h"
|
|||
|
|
#include "DnPlayerActor.h"
|
|||
|
|
|
|||
|
|
|
|||
|
|
CDnCannonMonsterActor::CDnCannonMonsterActor( CMultiRoom *pRoom, int nClassID ) : TDnMonsterActor( pRoom, nClassID ),
|
|||
|
|
m_vShootDir( 0.0f, 0.0f, 0.0f ),
|
|||
|
|
m_vCannonGroundHitPos( 0.0f, 0.0f, 0.0f ),
|
|||
|
|
m_vCannonTargetingDir( 0.0f, 0.0f, 0.0f )
|
|||
|
|
{
|
|||
|
|
m_vCannonLookDirection = GetMatEx()->m_vZAxis; // Rotha - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ.
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CDnCannonMonsterActor::~CDnCannonMonsterActor()
|
|||
|
|
{
|
|||
|
|
if( m_hMasterPlayerActor )
|
|||
|
|
{
|
|||
|
|
CDnPlayerActor* pPlayerActor = static_cast<CDnPlayerActor*>( m_hMasterPlayerActor.GetPointer() );
|
|||
|
|
pPlayerActor->OnCannonMonsterDie();
|
|||
|
|
|
|||
|
|
ClearMasterPlayerActor();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
MAMovementBase* CDnCannonMonsterActor::CreateMovement()
|
|||
|
|
{
|
|||
|
|
MAMovementBase* pMovement = new IBoostPoolMAStaticMovement();
|
|||
|
|
return pMovement;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnCannonMonsterActor::SetMasterPlayerActor( DnActorHandle hMasterPlayerActor )
|
|||
|
|
{
|
|||
|
|
m_hMasterPlayerActor = hMasterPlayerActor;
|
|||
|
|
SlaveOf( hMasterPlayerActor->GetUniqueID() ); // <20>뿹 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7>̾<EFBFBD> ȭ<>鿡 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>. <20>˾Ƽ<CBBE> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
SetCannonLookDirection(&GetMatEx()->m_vZAxis); // Rotha Ÿ<><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Look <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ <20><> <20>ݴϴ<DDB4>.
|
|||
|
|
|
|||
|
|
// TODO: <20><><EFBFBD><EFBFBD> <20><EFBFBD>Ʈ <20>ڵ<EFBFBD>
|
|||
|
|
SetTeam( hMasterPlayerActor->GetTeam() );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnCannonMonsterActor::ClearMasterPlayerActor( void )
|
|||
|
|
{
|
|||
|
|
m_hMasterPlayerActor.Identity();
|
|||
|
|
SetCannonLookDirection(&GetMatEx()->m_vZAxis); // Rotha Ÿ<><C5B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Look <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ<EFBFBD><C8AD><EFBFBD>ݴϴ<DDB4>.
|
|||
|
|
// <20>뿹 <20><><EFBFBD><EFBFBD>.
|
|||
|
|
SlaveRelease();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnCannonMonsterActor::Look( EtVector2& vVec, bool bForceRotate)
|
|||
|
|
{
|
|||
|
|
if( bForceRotate )
|
|||
|
|
{
|
|||
|
|
if( EtVec2LengthSq( &vVec ) > 0.f ) {
|
|||
|
|
GetMatEx()->m_vZAxis = EtVector3( vVec.x, 0.f, vVec.y );
|
|||
|
|
EtVec3Normalize( &GetMatEx()->m_vZAxis, &GetMatEx()->m_vZAxis );
|
|||
|
|
GetMatEx()->MakeUpCartesianByZAxis();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnCannonMonsterActor::OnHitSuccess( LOCAL_TIME LocalTime, DnActorHandle hActor, HitStruct *pStruct )
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><> CP <20><> ó<><C3B3><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD> <20>Ѵ<EFBFBD>.
|
|||
|
|
if( m_hMasterPlayerActor && m_hMasterPlayerActor->IsPlayerActor() )
|
|||
|
|
{
|
|||
|
|
m_hMasterPlayerActor->OnHitSuccess( LocalTime, hActor, pStruct );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnCannonMonsterActor::OnHitFinish( LOCAL_TIME LocalTime, HitStruct *pStruct )
|
|||
|
|
{
|
|||
|
|
if( m_hMasterPlayerActor && m_hMasterPlayerActor->IsPlayerActor() )
|
|||
|
|
{
|
|||
|
|
m_hMasterPlayerActor->OnHitFinish( LocalTime, pStruct );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnCannonMonsterActor::OnMasterPlayerActorDie( void )
|
|||
|
|
{
|
|||
|
|
ClearMasterPlayerActor();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnCannonMonsterActor::OnDie( DnActorHandle hHitter )
|
|||
|
|
{
|
|||
|
|
if( m_hMasterPlayerActor )
|
|||
|
|
{
|
|||
|
|
CDnPlayerActor* pPlayerActor = static_cast<CDnPlayerActor*>( m_hMasterPlayerActor.GetPointer() );
|
|||
|
|
pPlayerActor->OnCannonMonsterDie();
|
|||
|
|
|
|||
|
|
ClearMasterPlayerActor();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CDnCannonMonsterActor::OnSignal( SignalTypeEnum Type, void *pPtr, LOCAL_TIME LocalTime, LOCAL_TIME SignalStartTime, LOCAL_TIME SignalEndTime, int nSignalIndex )
|
|||
|
|
{
|
|||
|
|
switch( Type )
|
|||
|
|
{
|
|||
|
|
case STE_Projectile:
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><EFBFBD>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
ProjectileStruct* pStruct = (ProjectileStruct *)pPtr;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> m_Cross <20><><EFBFBD><EFBFBD> ȸ<><C8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݿ<EFBFBD><DDBF>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD>.
|
|||
|
|
// <20><><EFBFBD>⼭ <20>ݿ<EFBFBD><DDBF>ؼ<EFBFBD> <20><EFBFBD>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
|
|||
|
|
MatrixEx LocalCross = m_Cross;
|
|||
|
|
LocalCross.m_vZAxis = m_vCannonTargetingDir;
|
|||
|
|
LocalCross.m_vZAxis.y = 0.0f;
|
|||
|
|
EtVec3Normalize( &LocalCross.m_vZAxis, &LocalCross.m_vZAxis );
|
|||
|
|
LocalCross.MakeUpCartesianByZAxis();
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><EFBFBD>ü <20><><EFBFBD><EFBFBD> <20><><EFBFBD> CreateProjectile <20><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MatrixEx <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> Target <20><> <20><><EFBFBD>ϴ<EFBFBD>
|
|||
|
|
// <20><>ƾ<EFBFBD><C6BE> <20>־ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>⼭ <20>ٲ<EFBFBD><D9B2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
MatrixEx Temp = m_Cross;
|
|||
|
|
m_Cross = LocalCross;
|
|||
|
|
|
|||
|
|
CDnProjectile* pProjectile = CDnProjectile::CreateProjectile( GetRoom(), GetMySmartPtr(), LocalCross, pStruct,
|
|||
|
|
&m_vCannonGroundHitPos, CDnActor::Identity(), &m_vShootDir );
|
|||
|
|
if( pProjectile == NULL )
|
|||
|
|
return;
|
|||
|
|
pProjectile->SetShooterType( GetMySmartPtr(), m_nActionIndex, nSignalIndex );
|
|||
|
|
|
|||
|
|
SendProjectile( pProjectile, pStruct, LocalCross, nSignalIndex );
|
|||
|
|
OnProjectile( pProjectile, pStruct, LocalCross, nSignalIndex );
|
|||
|
|
OnSkillProjectile( pProjectile );
|
|||
|
|
|
|||
|
|
m_Cross = Temp;
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CDnMonsterActor::OnSignal( Type, pPtr, LocalTime, SignalStartTime, SignalEndTime, nSignalIndex );
|
|||
|
|
}
|