public override void Start() { List <EncounterAgent> potentialEnemies = encounter.GetEnemiesInEncounter(controlledShip.GetComponent <EncounterAgent>()); float shortestSquaredDist = 0f; EncounterAgent closestEnemy = null; foreach (var enemy in potentialEnemies) { float squaredDist = (controlledShip.transform.position - enemy.transform.position).sqrMagnitude; Dockable dockableComponent = enemy.GetComponent <Dockable>(); if (dockableComponent == null || dockableComponent.Docked == false) { if ((closestEnemy == null || squaredDist < shortestSquaredDist)) { closestEnemy = enemy; shortestSquaredDist = squaredDist; } } } if (closestEnemy != null) { Succeed(); onTargetFoundCallback(closestEnemy); } else { Fail("ENCOUNTER OVER"); } }
public void AssignNewTarget(EncounterAgent target) { this.target = target; targetPilot = target.GetComponent <ShipPiloting>(); targetEngines = target.GetComponent <ShipEngine>(); Start(); }
private void OnTargetFound(EncounterAgent target) { if (attackTarget.Target != target) { attackTarget.AssignNewTarget(target); } }
public Encounter(EncounterAgent initiator, EncounterAgent initialTarget) { for (int facID = 0; facID < Ownership.FactionCount; facID++) { encounterMembers[facID] = new HashSet <EncounterAgent>(); } AddToEncounter(initiator); AddToEncounter(initialTarget); All.Add(this); }
private void OnTargetFound(EncounterAgent target) { // When a target is found, we start an Encounter. // if the target is already in an encounter, then we join it ? if (target.CurrentEncounter == null) { controlledEncounterAgent.StartEncounter(target); } else { target.CurrentEncounter.AddToEncounter(controlledEncounterAgent); } }
public DefendAreaBehavior(Vector2 area, float areaRadius, GameObject ship, AIOrderQueue orderQueue) : base(ship, orderQueue) { areaCenter = area; radius = areaRadius; goToAreaCenterOrder = new GoToOrder(ship, area, areaRadius); goToAreaCenterOrder.OnStateSucceeded += GoToAreaCenterOrder_OnStateSucceeded; controlledEncounterAgent = controlledShip.GetComponent <EncounterAgent>(); controlledEncounterAgent.OnEncounterJoined += ControlledEncounterAgent_OnEncounterJoined; controlledEncounterAgent.OnEncounterLeft += ControlledEncounterAgent_OnEncounterLeft; resolveEncounterOrder = new ResolveEncounterOrder(ship, controlledEncounterAgent); findTargetOrder = new LookForTargetOrder(ship, OnTargetFound, areaRadius); }
public List <EncounterAgent> GetEnemiesInEncounter(EncounterAgent agent) { List <EncounterAgent> enemies = new List <EncounterAgent>(); uint[] enemyFactionIDs = agent.GetComponent <Ownership>().GetEnemyFactionIDs(); foreach (var enemyFactionID in enemyFactionIDs) { foreach (var enemy in encounterMembers[enemyFactionID]) { enemies.Add(enemy); } } return(enemies); }
public override void Start() { uint myFaction = controlledShip.GetComponent <Ownership>().OwnerFactionID; List <Ownership[]> potentialEnemies = new List <Ownership[]>(); for (int facID = 1; facID < Ownership.FactionCount; facID++) { if (facID != myFaction) { potentialEnemies.Add(Ownership.GetFactionMembers(facID)); } } float shortestSquaredDist = 0f; EncounterAgent closestEnemy = null; foreach (var enemyGroup in potentialEnemies) { foreach (var enemy in enemyGroup) { EncounterAgent encounterAgent = enemy.GetComponent <EncounterAgent>(); Dockable dockableComponent = enemy.GetComponent <Dockable>(); if (encounterAgent != null && (dockableComponent == null || dockableComponent.Docked == false)) { float squaredDist = (controlledShip.transform.position - enemy.transform.position).sqrMagnitude; if (squaredDist < maxDistance * maxDistance && (closestEnemy == null || squaredDist < shortestSquaredDist)) { closestEnemy = encounterAgent; shortestSquaredDist = squaredDist; } } } } if (closestEnemy != null) { Succeed(); targetFoundCallback(closestEnemy); } else { Fail("NO ENEMY IN RANGE"); } }
public ResolveEncounterOrder(GameObject ship, EncounterAgent encounterAgent) : base(ship) { this.encounterAgent = encounterAgent; this.encounterAgent.OnEncounterLeft += EncounterAgent_OnEncounterLeft; this.encounterAgent.OnEncounterJoined += EncounterAgent_OnEncounterJoined; float combatRange = 10f; if (ship.GetComponent <ShipProperties>().Size == SHIP_SIZE.M) { combatRange = 40f; } attackTarget = new AttackTargetOrder(ship, combatRange); lookForTargetInEncounter = new LookForTargetInEncounterOrder(ship, OnTargetFound); lookForTargetInEncounter.OnStateFailed += LookForTargetInEncounter_OnStateFailed; }
public AttackTargetOrder(GameObject ship, EncounterAgent target, float attackRange) : base(ship) { this.attackRange = attackRange; AssignNewTarget(target); }
public void RemoveFromEncounter(EncounterAgent agent) { encounterMembers[agent.GetComponent <Ownership>().OwnerFactionID].Remove(agent); agent.EncounterLeft(); }
public void AddToEncounter(EncounterAgent agent) { encounterMembers[agent.GetComponent <Ownership>().OwnerFactionID].Add(agent); agent.EncounterJoined(this); }
public void StartEncounter(EncounterAgent otherAgent) { new Encounter(this, otherAgent); }