using System.Collections; using System.Collections.Generic; using UnityEngine; using SiegeSong; namespace SiegeSong { public class TargetSelector : MonoBehaviour { public BattleStrategizer Strategizer; public StatisticsManager Actor; int comparisonIterations = 3; public void FindCombatTarget() { var colliders = Physics.OverlapSphere(gameObject.transform.position, Actor.Awareness.MaxMediumDistance); if (colliders.Length == 0) { } var comparisonIteration = 0; var highestConfidenceTargetIndex = 0; var highestConfidenceScore = 0; for (var i = 0; i < colliders.Length; i++) { var targetActor = colliders[i].transform.gameObject.GetComponent(); var hostilityLevel = Actor.FactionManager.GetActorFactionRelationship(targetActor); var battleStrategizer = colliders[i].transform.gameObject.GetComponentInChildren(); if (targetActor != null && comparisonIteration < comparisonIterations) { var actorFactionRelationship = Actor.FactionManager.GetActorFactionRelationship(targetActor); switch (actorFactionRelationship) { case FactionRelationship.Allies: if (battleStrategizer.TargetStats != null) { Strategizer.TargetStats = battleStrategizer.TargetStats; battleStrategizer.DetermineConfidenceLevel(); if (battleStrategizer.ConfidenceScore > highestConfidenceScore) { highestConfidenceScore = battleStrategizer.ConfidenceScore; highestConfidenceTargetIndex = i; comparisonIteration++; } } break; case FactionRelationship.Rivals: case FactionRelationship.Enemies: case FactionRelationship.Combatants: if (actorFactionRelationship == FactionRelationship.Combatants && Actor.Stats.InCombat) { Strategizer.TargetStats = battleStrategizer.TargetStats; battleStrategizer.DetermineConfidenceLevel(); if (battleStrategizer.ConfidenceScore > highestConfidenceScore) { highestConfidenceScore = battleStrategizer.ConfidenceScore; highestConfidenceTargetIndex = i; comparisonIteration++; } } break; } } battleStrategizer.DetermineConfidenceLevel(); } Strategizer.TargetStats = colliders[highestConfidenceTargetIndex].transform.gameObject.GetComponent(); } void Start() { } void Update() { } } }