Exemplo n.º 1
0
 protected override Status Update(Blackboard blackboard)
 {
     if (Func != null)
     {
         blackboard.Set(Destination, Func());
     }
     else if (Value != null)
     {
         blackboard.Set(Destination, Value.GetValue(blackboard));
     }
     else
     {
         blackboard.Set(Destination, FuncBlackboard(blackboard));
     }
     return(Status.Success);
 }
Exemplo n.º 2
0
 protected override Status Abort(Blackboard blackboard, bool forced)
 {
     if (!Child.IsFinished)
     {
         blackboard.Set(VariableName, currentList[currentIndex]);
         return(Child.TickAbort(blackboard, forced));
     }
     return(Status.Aborted);
 }
Exemplo n.º 3
0
        bool CheckConditionFor(Blackboard blackboard, object item)
        {
            object old_val = null;

            if (blackboard.Contains(VariableName))
            {
                old_val = blackboard.Get <object>(VariableName);
            }

            blackboard.Set(VariableName, item);

            bool can_run = Child.CheckCondition(blackboard);

            // Restore old blackboard value
            if (old_val != null)
            {
                blackboard.Set(VariableName, old_val);
            }

            return(can_run);
        }
Exemplo n.º 4
0
        public override bool CheckCondition(Blackboard blackboard)
        {
            var list = List.GetValue(blackboard).ToList();

            if (list.Count == 0)
            {
                return(false);
            }

            blackboard.Set("current", currentList[index]);
            return(base.CheckCondition(blackboard));
        }
Exemplo n.º 5
0
        protected override Status Update(Blackboard blackboard)
        {
            // Check if the child runs for an earlier list index
            for (int i = 0; i < currentIndex; i++)
            {
                var item = currentList[i];
                if (CheckConditionFor(blackboard, item))
                {
                    // Attempt to abort the child, and yield if it can't abort yet
                    Log(String.Format("Aborting child with item {0} because item {1} can run", currentIndex, i));

                    blackboard.Set(VariableName, currentList[currentIndex]);
                    if (Child.TickAbort(blackboard) != Status.Aborted)
                    {
                        return(Status.Running);
                    }

                    currentIndex = i;
                    break;
                }
            }

            // Otherwise, run children in order
            while (true)
            {
                if (currentIndex >= currentList.Count)
                {
                    return(Status.Failure);
                }

                blackboard.Set(VariableName, currentList[currentIndex]);
                if (Child.TickUpdate(blackboard) != Status.Failure)
                {
                    return(Child.Status);
                }

                currentIndex++;
            }
        }
Exemplo n.º 6
0
        public override bool CheckCondition(Blackboard blackboard)
        {
            int test_index = 0;

            while (true)
            {
                if (test_index >= currentList.Count)
                {
                    return(false);
                }

                object old_val = null;
                if (blackboard.Contains("current"))
                {
                    old_val = blackboard.Get <object>("current");
                }

                blackboard.Set("current", currentList[test_index]);

                bool can_run = Child.CheckCondition(blackboard);
                if (!can_run)
                {
                    test_index++;
                }

                // Restore old blackboard value
                if (old_val != null)
                {
                    blackboard.Set("current", old_val);
                }

                if (can_run)
                {
                    return(true);
                }
            }
        }
Exemplo n.º 7
0
        protected override Status Update(Blackboard blackboard)
        {
            if (index >= currentList.Count)
            {
                return(Status.Success);
            }

            blackboard.Set("current", currentList[index]);
            if (Child.TickUpdate(blackboard) != Status.Running)
            {
                return(Child.Status);
            }

            return(Status.Running);
        }
Exemplo n.º 8
0
        protected override Status Update(Blackboard blackboard)
        {
            while (true)
            {
                if (currentIndex >= currentList.Count)
                {
                    return(Status.Failure);
                }

                blackboard.Set("current", currentList[currentIndex]);

                if (Child.TickUpdate(blackboard) == Status.Failure)
                {
                    currentIndex++;
                }
                else
                {
                    return(Child.Status);
                }
            }
        }
Exemplo n.º 9
0
 public void Set(Blackboard bb, T val)
 {
     bb.Set <T>(Name, val);
 }