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);
	}
}
Example #2
0
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);
// 		}		
	}
}