poprawki materialy unity 6, pajaki, podmiana katalogu FSM w AIControlerze, zmiana w Spider 2.0 Behaviours , skopane zycie bylo, ladowalo pajaka z zyciem 2.

This commit is contained in:
szczuras4
2024-12-28 00:03:40 +01:00
parent c596494d77
commit e75b093317
553 changed files with 48087 additions and 68332 deletions

View File

@@ -9,3 +9,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/TriggerSimpleAttack.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vAIAttack.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vAIClearTarget.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vAIFindTargetAction.cs
uploadId: 601882

View File

@@ -36,6 +36,8 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
protected virtual void Flee(vIFSMBehaviourController fsmBehaviour)
{
if (Time.timeScale <= 0f) return;
// FLEEING FROM DAMAGE SENDER
if (fsmBehaviour != null && fsmBehaviour.aiController.receivedDamage.isValid && fsmBehaviour.aiController.receivedDamage.lastSender != null)
{
@@ -53,7 +55,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
fleeDir = Quaternion.Euler(0, Random.Range(-(5 * i), 5 * i), 0) * fleeDir.normalized;
fleeDir.y = 0f;
if (debugFleeDirection) Debug.DrawRay(fsmBehaviour.aiController.transform.position, fleeDir * fleeDistance, Color.yellow, 10f);
fsmBehaviour.aiController.MoveTo(fsmBehaviour.aiController.transform.position + fleeDir * fleeDistance, fleeSpeed);
fsmBehaviour.aiController.ForceUpdatePath();
}
@@ -77,7 +79,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
var fleeDir = fsmBehaviour.aiController.transform.position - threatPoint;
fleeDir = Quaternion.Euler(0, Random.Range(-(5 * i), 5 * i), 0) * fleeDir.normalized;
if (debugFleeDirection) Debug.DrawRay(fsmBehaviour.aiController.transform.position, fleeDir * fleeDistance, Color.yellow, 10f);
fsmBehaviour.aiController.MoveTo(fsmBehaviour.aiController.transform.position + fleeDir * fleeDistance,fleeSpeed);
fsmBehaviour.aiController.MoveTo(fsmBehaviour.aiController.transform.position + fleeDir * fleeDistance, fleeSpeed);
fsmBehaviour.aiController.ForceUpdatePath();
}
}
@@ -97,8 +99,8 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
if (debugMode) Debug.Log("Fleeing without target or damage sender");
var fleeDir = fsmBehaviour.aiController.transform.forward;
fleeDir = Quaternion.Euler(0, Random.Range(-(10 * i), 10 * (i)), 0) * fleeDir.normalized;
if (debugFleeDirection) Debug.DrawRay(fsmBehaviour.aiController.transform.position, fleeDir * fleeDistance, Color.yellow, 10f);
fsmBehaviour.aiController.MoveTo(fsmBehaviour.aiController.transform.position + fleeDir * fleeDistance,fleeSpeed);
if (debugFleeDirection) Debug.DrawRay(fsmBehaviour.aiController.transform.position, fleeDir * fleeDistance, Color.yellow, 10f);
fsmBehaviour.aiController.MoveTo(fsmBehaviour.aiController.transform.position + fleeDir * fleeDistance, fleeSpeed);
fsmBehaviour.aiController.ForceUpdatePath();
}
}

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vAIFlee.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vAIGetCoverAction.cs
uploadId: 601882

View File

@@ -1,7 +1,9 @@
namespace Invector.vCharacterController.AI.FSMBehaviour
using UnityEngine;
namespace Invector.vCharacterController.AI.FSMBehaviour
{
#if UNITY_EDITOR
[vFSMHelpbox("Requires a AIMessageReceiver attached to your AI Controller - This will send a message to your Controller, so you can triggers custom Events", UnityEditor.MessageType.Info)]
[vFSMHelpbox("Requires a vMessageReceiver attached to your AI Controller - This will send a message to your Controller, so you can trigger custom Events", UnityEditor.MessageType.Info)]
#endif
public class vAISendMessage : vStateAction
{
@@ -18,11 +20,24 @@
{
executionType = vFSMComponentExecutionType.OnStateEnter;
}
public string listenerName;
public string message;
public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
{
if (fsmBehaviour.messageReceiver) fsmBehaviour.messageReceiver.Send(listenerName, message);
// Pobranie komponentu vMessageReceiver
var receiver = fsmBehaviour.gameObject.GetComponent<vMessageReceiver>();
// Jeśli komponent istnieje, wysyła wiadomość
if (receiver != null)
{
receiver.Send(listenerName, message);
}
else
{
Debug.LogWarning($"vMessageReceiver not found on {fsmBehaviour.gameObject.name}. Cannot send message.");
}
}
}
}
}

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vAISendMessage.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vAISetDetectionLayer.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vAISetDetectionTags.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vAISetLineOfSight.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vAISetObstaclesLayer.cs
uploadId: 601882

View File

@@ -23,12 +23,16 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
[vHelpBox("Use this to ignore attack time")]
public bool forceCanAttack;
[Tooltip("This action will check if aim is enabled using vAnimatorTag with (Upperbody Pose) tag on layer setted")]
public int aimLayer = 4;
[Tooltip("The shot rountine just will run when Aim angle is in Max Angle To Shot (Inspector of vControlAIShooter>ShooterSettings")]
public bool onlyShotWhenInAngle;
public bool debug;
public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
{
if (fsmBehaviour.aiController is vIControlAIShooter)
{
ControlAttack(fsmBehaviour, fsmBehaviour.aiController as vIControlAIShooter);
ControlAttack(fsmBehaviour, fsmBehaviour.aiController as vIControlAIShooter,executionType);
}
}
@@ -56,8 +60,14 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
protected virtual void HandleAttack(vIFSMBehaviourController fsmBehaviour, vIControlAIShooter combat)
{
combat.AimToTarget();
if (!combat.isAiming) return;
combat.AimToTarget(.2f);
bool validAimAngle = onlyShotWhenInAngle ? combat.IsInShotAngle : true;
if (!validAimAngle || !combat.isAiming || !combat.animatorStateInfos.HasTag("Upperbody Pose") || combat.animator.IsInTransition(aimLayer) || combat.animator.GetCurrentAnimatorStateInfo(aimLayer).normalizedTime < 0.9f) return;
if (debug)
{
Debug.Log("Trigger Shooter Attack");
fsmBehaviour.SendDebug("Trigger Shooter Attack", this);
}
combat.Attack(forceCanAttack: forceCanAttack);
}

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vAIShooterAttack.cs
uploadId: 601882

View File

@@ -3,7 +3,6 @@
namespace Invector.vCharacterController.AI.FSMBehaviour
{
#if UNITY_EDITOR
[vFSMHelpbox("Add health to the current HealthController", UnityEditor.MessageType.Info)]
#endif
public class vAddHealth : vStateAction
@@ -22,7 +21,6 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
[Header("This action won't work with the DecisionTimer")]
public float timeToAdd = 1f;
public int healthToRecovery = 1;
public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
@@ -37,7 +35,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
if (InTimer(fsmBehaviour, timeToAdd))
{
fsmBehaviour.aiController.AddHealth(healthToRecovery);
fsmBehaviour.aiController.ChangeHealth(healthToRecovery);
}
}
}

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vAddHealth.cs
uploadId: 601882

View File

@@ -0,0 +1,40 @@
using UnityEngine;
namespace Invector.vCharacterController.AI.FSMBehaviour
{
#if UNITY_EDITOR
[vFSMHelpbox("This is a vAimToTargetAction Action", UnityEditor.MessageType.Info)]
#endif
public class vAimToTargetAction : vStateAction
{
public override string categoryName
{
get { return "Combat/"; }
}
public override string defaultName
{
get { return "Aim To Target"; }
}
public vAimToTargetAction()
{
executionType = vFSMComponentExecutionType.OnStateUpdate;
}
public bool onlyIfCanSeeTarget;
[Tooltip("This action will check if aim is enabled using vAnimatorTag with (Upperbody Pose) tag on layer setted")]
public int aimLayer = 4;
public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
{
if (fsmBehaviour.aiController is vIControlAIShooter)
{
ControlAttack(fsmBehaviour, fsmBehaviour.aiController as vIControlAIShooter, executionType);
}
}
protected virtual void ControlAttack(vIFSMBehaviourController fsmBehaviour, vIControlAIShooter combat, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
{
if(!onlyIfCanSeeTarget|| combat.targetInLineOfSight ) combat.AimToTarget(.1f);
}
}
}

View File

@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 2383bbaa659096e4ca5b556eb6759da5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vAimToTargetAction.cs
uploadId: 601882

View File

@@ -0,0 +1,27 @@
using UnityEngine;
namespace Invector.vCharacterController.AI.FSMBehaviour
{
#if UNITY_EDITOR
[vFSMHelpbox("This is a vAnimatorSetTrigger Action", UnityEditor.MessageType.Info)]
#endif
public class vAnimatorSetTrigger : vStateAction
{
public override string categoryName
{
get { return "Animator/"; }
}
public override string defaultName
{
get { return "vAnimatorSetTrigger"; }
}
public string trigger;
[vToggleOption("Method","Set","Reset")]
public bool reset;
public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
{
if(reset) fsmBehaviour.aiController.animator.ResetTrigger(trigger);else fsmBehaviour.aiController.animator.SetTrigger(trigger);
//TO DO
}
}
}

View File

@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: a474009c8f87c3144980f0e817fd05eb
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vAnimatorSetTrigger.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vFSMChangeBehaviour.cs
uploadId: 601882

View File

@@ -27,6 +27,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
public virtual void FindTarget(vIControlAI vIControl)
{
if (vIControl.GetTargetsInRange().Count == 0) vIControl.FindTarget();
vIControl.FindSpecificTarget(_detectTags, _detectLayer, checkForObstacles);
}
}

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vFindSpecificTarget.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vGoToDamageSender.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vGoToFriend.cs
uploadId: 601882

View File

@@ -15,7 +15,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
public override string categoryName
{
get { return "Movement/"; }
get { return "Movement/Noise/"; }
}
public override string defaultName
{
@@ -38,7 +38,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
if (specificType) noise = noiseListener.GetNearNoiseByTypes(noiseTypes);
else noise = noiseListener.GetNearNoise();
}
else noise = noiseListener.lastListenedNoise;
else noise = noiseListener.LastListenedNoise;
if (noise != null)
{
fsmBehaviour.aiController.MoveTo(noise.position,speed);

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vGoToNoisePosition.cs
uploadId: 601882

View File

@@ -15,6 +15,8 @@
}
public bool useStrafeMovement = false;
[vHideInInspector("useStrafeMovement")]
public bool updateRotationInStrafe = false;
public vAIMovementSpeed speed = vAIMovementSpeed.Walking;
public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
@@ -23,8 +25,15 @@
if (executionType == vFSMComponentExecutionType.OnStateEnter) fsmBehaviour.aiController.ForceUpdatePath(2f);
if (useStrafeMovement)
fsmBehaviour.aiController.StrafeMoveTo(fsmBehaviour.aiController.lastTargetPosition, fsmBehaviour.aiController.lastTargetPosition - fsmBehaviour.transform.position,speed);
else fsmBehaviour.aiController.MoveTo(fsmBehaviour.aiController.lastTargetPosition,speed);
{
if (updateRotationInStrafe)
{
var dir = fsmBehaviour.aiController.targetInLineOfSight ? fsmBehaviour.aiController.lastTargetPosition - fsmBehaviour.transform.position : fsmBehaviour.aiController.desiredVelocity;
fsmBehaviour.aiController.StrafeMoveTo(fsmBehaviour.aiController.lastTargetPosition, dir, speed);
}
else fsmBehaviour.aiController.StrafeMoveTo(fsmBehaviour.aiController.lastTargetPosition, speed);
}
else fsmBehaviour.aiController.MoveTo(fsmBehaviour.aiController.lastTargetPosition, speed);
}
}
}

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vGoToTarget.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vLookAroundAction.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vLookToDamageSender.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vLookToTargetAction.cs
uploadId: 601882

View File

@@ -19,6 +19,11 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
}
public vAIMovementSpeed patrolSpeed = vAIMovementSpeed.Walking;
public bool patrolInStrafe;
[vHideInInspector("patrolInStrafe")]
public bool updateRotationInStrafe=true;
public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
{
DoPatrolWaypoints(fsmBehaviour);
@@ -88,7 +93,14 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
else
{
fsmBehaviour.aiController.MoveTo(fsmBehaviour.aiController.targetWaypoint.position, patrolSpeed);
if (patrolInStrafe)
{
if(updateRotationInStrafe) fsmBehaviour.aiController.StrafeMoveTo(fsmBehaviour.aiController.targetWaypoint.position, fsmBehaviour.aiController.desiredVelocity, patrolSpeed);
else fsmBehaviour.aiController.StrafeMoveTo(fsmBehaviour.aiController.targetWaypoint.position, patrolSpeed);
}
else
fsmBehaviour.aiController.MoveTo(fsmBehaviour.aiController.targetWaypoint.position, patrolSpeed);
if (debugMode) Debug.Log("Go to new Waypoint");
}
}
@@ -97,13 +109,25 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
{
if (fsmBehaviour.debugMode)
fsmBehaviour.SendDebug("MoveTo SelfStartPosition", this);
fsmBehaviour.aiController.MoveTo(fsmBehaviour.aiController.selfStartPosition, patrolSpeed);
if (patrolInStrafe)
{
if (updateRotationInStrafe) fsmBehaviour.aiController.StrafeMoveTo(fsmBehaviour.aiController.selfStartPosition, fsmBehaviour.aiController.desiredVelocity, patrolSpeed);
else fsmBehaviour.aiController.StrafeMoveTo(fsmBehaviour.aiController.selfStartPosition, patrolSpeed);
}
else
fsmBehaviour.aiController.MoveTo(fsmBehaviour.aiController.selfStartPosition, patrolSpeed);
}
else if (fsmBehaviour.aiController.customStartPoint)
{
if (fsmBehaviour.debugMode)
fsmBehaviour.SendDebug("MoveTo CustomStartPosition", this);
fsmBehaviour.aiController.MoveTo(fsmBehaviour.aiController.customStartPosition, patrolSpeed);
if (patrolInStrafe)
{
if (updateRotationInStrafe) fsmBehaviour.aiController.StrafeMoveTo(fsmBehaviour.aiController.customStartPosition, fsmBehaviour.aiController.desiredVelocity, patrolSpeed);
else fsmBehaviour.aiController.StrafeMoveTo(fsmBehaviour.aiController.customStartPosition, patrolSpeed);
}
else
fsmBehaviour.aiController.MoveTo(fsmBehaviour.aiController.customStartPosition, patrolSpeed);
}
else
{

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vPatrolAction.cs
uploadId: 601882

View File

@@ -9,7 +9,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
{
public override string categoryName
{
get { return "Controller/"; }
get { return "Animator/"; }
}
public override string defaultName
{
@@ -18,7 +18,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
public string _animationState;
public int _layer;
public float crossfade=0.2f;
public vPlayAnimationAction()
{
executionType = vFSMComponentExecutionType.OnStateEnter;
@@ -26,7 +26,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
{
fsmBehaviour.aiController.animator.Play(_animationState, _layer);
fsmBehaviour.aiController.animator.CrossFadeInFixedTime(_animationState,crossfade, _layer);
}
}
}

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vPlayAnimationAction.cs
uploadId: 601882

View File

@@ -0,0 +1,24 @@
using UnityEngine;
namespace Invector.vCharacterController.AI.FSMBehaviour
{
#if UNITY_EDITOR
[vFSMHelpbox("This is a vRegisterLastPosition Action", UnityEditor.MessageType.Info)]
#endif
public class vRegisterLastPosition : vStateAction
{
public override string categoryName
{
get { return "Movement/"; }
}
public override string defaultName
{
get { return "Set Start Position"; }
}
public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
{
fsmBehaviour.aiController.selfStartPosition = fsmBehaviour.aiController.transform.position;
}
}
}

View File

@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: b44524182f127484c95dac2cc9c5fc39
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vRegisterLastPosition.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vRotateToTargetAction.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vSetDamageSenderAsTarget.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vShooterCombatAction.cs
uploadId: 601882

View File

@@ -108,7 +108,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
protected virtual void ControlLookPoint(vIControlAICombat controller)
{
if (controller.currentTarget.transform == null || !controller.currentTarget.hasCollider)
if (controller.currentTarget.transform == null || !controller.currentTarget.collider)
return;
var movepoint = (controller.lastTargetPosition);

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vSimpleCombatAction.cs
uploadId: 601882

View File

@@ -9,3 +9,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vTriggerSoundAction.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Actions/vWanderAction.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Components/Editor/vStateDecisionObjectDrawer.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Components/NodeDrawerHelper.cs
uploadId: 601882

View File

@@ -35,10 +35,19 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
public static float borderAlpha { get { return GetValue<float>("borderAlpha"); } set { SetValue("borderAlpha", value); } }
// Add preferences section named "My Preferences" to the Preferences Window
[PreferenceItem("vFSM Behaviour")]
#if UNITY_2019_1_OR_NEWER
[SettingsProvider]
public static SettingsProvider CreateSettingsProvider()
{
return new SettingsProvider("Invector Preferences/FSM Behaviour", SettingsScope.User)
{
guiHandler = (searchContext) =>
{
PreferencesGUI();
}
};
}
#endif
public static void PreferencesGUI()
{
var style = new GUIStyle(EditorStyles.boldLabel);
@@ -112,7 +121,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
}
static void Save()
{
{
System.Text.StringBuilder text = new System.Text.StringBuilder();
var count = 0;
if (keyValues == null) Load();
@@ -175,6 +184,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
Save();
}
static bool inLoad;
static void StringToPreferences(string stringValue)
{

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Components/vBehaviourPreferences.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Components/vFSMBehaviour.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Components/vFSMEnums.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Components/vFSMHelpboxAttribute.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Components/vFSMHelper.cs
uploadId: 601882

View File

@@ -82,9 +82,9 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
public virtual void OnStateEnter(vIFSMBehaviourController fsmBehaviour)
{
if (resetCurrentDestination)
fsmBehaviour.aiController.Stop();
if (resetCurrentDestination && fsmBehaviour.aiController!=null)
fsmBehaviour.aiController.Stop();
if (components == null)
components = new FSMComponent(actions);
if (useActions && components != null)
@@ -95,10 +95,13 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
{
if (components == null)
components = new FSMComponent(actions);
if (useActions && components != null)
components.DoActions(fsmBehaviour, vFSMComponentExecutionType.OnStateUpdate);
components.DoActions(fsmBehaviour, vFSMComponentExecutionType.OnStateUpdate);
fsmBehaviour.ChangeState(TransitTo(fsmBehaviour));
fsmBehaviour.ChangeState(TransitTo(fsmBehaviour));
}
public virtual void OnStateExit(vIFSMBehaviourController fsmBehaviour)

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Components/vFSMState.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Components/vStateAction.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Components/vStateDecision.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Components/vStateDecisionObject.cs
uploadId: 601882

View File

@@ -25,7 +25,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
Dictionary<vIFSMBehaviourController, float> transitionTimers;
public vFSMState TransitTo(vIFSMBehaviourController fsmBehaviour)
{
{
var val = true;
vFSMState returState = null;
for(int i=0;i<decisions.Count;i++)
@@ -41,8 +41,9 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
else if (!val && falseState) returState= useFalseState && !muteFalse ? falseState : null;
if (transitionTimers == null) transitionTimers = new Dictionary<vIFSMBehaviourController, float>();
if (!transitionTimers.ContainsKey(fsmBehaviour)) transitionTimers.Add(fsmBehaviour,0f);
if (transitionTimers[fsmBehaviour] < transitionDelay && returState)
{
transitionTimers[fsmBehaviour] += Time.deltaTime;
@@ -53,7 +54,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
{
transitionTimers[fsmBehaviour] = 0;
if (fsmBehaviour.debugMode && returState) fsmBehaviour.SendDebug("<color=yellow>" + parentState.name + " Transited to " + returState.name +"</color>", parentState);
}
}
return returState;
}

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Components/vStateTransition.cs
uploadId: 601882

View File

@@ -1,9 +0,0 @@
fileFormatVersion: 2
guid: 7905c93fd1fdd3a43845ac79a8abfb38
folderAsset: yes
timeCreated: 1517957126
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,9 +0,0 @@
Update 1.0.2 will no longer support CustomStates, you should use Actions instead.
For example:
- for the vAIChaseState use the Action 'Chase Target' instead
- for the vAICombatState use the Action 'SimpleCombat' instead
- for the vAISimpleCombatState use the Action 'MeleeCombat' instead
- for the vAIShooterCombatState use the Action 'ShooterCombat' instead
This scripts will still be on the package to avoid breaking any FSM created before.

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: a2f2186f906de344abab48900719a48e
timeCreated: 1567027829
licenseType: Store
TextScriptImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,31 +0,0 @@
namespace Invector.vCharacterController.AI.FSMBehaviour
{
#if UNITY_EDITOR
[vFSMHelpbox("This Custom State is DEPRECATED, use the Action Chase instead", UnityEditor.MessageType.Info)]
#endif
public class vAIChaseState : vFSMState
{
public bool chaseInStrafe = false;
public vAIChaseState()
{
#if UNITY_EDITOR
description = "Custom Chase State";
#endif
}
public vAIMovementSpeed chaseSpeed = vAIMovementSpeed.Running;
public override void UpdateState(vIFSMBehaviourController fsmBehaviour)
{
base.UpdateState(fsmBehaviour);
if (fsmBehaviour != null && fsmBehaviour.aiController.currentTarget.transform != null) {
if (chaseInStrafe)
fsmBehaviour.aiController.StrafeMoveTo(fsmBehaviour.aiController.lastTargetPosition, (fsmBehaviour.aiController.lastTargetPosition - fsmBehaviour.aiController.transform.position).normalized,chaseSpeed);
else
fsmBehaviour.aiController.MoveTo(fsmBehaviour.aiController.lastTargetPosition,chaseSpeed);
}
}
}
}

View File

@@ -1,12 +0,0 @@
fileFormatVersion: 2
guid: 7b79187c84e6c9a40ae1216b046ae14f
timeCreated: 1527089858
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {fileID: 2800000, guid: b9d2a1010ab1f81469bfdc648fa4dbf7, type: 3}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,31 +0,0 @@
using System;
namespace Invector.vCharacterController.AI.FSMBehaviour
{
public abstract class vAICombatState : vFSMState
{
public override Type requiredType
{
get
{
return typeof(vIControlAICombat);
}
}
public override void UpdateState(vIFSMBehaviourController fsmBehaviour)
{
if (fsmBehaviour.aiController is vIControlAICombat)
UpdateCombatState(fsmBehaviour.aiController as vIControlAICombat);
base.UpdateState(fsmBehaviour);
}
/// <summary>
/// Called from UpdateState if vIControlAI is a vIControlAICombat
/// </summary>
/// <param name="ctrlAICombat"></param>
protected abstract void UpdateCombatState(vIControlAICombat ctrlAICombat);
}
}

View File

@@ -1,12 +0,0 @@
fileFormatVersion: 2
guid: 191035b4083d6f24bb55305491c4ca4b
timeCreated: 1527089871
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {fileID: 2800000, guid: b9d2a1010ab1f81469bfdc648fa4dbf7, type: 3}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,121 +0,0 @@
using System;
using UnityEngine;
namespace Invector.vCharacterController.AI.FSMBehaviour
{
public class vAIShooterCombatState : vAICombatState
{
public vAIMovementSpeed combatSpeed = vAIMovementSpeed.Walking;
public vAIMovementSpeed engageSpeed = vAIMovementSpeed.Running;
public override Type requiredType
{
get
{
return typeof(vIControlAIShooter);
}
}
public vAIShooterCombatState()
{
#if UNITY_EDITOR
description = "Custom Shooter Combat State";
#endif
}
public override void OnStateEnter(vIFSMBehaviourController fsmBehaviour)
{
base.OnStateEnter(fsmBehaviour);
if (fsmBehaviour.aiController is vIControlAICombat)
{
var aiCombat = (fsmBehaviour.aiController as vIControlAICombat);
aiCombat.InitAttackTime();
aiCombat.isInCombat = true;
}
}
public override void OnStateExit(vIFSMBehaviourController fsmBehaviour)
{
base.OnStateExit(fsmBehaviour);
if (fsmBehaviour.aiController is vIControlAICombat)
{
var aiCombat = (fsmBehaviour.aiController as vIControlAICombat);
aiCombat.ResetAttackTime();
aiCombat.isInCombat = false;
}
}
protected override void UpdateCombatState(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 virtual 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 virtual void CombatMovement(vIControlAICombat controller)
{
if (controller.strafeCombatMovement)
StrafeCombafeMovement(controller);
else
SimpleCombatMovement(controller);
}
protected virtual void ControlLookPoint(vIControlAICombat controller)
{
if (controller.currentTarget.transform == null || !controller.currentTarget.hasCollider)
return;
var movepoint = (controller.lastTargetPosition);
controller.LookTo(movepoint);
}
protected virtual 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);
}
protected virtual void StrafeCombafeMovement(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 + (controller.transform.right * ((controller.stopingDistance + 1f)) * controller.strafeCombatSide) + forwardMovement, (movepoint - controller.transform.position).normalized,combatSpeed);
}
}
}

View File

@@ -1,12 +0,0 @@
fileFormatVersion: 2
guid: 0a0dfdec137ab1f45be406a6af5eaa0a
timeCreated: 1527089883
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {fileID: 2800000, guid: b9d2a1010ab1f81469bfdc648fa4dbf7, type: 3}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,132 +0,0 @@
using System;
using Invector.vEventSystems;
using UnityEngine;
namespace Invector.vCharacterController.AI.FSMBehaviour
{
#if UNITY_EDITOR
[vFSMHelpbox("This Custom State is DEPRECATED, use the Action MeleeCombat instead", UnityEditor.MessageType.Info)]
#endif
public class vAISimpleCombatState : vAICombatState, vIStateAttackListener
{
public bool engageInStrafe = false;
public vAIMovementSpeed engageSpeed = vAIMovementSpeed.Running;
public vAIMovementSpeed combatSpeed = vAIMovementSpeed.Walking;
public override Type requiredType
{
get
{
return typeof(vIControlAIMelee);
}
}
public vAISimpleCombatState()
{
#if UNITY_EDITOR
description = "Custom Combat State";
#endif
}
public override void OnStateEnter(vIFSMBehaviourController fsmBehaviour)
{
base.OnStateEnter(fsmBehaviour);
if (fsmBehaviour.aiController is vIControlAICombat)
{
var aiCombat = (fsmBehaviour.aiController as vIControlAICombat);
aiCombat.InitAttackTime();
aiCombat.isInCombat = true;
}
}
public override void OnStateExit(vIFSMBehaviourController fsmBehaviour)
{
base.OnStateExit(fsmBehaviour);
if (fsmBehaviour.aiController is vIControlAICombat)
{
var aiCombat = (fsmBehaviour.aiController as vIControlAICombat);
if (aiCombat.currentTarget.transform == null || aiCombat.currentTarget.isDead || !aiCombat.targetInLineOfSight) aiCombat.ResetAttackTime();
aiCombat.isInCombat = false;
}
}
protected override void UpdateCombatState(vIControlAICombat controller)
{
if (controller.currentTarget.transform == null || controller.currentTarget.isLost)
{
return;
}
if (controller != null)
{
if (controller.canAttack)
EngageTarget(controller);
else CombatMovement(controller);
ControlLookPoint(controller);
}
}
protected virtual void EngageTarget(vIControlAICombat controller)
{
if (controller.currentTarget.transform == null) return;
if (controller.targetDistance <= controller.attackDistance)
{
controller.Stop();
controller.Attack();
}
else if (!controller.animatorStateInfos.HasAnyTag("Attack", "LockMovement", "CustomAction"))
{
if (engageInStrafe)
controller.StrafeMoveTo(controller.currentTarget.transform.position, (controller.currentTarget.transform.position - controller.transform.position).normalized, engageSpeed);
else controller.MoveTo(controller.currentTarget.transform.position, engageSpeed);
}
else controller.Stop();
}
protected virtual void CombatMovement(vIControlAICombat controller)
{
if (controller.strafeCombatMovement)
StrafeCombatMovement(controller);
else
SimpleCombatMovement(controller);
if (controller.canBlockInCombat)
{
controller.Blocking();
}
}
protected virtual void ControlLookPoint(vIControlAICombat controller)
{
if (controller.currentTarget.transform == null || !controller.currentTarget.hasCollider || !controller.targetInLineOfSight) return;
controller.LookTo(controller.currentTarget.transform.position);
}
protected virtual void SimpleCombatMovement(vIControlAICombat controller)
{
bool moveForward = controller.targetDistance > controller.combatRange * 0.8f;
bool moveBackWard = controller.targetDistance < controller.minDistanceOfTheTarget;
var forwardMovement = (controller.currentTarget.transform.position - controller.transform.position).normalized * (moveForward ? 1 + controller.stopingDistance : (moveBackWard ? -(1 + controller.stopingDistance) : 0));
controller.StrafeMoveTo(controller.transform.position + forwardMovement, (controller.currentTarget.transform.position - controller.transform.position).normalized, combatSpeed);
}
protected virtual void StrafeCombatMovement(vIControlAICombat controller)
{
bool moveForward = controller.targetDistance > controller.combatRange * 0.8f;
bool moveBackWard = controller.targetDistance < controller.minDistanceOfTheTarget;
var forwardMovement = (controller.currentTarget.transform.position - controller.transform.position).normalized * (moveForward ? 1 + controller.stopingDistance : (moveBackWard ? -(1 + controller.stopingDistance) : 0));
controller.StrafeMoveTo(controller.transform.position + (controller.transform.right * ((controller.stopingDistance + 1f)) * controller.strafeCombatSide) + forwardMovement, (controller.currentTarget.transform.position - controller.transform.position).normalized, combatSpeed);
}
public virtual void OnReceiveAttack(vIControlAICombat controller, ref vDamage damage, vIMeleeFighter attacker, ref bool canBlock)
{
//HandleDefensiveCombat(controller, true);
if (damage.damageValue > 0)
if (attacker != null && attacker.character != null && !attacker.character.isDead)
{
controller.SetCurrentTarget(attacker.transform);
}
}
}
}

View File

@@ -1,12 +0,0 @@
fileFormatVersion: 2
guid: 51294ed6f48647f479682b46a1d18cf3
timeCreated: 1527089894
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {fileID: 2800000, guid: b9d2a1010ab1f81469bfdc648fa4dbf7, type: 3}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -8,7 +8,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
{
public override string categoryName
{
get { return ""; }
get { return "Detection/"; }
}
public override string defaultName
{

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Decisions/AICanSeeTargetDecision.cs
uploadId: 601882

View File

@@ -7,7 +7,7 @@
{
public override string categoryName
{
get { return ""; }
get { return "Health/"; }
}
public override string defaultName
{

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Decisions/AICheckHealth.cs
uploadId: 601882

View File

@@ -9,7 +9,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
{
public override string categoryName
{
get { return ""; }
get { return "Behaviour/"; }
}
public override string defaultName

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Decisions/AICheckState.cs
uploadId: 601882

View File

@@ -9,7 +9,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
{
public override string categoryName
{
get { return ""; }
get { return "Detection/"; }
}
public override string defaultName
{

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Decisions/AICheckTargetDead.cs
uploadId: 601882

View File

@@ -7,7 +7,7 @@
{
public override string categoryName
{
get { return ""; }
get { return "Combat/"; }
}
public override string defaultName
{

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Decisions/AICheckTargetIsInCombatRange.cs
uploadId: 601882

View File

@@ -8,7 +8,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
{
public override string categoryName
{
get { return ""; }
get { return "Combat/"; }
}
public override string defaultName
{

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Decisions/AICombatting.cs
uploadId: 601882

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Decisions/Editor/AICheckStateEditor.cs
uploadId: 601882

View File

@@ -0,0 +1,30 @@
using System;
using UnityEngine;
namespace Invector.vCharacterController.AI.FSMBehaviour
{
#if UNITY_EDITOR
[vFSMHelpbox("This is a IsInShotAngleDecision decision", UnityEditor.MessageType.Info)]
#endif
public class IsInShotAngleDecision : vStateDecision
{
public override string categoryName
{
get { return "Combat/"; }
}
public override string defaultName
{
get { return "IsInShotAngleDecision"; }
}
public override Type requiredType => typeof(vIControlAIShooter);
public override bool Decide(vIFSMBehaviourController fsmBehaviour)
{
if (fsmBehaviour.aiController is vIControlAIShooter)
{
return (fsmBehaviour.aiController as vIControlAIShooter).IsInShotAngle;
}
return false;
}
}
}

View File

@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 61eeca5d27f02df46a285da7490fbd2d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Decisions/IsInShotAngleDecision.cs
uploadId: 601882

View File

@@ -1,48 +0,0 @@
using System.Collections.Generic;
namespace Invector.vCharacterController.AI.FSMBehaviour
{
#if UNITY_EDITOR
[vFSMHelpbox("Verify if you can see the target based on the Detection Settings of the AI Controller and Check if the AI Controller has received any Damage or a specific DamageType", UnityEditor.MessageType.Info)]
#endif
public class vAICanSeeOrCheckDamageTargetDecision : vStateDecision
{
public override string categoryName
{
get { return ""; }
}
public override string defaultName
{
get { return "Can See Or Check Damage"; }
}
public List<string> damageTypeToCheck;
public override bool Decide(vIFSMBehaviourController fsmBehaviour)
{
var canSee = CanSeeTarget(fsmBehaviour);
var hasDamage = (HasDamage(fsmBehaviour));
return canSee || hasDamage;
}
protected virtual bool HasDamage(vIFSMBehaviourController fsmBehaviour)
{
if (fsmBehaviour.aiController == null) return false;
var hasDamage = (fsmBehaviour.aiController.receivedDamage.isValid) && (damageTypeToCheck.Count == 0 || damageTypeToCheck.Contains(fsmBehaviour.aiController.receivedDamage.lasType));
if (fsmBehaviour.debugMode)
{
fsmBehaviour.SendDebug(Name + " " + (fsmBehaviour.aiController.receivedDamage.isValid) + " " + fsmBehaviour.aiController.receivedDamage.lastSender, this);
}
return hasDamage;
}
protected virtual bool CanSeeTarget(vIFSMBehaviourController fsmBehaviour)
{
return fsmBehaviour.aiController.targetInLineOfSight;
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 50c776c71e52e174f92161c33199fe22
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,43 +0,0 @@
using UnityEngine;
namespace Invector.vCharacterController.AI.FSMBehaviour
{
public class vAICheckAnimatorParameterBool : vStateDecision
{
public override string categoryName
{
get { return "Custom Example/"; }
}
public override string defaultName
{
get { return "Check Animator Parameter Bool"; }
}
protected enum CompareValueMethod
{
True, False
}
[SerializeField]
protected CompareValueMethod compareMethod;
public string parameterName = "Bool name";
public override bool Decide(vIFSMBehaviourController fsmBehaviour)
{
bool boolvalue = fsmBehaviour.aiController.animator.GetBool(parameterName);
return CompareBool(boolvalue);
}
private bool CompareBool(bool value)
{
switch (compareMethod)
{
case CompareValueMethod.True:
return value == true;
case CompareValueMethod.False:
return value == false;
}
return false;
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 1b249d9fa5c892b4dae8afc5c5aa099d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,47 +0,0 @@
using UnityEngine;
namespace Invector.vCharacterController.AI.FSMBehaviour
{
public class vAICheckAnimatorParameterFloat : vStateDecision
{
public override string categoryName
{
get { return "Custom Example/"; }
}
public override string defaultName
{
get { return "Check Animator Parameter Float"; }
}
protected enum CompareValueMethod
{
Greater, Less, Equal
}
[SerializeField]
protected CompareValueMethod compareMethod;
public float value;
public string parameterName = "TurnOnSpotDir";
public override bool Decide(vIFSMBehaviourController fsmBehaviour)
{
float angle = fsmBehaviour.aiController.animator.GetFloat(parameterName);
return CompareDistance(Mathf.Abs(angle), this.value);
}
private bool CompareDistance(float distA, float distB)
{
switch (compareMethod)
{
case CompareValueMethod.Equal:
return distA.Equals(distB);
case CompareValueMethod.Greater:
return distA > distB;
case CompareValueMethod.Less:
return distA < distB;
}
return false;
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 10fc04bb9c3cd5a4798fe861edc9fca6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -9,7 +9,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
{
public override string categoryName
{
get { return ""; }
get { return "Health/"; }
}
public override string defaultName
{

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Decisions/vAICheckDamage.cs
uploadId: 601882

View File

@@ -7,7 +7,7 @@
{
public override string categoryName
{
get { return ""; }
get { return "Health/"; }
}
public override string defaultName
{

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Decisions/vAICheckMassiveDamage.cs
uploadId: 601882

View File

@@ -7,7 +7,7 @@
{
public override string categoryName
{
get { return ""; }
get { return "Detection/"; }
}
public override string defaultName
{

View File

@@ -10,3 +10,10 @@ MonoImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 123618
packageName: Invector FSM AI Template
packageVersion: 1.1.9a
assetPath: Assets/Invector-FSMAIController/FSM/Scripts/Decisions/vAICheckTargetTag.cs
uploadId: 601882

View File

@@ -9,7 +9,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
{
public override string categoryName
{
get { return ""; }
get { return "Noise/"; }
}
public override string defaultName
{
@@ -26,7 +26,7 @@ namespace Invector.vCharacterController.AI.FSMBehaviour
{
if (fsmBehaviour.aiController.HasComponent<vAINoiseListener>())
{
var noiseListener = fsmBehaviour.aiController.GetAIComponent<vAINoiseListener>();
var noiseListener = fsmBehaviour.aiController.GetAIComponent<vAINoiseListener>();
if (specific) return noiseListener.IsListeningSpecificNoises(noiseTypes);
else return noiseListener.IsListeningNoise();
}

Some files were not shown because too many files have changed in this diff Show More