//------------------------------------------------------------------------------ // StateSit.cpp // (C) 2005 Webzen Sunstudio //------------------------------------------------------------------------------ #include "SunClientPrecompiledHeader.h" #include "statebase.h" #include "statesit.h" #include "Hero.h" #include "HeroActionInput.h" #include "InterfaceManager.h" #include "npc.h" #include "Monster.h" #ifdef _NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION #include "Map.h" #include "SpaZoneInfoParser.h" #endif //_NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION //------------------------------------------------------------------------------ /** */ StateSit::StateSit(void) { } //------------------------------------------------------------------------------ /** */ StateSit::~StateSit(void) { } //------------------------------------------------------------------------------ /** */ BOOL StateSit::CanTransite(Object* pOwner, DWORD CurTime, StateBase* pToTransiteState) { switch(pToTransiteState->GetStateKind()) { case 0: break; } return TRUE; } //------------------------------------------------------------------------------ /** */ STATECHANGE::TYPE StateSit::OnStart(Object* pOwner, DWORD CurTime) { Player* pPlayer = (Player*)pOwner; assert(pPlayer->IsKindOfObject(PLAYER_OBJECT)); #ifdef _NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION if (pPlayer->IsInSpaTile_Change_Sit()) { pPlayer->SetSitState(TRUE); pPlayer->SetStandUp(FALSE); if(g_pHero->GetObjectKey()==pPlayer->GetObjectKey()) { g_HeroInput.SetAutoRun(FALSE); g_HeroInput.SetAutoAttack(FALSE); g_HeroInput.SetAreaSkill(FALSE); g_SkillQueue.ClearAll(); } return STATECHANGE::SUCCESS; } #endif //_NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION WzID anim; pPlayer->SetSitState( FALSE ); pPlayer->SetStandUp(FALSE); anim = pPlayer->GetCurrentSitAnimation(); pPlayer->SetPlayerAnimation(anim,eANI_SIT,FALSE); if(g_pHero->GetObjectKey()==pPlayer->GetObjectKey()) { g_HeroInput.SetAutoRun(FALSE); g_HeroInput.SetAutoAttack(FALSE); g_HeroInput.SetAreaSkill(FALSE); g_SkillQueue.ClearAll(); } return STATECHANGE::SUCCESS; } //------------------------------------------------------------------------------ /** */ STATEPROCESS::TYPE StateSit::OnProcess(Object* pOwner, DWORD CurTime,DWORD dwTick) { Player* pPlayer = (Player*)pOwner; assert(pPlayer->IsKindOfObject(PLAYER_OBJECT)); // ¿¡´Ï¸ÞÀÌ¼Ç ¾÷µ¥ÀÌÆ® WzID anim; pPlayer->ProcessInterpolation(dwTick); float fRet = pPlayer->ProcessAnimation(dwTick); #ifdef _NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION if (pPlayer->IsInSpaTile_Change_Sit()) { return ProcessSpaSitAnimation(pPlayer); } #endif //_NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION if(pPlayer->IsStandUp()) { anim = pPlayer->GetCurrentStandUpAnimation(); pPlayer->SetPlayerAnimation(anim,eANI_GETUP,FALSE); pPlayer->SetStandUp(FALSE); } else if(pPlayer->GetCurrentAnimation()!=pPlayer->GetCurrentStandUpAnimation()) { if (fRet >= 100.0f) { pPlayer->SetSitState( TRUE ); } if( pPlayer->GetSitState() ) { #ifdef _NA_008069_20150210_ADD_SPA_SYSTEM #ifdef _NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION if (pPlayer->IsInSpaTile_Change_SitIdle()) #else if (pPlayer->IsInSpaTile()) #endif //_NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION { // ¿Âõ ¾É±â ¾Ö´Ï¸ÞÀÌ¼Ç pPlayer->SetSpaSittingAnimation(dwTick); } else #endif //_NA_008069_20150210_ADD_SPA_SYSTEM { anim = pPlayer->GetCurrentSittingAnimation(); pPlayer->SetPlayerAnimation(anim,eANI_SIT_IDLE,TRUE); } } } else { if (fRet >= 100.0f) return STATEPROCESS::END; } // ´ëºÎºÐÀÇ State¿¡¼­ °øÅëÀûÀ¸·Î ó¸®ÇÏ´Â »óź¯È­¸¦ ó¸®ÇÑ´Ù. if (pPlayer->CommonStateProcess()) { return STATEPROCESS::SUSPEND; } // ´ÙÀ½ µ¿ÀÛÀÌ ÀÖÀ¸¸é ¹Ù·Î ¼öÇàÇØÁÖ¼¼¿ä~ if (pPlayer->GetActionQueueCount()) { pPlayer->ProcessNextAction(); return STATEPROCESS::SUSPEND; } return STATEPROCESS::SUSPEND; } //------------------------------------------------------------------------------ /** */ STATECHANGE::TYPE StateSit::OnEnd(Object* pOwner, DWORD CurTime) { Player* pPlayer = (Player*)pOwner; assert(pPlayer->IsKindOfObject(PLAYER_OBJECT)); pPlayer->SetSitState( FALSE ); pPlayer->SetStandUp(FALSE); return STATECHANGE::SUCCESS; } #ifdef _NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION STATEPROCESS::TYPE StateSit::ProcessSpaSitAnimation(Player* pPlayer) { if (pPlayer->IsInSpaTile_Change_Sit()) { SpaZoneInfo* spa_info = SpaZoneInfoParser::Instance()->GetSpaZoneInfo(g_pMap->GetMapID()); if (spa_info && (spa_info->special_animation[0].id != 0)) { pPlayer->SetPlayerAnimation(spa_info->special_animation[0].id,eANI_SIT,TRUE); } } if(pPlayer->IsStandUp()) { pPlayer->SetStandUp(FALSE); return STATEPROCESS::END; } // ´ëºÎºÐÀÇ State¿¡¼­ °øÅëÀûÀ¸·Î ó¸®ÇÏ´Â »óź¯È­¸¦ ó¸®ÇÑ´Ù. if (pPlayer->CommonStateProcess()) { return STATEPROCESS::SUSPEND; } // ´ÙÀ½ µ¿ÀÛÀÌ ÀÖÀ¸¸é ¹Ù·Î ¼öÇàÇØÁÖ¼¼¿ä~ if (pPlayer->GetActionQueueCount()) { pPlayer->ProcessNextAction(); return STATEPROCESS::SUSPEND; } return STATEPROCESS::SUSPEND; } #endif //_NA_008350_20150617_SPA_NEW_STYLE_MODE_ANIMATION