Beispiel #1
0
 public override EBTTaskState OnTaskStart(BehaviourTreeRunner btree)
 {
     mAbort = false;
     Debug.Log("Start Test Task: " + mInformation);
     mTargetSetter.SetValue(new Vector3(10, 201, 10));
     return(EBTTaskState.running);
 }
Beispiel #2
0
    public override void OnInitData(BehaviourTreeRunner btree, string jsonData)
    {
        JObject obj = JsonConvert.DeserializeObject <JObject>(jsonData);

        mTargetSetter = btree.Blackboard.Setter <Vector3>("test");
        mInformation  = obj.Value <string>("INFO.");
    }
Beispiel #3
0
        public void InitWith(BehaviourTreeRunner runner)
        {
            if (EditorApplication.isPlaying)
            {
                BindBehaviourTreeEvent(false);
            }
            ContextMenu.Hide();
            Runner         = runner;
            BehaviourAsset = Runner == null ? (Selection.activeObject as BehaviourTreeAsset) : Runner.SourceAsset;
            TreeCanvas.ClearElements();
            CommentCanvas.ClearElements();
            TreeGraph.Clear();

            mRootGUI = new BehaviourRootGUI(this);
            mRootGUI.UpdateLocalData();
            TreeCanvas.AddElement(mRootGUI);
            TreeGraph.AddNode(mRootGUI);

            if (BehaviourAsset != null)
            {
                ImportTreeData();
            }
            ResetIdCounter();
            RebuildExecutionOrder();
            UpdateStateInfo();
            if (EditorApplication.isPlaying)
            {
                BindBehaviourTreeEvent(true);
            }
        }
Beispiel #4
0
 public override EBTTaskState OnTaskStart(BehaviourTreeRunner btree)
 {
     mAbort = false;
     mTimer = 0;
     mSign  = Mathf.Sign(Random.value - 0.5f);
     return(EBTTaskState.running);
 }
        public void SetBehaviourTreeAsset(BehaviourTreeAsset asset)
        {
            if (asset == tree)
            {
                return;
            }
            if (tmpAsset != null)
            {
                BehaviourTreeAsset.DestroyAsset(tmpAsset, true);
                tmpAsset = null;
            }
            tree = asset;
            var bind = runner == null || asset == null ? null : runner.GetBinder(asset);

            if (bind != null)
            {
                runner = bind.Runner;
            }
            runtimeBinder = bind;
            if (tree != null)
            {
                tmpAsset = tree.Clone();
            }
            if (updateTreeAsset != null)
            {
                updateTreeAsset();
            }
        }
        public bool SetSelectedAsset()
        {
            BehaviourTreeRunner tmprunner = null;
            BehaviourTreeAsset  tmpasset  = null;

            if (Selection.activeGameObject != null)
            {
                tmprunner = Selection.activeGameObject.GetComponent <BehaviourTreeRunner>();
            }
            else if (Selection.activeObject != null)
            {
                tmpasset = Selection.activeObject as BehaviourTreeAsset;
            }
            if (tmprunner != null)
            {
                SetBehaviourTreeRunner(tmprunner);
                return(true);
            }
            if (tmpasset == null && BehaviourTreeEditor.ActiveBTEditor != null)
            {
                var his = BehaviourTreeEditor.ActiveBTEditor.LastAssetInHistory;
                if (!string.IsNullOrEmpty(his))
                {
                    tmpasset = AssetDatabase.LoadAssetAtPath <BehaviourTreeAsset>(his);
                }
            }
            if (tmpasset != null)
            {
                SetBehaviourTreeAsset(tmpasset);
                return(true);
            }
            return(false);
        }
Beispiel #7
0
        public static void OpenEditor()
        {
            GameObject          obj = Selection.activeGameObject;
            BehaviourTreeRunner r   = obj == null ? null : obj.GetComponent <BehaviourTreeRunner>();

            OpenEditor(r);
        }
Beispiel #8
0
 private void OnBehaviourTreeBegin(BehaviourTreeRunner btree)
 {
     if (btree == Runner)
     {
         SetNodeRuntimeState(btree.RootNode);
     }
 }
Beispiel #9
0
        public static void OpenEditor(BehaviourTreeRunner runner)
        {
            BehaviourTreeDesignerWindow window = GetWindow <BehaviourTreeDesignerWindow>();

            window.InitWith(runner);
            window.Show();
        }
Beispiel #10
0
 public void SyncRuntimeState(BehaviourTreeRunner btree)
 {
     if (RuntimeNode == null)
     {
         Self.BTRuntimeState = EBTTaskState.inactive;
         for (int i = 0; i < conditions.Count; i++)
         {
             conditions[i].BTRuntimeState = EBTTaskState.inactive;
         }
         for (int i = 0; i < services.Count; i++)
         {
             services[i].BTRuntimeState = EBTTaskState.inactive;
         }
     }
     else
     {
         Self.BTRuntimeState = RuntimeNode.State;
         for (int i = 0; i < RuntimeNode.ConditionBuffer.Length; i++)
         {
             conditions[i].BTRuntimeState = RuntimeNode.State == EBTTaskState.inactive ? EBTTaskState.inactive
                 : (RuntimeNode.ConditionBuffer[i] ? EBTTaskState.success : EBTTaskState.faild);
         }
         for (int i = 0; i < services.Count; i++)
         {
             EBTTaskState stat = services[i].BTRuntimeState;
             services[i].BTRuntimeState = btree.IsServiceActive(services[i].BTId) ? EBTTaskState.running : EBTTaskState.inactive;
             if (stat != EBTTaskState.running && services[i].BTRuntimeState == EBTTaskState.running)
             {
                 services[i].TimeOffset = btree.BehaviourTime;
             }
         }
     }
 }
Beispiel #11
0
 public override EBTTaskState OnTaskTick(BehaviourTreeRunner btree, float deltaTime)
 {
     if (mCharactor.IsGrounded && btree.TaskTime > 0.2f)
     {
         mCharactor.Move(Vector3.zero, false, true);
     }
     return(btree.TaskTime > 3 ? EBTTaskState.success : EBTTaskState.running);
 }
Beispiel #12
0
 public override EBTTaskState OnTaskTick(BehaviourTreeRunner btree, float deltaTime)
 {
     if (mAbort)
     {
         return(EBTTaskState.faild);
     }
     return(EBTTaskState.running);
 }
Beispiel #13
0
 public override EBTTaskState OnTaskStart(BehaviourTreeRunner btree)
 {
     if (mText == null)
     {
         return(EBTTaskState.faild);
     }
     mText.gameObject.SetActive(true);
     return(EBTTaskState.running);
 }
Beispiel #14
0
 public override EBTTaskState OnTaskTick(BehaviourTreeRunner btree, float deltaTime)
 {
     if (mAbort)
     {
         return(EBTTaskState.faild);
     }
     mTimer += deltaTime;
     if (mTimer >= mUpdateInterval)
     {
         if (mTargetTrans != null)
         {
             Transform trans = mTargetTrans.Value;
             if (trans == null)
             {
                 return(EBTTaskState.faild);
             }
             mTargetPos = trans.position;
         }
         else
         {
             mTargetPos = mTarget.Value;
         }
         mPath.ClearCorners();
         NavMesh.CalculatePath(mPlayer.transform.position, mTargetPos, 1, mPath);
         mCornnerPtr = 1;
         mTimer      = 0;
     }
     Vector3[] points = mPath.corners;
     if (mCornnerPtr < points.Length)
     {
         Vector3 p   = points[mCornnerPtr];
         Vector3 dir = p - mPlayer.transform.position;
         mPlayer.Move(dir.normalized * mSpeedPercentage * Mathf.Min(1, dir.magnitude * 3));
         float rad;
         if (mCornnerPtr == points.Length - 1 && mPath.status == NavMeshPathStatus.PathComplete)
         {
             rad = mStopDistance * mStopDistance;
         }
         else
         {
             rad = 0.009f;
         }
         if (dir.sqrMagnitude < rad)
         {
             mCornnerPtr++;
         }
         return(EBTTaskState.running);
     }
     else
     {
         if (mPath.status == NavMeshPathStatus.PathPartial)
         {
             mPlayer.Move(mPlayer.transform.forward * mSpeedPercentage);
         }
         return(mPath.status == NavMeshPathStatus.PathComplete ? EBTTaskState.success : EBTTaskState.running);
     }
 }
Beispiel #15
0
 public override EBTTaskState OnTaskStart(BehaviourTreeRunner btree)
 {
     if (mCheckPoints.Length < 2)
     {
         return(EBTTaskState.faild);
     }
     mPtr = (mPtr + 1) % mCheckPoints.Length;
     mTarget.SetValue(mCheckPoints[mPtr].position);
     return(EBTTaskState.success);
 }
Beispiel #16
0
    public override EBTTaskState OnTaskTick(BehaviourTreeRunner btree, float deltaTime)
    {
        if (!mTarget.IsSet || mTarget.Value == null)
        {
            return(EBTTaskState.faild);
        }
        Vector3 p = mTarget.Value.position + Vector3.up * 1.6f;

        mPlayer.LookAt(p);
        return(EBTTaskState.running);
    }
 public void Dispose()
 {
     if (tmpAsset != null)
     {
         BehaviourTreeAsset.DestroyAsset(tmpAsset, true);
         tmpAsset = null;
     }
     runner = null;
     tree   = null;
     EditorApplication.playModeStateChanged -= OnPlayModeChanged;
 }
Beispiel #18
0
 public override EBTTaskState OnTaskStart(BehaviourTreeRunner btree)
 {
     if (!mTarget.IsSet && mTargetTrans == null)
     {
         return(EBTTaskState.faild);
     }
     mAbort = false;
     mTimer = mUpdateInterval;
     Debug.Log("move to " + mTarget.Value);
     return(EBTTaskState.running);
 }
Beispiel #19
0
    public override void OnInitData(BehaviourTreeRunner btree, string jsonData)
    {
        GameObject go = GameObject.Find("FoundYouText");

        if (go == null)
        {
            return;
        }
        mText = go.GetComponent <Text>();
        mText.gameObject.SetActive(false);
        mStartColor = mText.color;
    }
Beispiel #20
0
 public override EBTTaskState OnTaskTick(BehaviourTreeRunner btree, float deltaTime)
 {
     if (mAbort)
     {
         return(EBTTaskState.success);
     }
     mTimer += deltaTime;
     if (mTimer > mSearchTime)
     {
         return(EBTTaskState.success);
     }
     btree.transform.Rotate(Vector3.up, mSign * 100 * deltaTime);
     return(EBTTaskState.running);
 }
Beispiel #21
0
        public static void OpenBTEditor(BehaviourTreeRunner runner)
        {
            var window = ActiveBTEditor;

            if (window == null)
            {
                window = GetWindow <BehaviourTreeEditor>(typeof(SceneView));
                window.Show();
            }
            else
            {
                window.AddDelayTask(ACT_OPEN_ASSET, () => window.mAssetBinder.SetBehaviourTreeRunner(runner));
            }
        }
Beispiel #22
0
 private void OnBehaviourTreeFrame(BehaviourTreeRunner btree)
 {
     if (btree == Runner)
     {
         for (int i = 0; i < TreeCanvas.ElementCount; i++)
         {
             BehaviourNodeGUI node = TreeCanvas.GetElement <BehaviourNodeGUI>(i);
             if (node != null)
             {
                 node.SyncRuntimeState(btree);
             }
         }
     }
 }
Beispiel #23
0
    public override void OnInitData(BehaviourTreeRunner btree, string jsonData)
    {
        mTarget = btree.Blackboard.Getter <Vector3>("targetPos");
        JObject obj = JsonConvert.DeserializeObject <JObject>(jsonData);

        mStopDistance     = obj.Value <float>("mStopDistance");
        mSpeedPercentage  = obj.Value <float>("mSpeedPercentage");
        mBlackboardTarget = obj.Value <string>("mBlackboardTarget");
        if (!string.IsNullOrEmpty(mBlackboardTarget))
        {
            mTargetTrans = btree.Blackboard.Getter <Transform>(mBlackboardTarget);
        }
        mPlayer = btree.GetComponent <PlayerController>();
        mPath   = new NavMeshPath();
    }
Beispiel #24
0
    public override EBTTaskState OnTaskTick(BehaviourTreeRunner btree, float deltaTime)
    {
        Color color = Color.Lerp(mStartColor, Color.red, Mathf.PingPong(btree.TaskTime * 2f, 1));

        mText.color = color;
        if (btree.TaskTime > 2)
        {
            mText.gameObject.SetActive(false);
            return(EBTTaskState.success);
        }
        else
        {
            return(EBTTaskState.running);
        }
    }
        public void SetBehaviourTreeRunner(BehaviourTreeRunner runner)
        {
            if (runner == null)
            {
                this.runner        = null;
                this.runtimeBinder = null;
                return;
            }
            if (this.runner == null)
            {
                this.runner = null;
            }
            var asset = runner == null ? tree : runner.SourceAsset;

            if (asset == null)
            {
                asset = tree;
            }
            var bind = runner == null ? null : runner.GetBinder(asset);

            if (asset == tree && this.runner == runner && runtimeBinder == bind)
            {
                return;
            }
            this.runner   = runner;
            this.tree     = asset;
            runtimeBinder = bind;
            if (tmpAsset != null)
            {
                BehaviourTreeAsset.DestroyAsset(tmpAsset, true);
                tmpAsset = null;
            }
            if (tree != null)
            {
                if (tree != null)
                {
                    tmpAsset = tree.Clone();
                }
                if (updateTreeAsset != null)
                {
                    updateTreeAsset();
                }
            }
        }
Beispiel #26
0
    public override void OnInitData(BehaviourTreeRunner btree, string jsonData)
    {
        mTarget = btree.Blackboard.Setter <Vector3>("targetPos");
        GameObject obj = GameObject.Find("CheckPoints");

        if (obj)
        {
            Transform trans = obj.transform;
            mCheckPoints = new Transform[trans.childCount];
            for (int i = 0; i < mCheckPoints.Length; i++)
            {
                mCheckPoints[i] = trans.GetChild(i);
            }
            mPtr = Mathf.FloorToInt(Random.value * (mCheckPoints.Length - 0.1f));
        }
        else
        {
            mCheckPoints = new Transform[0];
        }
    }
 private void OnPlayModeChanged(PlayModeStateChange stat)
 {
     if (stat == PlayModeStateChange.EnteredPlayMode || stat == PlayModeStateChange.EnteredEditMode)
     {
         if (runner == null)
         {
             runner = null;
         }
         if (tree == null)
         {
             tree = null;
         }
         if (tmpAsset != null)
         {
             BehaviourTreeAsset.DestroyAsset(tmpAsset, true);
             tmpAsset = null;
         }
         if (tree == null)
         {
             if (SetSelectedAsset())
             {
                 return;
             }
         }
         else
         {
             var go    = Selection.activeGameObject;
             var tmpru = go == null ? null : go.GetComponent <BehaviourTreeRunner>();
             if (tmpru != null && tmpru.SourceAsset == tree)
             {
                 runner = tmpru;
             }
         }
         runtimeBinder = runner == null ? null : runner.ActiveBinder;
         if (updateTreeAsset != null)
         {
             updateTreeAsset();
         }
     }
 }
 public void SetBehaviourBinder(AssetBinder binder)
 {
     if (binder == null || runtimeBinder == binder)
     {
         return;
     }
     if (tmpAsset != null)
     {
         BehaviourTreeAsset.DestroyAsset(tmpAsset, true);
         tmpAsset = null;
     }
     runner        = binder.Runner;
     tree          = binder.Source;
     runtimeBinder = binder;
     if (tree != null)
     {
         tmpAsset = tree.Clone();
     }
     if (updateTreeAsset != null)
     {
         updateTreeAsset();
     }
 }
Beispiel #29
0
 protected override void OnUpdate()
 {
     BehaviourTreeRunner.Exec(m_BTNode, this, m_WorkingMemory);
 }
Beispiel #30
0
 public override void OnAbort(BehaviourTreeRunner btree)
 {
     mAbort = true;
 }