diff options
| author | chai <chaifix@163.com> | 2021-01-27 16:15:06 +0800 | 
|---|---|---|
| committer | chai <chaifix@163.com> | 2021-01-27 16:15:06 +0800 | 
| commit | 97da432c35b8c7aaf9dd2c39e2aa4b1f55f36065 (patch) | |
| tree | d9b1db5908a3a030c529e230386fe01062923b09 /Client/Assets/Behavior Designer/Runtime/Actions/RestartBehaviorTree.cs | |
| parent | 1fe4ffba72f56ccc6a89d1896142425c666887d4 (diff) | |
+behaviour designer
Diffstat (limited to 'Client/Assets/Behavior Designer/Runtime/Actions/RestartBehaviorTree.cs')
| -rw-r--r-- | Client/Assets/Behavior Designer/Runtime/Actions/RestartBehaviorTree.cs | 56 | 
1 files changed, 56 insertions, 0 deletions
diff --git a/Client/Assets/Behavior Designer/Runtime/Actions/RestartBehaviorTree.cs b/Client/Assets/Behavior Designer/Runtime/Actions/RestartBehaviorTree.cs new file mode 100644 index 00000000..a63d9e6c --- /dev/null +++ b/Client/Assets/Behavior Designer/Runtime/Actions/RestartBehaviorTree.cs @@ -0,0 +1,56 @@ +using UnityEngine;
 +
 +namespace BehaviorDesigner.Runtime.Tasks
 +{
 +    [TaskDescription("Restarts a behavior tree, returns success after it has been restarted.")]
 +    [HelpURL("http://www.opsive.com/assets/BehaviorDesigner/documentation.php?id=66")]
 +    [TaskIcon("{SkinColor}RestartBehaviorTreeIcon.png")]
 +    public class RestartBehaviorTree : Action
 +    {
 +        [Tooltip("The GameObject of the behavior tree that should be restarted. If null use the current behavior")]
 +        public SharedGameObject behaviorGameObject;
 +        [Tooltip("The group of the behavior tree that should be restarted")]
 +        public SharedInt group;
 +
 +        private Behavior behavior;
 +
 +        public override void OnAwake()
 +        {
 +            var behaviorTrees = GetDefaultGameObject(behaviorGameObject.Value).GetComponents<Behavior>();
 +            if (behaviorTrees.Length == 1) {
 +                behavior = behaviorTrees[0];
 +            } else if (behaviorTrees.Length > 1) {
 +                for (int i = 0; i < behaviorTrees.Length; ++i) {
 +                    if (behaviorTrees[i].Group == group.Value) {
 +                        behavior = behaviorTrees[i];
 +                        break;
 +                    }
 +                }
 +                // If the group can't be found then use the first behavior tree
 +                if (behavior == null) {
 +                    behavior = behaviorTrees[0];
 +                }
 +            }
 +        }
 +
 +        public override TaskStatus OnUpdate()
 +        {
 +            if (behavior == null) {
 +                return TaskStatus.Failure;
 +            }
 +
 +            // Stop the behavior tree
 +            behavior.DisableBehavior();
 +            // Start the behavior tree back up
 +            behavior.EnableBehavior();
 +            // Return success
 +            return TaskStatus.Success;
 +        }
 +
 +        public override void OnReset()
 +        {
 +            // Reset the properties back to their original values.
 +            behavior = null;
 +        }
 +    }
 +}
\ No newline at end of file  | 
