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); }
protected override Status Abort(Blackboard blackboard, bool forced) { if (!Child.IsFinished) { blackboard.Set(VariableName, currentList[currentIndex]); return(Child.TickAbort(blackboard, forced)); } return(Status.Aborted); }
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); }
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)); }
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++; } }
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); } } }
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); }
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); } } }
public void Set(Blackboard bb, T val) { bb.Set <T>(Name, val); }