public sealed override void HandleEvent(EventContext context, Event e) { UInt64 runtimeDataId = MakeRuntimeDataId(context.entityId, _nodeId); if (s_initialized.Contains(runtimeDataId)) { BehaviorTreeContext updateContext = new BehaviorTreeContext(_nodeId, context); HandleEvent(updateContext, e); } }
public sealed override void Terminate(UpdateContext context) { UInt64 runtimeDataId = MakeRuntimeDataId(context.entityId, _nodeId); if (s_initialized.Contains(runtimeDataId)) { BehaviorTreeContext updateContext = new BehaviorTreeContext(_nodeId, context); OnTerminate(updateContext, true); s_initialized.Remove(runtimeDataId); if (!String.IsNullOrEmpty(_interruptLog)) { updateContext.Log(_interruptLog); } } }
/// <summary> /// Terminate this node. /// </summary> /// <param name="unmodifiedContext"></param> public sealed override void Terminate(UpdateContext unmodifiedContext) { var runtimeDataId = MakeRuntimeDataId(unmodifiedContext.entityId, _nodeId); if (_initialized.Contains(runtimeDataId)) { var updateContext = new BehaviorTreeContext(_nodeId, unmodifiedContext); OnTerminate(updateContext, true); _initialized.Remove(runtimeDataId); if (!string.IsNullOrEmpty(_interruptLog)) { updateContext.Log(_interruptLog); } } }
public sealed override Status Tick(UpdateContext context) { Status returnStatus = Status.Running; UInt64 runtimeDataId = MakeRuntimeDataId(context.entityId, _nodeId); BehaviorTreeContext updateContext = new BehaviorTreeContext(_nodeId, context); if (!s_initialized.Contains(runtimeDataId)) { if (!string.IsNullOrEmpty(_startLog)) { updateContext.Log(_startLog); } returnStatus = OnInitialize(updateContext) ? Status.Running : Status.Failure; } if (returnStatus == Status.Running) { returnStatus = OnUpdate(updateContext); } if (returnStatus != Status.Running) { OnTerminate(updateContext); s_initialized.Remove(runtimeDataId); } if (returnStatus == Status.Success && !String.IsNullOrEmpty(_successLog)) { updateContext.Log(_successLog); } else if (returnStatus == Status.Failure && !String.IsNullOrEmpty(_failureLog)) { updateContext.Log(_failureLog); } return(returnStatus); }
protected virtual void HandleEvent(BehaviorTreeContext updateContext, Event e) { }
protected virtual void OnTerminate(BehaviorTreeContext updateContext, bool interrupted = false) { }
protected virtual Status OnUpdate(BehaviorTreeContext updateContext) { return(Status.Success); }
protected virtual bool OnInitialize(BehaviorTreeContext updateContext) { return(true); }