#include "stdafx.h" #include "SGame.h" #include "SActionMgr.h" #include "SGameMessage.h" #include "SAction.h" #include "SDebug_Util.h" ////////////////////////////////////////////////////////////////////////// //SGameActionMgr extern float g_fEffectSpeed; SGameActionMgr::SGameActionMgr( SGame * pGame ) { m_pGame = pGame; m_fSpeed = 0.f; } SGameActionMgr::~SGameActionMgr() { std::vector< SGameAction* >::iterator it = m_ActExList.begin(); while( it != m_ActExList.end() ) { delete (*it); it = m_ActExList.erase( it ); } } void SGameActionMgr::Render( unsigned long uRenderBitVector, KViewportObject** ppViewportList, int nViewportCount ) { if( m_ActExList.empty() ) return; std::vector< SGameAction* >::iterator it = m_ActExList.begin(); while( it != m_ActExList.end() ) { if( (*it)->IsEnd() ) { delete (*it); it = m_ActExList.erase( it ); } else it++; } for( unsigned int i(0); m_ActExList.size()>i; i++ ) m_ActExList[i]->Render( uRenderBitVector, ppViewportList, nViewportCount); } void SGameActionMgr::Process( DWORD dwTime ) { if( m_ActExList.empty() ) return; for( unsigned int i(0); m_ActExList.size()>i; i++ ) m_ActExList[i]->Process(dwTime); } void SGameActionMgr::Test( SGameMessage* pMsg ) { //SMSG_SKILL_EVENT* pSkillEvent = static_cast(pMsg); //SkillBaseEx * pSkill = GetSkillDB().GetSkillData( pSkillEvent->skill_id ); //if( !pSkill ) return; //SActMagicArrow * pAct = new SActMagicArrow( pSkillEvent->caster, pSkillEvent->target, pSkill ); //pAct->SetMessageHandler( m_pGame ); //m_ActExList.push_back(pAct); } void SGameActionMgr::AddAction( SGameMessage* pMsg ) { g_fEffectSpeed = m_fSpeed; switch( pMsg->nType ) { case MSG_ATTACK : ActiveAttack ( static_cast(pMsg) ); break; case MSG_CMD_RESULT : ActiveCmd ( static_cast(pMsg) ); break; case MSG_SKILL_EVENT : ActiveSkill ( static_cast(pMsg) ); break; // case MSG_SKILL_EFFECT : ActiveSkillEff( static_cast(pMsg) ); break; } } void SGameActionMgr::AddTestAction( SGameMessage* pMsg ) { SGameAction * pAct = NULL; switch( pMsg->nType ) { case SKILL_LIGHTNING: { SActionLightningFx* pLightningFx = new SActionLightningFx; pAct = new SFireActMng( pLightningFx, static_cast(pMsg), m_pGame ); } break; case SKILL_HEALINGWAVE: { SActionHealingWaveFx* pHealingWaveFx = new SActionHealingWaveFx; pAct = new SFireActMng( pHealingWaveFx, static_cast(pMsg), m_pGame ); break; } case SKILL_BLESSINGHAMMER: { SActionBlessingHammer* pBlessingHammer = new SActionBlessingHammer; pAct = new SFireActMng( pBlessingHammer, static_cast(pMsg), m_pGame ); break; } } if( pAct ) m_ActExList.push_back(pAct); } void SGameActionMgr::ActiveAttack ( SMSG_ATTACK* pMsg ) { //활 발사~, 석궁.. FireAttack( pMsg ); } void SGameActionMgr::ActiveCmd( SMSG_CMD_RESULT* pMsg ) { //기본 명령어 하기 } //void SGameActionMgr::ActiveSkillEff( SMSG_SKILL_EFFECT* pMsg ) //{ //// FireSkill( pMsg ); //} void SGameActionMgr::ActiveSkill( SMSG_SKILL_EVENT* pMsg ) { FireSkill( pMsg ); } #include void SGameActionMgr::FireSkill( SMSG_SKILL_EVENT* pMsg ) { SGameAction * pAct = NULL; pAct = new SFireActMng( pMsg, m_pGame ); m_ActExList.push_back(pAct); } void SGameActionMgr::FireAttack( SMSG_ATTACK* pMsg ) { SGameAction * pAct = NULL; pAct = new SFireActMng( pMsg, m_pGame ); m_ActExList.push_back(pAct); }