void CreatureManager::Strategy() { //当前有单位行动中,等待其行动完成 if(m_nActionCreatureNum != -1) return; ResetAllCreature(); if (m_eCampTurn == eCampTurn_Enemy) { Character* enemy = GetNextEnemy(); if(enemy == NULL) return; if(enemy->GetActionStage() == eActionStage_WaitStage) { enemy->SetActionStage(eActionStage_MoveStage); m_nActionCreatureNum = enemy->GetNum(); //m_nSelectNum = m_nActionCreatureNum; int xMove = g_RandomInt(0,enemy->GetMoveAbility()); int yMove = enemy->GetMoveAbility() - xMove; int xDir = (g_RandomInt(0,1)==0)?-1:1; int yDir = (g_RandomInt(0,1)==0)?-1:1; eErrorCode errorCode = enemy->Move(enemy->GetBlock().xpos+xMove*xDir,enemy->GetBlock().ypos+yMove*yDir); //测试 if (errorCode != eErrorCode_Success) { enemy->SetFinish(true); } } } // enemy->Move((Direction)(App::sInstance().GetHGE()->Random_Int(0,4))); }
void CreatureManager::Update(float delta) { for (VCharacter::iterator it=m_VEnemyList.begin();it!=m_VEnemyList.end();it++) (*it)->Update(delta); for (VCharacter::iterator it=m_VFriendList.begin();it!=m_VFriendList.end();it++) (*it)->Update(delta); if(m_nActionCreatureNum != -1) { Character* cha = GetEnemy(m_nActionCreatureNum); if(cha->GetFinish()) m_nActionCreatureNum = -1; //测试用 if (cha->GetCamp() == eCamp_Enemy && cha->GetActionStage() == eActionStage_AttackStage) { m_nActionCreatureNum = -1; cha->SetFinish(true); } } SelectCreature(); UnSelectCreature(); ShowCreatureInfo(); }
void CreatureManager::Update(float delta) { for (VCharacter::iterator it=m_VEnemyList.begin();it!=m_VEnemyList.end();it++) { if((*it)->GetDead() == true) m_VEnemyDeadList.push_back(*it); else (*it)->Update(delta); } for (VCharacter::iterator it=m_VFriendList.begin();it!=m_VFriendList.end();it++) { if((*it)->GetDead() == true) m_VFriendDeadList.push_back(*it); else (*it)->Update(delta); } //移除死亡单位 for (int i=0;i<m_VEnemyDeadList.size();i++) { RemoveEnemy(m_VEnemyDeadList[i]); } m_VEnemyDeadList.clear(); for (int i=0;i<m_VFriendDeadList.size();i++) { RemoveEnemy(m_VFriendDeadList[i]); } m_VFriendDeadList.clear(); if(m_nActionCreatureNum != -1) { Character* cha = GetEnemy(m_nActionCreatureNum); if(cha->GetFinish()) m_nActionCreatureNum = -1; //测试用 if (cha->GetCamp() == eCamp_Enemy && cha->GetActionStage() == eActionStage_HandleStage) { m_nActionCreatureNum = -1; cha->SetFinish(true); } } SelectCreature(); UnSelectCreature(); ShowCreatureInfo(); }
int CreatureManager::Notify(int src,int tar,int messageID,int param) { int result = -1; Character* target = GetCreature(tar); if (!target) result = eNotify_NoTarget; switch(messageID) { case eNotify_TowardToAttacker: result = target->TowardToAttacker(src); break; case eNotify_ReadyToBeAttacked: { //计算是否暴击 bool bCrit = false; if (g_RandomInt(0,9) < (int)(target->GetCrit()*10)) bCrit = true; Character* _self = GetCreature(src); if(_self) CalculateHurt(target,_self,bCrit); if(!bCrit) target->Attack(); else target->Crit(); result = eNotify_Success; break; } case eNotify_FinishAttack: { target->SetFinish(true); } break; default: break; } return result; }