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);
                }
            }
        }
Esempio n. 3
0
        /// <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);
 }