Beispiel #1
0
        public override void DoStep(ActorController actor)
        {
            if (currentOrder == null)
            {
                Debug.Log($"{nameof(currentOrder)} is null");
                Failed = true;
                return;
            }

            currentOrder.DoStep(actor);

            if (!currentOrder.Done)
            {
                return;
            }

            OrderStateInfo info = States[currentState];

            if (currentOrder.Completed)
            {
                if (info.CompleteState != null)
                {
                    info.CompleteState(actor);
                }
                else
                {
                    Failed = true;
                    Debug.Log($"No complete transition available for state: {currentState}");
                }
            }
            else if (currentOrder.Failed)
            {
                if (info.FailState != null)
                {
                    info.FailState(actor);
                }
                else
                {
                    Failed = true;
                    Debug.Log($"No failure transition available for state: {currentState}");
                }
            }
            else if (currentOrder.Cancelled)
            {
                throw new InvalidOperationException("Order exectution cannot continue when sub order is cancelled!");
            }
        }
        public override void DoStep(ActorController actor)
        {
            if (currentOrder != null)
            {
                currentOrder.DoStep(actor);

                //check to see if order is done somehow
                if (currentOrder.Done)
                {
                    OrderStateInfo info = States[currentState];
                    if (currentOrder.Completed)
                    {
                        if (info.CompleteState != null)
                        {
                            info.CompleteState(actor);
                        }
                        else
                        {
                            this.Failed = true;
                            Debug.Log("No complete transition available for state: " + currentState);
                        }
                    }
                    else if (currentOrder.Failed)
                    {
                        if (info.FailState != null)
                        {
                            info.FailState(actor);
                        }
                        else
                        {
                            this.Failed = true;
                            Debug.Log("No failure transition available for state: " + currentState);
                        }
                    }
                    else if (currentOrder.Cancelled)
                    {
                        throw new Exception("Order exectution cannot continue when sub order is cancelled!");
                    }
                }
            }
            else
            {
                Debug.Log("currentOrder is null!");
                this.Failed = true;
            }
        }