Spaces:
Runtime error
Runtime error
using System; | |
namespace Quantum | |
{ | |
/// <summary> | |
/// Reactive Decorator sample. Listens to changes on two Blackboard entries. | |
/// </summary> | |
[ | ]|
public unsafe class BTBlackboardCompare : BTDecorator | |
{ | |
// We let the user define, on the Visual Editor, which Blackboard entries | |
// shall be observed by this Decorator | |
public AIBlackboardValueKey BlackboardKeyA; | |
public AIBlackboardValueKey BlackboardKeyB; | |
public override void OnEnter(BTParams btParams) | |
{ | |
base.OnEnter(btParams); | |
// Whenever we enter this Decorator... | |
// We register it as a Reactive Decorator so, whenever the entries are changed, | |
// the DryRun is executed again, possibly aborting the current execution | |
btParams.Blackboard->RegisterReactiveDecorator(btParams.Frame, BlackboardKeyA.Key, this); | |
btParams.Blackboard->RegisterReactiveDecorator(btParams.Frame, BlackboardKeyB.Key, this); | |
} | |
public override void OnExit(BTParams btParams) | |
{ | |
base.OnExit(btParams); | |
// Whenever the execution goes higher, it means that this Decorator isn't in the current subtree anymore | |
// So we unregister this Decorator from the Reactive list. This means that if the Blackboard entries | |
// get changed, this Decorator will not react anymore | |
btParams.Blackboard->UnregisterReactiveDecorator(btParams.Frame, BlackboardKeyA.Key, this); | |
btParams.Blackboard->UnregisterReactiveDecorator(btParams.Frame, BlackboardKeyB.Key, this); | |
} | |
// We just check if A is greater than B. If that's the case | |
// PS: this gets called in THREE possible situations: | |
// 1 - When the execution is goign DOWN on the tree and this Decorator is found | |
// 2 - If changes to the observed blackboard entries happen | |
// 3 - If this is inside a Dynamic Composite node | |
public override Boolean DryRun(BTParams btParams) | |
{ | |
var blackboard = btParams.Blackboard; | |
var A = blackboard->GetInteger(btParams.Frame, BlackboardKeyA.Key); | |
var B = blackboard->GetInteger(btParams.Frame, BlackboardKeyB.Key); | |
return A > B; | |
} | |
} | |
} | |