From 2800af6b07b4cf8ba5241784b76582b2e77355ed Mon Sep 17 00:00:00 2001 From: emakarov Date: Mon, 1 Jun 2026 22:15:05 +0300 Subject: [PATCH] =?UTF-8?q?HW=20Most=20Dangerous=20Target=20@Evgen11=5FSt?= =?UTF-8?q?=20=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9C=D0=B0?= =?UTF-8?q?=D0=BA=D0=B0=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UnitBrains/Player/SecondUnitBrain.cs | 59 +++++++++++++++---- 1 file changed, 48 insertions(+), 11 deletions(-) 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)