Explorar o código

sketching FSM and calls to pathfinding

DasGewehr %!s(int64=9) %!d(string=hai) anos
pai
achega
f24fa9078b

+ 2 - 0
game/Assets/Scripts/Enemy/Behavior.cs

@@ -5,6 +5,8 @@ namespace EnemyAI
 {
     internal class Behavior
     {
+        internal BehaviorController.Behaviors behavior;
+
         internal virtual Result Run(ref Blackboard blackboard)
         {
             return Result.Failure;

+ 7 - 0
game/Assets/Scripts/Enemy/BehaviorController.cs

@@ -7,6 +7,8 @@ namespace EnemyAI
     {
         public Blackboard blackboard;
 
+        internal enum Behaviors {RechargeBehavior, ChaseBehavior}
+
         private EnemyAI.Behavior currentBehavior;
 
         public BehaviorController()
@@ -18,6 +20,11 @@ namespace EnemyAI
         public void Update()
         {
             EnemyAI.Result result = currentBehavior.Run(ref blackboard);
+
+            switch (result)
+            { 
+                
+            }
         }
     }
 }

+ 2 - 0
game/Assets/Scripts/Enemy/Blackboard.cs

@@ -14,5 +14,7 @@ namespace EnemyAI
         public UnityEngine.AI.NavMeshAgent navMeshAgent;
 
         public UnityEngine.Vector3 PlayerPosition;
+
+        public UnityEngine.Vector3 EnemyPosition;
     }
 }

+ 12 - 2
game/Assets/Scripts/Enemy/ChaseBehavior.cs

@@ -8,13 +8,23 @@ namespace EnemyAI
     {
         internal override Result Run(ref Blackboard blackboard)
         {
-            blackboard.navMeshAgent.destination = blackboard.PlayerPosition;
-
             if (!blackboard.Night)
             {
+                return Result.Failure;
+            }
+
+            if (Vector3.Distance(blackboard.PlayerPosition, blackboard.EnemyPosition) < 0.5f)
+            {
+                //Close enough to player
                 return Result.Success;
             }
 
+            //If the player moved so far that re-pathing is necessary
+            if (Vector3.Distance(blackboard.PlayerPosition, blackboard.navMeshAgent.destination) > 0.5f)
+            {
+                blackboard.navMeshAgent.destination = blackboard.PlayerPosition;
+            }
+
             return Result.Running;
         }
     }

+ 8 - 1
game/Assets/Scripts/Enemy/Enemy.cs

@@ -14,12 +14,19 @@ public class Enemy : MonoBehaviour
 	void Start () 
     {
         behaviorController = new EnemyAI.BehaviorController();
+        behaviorController.blackboard.navMeshAgent = GetComponent<UnityEngine.AI.NavMeshAgent>();
 	}
 	
 	// Update is called once per frame
 	void Update () 
     {
-        behaviorController.blackboard.Night = true;
+        EnemyAI.Blackboard blackboard = behaviorController.blackboard;
+        // TODO get state
+        blackboard.Night = true;
+        // TODO get position
+        blackboard.PlayerPosition = new Vector3(0, 0, 0); 
+        blackboard.EnemyPosition = transform.position;
+
         behaviorController.Update();
 	}
 }