using System; using System.Collections.Generic; using UnityEngine; // The assignment class is an interface for assigning a target to each missile. public interface IAssignment { // Assignment item type. // The first element corresponds to the missile index, and the second element // corresponds to the target index. public struct AssignmentItem { public int MissileIndex; public int TargetIndex; public AssignmentItem(int missileIndex, int targetIndex) { MissileIndex = missileIndex; TargetIndex = targetIndex; } } // A list containing the missile-target assignments. // Assign a target to each missile that has not been assigned a target yet. public abstract IEnumerable<AssignmentItem> Assign(List<Agent> missiles, List<Agent> targets); // Get the list of assignable missile indices. protected static List<int> GetAssignableMissileIndices(List<Agent> missiles) { List<int> assignableMissileIndices = new List<int>(); for (int missileIndex = 0; missileIndex < missiles.Count; missileIndex++) { if (missiles[missileIndex].IsAssignable()) { assignableMissileIndices.Add(missileIndex); } } return assignableMissileIndices; } // Get the list of active target indices. protected static List<int> GetActiveTargetIndices(List<Agent> targets) { List<int> activeTargetIndices = new List<int>(); for (int targetIndex = 0; targetIndex < targets.Count; targetIndex++) { if (!targets[targetIndex].IsHit()) { activeTargetIndices.Add(targetIndex); } } return activeTargetIndices; } }