You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
3.4 KiB
C#

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<Statistics>();
var hostilityLevel = Actor.FactionManager.GetActorFactionRelationship(targetActor);
var battleStrategizer = colliders[i].transform.gameObject.GetComponentInChildren<BattleStrategizer>();
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<Statistics>();
}
void Start()
{
}
void Update()
{
}
}
}