92 lines
3.1 KiB
C#
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);
|
|
}
|
|
}
|
|
} |