750 lines
16 KiB
C++
750 lines
16 KiB
C++
// SGameObject.cpp: implementation of the SGameObject class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
#include "SGameObject.h"
|
|
|
|
#include "SGameMessage.h"
|
|
#include "SGameWork.h"
|
|
|
|
float GetViewRadian( K3DVector tpos, K3DVector spos )
|
|
{
|
|
K3DVector viewVec = (tpos-spos);
|
|
viewVec.z = 0.f;
|
|
|
|
float fLen = viewVec.Magnitude();
|
|
float fDX = fabsf(viewVec.x);
|
|
float fDY = fabsf(viewVec.y);
|
|
float fTheta = ( fDX > fDY ) ? acosf( fDX / fLen ) : asinf( fDY / fLen );
|
|
|
|
if( fLen == 0.f )
|
|
return 0.f;
|
|
|
|
if( viewVec.x >= 0.f )
|
|
{ fTheta = (viewVec.y >= 0.f) ? fTheta : ((2.f * K3D_PI) - fTheta); }
|
|
else
|
|
{ fTheta = (viewVec.y >= 0.f) ? (K3D_PI - fTheta) : (K3D_PI + fTheta); }
|
|
|
|
return fTheta;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
//Effect 받은 횟수
|
|
void SGameObject::EffectAddRef()
|
|
{
|
|
++m_nEffectRef;
|
|
}
|
|
|
|
void SGameObject::EffectDelRef()
|
|
{
|
|
// assert( m_nEffectRef > 0 && "Invalid EffectRef" );
|
|
if( m_nEffectRef <= 0 )
|
|
{
|
|
m_nEffectRef = 0;
|
|
return;
|
|
}
|
|
|
|
--m_nEffectRef;
|
|
}
|
|
|
|
SGameObject::SGameObject()
|
|
{
|
|
m_bIsActivated = false;
|
|
m_pArObject = NULL;
|
|
m_pMsgHandler = NULL;
|
|
K3DMatrixIdentity( m_mTransform );
|
|
|
|
m_fScale = 1.f;
|
|
|
|
m_bIsInit = false;
|
|
|
|
m_nEffectRef = 0;
|
|
m_wCurTile = 0;
|
|
m_bInWater = false;
|
|
}
|
|
|
|
SGameObject::~SGameObject()
|
|
{
|
|
Destroy();
|
|
}
|
|
|
|
bool SGameObject::Initialize()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
void SGameObject::Destroy()
|
|
{
|
|
for( unsigned int i(0); m_vMsgList.size()>i; i++ )
|
|
{
|
|
delete m_vMsgList.front();
|
|
m_vMsgList.pop();
|
|
}
|
|
|
|
for( unsigned int i(0); m_vWorkList.size()>i; i++ )
|
|
{
|
|
delete m_vWorkList[i];
|
|
}
|
|
m_vWorkList.clear();
|
|
}
|
|
|
|
void SGameObject::SetKnockBack( const K3DVector vPosition, const float fSpeed )
|
|
{
|
|
if( m_pArObject ) //LocalPlayer 임
|
|
{
|
|
m_pArObject->onKnockBack( GetArID(), ArPosition( vPosition.x, vPosition.y, vPosition.z ), fSpeed );
|
|
}
|
|
else
|
|
{
|
|
m_arObject.mv.SetKnockBack( ArPosition( vPosition.x, vPosition.y, vPosition.z ), fSpeed, 0, 0 );
|
|
}
|
|
}
|
|
|
|
K3DVector * SGameObject::GetPosition()
|
|
{
|
|
if( m_pArObject ) //Local Player 임
|
|
{
|
|
m_mTransform._41 = m_pArObject->GetMyPos().x;
|
|
m_mTransform._42 = m_pArObject->GetMyPos().y;
|
|
}
|
|
else
|
|
{
|
|
m_mTransform._41 = GetArObject().mv.x;
|
|
m_mTransform._42 = GetArObject().mv.y;
|
|
}
|
|
return &m_mTransform.GetPosVector();
|
|
}
|
|
|
|
K3DVector* SGameObject::GetEndPosition()
|
|
{
|
|
if( m_pArObject ) //Local Player 임
|
|
{
|
|
m_mTransform._41 = m_pArObject->GetMyPos().GetTX();
|
|
m_mTransform._42 = m_pArObject->GetMyPos().GetTY();
|
|
}
|
|
else
|
|
{
|
|
m_mTransform._41 = GetArObject().mv.GetTX();
|
|
m_mTransform._42 = GetArObject().mv.GetTY();
|
|
}
|
|
return &m_mTransform.GetPosVector();
|
|
}
|
|
|
|
bool SGameObject::Activate()
|
|
{
|
|
m_bIsActivated = true;
|
|
return true;
|
|
}
|
|
|
|
bool SGameObject::Deactivate()
|
|
{
|
|
m_bIsActivated = false;
|
|
return true;
|
|
}
|
|
|
|
void SGameObject::SetArcadiaClient( ArcadiaClient * pArcadiaClient )
|
|
{
|
|
m_pArObject = pArcadiaClient;
|
|
}
|
|
|
|
void SGameObject::DropItem( AR_HANDLE handle )
|
|
{
|
|
if( m_pMsgHandler )
|
|
return m_pMsgHandler->DropItem( handle );
|
|
}
|
|
|
|
//게임 시스템 메세지 출력
|
|
void SGameObject::AddChatMessage( const char * pStr )
|
|
{
|
|
if( m_pMsgHandler )
|
|
return m_pMsgHandler->AddChatMessage( pStr );
|
|
}
|
|
|
|
// 게임내 공지 채팅만 출력, kappamind.
|
|
void SGameObject::AddNoticeMessageOnly( const char * pStr )
|
|
{
|
|
if( m_pMsgHandler )
|
|
return m_pMsgHandler->AddNoticeMessageOnly( pStr );
|
|
}
|
|
|
|
void SGameObject::RqChatting( int nChatType, const char * pName, const char * pStr )
|
|
{
|
|
if( m_pMsgHandler )
|
|
return m_pMsgHandler->RqChatting( nChatType, pName, pStr );
|
|
}
|
|
|
|
void SGameObject::GetNearVertices( float x, float y, K3DVertex* pGetVertices ) const
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->GetNearVertices( x, y, pGetVertices );
|
|
}
|
|
|
|
void SGameObject::GetNearVertices( float x, float y, int cx, int cy, K3DVertex* pGetVertices ) const
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->GetNearVertices( x, y, pGetVertices );
|
|
}
|
|
|
|
void SGameObject::GetTerrainTriangle( float x, float y, K3DVector& v1, K3DVector& v2, K3DVector& v3 ) const
|
|
{
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->GetTerrainTriangle( x, y, v1, v2, v3 );
|
|
}
|
|
|
|
bool SGameObject::GetHeight( const float x, const float y, float& out, WORD& wTile )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
{
|
|
return m_pMsgHandler->GetHeight( x, y, out, wTile );
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
bool SGameObject::GetOnlyTerrainHeight( const float x, const float y, float& out )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
{
|
|
return m_pMsgHandler->GetOnlyTerrainHeight( x, y, out );
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void SGameObject::GetTerrainVisibleDistance( K3DVector & vCameraPos, float & fTerrainVisibleDist )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->GetTerrainVisibleDistance( vCameraPos, fTerrainVisibleDist );
|
|
}
|
|
|
|
void SGameObject::SetMoveTargetPos( const float x, const float y, const float z, bool bChase )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->SetMoveTargetPos( x, y, z, bChase );
|
|
}
|
|
|
|
bool SGameObject::IsBlockedAttribute( const float x, const float y )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->IsBlockedAttribute( x, y );
|
|
|
|
return false;
|
|
}
|
|
|
|
void SGameObject::Get2DPos( K3DVector & pos, K3DVector & _2Dpos )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->Get2DPos( pos, _2Dpos );
|
|
}
|
|
|
|
SGameObject * SGameObject::GetGameObject( AR_HANDLE objHandle )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->GetGameObject( objHandle );
|
|
|
|
return NULL;
|
|
}
|
|
|
|
SGameObject * SGameObject::GetItemObject( K3DVector & pos, float & fDist, int nItemType, float fLimitDistance ) // sonador #2.1.2.4.3 팻 조작 UI 연동
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->GetItemObject( pos, fDist, nItemType, fLimitDistance );
|
|
|
|
return NULL;
|
|
}
|
|
|
|
SGameObject * SGameObject::GetMobObject( K3DVector & pos )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->GetMobObject( pos );
|
|
|
|
return NULL;
|
|
}
|
|
|
|
SGameObject* SGameObject::GetGameTransportCreatureObject( AR_HANDLE objHandle )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->GetGameTransportCreatureObject( objHandle );
|
|
|
|
return NULL;
|
|
}
|
|
|
|
int SGameObject::GetItemClass()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int SGameObject::GetMaterial() //재질
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int SGameObject::GetMovingType()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
bool SGameObject::GetGroundMaterial( int & nTile ) //지형 재질
|
|
{
|
|
nTile = m_wCurTile;
|
|
|
|
if( m_bInWater ) return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
void SGameObject::PlayerInsideWaterExistence( K3DVector & vPlayerPosition, bool & bInWater )
|
|
{
|
|
if ( m_pMsgHandler ) m_pMsgHandler->PlayerInsideWaterExistence( vPlayerPosition, bInWater );
|
|
else bInWater = false;
|
|
}
|
|
|
|
int SGameObject::GetCurrentLocation()
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->GetCurrentLocation();
|
|
|
|
return -1;
|
|
}
|
|
|
|
bool SGameObject::CheckPlayerMountLocation()
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->CheckPlayerMountLocation();
|
|
|
|
return false;
|
|
}
|
|
|
|
int SGameObject::GetAttrCellLength()
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->GetAttrCellLength();
|
|
|
|
return 1;
|
|
}
|
|
|
|
void SGameObject::WarpComplete( struct SGameMessage * pMsg )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->WarpComplete( pMsg );
|
|
}
|
|
|
|
void SGameObject::Rq_TakeItem( AR_HANDLE objHandle )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->Rq_TakeItem( objHandle );
|
|
}
|
|
|
|
void SGameObject::Rq_PutOnOffItem( AR_HANDLE hTarget, AR_HANDLE hItem, int nPosition )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->Rq_PutOnOffItem( hTarget, hItem, nPosition );
|
|
}
|
|
|
|
bool SGameObject::Rq_ChagePKMode( bool bOnOff )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->Rq_ChagePKMode( bOnOff );
|
|
|
|
return false;
|
|
}
|
|
|
|
void SGameObject::DelOwnerEffect( AR_HANDLE hOwner )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->DelOwnerEffect( hOwner );
|
|
}
|
|
|
|
void SGameObject::DelEffect( int nEffectID )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->DelEffect( nEffectID );
|
|
}
|
|
|
|
void SGameObject::AddAction( struct SGameMessage* pMsg )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->AddAction( pMsg );
|
|
}
|
|
|
|
void SGameObject::AddChaosEffect( int nChaosCnt ) // TODO : 서버에서 구현 완료되면 삭제하자
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->AddChaosEffect( nChaosCnt );
|
|
}
|
|
|
|
int SGameObject::AddOtherEffect( int nFxID, struct OtherFxData* fxdata )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->AddOtherEffect( nFxID, fxdata );
|
|
|
|
return 0;
|
|
}
|
|
|
|
void SGameObject::EndOtherEffect( int nFxID )
|
|
{
|
|
if ( m_pMsgHandler ) m_pMsgHandler->EndOtherEffect( nFxID );
|
|
}
|
|
|
|
int SGameObject::AddEffect( FX_DATA * pFX_data )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->AddEffect( pFX_data );
|
|
|
|
assert( 0 && "메세지 핸들러 없음" );
|
|
return -1;
|
|
}
|
|
|
|
int SGameObject::AddEffect( struct FX_DATA_EX * pFX_data )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->AddEffect( pFX_data );
|
|
|
|
assert( 0 && "메세지 핸들러 없음" );
|
|
return -1; //존재 하지 않음.
|
|
}
|
|
|
|
int SGameObject::AddEffect( AR_HANDLE hAttacker, AR_HANDLE hTarget, AR_HANDLE hOwner, int nEffectID, int nEffectPos, bool bIsLoopFx )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->AddEffect( hAttacker, hTarget, hOwner, nEffectID, nEffectPos, bIsLoopFx );
|
|
|
|
assert( 0 && "메세지 핸들러 없음" );
|
|
return -1;
|
|
}
|
|
|
|
int SGameObject::AddAttackEffect( struct FX_DATA * pFX_data )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->AddAttackEffect( pFX_data );
|
|
|
|
assert( 0 && "메세지 핸들러 없음" );
|
|
return -1; //존재 하지 않음.
|
|
}
|
|
|
|
void SGameObject::EndLoopFx( int nEffectID )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->EndLoopFx( nEffectID );
|
|
|
|
assert( 0 && "메세지 핸들러 없음" );
|
|
}
|
|
|
|
void SGameObject::AddStateEffect( SGameMessage * pGameMsg )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->AddStateEffect( pGameMsg );
|
|
|
|
assert( 0 && "메세지 핸들러 없음" );
|
|
}
|
|
|
|
void SGameObject::UpdateStateEffect( SGameMessage * pGameMsg )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->UpdateStateEffect( pGameMsg );
|
|
|
|
assert( 0 && "메세지 핸들러 없음" );
|
|
}
|
|
|
|
void SGameObject::DelStateEffect( SGameMessage * pGameMsg )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->DelStateEffect( pGameMsg );
|
|
|
|
assert( 0 && "메세지 핸들러 없음" );
|
|
}
|
|
|
|
void SGameObject::DelStateEffect( int nDelObjType )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->DelStateEffect( nDelObjType );
|
|
|
|
assert( 0 && "메세지 핸들러 없음" );
|
|
}
|
|
|
|
bool SGameObject::UseSkill( AR_HANDLE caster, int nSkillId, int nSkill_Lv, AR_TIME cast_time )
|
|
{
|
|
if ( m_pMsgHandler ) return m_pMsgHandler->UseSkill( caster, nSkillId, nSkill_Lv, cast_time );
|
|
|
|
return false;
|
|
}
|
|
|
|
int SGameObject::StartSound( const char * pSoundName )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->StartSound( pSoundName );
|
|
|
|
return -1;
|
|
}
|
|
|
|
int SGameObject::StartSound( SGameAvatarEx* pCaster, const char * pSoundName, K3DVector pos, bool bUse3D, int nVolume, bool bLoop, bool bSoundOption[SOUND_OP_MAX] )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->StartSound( pCaster, pSoundName, pos, bUse3D, nVolume, bLoop, bSoundOption );
|
|
|
|
return -1;
|
|
}
|
|
|
|
int SGameObject::StartSound( const char * pSoundName, K3DVector pos )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->StartSound( pSoundName, pos );
|
|
|
|
return -1;
|
|
}
|
|
|
|
void SGameObject::StopSound( const char * pSoundName, int nPlayIdx )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->StopSound( pSoundName, nPlayIdx );
|
|
}
|
|
|
|
void SGameObject::OnSkillDamage( AR_HANDLE caster, AR_HANDLE target, struct SGameMessage* pDamage )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->OnSkillDamage( caster, target, pDamage );
|
|
}
|
|
|
|
void SGameObject::OnDamage( AR_HANDLE caster, AR_HANDLE target, struct SGameMessage* pDamage )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->OnDamage( caster, target, pDamage );
|
|
}
|
|
|
|
void SGameObject::OnDotDamage( struct SMSG_DAMAGE* pDamage, bool bFinalDmg )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->OnDotDamage( pDamage, bFinalDmg );
|
|
}
|
|
|
|
void SGameObject::OnDisplayDamage( struct SMSG_DAMAGE* pDamage )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->OnDisplayDamage( pDamage );
|
|
}
|
|
|
|
void SGameObject::OnUISync( AR_HANDLE caster, AR_HANDLE target )
|
|
{
|
|
if( m_pMsgHandler )
|
|
m_pMsgHandler->OnUISync( caster, target );
|
|
}
|
|
|
|
void SGameObject::OnDead()
|
|
{
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->OnDead();
|
|
}
|
|
|
|
void SGameObject::ReqMove( AR_HANDLE handle, const ArPosition & target, const ArPosition * targetposdata, int count, bool bSpeedSync )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->ReqMove( handle, target, targetposdata, count, bSpeedSync );
|
|
|
|
m_ArPosition = target;
|
|
}
|
|
|
|
void SGameObject::SetMessageHandler( SGameObject *pMsgHandler )
|
|
{
|
|
m_pMsgHandler = pMsgHandler;
|
|
}
|
|
|
|
void SGameObject::CorrectivePosition( K3DVector & pos, K3DVector & newpos )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->CorrectivePosition( pos, newpos );
|
|
}
|
|
|
|
void SGameObject::SendMsg( SGameObject *pGO, const TS_MESSAGE *msg )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->SendMsg( pGO, msg );
|
|
}
|
|
|
|
void SGameObject::SendMsg( const TS_MESSAGE *msg )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->SendMsg( msg );
|
|
}
|
|
|
|
void SGameObject::AddMsg( SGameMessage * msg )
|
|
{
|
|
m_vMsgList.push( msg );
|
|
}
|
|
|
|
void SGameObject::SendGameInterfaceMsg( struct SGameMessage * game_msg ) //인터페이스 메니저로 바로 처리
|
|
{
|
|
//이것을 쓸 수 있게 하자..
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->SendGameInterfaceMsg( game_msg );
|
|
}
|
|
|
|
void SGameObject::SendGameMsg( SGameMessage * game_msg )
|
|
{
|
|
//이것을 쓸 수 있게 하자..
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->SendGameMsg( game_msg );
|
|
}
|
|
|
|
void SGameObject::FastWork( class SGameWork * work )
|
|
{
|
|
work->Process( 0 );
|
|
}
|
|
|
|
void SGameObject::AddWork ( class SGameWork * work )
|
|
{
|
|
m_vWorkList.push_back( work );
|
|
}
|
|
|
|
int SGameObject::AddEnhanceEffect( class SGameAvatarEx* pAvatar, int nWeaponEffectPos, EnhanceFX* pEnhanceFx, int nItemClass )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
return m_pMsgHandler->AddEnhanceEffect( pAvatar, nWeaponEffectPos, pEnhanceFx, nItemClass );
|
|
|
|
assert( 0 && "메세지 핸들러 없음" );
|
|
return -1;
|
|
}
|
|
|
|
void SGameObject::RemoveEnhanceEffect( int nParticleID )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->RemoveEnhanceEffect( nParticleID );
|
|
else
|
|
assert( 0 && "메세지 핸들러 없음" );
|
|
}
|
|
|
|
void SGameObject::SetRenderEnhanceFx( int nParticleID, bool bRender )
|
|
{
|
|
if ( m_pMsgHandler )
|
|
m_pMsgHandler->SetRenderEnhanceFx( nParticleID, bRender );
|
|
else
|
|
assert( 0 && "메세지 핸들러 없음" );
|
|
}
|
|
|
|
//void SGameObject::FindDetour(const K3DVertex& vStart, const K3DVertex& vEnd, bool bChase)
|
|
//{
|
|
// if(m_pMsgHandler) m_pMsgHandler->FindDetour(vStart, vEnd, bChase);
|
|
//}
|
|
//
|
|
//bool SGameObject::ChaseDetour(const K3DVertex& vTarget, K3DVertex& vMovePos)
|
|
//{
|
|
// if(m_pMsgHandler)
|
|
// {
|
|
// return m_pMsgHandler->ChaseDetour(vTarget, vMovePos);
|
|
// }
|
|
// else
|
|
// {
|
|
// return false;
|
|
// }
|
|
//}
|
|
|
|
//bool SGameObject::MoveDetour(K3DVertex& vtMovePos)
|
|
//{
|
|
// if(m_pMsgHandler)
|
|
// {
|
|
// return m_pMsgHandler->MoveDetour(vtMovePos);
|
|
// }
|
|
//
|
|
// return false;
|
|
//}
|
|
//
|
|
//bool SGameObject::IsMovingDetour()
|
|
//{
|
|
// if(m_pMsgHandler)
|
|
// {
|
|
// return m_pMsgHandler->IsMovingDetour();
|
|
// }
|
|
//
|
|
// return false;
|
|
//}
|
|
//
|
|
//size_t SGameObject::GetDetourSize()
|
|
//{
|
|
// if(m_pMsgHandler)
|
|
// {
|
|
// return m_pMsgHandler->GetDetourSize();
|
|
// }
|
|
//
|
|
// return 0;
|
|
//}
|
|
//
|
|
//bool SGameObject::GetDetourPoint(size_t index, int& x, int& y)
|
|
//{
|
|
// if(m_pMsgHandler)
|
|
// {
|
|
// return m_pMsgHandler->GetDetourPoint(index, x, y);
|
|
// }
|
|
//
|
|
// return false;
|
|
//}
|
|
|
|
bool SGameObject::CollisionToLine( const K3DVector& vStart, const K3DVector& vEnd )
|
|
{
|
|
if( m_pMsgHandler )
|
|
return m_pMsgHandler->CollisionToLine( vStart, vEnd );
|
|
|
|
return false;
|
|
}
|
|
|
|
void SGameObject::FindDetour( const K3DVertex& vStart, const K3DVertex& vEnd, PATH& vPath, bool bRestraint, bool bChase, bool bIsPlayer )
|
|
{
|
|
if( m_pMsgHandler ) m_pMsgHandler->FindDetour( vStart, vEnd, vPath, bRestraint, bChase, bIsPlayer );
|
|
}
|
|
|
|
//bool SGameObject::IsChasing()
|
|
//{
|
|
// if(m_pMsgHandler)
|
|
// {
|
|
// return m_pMsgHandler->IsChasing();
|
|
// }
|
|
//
|
|
// return false;
|
|
//}
|
|
//
|
|
//int SGameObject::GetDetourStep()
|
|
//{
|
|
// if(m_pMsgHandler)
|
|
// {
|
|
// return m_pMsgHandler->GetDetourStep();
|
|
// }
|
|
//
|
|
// return 0;
|
|
//}
|
|
|
|
void SGameObject::SetPKMode( bool bMode )
|
|
{
|
|
if( m_pMsgHandler )
|
|
m_pMsgHandler->SetPKMode( bMode );
|
|
else
|
|
assert( 0 && "메세지 핸들러 없음" );
|
|
}
|
|
|
|
int SGameObject::GetPlayerCurrentLocation()
|
|
{
|
|
if( m_pMsgHandler ) return m_pMsgHandler->GetPlayerCurrentLocation();
|
|
|
|
assert( 0 && "메세지 핸들러 없음" );
|
|
return false;
|
|
}
|
|
|
|
bool SGameObject::IsPartyRaidMemeber( AR_HANDLE hTarget )
|
|
{
|
|
if( m_pMsgHandler ) return m_pMsgHandler->IsPartyRaidMemeber( hTarget );
|
|
|
|
return false;
|
|
}
|
|
|
|
void SGameObject::SetRenderOtherPlayer( int nRender )
|
|
{
|
|
if ( m_pMsgHandler ) m_pMsgHandler->SetRenderOtherPlayer( nRender );
|
|
}
|
|
|
|
bool SGameObject::PlayerInTown( SGameAvatarEx* pPlayer )
|
|
{
|
|
if ( m_pMsgHandler ) return m_pMsgHandler->PlayerInTown( pPlayer );
|
|
|
|
return false;
|
|
} |