Esempio n. 1
0
        public void Execute()
        {
            if (this.resetStates)
            {
                this.states      = new Dictionary <int, NodeState>();
                this.resetStates = false;
            }

            this.updateTime = Time.unscaledTime;
            Node.Return result = this.behaviorGraph.Execute(gameObject, this);

            switch (result)
            {
            case Node.Return.Success:
                this.Complete();
                if (this.onComplete == OnComplete.RepeatForever ||
                    this.onComplete == OnComplete.RepeatWhileSuccess)
                {
                    this.StartExecuting();
                }
                break;

            case Node.Return.Fail:
                this.Complete();
                if (this.onComplete == OnComplete.RepeatForever ||
                    this.onComplete == OnComplete.RepeatWhileFail)
                {
                    this.StartExecuting();
                }

                break;
            }
        }
Esempio n. 2
0
        // VIRTUAL METHODS: -----------------------------------------------------------------------

        public override Node.Return Execute(Node node, GameObject invoker, Behavior behavior)
        {
            Node.Return result = base.Execute(node, invoker, behavior);

            switch (result)
            {
            case Node.Return.Fail: return(Node.Return.Success);

            case Node.Return.Success: return(Node.Return.Fail);

            default: return(result);
            }
        }
Esempio n. 3
0
        private Node ParseReturn()
        {
            var node = new Node.Return();

            node.AddSpan(this.Expect(TokenKind.KeywordReturn).span);

            if (this.Current.kind != TokenKind.BraceClose &&
                this.Current.kind != TokenKind.ParenClose &&
                this.Current.kind != TokenKind.Comma &&
                this.Current.kind != TokenKind.Semicolon)
            {
                node.expr = this.ParseExpr();
            }

            return(node);
        }
Esempio n. 4
0
        // VIRTUAL METHODS: -----------------------------------------------------------------------

        public override Node.Return Execute(Node node, GameObject invoker, Behavior behavior)
        {
            int instanceID = node.GetInstanceID();
            int passCount  = behavior.GetPassCount(instanceID);

            if (this.count <= 0 || passCount < this.count)
            {
                Node.Return result = base.Execute(node, invoker, behavior);

                if (result == Node.Return.Success || result == Node.Return.Fail)
                {
                    behavior.SetPassCount(instanceID, passCount + 1);
                    node.ResetOutputStates(invoker, behavior, true);
                }

                return(Node.Return.Running);
            }

            return(Node.Return.Success);
        }
        // VIRTUAL METHODS: -----------------------------------------------------------------------

        public override Node.Return Execute(Node node, GameObject invoker, Behavior behavior)
        {
            int instanceID = node.GetInstanceID();

            int passCount = behavior.GetPassCount(instanceID);

            if (passCount > 0)
            {
                return(behavior.GetState(instanceID));
            }

            Node.Return result = base.Execute(node, invoker, behavior);

            switch (result)
            {
            case Node.Return.Fail:
            case Node.Return.Success:
                behavior.SetPassCount(instanceID, passCount + 1);
                return(result);
            }

            return(Node.Return.Running);
        }
Esempio n. 6
0
        private void PaintRuntimeState(Rect rect)
        {
            if (BehaviorWindow.WINDOW == null)
            {
                return;
            }
            if (BehaviorWindow.WINDOW.behaviorGraphEditor == null)
            {
                return;
            }
            if (BehaviorWindow.WINDOW.runtimeBehavior == null)
            {
                return;
            }

            int instanceID = this.node.GetInstanceID();

            Node.Return state = BehaviorWindow.WINDOW.runtimeBehavior.GetState(instanceID);
            if (state != Node.Return.None)
            {
                this.PaintNodeHighlight(rect, this.GetCurrentStateColor(COLOR_NONE));
            }
        }
        // VIRTUAL METHODS: -----------------------------------------------------------------------

        public override Node.Return Execute(Node node, GameObject invoker, Behavior behavior)
        {
            int instanceID = node.GetInstanceID();

            Node.Return state = behavior.GetState(instanceID);
            if (state == Node.Return.Fail)
            {
                return(Node.Return.Fail);
            }

            Node.Return result = base.Execute(node, invoker, behavior);

            switch (result)
            {
            case Node.Return.Fail:
                return(Node.Return.Fail);

            case Node.Return.Success:
                node.ResetOutputStates(invoker, behavior, true);
                break;
            }

            return(Node.Return.Running);
        }
Esempio n. 8
0
        protected Color GetCurrentStateColor(Color fallback, int instanceID = 0)
        {
            if (!EditorApplication.isPlaying)
            {
                return(fallback);
            }

            if (BehaviorWindow.WINDOW == null)
            {
                return(COLOR_NONE);
            }
            if (BehaviorWindow.WINDOW.behaviorGraphEditor == null)
            {
                return(COLOR_NONE);
            }
            if (BehaviorWindow.WINDOW.runtimeBehavior == null)
            {
                return(COLOR_NONE);
            }

            instanceID = (instanceID == 0 ? this.node.GetInstanceID() : instanceID);
            Node.Return state = BehaviorWindow.WINDOW.runtimeBehavior.GetState(instanceID);

            switch (state)
            {
            case Node.Return.Running: return(COLOR_RUNNING);

            case Node.Return.Success: return(COLOR_SUCCESS);

            case Node.Return.Fail: return(COLOR_FAIL);

            case Node.Return.None: return(COLOR_NONE);

            default: return(fallback);
            }
        }
        // VIRTUAL METHODS: -----------------------------------------------------------------------

        public override Node.Return Execute(Node node, GameObject invoker, Behavior behavior)
        {
            Node.Return result = base.Execute(node, invoker, behavior);
            return(result == Node.Return.Running ? result : Node.Return.Fail);
        }
Esempio n. 10
0
        // PUBLIC STATE METHODS: ------------------------------------------------------------------

        public void SetState(int instanceID, Node.Return state)
        {
            this.RequireState(instanceID);
            this.states[instanceID].state = state;
        }