155 lines
3.7 KiB
C#
155 lines
3.7 KiB
C#
|
|
using System.Collections;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using UnityEngine;
|
|||
|
|
|
|||
|
|
public class useCustomAbilitySimpleAIAction : simpleAIAction
|
|||
|
|
{
|
|||
|
|
[Header ("Custom Settings")]
|
|||
|
|
[Space]
|
|||
|
|
|
|||
|
|
public string currentAbilityName;
|
|||
|
|
|
|||
|
|
public float minWaitTimeToFinishAbility = 0.4f;
|
|||
|
|
|
|||
|
|
public float waitTimeToUseAbility = 0.5f;
|
|||
|
|
|
|||
|
|
[Space]
|
|||
|
|
[Header ("Other Settings")]
|
|||
|
|
[Space]
|
|||
|
|
|
|||
|
|
public bool setMoveNavMeshPaused;
|
|||
|
|
public float moveNamveshPausedDuration;
|
|||
|
|
|
|||
|
|
[Space]
|
|||
|
|
[Header ("Debug")]
|
|||
|
|
[Space]
|
|||
|
|
|
|||
|
|
public bool abilityInProcess;
|
|||
|
|
|
|||
|
|
[Space]
|
|||
|
|
[Header ("Components")]
|
|||
|
|
[Space]
|
|||
|
|
|
|||
|
|
public AIAbilitiesSystemBrain mainAIAbilitiesSystemBrain;
|
|||
|
|
public findObjectivesSystem mainFindObjectivesSystem;
|
|||
|
|
public AINavMesh mainAINavmesh;
|
|||
|
|
|
|||
|
|
|
|||
|
|
float lastTimeAbilityUsed;
|
|||
|
|
|
|||
|
|
bool targetInfoAssigned;
|
|||
|
|
|
|||
|
|
bool abilityActivated;
|
|||
|
|
|
|||
|
|
Coroutine setMoveNavMeshPausedCoroutine;
|
|||
|
|
|
|||
|
|
|
|||
|
|
public void setCurrentAbilityName (string abilityName)
|
|||
|
|
{
|
|||
|
|
currentAbilityName = abilityName;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void setCurrentAbilityNameAndStartAIAction (string abilityName)
|
|||
|
|
{
|
|||
|
|
setCurrentAbilityName (abilityName);
|
|||
|
|
|
|||
|
|
startAIAction ();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override void startAIAction ()
|
|||
|
|
{
|
|||
|
|
base.startAIAction ();
|
|||
|
|
|
|||
|
|
if (actionActive) {
|
|||
|
|
abilityActivated = false;
|
|||
|
|
|
|||
|
|
targetInfoAssigned = false;
|
|||
|
|
|
|||
|
|
lastTimeAbilityUsed = Time.time;
|
|||
|
|
|
|||
|
|
abilityInProcess = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override void updateSystem ()
|
|||
|
|
{
|
|||
|
|
if (!actionActive) {
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (!mainAIAbilitiesSystemBrain.isAbilityInProcess () && Time.time > minWaitTimeToFinishAbility + lastTimeAbilityUsed) {
|
|||
|
|
endAIAction ();
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (setMoveNavMeshPaused) {
|
|||
|
|
mainAINavmesh.setMoveNavMeshPausedDuringActionState (true);
|
|||
|
|
|
|||
|
|
if (moveNamveshPausedDuration > 0) {
|
|||
|
|
if (setMoveNavMeshPausedCoroutine != null) {
|
|||
|
|
StopCoroutine (setMoveNavMeshPausedCoroutine);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
setMoveNavMeshPausedCoroutine = StartCoroutine (updateSetMoveNavMeshPausedCoroutine ());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (targetInfoAssigned) {
|
|||
|
|
|
|||
|
|
mainFindObjectivesSystem.lookAtCurrentPlaceToShoot ();
|
|||
|
|
|
|||
|
|
mainAINavmesh.lookAtTaget (true);
|
|||
|
|
|
|||
|
|
mainAINavmesh.moveNavMesh (Vector3.zero, false, false);
|
|||
|
|
} else {
|
|||
|
|
if (currentTarget != null) {
|
|||
|
|
mainFindObjectivesSystem.setCustomTargetToLook (currentTarget.gameObject);
|
|||
|
|
|
|||
|
|
targetInfoAssigned = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!abilityActivated) {
|
|||
|
|
if (Time.time > waitTimeToUseAbility + lastTimeAbilityUsed) {
|
|||
|
|
mainAIAbilitiesSystemBrain.setAndActivateAbilityByName (currentAbilityName);
|
|||
|
|
|
|||
|
|
abilityActivated = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override void resetStatesOnActionEnd ()
|
|||
|
|
{
|
|||
|
|
mainAIAbilitiesSystemBrain.setAndActivateAbilityByName (currentAbilityName);
|
|||
|
|
|
|||
|
|
mainFindObjectivesSystem.AINavMeshManager.lookAtTaget (false);
|
|||
|
|
|
|||
|
|
mainFindObjectivesSystem.AINavMeshManager.moveNavMesh (Vector3.zero, false, false);
|
|||
|
|
|
|||
|
|
mainFindObjectivesSystem.resetAITargets ();
|
|||
|
|
|
|||
|
|
if (setMoveNavMeshPaused) {
|
|||
|
|
if (moveNamveshPausedDuration <= 0) {
|
|||
|
|
mainAINavmesh.setMoveNavMeshPausedDuringActionState (false);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
abilityInProcess = false;
|
|||
|
|
|
|||
|
|
currentTarget = null;
|
|||
|
|
|
|||
|
|
abilityActivated = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
IEnumerator updateSetMoveNavMeshPausedCoroutine ()
|
|||
|
|
{
|
|||
|
|
WaitForSeconds delay = new WaitForSeconds (moveNamveshPausedDuration);
|
|||
|
|
|
|||
|
|
yield return delay;
|
|||
|
|
|
|||
|
|
mainAINavmesh.setMoveNavMeshPausedDuringActionState (false);
|
|||
|
|
}
|
|||
|
|
}
|