void CMonsterSquad::ProcessAttack() { m_enemy_map.clear (); m_temp_entities.clear (); // Выделить элементы с общими врагами и состянием атаки for (MEMBER_GOAL_MAP_IT it_goal = m_goals.begin(); it_goal != m_goals.end(); it_goal++) { // CEntity *member = it_goal->first; SMemberGoal goal = it_goal->second; if (goal.type == MG_AttackEnemy) { VERIFY(goal.entity && !goal.entity->getDestroy()); ENEMY_MAP_IT it = m_enemy_map.find(goal.entity); if (it != m_enemy_map.end()) { it->second.push_back(it_goal->first); } else { m_temp_entities.push_back (it_goal->first); m_enemy_map.insert (mk_pair(goal.entity, m_temp_entities)); } } } // Пройти по всем группам и назначить углы всем елементам в группе for (ENEMY_MAP_IT it_enemy = m_enemy_map.begin(); it_enemy != m_enemy_map.end(); it_enemy++) { Attack_AssignTargetDir(it_enemy->second,it_enemy->first); } }
void CMonsterSquad::ProcessAttack() { m_enemy_map.clear (); m_temp_entities.clear (); // Выделить элементы с общими врагами и состянием атаки for (MEMBER_GOAL_MAP_IT it_goal = m_goals.begin(); it_goal != m_goals.end(); it_goal++) { // CEntity *member = it_goal->first; SMemberGoal goal = it_goal->second; if (goal.type == MG_AttackEnemy) { VERIFY(goal.entity && !goal.entity->getDestroy()); ENEMY_MAP_IT it = m_enemy_map.find(goal.entity); if (it != m_enemy_map.end()) { it->second.push_back(it_goal->first); } else { m_temp_entities.push_back (it_goal->first); m_enemy_map.insert (mk_pair(goal.entity, m_temp_entities)); } } } // Пройти по всем группам и назначить углы всем елементам в группе for ( ENEMY_MAP_IT it_enemy=m_enemy_map.begin(); it_enemy!=m_enemy_map.end(); ++it_enemy ) { ENTITY_VEC* monsters = &(*it_enemy).second; if ( !monsters->size() ) { continue; } Attack_AssignTargetDir(it_enemy->second, it_enemy->first); // a squad of CBaseMonster-s ? // if ( smart_cast<CBaseMonster*>(*(monsters->begin())) ) // { // assign_monsters_target_dirs(it_enemy->second, it_enemy->first); // } // else // { // Attack_AssignTargetDir(it_enemy->second, it_enemy->first); // } } }