//------------------------------------------------------------------------------ // StateAir.cpp // (C) 2005 Webzen Sunstudio //------------------------------------------------------------------------------ #include "SunClientPrecompiledHeader.h" #include "statebase.h" #include "stateair.h" #include "Character.h" //------------------------------------------------------------------------------ /** */ StateAir::StateAir(void) { } //------------------------------------------------------------------------------ /** */ StateAir::~StateAir(void) { } //------------------------------------------------------------------------------ /** */ BOOL StateAir::CanTransite(Object* pOwner, DWORD CurTime, StateBase* pToTransiteState) { switch(pToTransiteState->GetStateKind()) { case 0: break; } return TRUE; } //------------------------------------------------------------------------------ /** */ STATECHANGE::TYPE StateAir::OnStart(Object* pOwner, DWORD CurTime) { Character* pChr = (Character*)pOwner; // Á¡ÇÁ ½ÃÀÛ¸ð¼Ç switch( pChr->GetWeaponAnimationCode() ) { case '0': pChr->SetAnimation( "HS01", FALSE); break; case '1': pChr->SetAnimation( "HS11", FALSE); break; case '2': pChr->SetAnimation( "HS21", FALSE); break; case '3': pChr->SetAnimation( "HS31", FALSE); break; } pChr->m_AirAnimationState = Character::AIR_ANIMATION_STATE_BLOW; pChr->m_fHeight = 0.001f; return STATECHANGE::SUCCESS; } //------------------------------------------------------------------------------ /** Áß·Â °¡¼Óµµ friend ¼³Á¤¶§¹®¿¡ ¸ðµç º¯¼ö¿¡ Á¢±Ù°¡´É ÀüºÎ ÀÛ¼ºÈÄ ÇÔ¼ö·Î ±³Ã¼ */ STATEPROCESS::TYPE StateAir::OnProcess(Object* pOwner, DWORD CurTime,DWORD dwTick) { Character* pChr = (Character*)pOwner; pChr->ProcessInterpolation(dwTick); float fRet = pChr->Character::ProcessAnimation(dwTick); #ifdef _NA_006688_20130502_1302_SKILL_RENEWAL_AIR_ANIMATION_RENEWAL if( pChr->m_AirAnimationState == Character::AIR_ANIMATION_STATE_BLOW ) { pChr->UpdateAir( dwTick ); if( pChr->m_AirData.m_NoDown == TRUE ) { // ¹ö¼­Ä¿ÀÇ ´õºí ¾îÅà if( pChr->GetHeight() == 0.0f ) { // ¹Ù´Ú¿¡ ÂøÁöÇϴ ŸÀֿ̹¡ ¿¬Ãâ pChr->SetAngleX( 0.0f ); pChr->SetHeight( 0.0f ); // ¶³¸²È¿°ú WzVector vUp; vUp.x = 0.0f; vUp.y = 0.0f; vUp.z = 1.0f; pChr->Vibrate(vUp,0.05f); // ¸ÕÁöÆ¢±â pChr->CreateEffectAtHead(StrToWzID("A012"),0.0f); // Á×¾úÀ¸¸é ¤³¤³~ if (pChr->GetHP() <= 0) { pChr->SetNextState(STATE::DEATH,g_CurTime); return STATEPROCESS::SUSPEND; } pChr->m_AirAnimationState = Character::AIR_ANIMATION_STATE_SLASH; fRet = 0.0f; } } else { // ¿¡¾îºí·Î¿ì if( pChr->GetHeight() == 0.0f ) { pChr->SetAngleX( 0.0f ); pChr->SetHeight( 0.0f ); // ¶³¸²È¿°ú WzVector vUp; vUp.x = 0.0f; vUp.y = 0.0f; vUp.z = 1.0f; pChr->Vibrate(vUp,0.05f); // ¸ÕÁöÆ¢±â pChr->CreateEffectAtHead(StrToWzID("A012"),0.0f); // Á×¾úÀ¸¸é ¤³¤³~ if (pChr->GetHP() <= 0) { pChr->SetNextState(STATE::DEATH,g_CurTime); return STATEPROCESS::SUSPEND; } // ¹Ù´Ú¿¡ ÆÐ´ó°ÜÃÄÁö´Â µ¿ÀÛ switch( pChr->GetWeaponAnimationCode() ) { case '0': pChr->SetAnimation( "HS04", FALSE); break; case '1': pChr->SetAnimation( "HS14", FALSE); break; case '2': pChr->SetAnimation( "HS24", FALSE); break; case '3': pChr->SetAnimation( "HS34", FALSE); break; } pChr->m_AirAnimationState = Character::AIR_ANIMATION_STATE_DOWN; fRet = 0.0f; } } } // ¹ö¼­Ä¿ÀÇ ´õºí¾îÅà ¾Ö´Ï¸ÞÀ̼ÇÀº ¿©±â¿¡¼­ ³¡³½´Ù if( pChr->m_AirAnimationState == Character::AIR_ANIMATION_STATE_SLASH && fRet == 100.0f ) { return STATEPROCESS::END; } // ¿¡¾îºí·Î¿ìÀÇ ÂøÁö¿Í ÀϾ´Â ¾Ö´Ï¸ÞÀÌ¼Ç Ã³¸® // ±¸¹öÀüÀº F002, F003 ¾Ö´Ï¸ÞÀ̼ÇÀ» ÀÌ¿ëÇØ ÂøÁöÈÄ Á¤½ÅÂ÷¸®´Â ¿¬ÃâÀ» ±¸ÇöÇß¾ú´Âµ¥ // F00X ½Ã¸®Áî´Â ´Ù¿î»óÅÂÀÇ ¾Ö´Ï¸ÞÀ̼ǿ¡¼­µµ »ç¿ëµÇ°í À־ ¸¶À½´ë·Î ¹Ù²ÙÁú ¸øÇÔ.. // // ±×·¡¼­ Àü¿ë ¾Ö´Ï¸ÞÀ̼ÇÀ» Ãß°¡ÇѰÍÀÌ HS07, HS08ÀÓ.. // ¹®Á¦´Â ÀÌ µÎ ¾Ö´Ï¸ÞÀ̼ÇÀº Ç÷¹À̾ °¡Áö°í Àִٴ°ÍÀε¥... // ±×·± ÀÌÀ¯·Î Ç÷¹À̾îµéÀº HS07, HS08 ¾Ö´Ï¸ÞÀ̼ÇÀ» »ç¿ëÇϱâ·ÎÇϰí, // ±×¿ÜÀÇ ¸ó½ºÅ͵îÀº ÀÌÀüÀÇ ¾Ö´Ï¸ÞÀ̼ÇÀÎ F002, F003À» ±×´ë·Î »ç¿ëÇϰԵȰÍÀÓ // // Ç÷¹À̾îÇü ¸ó½ºÅͰ¡ Á¸ÀçÇϱ⠶§¹®¿¡ ´Ü¼øÈ÷ ¿ÀºêÁ§Æ® ŸÀÔ¸¸À¸·Î´Â ½Äº°ÇÒ ¼ö ¾ø¾î // Class Á¤º¸¸¦ ÀÌ¿ëÇØ ½Äº°ÇÔ. SSQÀÌ ¾Æ´Ñ Ç÷¹À̾îÇü ¸ó½ºÅÍ´Â MONSTER_OBJECT·Î µÇ¾îÀֱ⶧¹®¿¡... // ´Ù¿î ¾Ö´Ï¸ÞÀÌ¼Ç ÂøÁöÈÄ ÀϾ´Â µ¿ÀÛ if( pChr->m_AirAnimationState == Character::AIR_ANIMATION_STATE_DOWN && fRet == 100.0f ) { bool is_monster = pChr->GetClass() == eCHAR_TYPE_MAX; // ´Ù¿î»óÅÂÀÇ ½ºÅÏ ¸ð¼Ç if( is_monster ) { switch( pChr->GetWeaponAnimationCode() ) { case '0': pChr->SetAnimation( "F002", TRUE); break; case '1': pChr->SetAnimation( "F102", TRUE); break; case '2': pChr->SetAnimation( "F202", TRUE); break; case '3': pChr->SetAnimation( "F302", TRUE); break; } } else { switch( pChr->GetWeaponAnimationCode() ) { case '0': pChr->SetAnimation( "HS07", TRUE); break; case '1': pChr->SetAnimation( "HS17", TRUE); break; case '2': pChr->SetAnimation( "HS27", TRUE); break; case '3': pChr->SetAnimation( "HS37", TRUE); break; } } pChr->m_AirAnimationState = Character::AIR_ANIMATION_STATE_DOWN_STUN; } #ifdef _NA_007619_20140916_PROCESS_CHANGE_AIRBLOW_DOWN // ÀϾ´Â µ¿ÀÛ ÈÄ »óÅ Á¾·á if( pChr->m_AirAnimationState == Character::AIR_ANIMATION_STATE_DOWN_STUN && fRet == 100.0f ) { return STATEPROCESS::END; } #else // ´Ù¿î ¾Ö´Ï¸ÞÀÌ¼Ç ÀϾ´Â µ¿ÀÛ if( pChr->m_AirAnimationState == Character::AIR_ANIMATION_STATE_DOWN_STUN && CurTime >= pChr->m_AirData.m_AirTime) { bool is_monster = pChr->GetClass() == eCHAR_TYPE_MAX; // ´Ù¿î»óÅ¿¡¼­ ÀϾ´Â ¸ð¼Ç if( is_monster ) { switch( pChr->GetWeaponAnimationCode() ) { case '0': pChr->SetAnimation( "F003", FALSE); break; case '1': pChr->SetAnimation( "F103", FALSE); break; case '2': pChr->SetAnimation( "F203", FALSE); break; case '3': pChr->SetAnimation( "F303", FALSE); break; } } else { switch( pChr->GetWeaponAnimationCode() ) { case '0': pChr->SetAnimation( "HS08", FALSE); break; case '1': pChr->SetAnimation( "HS18", FALSE); break; case '2': pChr->SetAnimation( "HS28", FALSE); break; case '3': pChr->SetAnimation( "HS38", FALSE); break; } } pChr->m_AirAnimationState = Character::AIR_ANIMATION_STATE_GETUP; fRet = 0.0f; } // ÀϾ´Â µ¿ÀÛ ÈÄ »óÅ Á¾·á if( pChr->m_AirAnimationState == Character::AIR_ANIMATION_STATE_GETUP && fRet == 100.0f ) { return STATEPROCESS::END; } #endif // _NA_007619_20140916_PROCESS_CHANGE_AIRBLOW_DOWN #else // _NA_006688_20130502_1302_SKILL_RENEWAL_AIR_ANIMATION_RENEWAL if( pChr->m_AirAnimationState == Character::AIR_ANIMATION_STATE_BLOW ) { pChr->UpdateAir( dwTick ); if( pChr->GetHeight() == 0.0f ) { pChr->SetAngleX( 0.0f ); pChr->SetHeight( 0.0f ); // ¶³¸²È¿°ú WzVector vUp; vUp.x = 0.0f; vUp.y = 0.0f; vUp.z = 1.0f; pChr->Vibrate(vUp,0.05f); // ¸ÕÁöÆ¢±â pChr->CreateEffectAtHead(StrToWzID("A012"),0.0f); // Á×¾úÀ¸¸é ¤³¤³~ if (pChr->GetHP() <= 0) { pChr->SetNextState(STATE::DEATH,g_CurTime); return STATEPROCESS::SUSPEND; } // ´Ù¿î µ¿ÀÛÀ¸·Î º¯°æ switch( pChr->GetWeaponAnimationCode() ) { case '0': pChr->SetAnimation( "F002", TRUE); break; case '1': pChr->SetAnimation( "F102", TRUE); break; case '2': pChr->SetAnimation( "F202", TRUE); break; case '3': pChr->SetAnimation( "F302", TRUE); break; } if( pChr->m_AirData.m_NoDown == TRUE ) { // ´Ù¿îµÇÁö ¾Ê°í ¹Ù·Î »óÅÂÁ¾·á return STATEPROCESS::END; } else { pChr->m_AirAnimationState = Character::AIR_ANIMATION_STATE_DOWN; } } } if( pChr->m_AirAnimationState == Character::AIR_ANIMATION_STATE_DOWN && CurTime >= pChr->m_AirData.m_AirTime) { switch( pChr->GetWeaponAnimationCode() ) { case '0': pChr->SetAnimation( "F003", FALSE); break; case '1': pChr->SetAnimation( "F103", FALSE); break; case '2': pChr->SetAnimation( "F203", FALSE); break; case '3': pChr->SetAnimation( "F303", FALSE); break; } pChr->m_AirAnimationState = Character::AIR_ANIMATION_STATE_GETUP; } if( pChr->m_AirAnimationState == Character::AIR_ANIMATION_STATE_GETUP && fRet == 100.0f ) { return STATEPROCESS::END; } #endif // _NA_006688_20130502_1302_SKILL_RENEWAL_AIR_ANIMATION_RENEWAL return STATEPROCESS::HOLD; } //------------------------------------------------------------------------------ /** */ STATECHANGE::TYPE StateAir::OnEnd(Object* pOwner, DWORD CurTime) { Character* pChr = (Character*)pOwner; pChr->SetAngleX( 0.0f ); pChr->SetHeight( 0.0f ); return STATECHANGE::SUCCESS; }