Files
2022-10-26 12:25:11 +08:00

137 lines
3.1 KiB
C++

//------------------------------------------------------------------------------
// StateHeroMove.cpp
// (C) 2005 Webzen Sunstudio
//------------------------------------------------------------------------------
#include "SunClientPrecompiledHeader.h"
#include "statebase.h"
#include "statemove.h"
#include "stateheromove.h"
#include "Hero.h"
#include "Map.h"
#include "ObjectManager.h"
#include "NumericValues.h"
#include "HeroActionInput.h"
//------------------------------------------------------------------------------
/**
*/
StateHeroMove::StateHeroMove(void)
{
}
//------------------------------------------------------------------------------
/**
*/
StateHeroMove::~StateHeroMove(void)
{
}
//------------------------------------------------------------------------------
/**
*/
BOOL StateHeroMove::CanTransite(Object* pOwner, DWORD CurTime, StateBase* pToTransiteState)
{
switch(pToTransiteState->GetStateKind())
{
case STATE::DAMAGE:
case STATE::KNOCKBACK2:
case STATE::IDLE:
case STATE::MOVE:
case STATE::ATTACK:
case STATE::DEATH:
case STATE::SKILL:
case STATE::JUMP:
case STATE::KEYBOARDMOVE:
case STATE::TRANSFORM:
case STATE::FALL_DOWN:
case STATE::EMOTICON:
#ifdef _NA_008298_20150519_ALLOW_HEROMOVE_TO_DOWN_STATE
case STATE::DOWN:
#endif //_NA_008298_20150519_ALLOW_HEROMOVE_TO_DOWN_STATE
return TRUE;
}
return FALSE;
}
//------------------------------------------------------------------------------
/**
*/
STATECHANGE::TYPE StateHeroMove::OnStart(Object* pOwner, DWORD CurTime)
{
if (pOwner->IsKindOfObject(PLAYER_OBJECT) == false)
{
return STATECHANGE::FAILED;
}
if (static_cast<Player*>(pOwner)->IsHero() == false)
{
return STATECHANGE::FAILED;
}
// prepare move
Hero* pHero = static_cast<Hero*>(pOwner);
WzID animation = pHero->GetCurrentMoveAnimation();
assert(animation);
pHero->SetPlayerAnimation(animation,eANI_RUN,TRUE);
#ifdef _NA_000000_20120410_SPEEDHACK
pHero->move_speed_ = GetBaseMoveSpeedAsState(CMS_RUN);
#else
// 현재 플레이어는 달리기만 가능
if (pHero->GetMoveState() == CMS_WALK )
{
pHero->SetMoveSpeed( GetBaseMoveSpeedAsState(CMS_RUN) );
}
else
{
pHero->SetMoveSpeed( GetBaseMoveSpeedAsState(CMS_RUN) );
}
#endif //_NA_000000_20120410_SPEEDHACK
return STATECHANGE::SUCCESS;
}
//------------------------------------------------------------------------------
/**
*/
STATEPROCESS::TYPE StateHeroMove::OnProcess(Object* pOwner, DWORD CurTime,DWORD dwTick)
{
STATEPROCESS::TYPE ret;
// 우선 이동~
ret = StateMove::OnProcess(pOwner,CurTime,dwTick);
#ifdef PERF_AUTO_MOVE_TEST
if(g_HeroInput.GetAutoMove()&&ret==STATEPROCESS::END)
{
g_HeroInput.SwitchMove();
}
#endif
return ret;
}
//------------------------------------------------------------------------------
/**
*/
STATECHANGE::TYPE StateHeroMove::OnEnd(Object* pOwner, DWORD CurTime)
{
WzVector vDummy;
vDummy.x = 0.0f;
vDummy.y = 0.0f;
vDummy.z = 0.0f;
Hero* pHero = (Hero*)pOwner;
pHero->LockOnPosition(FALSE,vDummy);
pHero->SetVisibleAngleModifer(0.0f);
return StateMove::OnEnd(pOwner,CurTime);
}