From 639ee838bcc962210caa277bf5c246a26fbab9fc Mon Sep 17 00:00:00 2001 From: NTG_Lenovo Date: Mon, 11 Sep 2023 16:16:02 +0900 Subject: [PATCH] =?UTF-8?q?Behavior=20Tree=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BlueWater/Assets/01.Scenes/02.Main_TG.unity | 11 +- .../Assets/02.Scripts/Ai/AiController.cs | 47 +++--- .../Assets/02.Scripts/Ai/BehaviorTree.meta | 8 + .../02.Scripts/Ai/BehaviorTree/Task.meta | 8 + .../02.Scripts/Ai/BehaviorTree/Task/Attack.cs | 26 +++ .../Ai/BehaviorTree/Task/Attack.cs.meta | 11 ++ .../BehaviorTree/Task/CanAttackInOffense.cs | 25 +++ .../Task/CanAttackInOffense.cs.meta | 11 ++ .../Ai/BehaviorTree/Task/FindTarget.cs | 158 ++++++++++++++++++ .../Ai/BehaviorTree/Task/FindTarget.cs.meta | 11 ++ .../Ai/BehaviorTree/Task/InitVariable.cs | 43 +++++ .../Ai/BehaviorTree/Task/InitVariable.cs.meta | 11 ++ .../02.Scripts/Ai/BehaviorTree/Variable.meta | 8 + .../Ai/BehaviorTree/Variable/Compare.meta | 8 + .../Variable/Compare/CompareSharedAiType.cs | 26 +++ .../Compare/CompareSharedAiType.cs.meta | 8 + .../Compare/CompareSharedAttackerType.cs | 26 +++ .../Compare/CompareSharedAttackerType.cs.meta | 8 + .../Ai/BehaviorTree/Variable/Set.meta | 8 + .../Variable/Set/SetIslandInfo.cs | 26 +++ .../Variable/Set/SetIslandInfo.cs.meta | 11 ++ .../Ai/BehaviorTree/Variable/SharedAiStat.cs | 11 ++ .../Variable/SharedAiStat.cs.meta | 8 + .../Ai/BehaviorTree/Variable/SharedAiType.cs | 11 ++ .../Variable/SharedAiType.cs.meta | 8 + .../Variable/SharedAttackerType.cs | 11 ++ .../Variable/SharedAttackerType.cs.meta | 8 + .../BehaviorTree/Variable/SharedIslandInfo.cs | 11 ++ .../Variable/SharedIslandInfo.cs.meta | 8 + .../Variable/SharedNavMeshAgent.cs | 12 ++ .../Variable/SharedNavMeshAgent.cs.meta | 8 + BlueWater/Assets/02.Scripts/Ai/Type/Archer.cs | 5 - BlueWater/Assets/02.Scripts/HouseInfo.cs | 2 +- BlueWater/Assets/02.Scripts/IslandInfo.cs | 18 ++ .../05.Prefabs/Character/BaseCharacter.prefab | 41 +++++ BlueWater/Assets/09.BehaviorTree.meta | 8 + .../09.BehaviorTree/BaseCharacter.asset | 40 +++++ .../09.BehaviorTree/BaseCharacter.asset.meta | 8 + .../09.BehaviorTree/DefenseBehavior.asset | 32 ++++ .../DefenseBehavior.asset.meta | 8 + .../09.BehaviorTree/OffenseBehavior.asset | 39 +++++ .../OffenseBehavior.asset.meta | 8 + .../Runtime/Tasks/Unity/Vector2/SetValue.cs | 25 ++- 43 files changed, 779 insertions(+), 50 deletions(-) create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree.meta create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task.meta create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/Attack.cs create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/Attack.cs.meta create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/CanAttackInOffense.cs create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/CanAttackInOffense.cs.meta create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/FindTarget.cs create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/FindTarget.cs.meta create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/InitVariable.cs create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/InitVariable.cs.meta create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable.meta create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare.meta create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare/CompareSharedAiType.cs create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare/CompareSharedAiType.cs.meta create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare/CompareSharedAttackerType.cs create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare/CompareSharedAttackerType.cs.meta create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Set.meta create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Set/SetIslandInfo.cs create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Set/SetIslandInfo.cs.meta create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAiStat.cs create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAiStat.cs.meta create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAiType.cs create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAiType.cs.meta create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAttackerType.cs create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAttackerType.cs.meta create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedIslandInfo.cs create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedIslandInfo.cs.meta create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedNavMeshAgent.cs create mode 100644 BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedNavMeshAgent.cs.meta create mode 100644 BlueWater/Assets/09.BehaviorTree.meta create mode 100644 BlueWater/Assets/09.BehaviorTree/BaseCharacter.asset create mode 100644 BlueWater/Assets/09.BehaviorTree/BaseCharacter.asset.meta create mode 100644 BlueWater/Assets/09.BehaviorTree/DefenseBehavior.asset create mode 100644 BlueWater/Assets/09.BehaviorTree/DefenseBehavior.asset.meta create mode 100644 BlueWater/Assets/09.BehaviorTree/OffenseBehavior.asset create mode 100644 BlueWater/Assets/09.BehaviorTree/OffenseBehavior.asset.meta diff --git a/BlueWater/Assets/01.Scenes/02.Main_TG.unity b/BlueWater/Assets/01.Scenes/02.Main_TG.unity index f86647690..b3b0ee30d 100644 --- a/BlueWater/Assets/01.Scenes/02.Main_TG.unity +++ b/BlueWater/Assets/01.Scenes/02.Main_TG.unity @@ -40694,6 +40694,9 @@ MonoBehaviour: boat: {fileID: 2987405546353765599, guid: 96173da392e9a408d9aea814b4cfe00e, type: 3} assaultCard: {fileID: 6030931212828352948, guid: 410908daff8b945d8b8c446cb753408b, type: 3} + radarTargetUi: {fileID: 0} + nukeFire: {fileID: 0} + grenadeFire: {fileID: 0} cardType: - {fileID: 21300000, guid: 550b6170d3e5c4cf885cf56fa1df8f6b, type: 3} - {fileID: 21300000, guid: fa70a195a66db4c7fb6180f4205a06b1, type: 3} @@ -378354,7 +378357,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 910f2fd54fe913648b37e911580e8068, type: 3} m_Name: m_EditorClassIdentifier: - islandInfo: {fileID: 888439617} + islandInfo: {fileID: 0} maxHp: 500 currentHp: 0 --- !u!65 &1010297108 @@ -475658,7 +475661,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 910f2fd54fe913648b37e911580e8068, type: 3} m_Name: m_EditorClassIdentifier: - islandInfo: {fileID: 888439617} + islandInfo: {fileID: 0} maxHp: 500 currentHp: 0 --- !u!65 &1274110289 @@ -513613,7 +513616,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 910f2fd54fe913648b37e911580e8068, type: 3} m_Name: m_EditorClassIdentifier: - islandInfo: {fileID: 888439617} + islandInfo: {fileID: 0} maxHp: 500 currentHp: 0 --- !u!65 &1375744724 @@ -704820,7 +704823,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1871370245} serializedVersion: 2 - m_LocalRotation: {x: 0.67640686, y: -0.000000029802319, z: -0, w: 0.7365282} + m_LocalRotation: {x: 0.67640686, y: 0.00000023841855, z: -0.0000002980232, w: 0.7365282} m_LocalPosition: {x: -0.0000002384187, y: 120, z: -10.000001} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 diff --git a/BlueWater/Assets/02.Scripts/Ai/AiController.cs b/BlueWater/Assets/02.Scripts/Ai/AiController.cs index 5d18fbd9d..2bdd2e44b 100644 --- a/BlueWater/Assets/02.Scripts/Ai/AiController.cs +++ b/BlueWater/Assets/02.Scripts/Ai/AiController.cs @@ -64,8 +64,10 @@ namespace BlueWaterProject [DisableIf("@true")] [SerializeField] private IslandInfo islandInfo; + public bool IsAttackCoroutine { get; set; } + public Vector3 DefensePos { get; set; } + protected bool isAttacking; - private Vector3 defensePos; protected Transform backpackContainer; protected Transform leftWeaponContainer; @@ -118,7 +120,7 @@ namespace BlueWaterProject { InitStart(); ExecuteFindTarget(); - Attack(); + //Attack(); navMeshAgent.stoppingDistance = AiStat.AtkRange; } @@ -369,7 +371,7 @@ namespace BlueWaterProject SetNearestTargetInDefense(transform.position, AiStat.ViewRange); break; case EDefenseType.DEFENDER: - SetNearestTargetInDefense(defensePos, AiStat.DefenseRange); + SetNearestTargetInDefense(DefensePos, AiStat.DefenseRange); break; case EDefenseType.KEEPER: SetNearestTargetInDefense(transform.position, AiStat.ViewRange); @@ -422,7 +424,6 @@ namespace BlueWaterProject if (nearestTarget == null) return; TargetTransform = (Transform)(object)nearestTarget; - //Utils.SetCloseDestination(navMeshAgent, TargetTransform.position, AiStat.AtkRange - 0.5f, AiStat.AtkRange); } public virtual void SetNearestTargetInDefense(Vector3 centerPos, float range) @@ -492,7 +493,7 @@ namespace BlueWaterProject Utils.SetCloseDestination(navMeshAgent, attackPos, AiStat.AtkRange - 0.5f, AiStat.AtkRange); break; case EDefenseType.DEFENDER: - if (Vector3.Distance(defensePos, attackPos) <= AiStat.DefenseRange) + if (Vector3.Distance(DefensePos, attackPos) <= AiStat.DefenseRange) { Utils.SetCloseDestination(navMeshAgent, attackPos, AiStat.AtkRange - 0.5f, AiStat.AtkRange); } @@ -584,7 +585,7 @@ namespace BlueWaterProject SetCurrentHp(AiStat.MaxHp); SetMoveSpeed(AiStat.MoveSpd); - defensePos = transform.position; + DefensePos = transform.position; } private void InitViewModel(bool isEditor) @@ -659,34 +660,25 @@ namespace BlueWaterProject } } - protected virtual void Attack() + public virtual void Attack() { + IsAttackCoroutine = true; StartCoroutine(nameof(AttackAnimation)); } protected virtual IEnumerator AttackAnimation() { - while (true) + closeWeapon.SetIsAttacked(false); + closeWeapon.SetAttackerStat(AiStat); + aiAnimator.SetTrigger(AttackHash); + + while (isAttacking) { - if (!CanAttack()) - { - isAttacking = false; - yield return FindTargetWaitTime; - continue; - } - - closeWeapon.SetIsAttacked(false); - closeWeapon.SetAttackerStat(AiStat); - aiAnimator.SetTrigger(AttackHash); - - while (isAttacking) - { - yield return null; - } - - yield return new WaitForSeconds(AiStat.AtkCooldown); + yield return null; } - // ReSharper disable once IteratorNeverReturns + + yield return new WaitForSeconds(AiStat.AtkCooldown); + IsAttackCoroutine = false; } protected virtual bool CanAttack() @@ -742,7 +734,7 @@ namespace BlueWaterProject private void RemoveIslandInfo() { - if (!islandInfo) return; + if (islandInfo == null) return; islandInfo.RemoveListElement(islandInfo.EnemyList, transform); } @@ -790,6 +782,7 @@ namespace BlueWaterProject } } + public IslandInfo GetIslandInfo() => islandInfo; public void SetIslandInfo(IslandInfo info) => islandInfo = info; public void SetAttackerType(EAttackerType type) => AiStat.AttackerType = type; public void SetOffenseType(EOffenseType type) => AiStat.OffenseType = type; diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree.meta b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree.meta new file mode 100644 index 000000000..774865854 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e17ff32e5dc9e1c41b8d7e41f871d450 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task.meta b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task.meta new file mode 100644 index 000000000..86660b306 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dde7f062b30207f419bf1b952edfc83b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/Attack.cs b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/Attack.cs new file mode 100644 index 000000000..62ce13a75 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/Attack.cs @@ -0,0 +1,26 @@ +using BehaviorDesigner.Runtime.Tasks; + +// ReSharper disable once CheckNamespace +namespace BlueWaterProject +{ + [TaskCategory("Custom/Action")] + public class Attack : Action + { + private AiController aiController; + + public override void OnAwake() + { + aiController = transform.GetComponent(); + } + + public override void OnStart() + { + aiController.Attack(); + } + + public override TaskStatus OnUpdate() + { + return aiController.IsAttackCoroutine ? TaskStatus.Running : TaskStatus.Success; + } + } +} diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/Attack.cs.meta b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/Attack.cs.meta new file mode 100644 index 000000000..c4749c0d2 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/Attack.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6875a9897212c2f45ac34352aa8b64ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/CanAttackInOffense.cs b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/CanAttackInOffense.cs new file mode 100644 index 000000000..106cfa81c --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/CanAttackInOffense.cs @@ -0,0 +1,25 @@ +using BehaviorDesigner.Runtime; +using BehaviorDesigner.Runtime.Tasks; +using UnityEngine; + +// ReSharper disable once CheckNamespace +namespace BlueWaterProject +{ + [TaskCategory("Custom/Conditional")] + public class CanAttackInOffense : Conditional + { + [RequiredField] public SharedAiStat aiStat; + [RequiredField] public SharedIslandInfo islandInfo; + [RequiredField] public SharedTransform targetTransform; + + public override TaskStatus OnUpdate() + { + if (!targetTransform.Value || !islandInfo.Value.TargetAllList.Contains(targetTransform.Value)) return TaskStatus.Failure; + + var targetToDistance = Vector3.Distance(targetTransform.Value.position, transform.position); + var targetInAttackRange = targetToDistance <= aiStat.Value.AtkRange; + + return targetInAttackRange ? TaskStatus.Success : TaskStatus.Failure; + } + } +} diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/CanAttackInOffense.cs.meta b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/CanAttackInOffense.cs.meta new file mode 100644 index 000000000..5ad6bd805 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/CanAttackInOffense.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f726c5737f44a1544b57c5f62cec144c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/FindTarget.cs b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/FindTarget.cs new file mode 100644 index 000000000..f27390672 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/FindTarget.cs @@ -0,0 +1,158 @@ +using System; +using System.Collections; +using BehaviorDesigner.Runtime; +using BehaviorDesigner.Runtime.Tasks; +using Sirenix.OdinInspector; +using UnityEngine; +using UnityEngine.AI; +using Action = BehaviorDesigner.Runtime.Tasks.Action; + +// ReSharper disable once CheckNamespace +namespace BlueWaterProject +{ + [TaskCategory("Custom/Action")] + public class FindTarget : Action + { + [Title("Common variable")] + [RequiredField] public SharedAiStat aiStat; + [RequiredField] public SharedNavMeshAgent navMeshAgent; + [RequiredField] public SharedTransform targetTransform; + + [Title("Offense Variable")] + public SharedIslandInfo islandInfo; + + [Title("Defense Variable")] + public SharedVector3 defensePos; + + private AiController aiController; + private bool isFindTargetCoroutine; + + private static readonly WaitForSeconds FindTargetWaitTime = new(0.5f); + + public override void OnAwake() + { + aiController = GetComponent(); + } + + public override void OnStart() + { + switch (aiStat.Value.AttackerType) + { + case EAttackerType.NONE: + Debug.Log("AiStat.AttackerType == NONE Error"); + break; + case EAttackerType.OFFENSE: + isFindTargetCoroutine = true; + StartCoroutine(nameof(FindTargetInOffense)); + break; + case EAttackerType.DEFENSE: + isFindTargetCoroutine = true; + StartCoroutine(nameof(FindTargetInDefense)); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + public override TaskStatus OnUpdate() + { + return isFindTargetCoroutine ? TaskStatus.Running : TaskStatus.Success; + } + + public IEnumerator FindTargetInOffense() + { + switch (aiStat.Value.OffenseType) + { + case EOffenseType.NONE: + Debug.Log("AiStat.OffenseType == NONE Error"); + break; + case EOffenseType.NORMAL: + if (islandInfo.Value.EnemyList.Count > 0) + { + aiController.SetNearestTargetInOffense(islandInfo.Value.EnemyList); + } + else if (islandInfo.Value.HouseList.Count > 0) + { + aiController.SetNearestTargetInOffense(islandInfo.Value.HouseList); + } + break; + case EOffenseType.ONLY_HOUSE: + if (navMeshAgent.Value.pathStatus == NavMeshPathStatus.PathPartial) + { + aiController.SetNearestTargetInOffense(islandInfo.Value.TargetAllList); + } + else + { + if (islandInfo.Value.HouseList.Count > 0) + { + aiController.SetNearestTargetInOffense(islandInfo.Value.HouseList); + } + else if (islandInfo.Value.EnemyList.Count > 0) + { + aiController.SetNearestTargetInOffense(islandInfo.Value.EnemyList); + } + } + break; + default: + throw new ArgumentOutOfRangeException(); + } + + if (targetTransform.Value && navMeshAgent.Value.enabled) + { + var distanceToTarget = Vector3.Distance(transform.position, targetTransform.Value.position); + + navMeshAgent.Value.isStopped = distanceToTarget <= navMeshAgent.Value.stoppingDistance; + if (distanceToTarget > navMeshAgent.Value.stoppingDistance) + { + navMeshAgent.Value.SetDestination(targetTransform.Value.position); + } + } + + yield return FindTargetWaitTime; + isFindTargetCoroutine = false; + } + + public IEnumerator FindTargetInDefense() + { + switch (aiStat.Value.DefenseType) + { + case EDefenseType.NONE: + Debug.Log("AiStat.DefenseType == NONE Error"); + break; + case EDefenseType.STRIKER: + aiController.SetNearestTargetInDefense(transform.position, aiStat.Value.ViewRange); + break; + case EDefenseType.MIDFIELDER: + aiController.SetNearestTargetInDefense(transform.position, aiStat.Value.ViewRange); + break; + case EDefenseType.DEFENDER: + aiController.SetNearestTargetInDefense(defensePos.Value, aiStat.Value.DefenseRange); + break; + case EDefenseType.KEEPER: + aiController.SetNearestTargetInDefense(transform.position, aiStat.Value.ViewRange); + break; + default: + throw new ArgumentOutOfRangeException(); + } + + if (targetTransform.Value && navMeshAgent.Value.enabled) + { + var distanceToTarget = Vector3.Distance(transform.position, targetTransform.Value.position); + + navMeshAgent.Value.isStopped = distanceToTarget <= navMeshAgent.Value.stoppingDistance; + if (distanceToTarget > navMeshAgent.Value.stoppingDistance) + { + navMeshAgent.Value.SetDestination(targetTransform.Value.position); + } + } + + yield return FindTargetWaitTime; + isFindTargetCoroutine = false; + } + + public override void OnEnd() + { + StopAllCoroutines(); + } + } +} diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/FindTarget.cs.meta b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/FindTarget.cs.meta new file mode 100644 index 000000000..cbfd3f1b5 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/FindTarget.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df8ebf14d54ec644f9203c1d3dcb3274 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/InitVariable.cs b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/InitVariable.cs new file mode 100644 index 000000000..400a280ee --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/InitVariable.cs @@ -0,0 +1,43 @@ +using BehaviorDesigner.Runtime; +using BehaviorDesigner.Runtime.Tasks; +using Sirenix.OdinInspector; + +// ReSharper disable once CheckNamespace +namespace BlueWaterProject +{ + [TaskCategory("Custom/Action")] + public class InitVariable : Action + { + [Title("Common variable")] + [RequiredField] public SharedAiStat aiStat; + [RequiredField] public SharedNavMeshAgent agent; + + [Title("Offense variable")] + public SharedIslandInfo islandInfo; + public SharedBool isCommanded; + + [Title("Defense variable")] + public SharedVector3 defensePos; + + private AiController aiController; + + public override void OnStart() + { + aiController = GetComponent(); + + aiStat.Value = aiController.AiStat; + agent.Value = aiController.GetNavMeshAgent(); + + if (aiStat.Value.AttackerType == EAttackerType.OFFENSE) + { + islandInfo.Value = aiController.GetIslandInfo(); + isCommanded.Value = aiController.IsCommanded; + } + } + + public override TaskStatus OnUpdate() + { + return TaskStatus.Success; + } + } +} diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/InitVariable.cs.meta b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/InitVariable.cs.meta new file mode 100644 index 000000000..5b1f42fdd --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Task/InitVariable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f16bfce0fda1394aa75287d1197deff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable.meta b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable.meta new file mode 100644 index 000000000..dad4c5ad9 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a54b7510bd752444f862463504e573f5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare.meta b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare.meta new file mode 100644 index 000000000..b6dbfac80 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a0e430e073cfd444f889ea710a57bf41 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare/CompareSharedAiType.cs b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare/CompareSharedAiType.cs new file mode 100644 index 000000000..e605f473d --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare/CompareSharedAiType.cs @@ -0,0 +1,26 @@ +using BlueWaterProject; + +// ReSharper disable once CheckNamespace +namespace BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables +{ + [TaskCategory("Unity/SharedVariable")] + [TaskDescription("Returns success if the variable value is equal to the compareTo value.")] + public class CompareSharedAiType : Conditional + { + [Tooltip("The first variable to compare")] + public SharedAiType variable; + [Tooltip("The variable to compare to")] + public SharedAiType compareTo; + + public override TaskStatus OnUpdate() + { + return variable.Value.Equals(compareTo.Value) ? TaskStatus.Success : TaskStatus.Failure; + } + + public override void OnReset() + { + variable = EAiType.NONE; + compareTo = EAiType.NONE; + } + } +} \ No newline at end of file diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare/CompareSharedAiType.cs.meta b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare/CompareSharedAiType.cs.meta new file mode 100644 index 000000000..33c63a848 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare/CompareSharedAiType.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e3fdf6e71e3deef46bb9ab0bcf3ea68e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare/CompareSharedAttackerType.cs b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare/CompareSharedAttackerType.cs new file mode 100644 index 000000000..b21913c4d --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare/CompareSharedAttackerType.cs @@ -0,0 +1,26 @@ +using BlueWaterProject; + +// ReSharper disable once CheckNamespace +namespace BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables +{ + [TaskCategory("Unity/SharedVariable")] + [TaskDescription("Returns success if the variable value is equal to the compareTo value.")] + public class CompareSharedAttackerType : Conditional + { + [Tooltip("The first variable to compare")] + public SharedAttackerType variable; + [Tooltip("The variable to compare to")] + public SharedAttackerType compareTo; + + public override TaskStatus OnUpdate() + { + return variable.Value.Equals(compareTo.Value) ? TaskStatus.Success : TaskStatus.Failure; + } + + public override void OnReset() + { + variable = EAttackerType.NONE; + compareTo = EAttackerType.NONE; + } + } +} \ No newline at end of file diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare/CompareSharedAttackerType.cs.meta b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare/CompareSharedAttackerType.cs.meta new file mode 100644 index 000000000..23f938fa8 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Compare/CompareSharedAttackerType.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6a6c4dcf5ecd5494d84255dd2ea4a646 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Set.meta b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Set.meta new file mode 100644 index 000000000..85e661f86 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Set.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b51024a661c57aa49879a8fecc4fa495 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Set/SetIslandInfo.cs b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Set/SetIslandInfo.cs new file mode 100644 index 000000000..246c155cc --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Set/SetIslandInfo.cs @@ -0,0 +1,26 @@ +using UnityEngine; + +namespace BehaviorDesigner.Runtime.Tasks.Unity.UnityVector2 +{ + [TaskCategory("Unity/Vector2")] + [TaskDescription("Sets the value of the Vector2.")] + public class SetValue : Action + { + [Tooltip("The Vector2 to get the values of")] + public SharedVector2 vector2Value; + [Tooltip("The Vector2 to set the values of")] + public SharedVector2 vector2Variable; + + public override TaskStatus OnUpdate() + { + vector2Variable.Value = vector2Value.Value; + return TaskStatus.Success; + } + + public override void OnReset() + { + vector2Value = Vector2.zero; + vector2Variable = Vector2.zero; + } + } +} \ No newline at end of file diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Set/SetIslandInfo.cs.meta b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Set/SetIslandInfo.cs.meta new file mode 100644 index 000000000..8098c97ca --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/Set/SetIslandInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 85d3b21532037744fa14ddebf47c3c74 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAiStat.cs b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAiStat.cs new file mode 100644 index 000000000..3e0b726c0 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAiStat.cs @@ -0,0 +1,11 @@ +using BlueWaterProject; + +// ReSharper disable once CheckNamespace +namespace BehaviorDesigner.Runtime +{ + [System.Serializable] + public class SharedAiStat : SharedVariable + { + public static implicit operator SharedAiStat(AiStat value) { return new SharedAiStat { mValue = value }; } + } +} \ No newline at end of file diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAiStat.cs.meta b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAiStat.cs.meta new file mode 100644 index 000000000..ac50e4b96 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAiStat.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 02ba639560737f44db74c938a6eaf769 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAiType.cs b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAiType.cs new file mode 100644 index 000000000..b64a3b200 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAiType.cs @@ -0,0 +1,11 @@ +using BlueWaterProject; + +// ReSharper disable once CheckNamespace +namespace BehaviorDesigner.Runtime +{ + [System.Serializable] + public class SharedAiType : SharedVariable + { + public static implicit operator SharedAiType(EAiType value) { return new SharedAiType { mValue = value }; } + } +} \ No newline at end of file diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAiType.cs.meta b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAiType.cs.meta new file mode 100644 index 000000000..5325e9744 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAiType.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a8a13c299691ac64ab6d467bb8e8932f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAttackerType.cs b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAttackerType.cs new file mode 100644 index 000000000..31e8d9e05 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAttackerType.cs @@ -0,0 +1,11 @@ +using BlueWaterProject; + +// ReSharper disable once CheckNamespace +namespace BehaviorDesigner.Runtime +{ + [System.Serializable] + public class SharedAttackerType : SharedVariable + { + public static implicit operator SharedAttackerType(EAttackerType value) { return new SharedAttackerType { mValue = value }; } + } +} \ No newline at end of file diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAttackerType.cs.meta b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAttackerType.cs.meta new file mode 100644 index 000000000..b0c1bef5c --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedAttackerType.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ff361707107fef94788b3ff999b21044 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedIslandInfo.cs b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedIslandInfo.cs new file mode 100644 index 000000000..8d1be6407 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedIslandInfo.cs @@ -0,0 +1,11 @@ +using BlueWaterProject; + +// ReSharper disable once CheckNamespace +namespace BehaviorDesigner.Runtime +{ + [System.Serializable] + public class SharedIslandInfo : SharedVariable + { + public static implicit operator SharedIslandInfo(IslandInfo value) { return new SharedIslandInfo { mValue = value }; } + } +} \ No newline at end of file diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedIslandInfo.cs.meta b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedIslandInfo.cs.meta new file mode 100644 index 000000000..2255fd2d1 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedIslandInfo.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6e23fcea0f1d6544db6c749d0bbb2de5 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedNavMeshAgent.cs b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedNavMeshAgent.cs new file mode 100644 index 000000000..8f571bc3d --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedNavMeshAgent.cs @@ -0,0 +1,12 @@ +using BlueWaterProject; +using UnityEngine.AI; + +// ReSharper disable once CheckNamespace +namespace BehaviorDesigner.Runtime +{ + [System.Serializable] + public class SharedNavMeshAgent : SharedVariable + { + public static implicit operator SharedNavMeshAgent(NavMeshAgent value) { return new SharedNavMeshAgent { mValue = value }; } + } +} \ No newline at end of file diff --git a/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedNavMeshAgent.cs.meta b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedNavMeshAgent.cs.meta new file mode 100644 index 000000000..c374b529c --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Ai/BehaviorTree/Variable/SharedNavMeshAgent.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 00580f11879e46d4998b60f02d843ba7 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/BlueWater/Assets/02.Scripts/Ai/Type/Archer.cs b/BlueWater/Assets/02.Scripts/Ai/Type/Archer.cs index ad22c2820..3be2b08c2 100644 --- a/BlueWater/Assets/02.Scripts/Ai/Type/Archer.cs +++ b/BlueWater/Assets/02.Scripts/Ai/Type/Archer.cs @@ -129,11 +129,6 @@ namespace BlueWaterProject navMeshAgent.updateRotation = true; } } - - protected override void Attack() - { - StartCoroutine(nameof(AttackAnimation)); - } public override void SetNearestTargetInOffense(List targetList) { diff --git a/BlueWater/Assets/02.Scripts/HouseInfo.cs b/BlueWater/Assets/02.Scripts/HouseInfo.cs index ad9005c48..3b47e6b2c 100644 --- a/BlueWater/Assets/02.Scripts/HouseInfo.cs +++ b/BlueWater/Assets/02.Scripts/HouseInfo.cs @@ -51,7 +51,7 @@ namespace BlueWaterProject private void RemoveIslandInfo() { - if (!islandInfo) return; + if (islandInfo == null) return; islandInfo.RemoveListElement(islandInfo.HouseList, transform); } diff --git a/BlueWater/Assets/02.Scripts/IslandInfo.cs b/BlueWater/Assets/02.Scripts/IslandInfo.cs index 4f86e7ea1..c15287b52 100644 --- a/BlueWater/Assets/02.Scripts/IslandInfo.cs +++ b/BlueWater/Assets/02.Scripts/IslandInfo.cs @@ -18,6 +18,24 @@ namespace BlueWaterProject [field: SerializeField] public List EnemyList { get; private set; } [field: SerializeField] public List TargetAllList { get; private set; } + + public IslandInfo() + { + IslandName = null; + HouseList = null; + UnitList = null; + EnemyList = null; + TargetAllList = null; + } + + public IslandInfo(string islandName, List houseList, List unitList, List enemyList, List targetAllList) + { + IslandName = islandName; + HouseList = houseList; + UnitList = unitList; + EnemyList = enemyList; + TargetAllList = targetAllList; + } #endregion diff --git a/BlueWater/Assets/05.Prefabs/Character/BaseCharacter.prefab b/BlueWater/Assets/05.Prefabs/Character/BaseCharacter.prefab index 2fc7285eb..3de905748 100644 --- a/BlueWater/Assets/05.Prefabs/Character/BaseCharacter.prefab +++ b/BlueWater/Assets/05.Prefabs/Character/BaseCharacter.prefab @@ -8842,6 +8842,7 @@ GameObject: - component: {fileID: 4733059974554311748} - component: {fileID: 8419222071034356516} - component: {fileID: 4265671296278834780} + - component: {fileID: 2760820819000917674} m_Layer: 0 m_Name: BaseCharacter m_TagString: Untagged @@ -8962,6 +8963,46 @@ CapsuleCollider: m_Height: 1.6 m_Direction: 1 m_Center: {x: 0, y: 0.8, z: 0} +--- !u!114 &2760820819000917674 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 155132} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8d7b55c7ecdb49a4a89fa5e6f9022861, type: 3} + m_Name: + m_EditorClassIdentifier: + startWhenEnabled: 1 + asynchronousLoad: 0 + pauseWhenDisabled: 0 + restartWhenComplete: 0 + logTaskChanges: 0 + group: 0 + resetValuesOnRestart: 0 + externalBehavior: {fileID: 11400000, guid: 694a519b491de404d83985622db4d827, type: 2} + mBehaviorSource: + behaviorName: Behavior + behaviorDescription: + mTaskData: + types: [] + parentIndex: + startIndex: + variableStartIndex: + JSONSerialization: '{"Variables":[{"Type":"BehaviorDesigner.Runtime.SharedAttackerType","Name":"AttackerType","IsShared":true,"EAttackerTypemValue":"NONE"}]}' + fieldSerializationData: + typeName: [] + fieldNameHash: + startIndex: + dataPosition: + unityObjects: [] + byteData: + byteDataArray: + Version: 1.7.7 + gizmoViewMode: 2 + showBehaviorDesignerGizmo: 1 --- !u!1 &156456 GameObject: m_ObjectHideFlags: 0 diff --git a/BlueWater/Assets/09.BehaviorTree.meta b/BlueWater/Assets/09.BehaviorTree.meta new file mode 100644 index 000000000..6d0eeabe5 --- /dev/null +++ b/BlueWater/Assets/09.BehaviorTree.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2d6a4b862e177db49919bfd5fe6b7f13 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/09.BehaviorTree/BaseCharacter.asset b/BlueWater/Assets/09.BehaviorTree/BaseCharacter.asset new file mode 100644 index 000000000..e8faae8d6 --- /dev/null +++ b/BlueWater/Assets/09.BehaviorTree/BaseCharacter.asset @@ -0,0 +1,40 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b23f08d2ae4cba14087c1ed36193d82b, type: 3} + m_Name: BaseCharacter + m_EditorClassIdentifier: + mBehaviorSource: + behaviorName: BaseCharacter + behaviorDescription: + mTaskData: + types: [] + parentIndex: + startIndex: + variableStartIndex: + JSONSerialization: '{"EntryTask":{"Type":"BehaviorDesigner.Runtime.Tasks.EntryTask","NodeData":{"Offset":"(337,90)"},"ID":0,"Name":"Entry","Instant":true},"RootTask":{"Type":"BehaviorDesigner.Runtime.Tasks.Repeater","NodeData":{"Offset":"(4.152649,113.838943)"},"ID":1,"Name":"Repeater","Instant":true,"SharedIntcount":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":null,"Int32mValue":0},"SharedBoolrepeatForever":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":true},"SharedBoolendOnFailure":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(-2.63156128,120)"},"ID":2,"Name":"Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-214.714264,143)"},"ID":3,"Name":"Offense + Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.CompareSharedAttackerType","NodeData":{"Offset":"(-129,123)","Comment":"AttackerType + == OFFENSE"},"ID":4,"Name":"Compare Shared Attacker Type","Instant":true,"SharedAttackerTypevariable":{"Type":"BehaviorDesigner.Runtime.SharedAttackerType","Name":"AttackerType","IsShared":true,"EAttackerTypemValue":"NONE"},"SharedAttackerTypecompareTo":{"Type":"BehaviorDesigner.Runtime.SharedAttackerType","Name":null,"EAttackerTypemValue":"OFFENSE"}},{"Type":"BehaviorDesigner.Runtime.Tasks.BehaviorTreeReference","NodeData":{"Offset":"(110,120)"},"ID":5,"Name":"Offense + Behavior","Instant":true,"ExternalBehavior[]externalBehaviors":[0],"SharedNamedVariable[]variables":[],"Booleancollapsed":false}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(274.264343,138.636353)"},"ID":6,"Name":"Defense + Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.CompareSharedAttackerType","NodeData":{"Offset":"(-130,119.999969)","Comment":"AttackerType + == DEFENSE"},"ID":7,"Name":"Compare Shared Attacker Type","Instant":true,"SharedAttackerTypevariable":{"Type":"BehaviorDesigner.Runtime.SharedAttackerType","Name":"AttackerType","IsShared":true,"EAttackerTypemValue":"NONE"},"SharedAttackerTypecompareTo":{"Type":"BehaviorDesigner.Runtime.SharedAttackerType","Name":null,"EAttackerTypemValue":"DEFENSE"}},{"Type":"BehaviorDesigner.Runtime.Tasks.BehaviorTreeReference","NodeData":{"Offset":"(110,119.999969)"},"ID":8,"Name":"Defense + Behavior","Instant":true,"ExternalBehavior[]externalBehaviors":[1],"SharedNamedVariable[]variables":[],"Booleancollapsed":false}]}]}]},"Variables":[{"Type":"BehaviorDesigner.Runtime.SharedAttackerType","Name":"AttackerType","IsShared":true,"EAttackerTypemValue":"NONE"}]}' + fieldSerializationData: + typeName: [] + fieldNameHash: + startIndex: + dataPosition: + unityObjects: + - {fileID: 11400000, guid: 0fa0abbe34de7db4f87d218d194dcc5d, type: 2} + - {fileID: 11400000, guid: 6ac3257696f4b30469f3e3e0576b146b, type: 2} + byteData: + byteDataArray: + Version: 1.7.7 diff --git a/BlueWater/Assets/09.BehaviorTree/BaseCharacter.asset.meta b/BlueWater/Assets/09.BehaviorTree/BaseCharacter.asset.meta new file mode 100644 index 000000000..c03ea5aa0 --- /dev/null +++ b/BlueWater/Assets/09.BehaviorTree/BaseCharacter.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 694a519b491de404d83985622db4d827 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/09.BehaviorTree/DefenseBehavior.asset b/BlueWater/Assets/09.BehaviorTree/DefenseBehavior.asset new file mode 100644 index 000000000..5a2d1e891 --- /dev/null +++ b/BlueWater/Assets/09.BehaviorTree/DefenseBehavior.asset @@ -0,0 +1,32 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b23f08d2ae4cba14087c1ed36193d82b, type: 3} + m_Name: DefenseBehavior + m_EditorClassIdentifier: + mBehaviorSource: + behaviorName: DefenseBehavior + behaviorDescription: + mTaskData: + types: [] + parentIndex: + startIndex: + variableStartIndex: + JSONSerialization: + fieldSerializationData: + typeName: [] + fieldNameHash: + startIndex: + dataPosition: + unityObjects: [] + byteData: + byteDataArray: + Version: diff --git a/BlueWater/Assets/09.BehaviorTree/DefenseBehavior.asset.meta b/BlueWater/Assets/09.BehaviorTree/DefenseBehavior.asset.meta new file mode 100644 index 000000000..bfbba92a0 --- /dev/null +++ b/BlueWater/Assets/09.BehaviorTree/DefenseBehavior.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6ac3257696f4b30469f3e3e0576b146b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/09.BehaviorTree/OffenseBehavior.asset b/BlueWater/Assets/09.BehaviorTree/OffenseBehavior.asset new file mode 100644 index 000000000..115c34156 --- /dev/null +++ b/BlueWater/Assets/09.BehaviorTree/OffenseBehavior.asset @@ -0,0 +1,39 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b23f08d2ae4cba14087c1ed36193d82b, type: 3} + m_Name: OffenseBehavior + m_EditorClassIdentifier: + mBehaviorSource: + behaviorName: OffenseBehavior + behaviorDescription: + mTaskData: + types: [] + parentIndex: + startIndex: + variableStartIndex: + JSONSerialization: '{"EntryTask":{"Type":"BehaviorDesigner.Runtime.Tasks.EntryTask","NodeData":{"Offset":"(299.1951,149.024338)"},"ID":0,"Name":"Entry","Instant":true},"RootTask":{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-0.9877186,151.42572)"},"ID":1,"Name":"InitSequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.InitVariable","NodeData":{"Offset":"(-169.613129,152.2381)"},"ID":2,"Name":"Init + Variable","Instant":true,"SharedAiStataiStat":{"Type":"BehaviorDesigner.Runtime.SharedAiStat","Name":"AiStat","IsShared":true,"AiStatmValue":{"UnitTypek__BackingField":"NONE","EAiTypek__BackingField":"NONE","EAttackerTypek__BackingField":"NONE","EOffenseTypek__BackingField":"NONE","EDefenseTypek__BackingField":"NONE","Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Int32k__BackingField":0,"Int32k__BackingField":0,"Booleank__BackingField":false,"Int32k__BackingField":0,"Booleank__BackingField":false,"Singlek__BackingField":0}},"SharedNavMeshAgentagent":{"Type":"BehaviorDesigner.Runtime.SharedNavMeshAgent","Name":"NavMeshAgent","IsShared":true},"SharedIslandInfoislandInfo":{"Type":"BehaviorDesigner.Runtime.SharedIslandInfo","Name":"IslandInfo","IsShared":true},"SharedBoolisCommanded":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedVector3defensePos":{"Type":"BehaviorDesigner.Runtime.SharedVector3","Name":null,"Vector3mValue":"(0,0,0)"}},{"Type":"BehaviorDesigner.Runtime.Tasks.Repeater","NodeData":{"Offset":"(200,154.615387)"},"ID":3,"Name":"Repeater","Instant":true,"SharedIntcount":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":null,"Int32mValue":0},"SharedBoolrepeatForever":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":true},"SharedBoolendOnFailure":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Parallel","NodeData":{"Offset":"(-2.326233,150.280518)"},"ID":4,"Name":"Parallel","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-357.122,145.887024)"},"ID":5,"Name":"Find + Target Sequence","Instant":true,"AbortTypeabortType":"Self","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.CompareSharedBool","NodeData":{"Offset":"(-104.611588,152.187439)"},"ID":6,"Name":"Compare + Shared Bool","Instant":true,"SharedBoolvariable":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":"IsCommanded","IsShared":true,"BooleanmValue":false},"SharedBoolcompareTo":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false}},{"Type":"BlueWaterProject.FindTarget","NodeData":{"Offset":"(95.29413,153.529358)"},"ID":7,"Name":"Find + Target","Instant":true,"SharedAiStataiStat":{"Type":"BehaviorDesigner.Runtime.SharedAiStat","Name":"AiStat","IsShared":true,"AiStatmValue":{"UnitTypek__BackingField":"NONE","EAiTypek__BackingField":"NONE","EAttackerTypek__BackingField":"NONE","EOffenseTypek__BackingField":"NONE","EDefenseTypek__BackingField":"NONE","Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Int32k__BackingField":0,"Int32k__BackingField":0,"Booleank__BackingField":false,"Int32k__BackingField":0,"Booleank__BackingField":false,"Singlek__BackingField":0}},"SharedNavMeshAgentnavMeshAgent":{"Type":"BehaviorDesigner.Runtime.SharedNavMeshAgent","Name":"NavMeshAgent","IsShared":true},"SharedTransformtargetTransform":{"Type":"BehaviorDesigner.Runtime.SharedTransform","Name":"TargetTransform","IsShared":true},"SharedIslandInfoislandInfo":{"Type":"BehaviorDesigner.Runtime.SharedIslandInfo","Name":"IslandInfo","IsShared":true},"SharedVector3defensePos":{"Type":"BehaviorDesigner.Runtime.SharedVector3","Name":null,"Vector3mValue":"(0,0,0)"}}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(368.5714,150)"},"ID":8,"Name":"Behavior + Selector","Instant":true,"AbortTypeabortType":"LowerPriority","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-201.764771,150)"},"ID":9,"Name":"Attack + Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.CanAttackInOffense","NodeData":{"Offset":"(-151.611847,128.141663)"},"ID":10,"Name":"Can + Attack In Offense","Instant":true,"SharedAiStataiStat":{"Type":"BehaviorDesigner.Runtime.SharedAiStat","Name":"AiStat","IsShared":true,"AiStatmValue":{"UnitTypek__BackingField":"NONE","EAiTypek__BackingField":"NONE","EAttackerTypek__BackingField":"NONE","EOffenseTypek__BackingField":"NONE","EDefenseTypek__BackingField":"NONE","Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Int32k__BackingField":0,"Int32k__BackingField":0,"Booleank__BackingField":false,"Int32k__BackingField":0,"Booleank__BackingField":false,"Singlek__BackingField":0}},"SharedIslandInfoislandInfo":{"Type":"BehaviorDesigner.Runtime.SharedIslandInfo","Name":"IslandInfo","IsShared":true},"SharedTransformtargetTransform":{"Type":"BehaviorDesigner.Runtime.SharedTransform","Name":"TargetTransform","IsShared":true}},{"Type":"BlueWaterProject.Attack","NodeData":{"Offset":"(127.615311,129.8023)"},"ID":11,"Name":"Attack","Instant":true}]}]}]}]}]},"Variables":[{"Type":"BehaviorDesigner.Runtime.SharedAiStat","Name":"AiStat","IsShared":true,"AiStatmValue":{"UnitTypek__BackingField":"NONE","EAiTypek__BackingField":"NONE","EAttackerTypek__BackingField":"NONE","EOffenseTypek__BackingField":"NONE","EDefenseTypek__BackingField":"NONE","Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Singlek__BackingField":0,"Int32k__BackingField":0,"Int32k__BackingField":0,"Booleank__BackingField":false,"Int32k__BackingField":0,"Booleank__BackingField":false,"Singlek__BackingField":0}},{"Type":"BehaviorDesigner.Runtime.SharedNavMeshAgent","Name":"NavMeshAgent","IsShared":true},{"Type":"BehaviorDesigner.Runtime.SharedIslandInfo","Name":"IslandInfo","IsShared":true},{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":"IsCommanded","IsShared":true,"BooleanmValue":false},{"Type":"BehaviorDesigner.Runtime.SharedTransform","Name":"TargetTransform","IsShared":true}]}' + fieldSerializationData: + typeName: [] + fieldNameHash: + startIndex: + dataPosition: + unityObjects: [] + byteData: + byteDataArray: + Version: 1.7.7 diff --git a/BlueWater/Assets/09.BehaviorTree/OffenseBehavior.asset.meta b/BlueWater/Assets/09.BehaviorTree/OffenseBehavior.asset.meta new file mode 100644 index 000000000..6a8eba023 --- /dev/null +++ b/BlueWater/Assets/09.BehaviorTree/OffenseBehavior.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0fa0abbe34de7db4f87d218d194dcc5d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/Behavior Designer/Runtime/Tasks/Unity/Vector2/SetValue.cs b/BlueWater/Assets/Behavior Designer/Runtime/Tasks/Unity/Vector2/SetValue.cs index 246c155cc..10a4e65fe 100644 --- a/BlueWater/Assets/Behavior Designer/Runtime/Tasks/Unity/Vector2/SetValue.cs +++ b/BlueWater/Assets/Behavior Designer/Runtime/Tasks/Unity/Vector2/SetValue.cs @@ -1,26 +1,25 @@ -using UnityEngine; +using BehaviorDesigner.Runtime; +using BehaviorDesigner.Runtime.Tasks; -namespace BehaviorDesigner.Runtime.Tasks.Unity.UnityVector2 +// ReSharper disable once CheckNamespace +namespace BlueWaterProject { - [TaskCategory("Unity/Vector2")] - [TaskDescription("Sets the value of the Vector2.")] - public class SetValue : Action + [TaskCategory("Custom/SetVariable")] + public class SetIslandInfo : Action { - [Tooltip("The Vector2 to get the values of")] - public SharedVector2 vector2Value; - [Tooltip("The Vector2 to set the values of")] - public SharedVector2 vector2Variable; + public SharedIslandInfo islandInfoValue; + public SharedIslandInfo islandInfoVariable; public override TaskStatus OnUpdate() { - vector2Variable.Value = vector2Value.Value; + islandInfoVariable.Value = islandInfoValue.Value; return TaskStatus.Success; } - + public override void OnReset() { - vector2Value = Vector2.zero; - vector2Variable = Vector2.zero; + islandInfoValue = null; + islandInfoVariable = null; } } } \ No newline at end of file