protected T GetUserContextData <T>(BtWorkingData workData) where T : class, new() { BtActionLeafContext actionLeafContext = GetContext <BtActionLeafContext>(workData); T t = actionLeafContext.GetUserData <T>(); return(t); }
protected override int OnUpdate(BtWorkingData workData) { BtActionSequenceContext thisContext = GetContext <BtActionSequenceContext>(workData); int runningStatus = BtRunningStatus.FINISHED; BtAction node = GetChild <BtAction>(thisContext.current_selected_index); runningStatus = node.Update(workData); if (_continueIfErrorOccors == false && BtRunningStatus.IsError(runningStatus)) { thisContext.current_selected_index = -1; return(runningStatus); } if (BtRunningStatus.IsFinished(runningStatus)) { thisContext.current_selected_index++; if (IsIndexValid(thisContext.current_selected_index)) { runningStatus = BtRunningStatus.EXECUTING; } else { thisContext.current_selected_index = -1; } } return(runningStatus); }
protected override int OnUpdate(BtWorkingData workData) { BtActionPrioritizedSelectorContext thisContext = GetContext <BtActionPrioritizedSelectorContext>(workData); int runningState = BtRunningStatus.FINISHED; if (thisContext._currentSelectedIndex != thisContext._lastSelectedIndex) { if (IsIndexValid(thisContext._lastSelectedIndex)) { BtAction node = GetChild <BtAction>(thisContext._lastSelectedIndex); node.Transition(workData); } thisContext._lastSelectedIndex = thisContext._currentSelectedIndex; } if (IsIndexValid(thisContext._lastSelectedIndex)) { BtAction node = GetChild <BtAction>(thisContext._lastSelectedIndex); runningState = node.Update(workData); if (BtRunningStatus.IsFinished(runningState)) { thisContext._lastSelectedIndex = -1; } } return(runningState); }
public override bool IsTrue(BtWorkingData workData) { AIEntityWorkingData this_data = workData.As <AIEntityWorkingData>(); Vector3 target_pos = MathHelper.Vector3ZeroY(this_data.EntityAi.GetBbValue <Vector3>(BtEntityAi.BBKEY_NEXTMOVINGPOSITION, Vector3.zero)); Vector3 current_pos = MathHelper.Vector3ZeroY(this_data.EntityAi.BaseEntity.EntityController.WroldPosition); bool result = TMathUtils.GetDistance2D(target_pos, current_pos) < 1f; return(result); }
protected override void OnEnter(BtWorkingData workData) { //AIEntityWorkingData this_data = work_data.As<AIEntityWorkingData>(); _userData = GetUserContextData <AiUserContextData>(workData); _userData._attackingTime = DefaultWaitingTime; LogManager.Log("播放攻击动画OnEnter,[{0}]", TimeModule.RealtimeSinceStartup); //this_data.EntityAnimator.CrossFade("attack", 0.2f); // 播放攻击动作 }
protected override void OnTransition(BtWorkingData workData) { BtActionLeafContext leafContext = GetContext <BtActionLeafContext>(workData); if (leafContext._needExit) { OnExit(workData, BtRunningStatus.TRANSITION); } leafContext.ResetData(); }
protected override void OnTransition(BtWorkingData workData) { BtActionPrioritizedSelectorContext thisContext = GetContext <BtActionPrioritizedSelectorContext>(workData); BtAction node = GetChild <BtAction>(thisContext._lastSelectedIndex); if (node != null) { node.Transition(workData); } thisContext._lastSelectedIndex = -1; }
protected override void OnTransition(BtWorkingData workData) { BtActionSequenceContext this_context = GetContext <BtActionSequenceContext>(workData); BtAction node = GetChild <BtAction>(this_context.current_selected_index); if (node != null) { node.Transition(workData); } this_context.current_selected_index = -1; }
/// <summary> /// 根据节点的Hashcode值得到节点的ACtionContext /// </summary> protected T GetContext <T>(BtWorkingData workData) where T : BtActionContext, new() { int tmpUniqueKey = GetHashCode(); T t = workData.GetContext <T>(tmpUniqueKey); if (t == null) { t = new T(); workData.AddContext(tmpUniqueKey, t); } return(t); }
protected override int OnExecute(BtWorkingData workData) { AIEntityWorkingData thisData = workData.As <AIEntityWorkingData>(); if (_userData._attackingTime > 0) { _userData._attackingTime -= thisData.DeltaTime; if (_userData._attackingTime < 0) { LogManager.Log("播放攻击动画OnExecute,[{0}]", TimeModule.RealtimeSinceStartup); } } return(BtRunningStatus.EXECUTING); }
protected override bool OnEvaluate(BtWorkingData workData) { BtActionPrioritizedSelectorContext thisContext = GetContext <BtActionPrioritizedSelectorContext>(workData); //check last node first if (IsIndexValid(thisContext._currentSelectedIndex)) { BtAction node = GetChild <BtAction>(thisContext._currentSelectedIndex); if (node.Evaluate(workData)) { return(true); } } return(base.OnEvaluate(workData)); }
protected override bool OnEvaluate(BtWorkingData workData) { BtActionSequenceContext thisContext = GetContext <BtActionSequenceContext>(workData); int checkedNodeIndex = IsIndexValid(thisContext.current_selected_index) ? thisContext.current_selected_index : 0; if (IsIndexValid(checkedNodeIndex)) { BtAction node = GetChild <BtAction>(checkedNodeIndex); if (node.Evaluate(workData)) { thisContext.current_selected_index = checkedNodeIndex; return(true); } } return(false); }
protected override bool OnEvaluate(BtWorkingData workData) { BtActionPrioritizedSelectorContext thisContext = GetContext <BtActionPrioritizedSelectorContext>(workData); thisContext._currentSelectedIndex = -1; int childCount = GetChildCount(); for (int i = 0; i < childCount; i++) { BtAction node = GetChild <BtAction>(i); if (node.Evaluate(workData)) { thisContext._currentSelectedIndex = i; return(true); } } return(false); }
protected override int OnUpdate(BtWorkingData workData) { int runningState = BtRunningStatus.FINISHED; BtActionLeafContext leafContext = GetContext <BtActionLeafContext>(workData); int currStatus = leafContext._status; if (currStatus == ACTION_READY) { OnEnter(workData); leafContext.OnEnter(); } if (currStatus == ACTION_RUNNING) { runningState = OnExecute(workData); if (BtRunningStatus.IsFinished(runningState)) { leafContext.OnFinish(); } } if (currStatus == ACTION_FINISHED) { if (leafContext._needExit) { OnExit(workData, runningState); } else { LogManager.Error("节点退出错误,[{0}]", TbName); } leafContext.OnExit(); } return(runningState); }
public void Transition(BtWorkingData workData) { OnTransition(workData); }
public int Update(BtWorkingData workData) { return(OnUpdate(workData)); }
public bool Evaluate(BtWorkingData workData) { return((_precondition == null || _precondition.IsTrue(workData)) && OnEvaluate(workData)); }
public override bool IsTrue(BtWorkingData workData) { return(false); }
protected virtual void OnExit(BtWorkingData workData, int runningStatus) { }
public override bool IsTrue(BtWorkingData workData) { return(!GetFirst().IsTrue(workData)); }
protected virtual int OnUpdate(BtWorkingData workData) { return(0); }
protected virtual void OnEnter(BtWorkingData workData) { }
public abstract bool IsTrue(BtWorkingData workData);
protected virtual bool OnEvaluate(BtWorkingData workData) { return(true); }
protected virtual int OnExecute(BtWorkingData workData) { return(BtRunningStatus.FINISHED); }
protected virtual void OnTransition(BtWorkingData workData) { }
public override bool IsTrue(BtWorkingData workData) { return(GetChild <BtPreconditionNode>(0).IsTrue(workData) ^ GetChild <BtPreconditionNode>(1).IsTrue(workData)); }