2022-03-29 19:13:27 +02:00

92 lines
3.1 KiB
C#

using System;
using System.Linq;
using Data;
using DefaultNamespace.AI;
using UnityEngine;
namespace AI
{
public class Invader : Warior
{
public Invader(AIData data) : base(data)
{
}
public override BotState GetNewBehaviour(AIBase agent)
{
var enemy = GetNearestUnit(_data.DistanceToAgr, agent.UnitBase);
if (enemy != null && agent.UnitBase.Hp > agent.UnitBase.maxHP * _data.PercentToRetreet && enemy.IsAlive)
{
if (agent.UnitBase.Hp <= agent.UnitBase.maxHP * _data.PercentToRetreet ||
agent.UnitBase.BaseView.AvailableShots == 0)
{
SetBehaviour(BotState.Retreet, agent, 500);
return BotState.Retreet;
}
}
SetBehaviour(BotState.Patrol, agent, 500);
return BotState.Patrol;
}
}
public class Warior : AIManager
{
public Warior(AIData data) : base(data)
{
}
public override BotState GetNewBehaviour(AIBase agent)
{
var enemy = GetNearestUnit(_data.DistanceToAgr, agent.UnitBase);
if (enemy != null && agent.UnitBase.Hp > agent.UnitBase.maxHP * _data.PercentToRetreet && enemy.IsAlive)
{
if (agent.UnitBase.Hp <= agent.UnitBase.maxHP * _data.PercentToRetreet ||
agent.UnitBase.BaseView.AvailableShots == 0)
{
SetBehaviour(BotState.Retreet, agent, 500);
return BotState.Retreet;
}
if (Vector3.Distance(agent.UnitBase.Instance.transform.position, enemy.Instance.transform.position) <=
agent.UnitBase.Weapon.disnatce)
{
SetBehaviour(BotState.Attack, agent, 500);
return BotState.Attack;
}
SetBehaviour(BotState.Agressive, agent, 500);
return BotState.Agressive;
}
SetBehaviour(BotState.Patrol, agent, 500);
return BotState.Patrol;
}
protected override void SetBehaviour(BotState state, AIBase agent, int dist)
{
switch (state)
{
case BotState.Patrol:
StartPatrolBehaviour(agent);
break;
case BotState.Agressive:
MoveToEnemy(agent, dist);
break;
case BotState.Attack:
AttackEnemy(agent);
break;
case BotState.Dead:
break;
case BotState.Retreet:
Retreet(agent);
break;
default:
throw new ArgumentOutOfRangeException(nameof(state), state, null);
}
}
protected override void InitAI(AIBase agent)
{
SetBehaviour(BotState.Patrol, agent, 500);
}
}
}