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#
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()
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|