diff --git a/Assets/Scripts/UnitBrains/Player/SecondUnitBrain.cs b/Assets/Scripts/UnitBrains/Player/SecondUnitBrain.cs index c2c80e989..9e18f92cf 100644 --- a/Assets/Scripts/UnitBrains/Player/SecondUnitBrain.cs +++ b/Assets/Scripts/UnitBrains/Player/SecondUnitBrain.cs @@ -1,12 +1,16 @@ -using System.Collections.Generic; +using Model; using Model.Runtime.Projectiles; +using System.Collections.Generic; +using System.Linq; using UnityEngine; +using Utilities; namespace UnitBrains.Player { public class SecondUnitBrain : DefaultPlayerUnitBrain { public override string TargetUnitName => "Cobra Commando"; + private List moveTarget = new List(); private const float OverheatTemperature = 3f; private const float OverheatCooldown = 2f; private float _temperature = 0f; @@ -26,21 +30,54 @@ protected override void GenerateProjectiles(Vector2Int forTarget, List SelectTargets() + public List SelectEnemyBaseAsTarget() { + RuntimeModel runtimeModel = new RuntimeModel(); + Vector2Int enemyBase = runtimeModel.RoMap.Bases[IsPlayerUnitBrain ? RuntimeModel.BotPlayerId : RuntimeModel.PlayerId]; + moveTarget.Add(enemyBase); + return new List { enemyBase }; + } + + public Vector2Int FindNearestTobaseTarget(List attackTargets) { - /////////////////////////////////////// - // Homework 1.4 (1st block, 4rd module) - /////////////////////////////////////// - List result = GetReachableTargets(); - while (result.Count > 1) + Vector2Int nearestToBaseTarget = attackTargets.FirstOrDefault(); + + foreach (Vector2Int target in attackTargets) { - result.RemoveAt(result.Count - 1); + if (DistanceToOwnBase(target) < DistanceToOwnBase(nearestToBaseTarget)) + { + nearestToBaseTarget = target; + } } - return result; - /////////////////////////////////////// + + return nearestToBaseTarget; + } + + protected override List SelectTargets() + { + moveTarget.Clear(); + List attackTargets = GetAllTargets().ToList(); + if (attackTargets.Count() == 0) { + return SelectEnemyBaseAsTarget(); + } + + Vector2Int nearestToBaseTarget = FindNearestTobaseTarget(attackTargets); + + attackTargets.Clear(); + + if (IsTargetInRange(nearestToBaseTarget)) { + attackTargets.Add(nearestToBaseTarget); + } + moveTarget.Add(nearestToBaseTarget); + + return attackTargets; } public override void Update(float deltaTime, float time)