73 lines
2.7 KiB
C#
73 lines
2.7 KiB
C#
using UnityEngine;
|
|
|
|
namespace Invector.vCharacterController.AI.FSMBehaviour
|
|
{
|
|
#if UNITY_EDITOR
|
|
[vFSMHelpbox("Requires a ControlAIShooter - Shooter Combat based on this AI Controller Shooter Settings", UnityEditor.MessageType.Info)]
|
|
#endif
|
|
public class vShooterCombatAction : vSimpleCombatAction
|
|
{
|
|
public override string categoryName
|
|
{
|
|
get { return "Combat/"; }
|
|
}
|
|
public override string defaultName
|
|
{
|
|
get { return "Shooter Combat"; }
|
|
}
|
|
|
|
protected override void OnUpdateCombat(vIControlAICombat controller)
|
|
{
|
|
if (controller.currentTarget.transform == null) return;
|
|
|
|
if (controller != null)
|
|
{
|
|
if (controller.targetDistance > controller.attackDistance)
|
|
EngageTarget(controller);
|
|
else
|
|
CombatMovement(controller);
|
|
|
|
ControlLookPoint(controller);
|
|
HandleShotAttack(controller);
|
|
}
|
|
}
|
|
|
|
protected virtual void HandleShotAttack(vIControlAICombat controller)
|
|
{
|
|
controller.AimToTarget();
|
|
|
|
if (controller.canAttack)
|
|
controller.Attack();
|
|
}
|
|
|
|
protected override void EngageTarget(vIControlAICombat controller)
|
|
{
|
|
if (controller.currentTarget.transform == null)
|
|
return;
|
|
|
|
if (!controller.animatorStateInfos.HasAnyTag("Attack", "LockMovement", "CustomAction"))
|
|
{
|
|
var movepoint = (controller.lastTargetPosition);
|
|
controller.StrafeMoveTo(movepoint, movepoint - controller.transform.position,engageSpeed);
|
|
}
|
|
}
|
|
|
|
protected override void CombatMovement(vIControlAICombat controller)
|
|
{
|
|
if (controller.strafeCombatMovement)
|
|
StrafeCombatMovement(controller);
|
|
else
|
|
SimpleCombatMovement(controller);
|
|
}
|
|
|
|
protected override void SimpleCombatMovement(vIControlAICombat controller)
|
|
{
|
|
bool moveForward = controller.targetDistance > controller.combatRange * 0.8f;
|
|
bool moveBackward = controller.targetDistance < controller.minDistanceOfTheTarget;
|
|
var movepoint = (controller.lastTargetPosition);
|
|
var forwardMovement = (movepoint - controller.transform.position).normalized * (moveForward ? 1 + controller.stopingDistance : (moveBackward ? -(1 + controller.stopingDistance) : 0));
|
|
controller.StrafeMoveTo(controller.transform.position + forwardMovement, (movepoint - controller.transform.position).normalized,combatSpeed);
|
|
|
|
}
|
|
}
|
|
} |