Fixed to target assignment, 3 salvo hydra70 config
This commit is contained in:
@@ -65,6 +65,10 @@ public abstract class Agent : MonoBehaviour
|
||||
_target = target;
|
||||
}
|
||||
|
||||
public Agent GetAssignedTarget() {
|
||||
return _target;
|
||||
}
|
||||
|
||||
public bool HasAssignedTarget() {
|
||||
return _target != null;
|
||||
}
|
||||
@@ -90,7 +94,7 @@ public abstract class Agent : MonoBehaviour
|
||||
}
|
||||
|
||||
public void TerminateAgent() {
|
||||
_flightPhase = FlightPhase.TERMINATED;
|
||||
_flightPhase = FlightPhase.TERMINATED;
|
||||
transform.position = new Vector3(0, 0, 0);
|
||||
gameObject.SetActive(false);
|
||||
}
|
||||
@@ -103,6 +107,10 @@ public abstract class Agent : MonoBehaviour
|
||||
|
||||
public void MarkAsMiss() {
|
||||
_isMiss = true;
|
||||
if(_target != null) {
|
||||
SimManager.Instance.RegisterTargetMiss(_target as Target);
|
||||
_target = null;
|
||||
}
|
||||
TerminateAgent();
|
||||
}
|
||||
|
||||
|
||||
@@ -34,9 +34,27 @@ public class ThreatAssignment : IAssignment
|
||||
if (missiles[missileIndex].HasAssignedTarget()) continue;
|
||||
if (threatInfos.Count == 0) break;
|
||||
|
||||
ThreatInfo highestThreat = threatInfos[0];
|
||||
assignments.Add(new IAssignment.AssignmentItem(missileIndex, highestThreat.TargetIndex));
|
||||
threatInfos.RemoveAt(0);
|
||||
// Find the optimal target for this missile based on distance and threat
|
||||
ThreatInfo optimalTarget = null;
|
||||
float optimalScore = float.MinValue;
|
||||
|
||||
foreach (ThreatInfo threat in threatInfos)
|
||||
{
|
||||
float distance = Vector3.Distance(missiles[missileIndex].transform.position, targets[threat.TargetIndex].transform.position);
|
||||
float score = threat.ThreatLevel / distance; // Balance threat level with proximity
|
||||
|
||||
if (score > optimalScore)
|
||||
{
|
||||
optimalScore = score;
|
||||
optimalTarget = threat;
|
||||
}
|
||||
}
|
||||
|
||||
if (optimalTarget != null)
|
||||
{
|
||||
assignments.Add(new IAssignment.AssignmentItem(missileIndex, optimalTarget.TargetIndex));
|
||||
threatInfos.Remove(optimalTarget);
|
||||
}
|
||||
}
|
||||
return assignments;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ using UnityEngine;
|
||||
|
||||
public class Micromissile : Missile
|
||||
{
|
||||
[SerializeField] private float _navigationGain = 3f; // Typically 3-5
|
||||
[SerializeField] private float _navigationGain = 5f; // Typically 3-5
|
||||
|
||||
private SensorOutput _sensorOutput;
|
||||
private Vector3 _accelerationCommand;
|
||||
@@ -32,7 +32,6 @@ public class Micromissile : Missile
|
||||
SensorOutput sensorOutput = GetComponent<Sensor>().Sense(_target);
|
||||
if(sensorOutput.velocity.range > 1000f) {
|
||||
this.MarkAsMiss();
|
||||
_target.MarkAsMiss();
|
||||
}
|
||||
|
||||
// Calculate the acceleration input
|
||||
|
||||
@@ -29,7 +29,7 @@ public class Missile : Agent
|
||||
protected override void UpdateReady(double deltaTime) {
|
||||
Vector3 accelerationInput = Vector3.zero;
|
||||
Vector3 acceleration = CalculateAcceleration(accelerationInput);
|
||||
GetComponent<Rigidbody>().AddForce(acceleration, ForceMode.Acceleration);
|
||||
//GetComponent<Rigidbody>().AddForce(acceleration, ForceMode.Acceleration);
|
||||
}
|
||||
|
||||
protected override void Update() {
|
||||
|
||||
@@ -15,8 +15,8 @@ public class SimManager : MonoBehaviour
|
||||
|
||||
|
||||
private List<Missile> _missiles = new List<Missile>();
|
||||
private HashSet<Target> _unassignedTargets = new HashSet<Target>();
|
||||
private HashSet<Target> _targets = new HashSet<Target>();
|
||||
private List<Target> _unassignedTargets = new List<Target>();
|
||||
private List<Target> _targets = new List<Target>();
|
||||
private float _elapsedSimulationTime = 0f;
|
||||
private float endTime = 100f; // Set an appropriate end time
|
||||
private bool simulationRunning = false;
|
||||
@@ -83,6 +83,10 @@ public class SimManager : MonoBehaviour
|
||||
AssignMissilesToTargets(_missiles);
|
||||
}
|
||||
|
||||
public void RegisterTargetMiss(Target target) {
|
||||
_unassignedTargets.Add(target);
|
||||
}
|
||||
|
||||
public void AssignMissilesToTargets(List<Missile> missilesToAssign)
|
||||
{
|
||||
|
||||
@@ -100,12 +104,14 @@ public class SimManager : MonoBehaviour
|
||||
if (assignment.MissileIndex < missilesToAssign.Count)
|
||||
{
|
||||
Missile missile = missilesToAssign[assignment.MissileIndex];
|
||||
Target target = _targets.ElementAt(assignment.TargetIndex);
|
||||
Target target = _unassignedTargets[assignment.TargetIndex];
|
||||
missile.AssignTarget(target);
|
||||
Debug.Log($"Missile {missile.name} assigned to target {target.name}");
|
||||
_unassignedTargets.Remove(target);
|
||||
|
||||
}
|
||||
}
|
||||
// TODO this whole function should be optimized
|
||||
_unassignedTargets.RemoveAll(target => missilesToAssign.Any(missile => missile.GetAssignedTarget() == target));
|
||||
}
|
||||
|
||||
public Missile CreateMissile(AgentConfig config)
|
||||
|
||||
Reference in New Issue
Block a user