protected override int onExecute(TBTWorkingData wData) { AIEntityWorkingData thisData = wData.As <AIEntityWorkingData>(); Vector3 targetPos = TMathUtils.Vector3ZeroY(thisData.entity.GetBBValue <Vector3>(AIEntity.BBKEY_NEXTMOVINGPOSITION, Vector3.zero)); Vector3 currentPos = TMathUtils.Vector3ZeroY(thisData.entityTF.position); if (TMathUtils.IsZero((targetPos - currentPos).sqrMagnitude)) { return(TBTRunningStatus.FINISHED); } else { Vector3 toTarget = TMathUtils.GetDirection2D(targetPos, currentPos); Vector3 curFacing = thisData.entityTF.forward; float dotV = Vector3.Dot(toTarget, curFacing); float deltaAngle = Mathf.Acos(Mathf.Clamp(dotV, -1f, 1f)); if (deltaAngle < 0.1f) { thisData.entityTF.forward = toTarget; return(TBTRunningStatus.FINISHED); } else { Vector3 crossV = Vector3.Cross(curFacing, toTarget); float angleToTurn = Mathf.Min(3f * thisData.deltaTime, deltaAngle); if (crossV.y < 0) { angleToTurn = -angleToTurn; } thisData.entityTF.Rotate(Vector3.up, angleToTurn * Mathf.Rad2Deg, Space.World); } } return(TBTRunningStatus.EXECUTING); }
protected override int onExecute(TBTWorkingData wData) { AIEntityWorkingData thisData = wData.As <AIEntityWorkingData>(); Vector3 targetPos = TMathUtils.Vector3ZeroY(thisData.entity.GetBBValue <Vector3>(AIEntity.BBKEY_NEXTMOVINGPOSITION, Vector3.zero)); Vector3 currentPos = TMathUtils.Vector3ZeroY(thisData.entityTF.position); float distToTarget = TMathUtils.GetDistance2D(targetPos, currentPos); if (distToTarget < 1f) { thisData.entityTF.position = targetPos; return(TBTRunningStatus.FINISHED); } else { int ret = TBTRunningStatus.EXECUTING; Vector3 toTarget = TMathUtils.GetDirection2D(targetPos, currentPos); float movingStep = 0.5f * thisData.deltaTime; if (movingStep > distToTarget) { movingStep = distToTarget; ret = TBTRunningStatus.FINISHED; } thisData.entityTF.position = thisData.entityTF.position + toTarget * movingStep; return(ret); } }
protected override int OnExecute(BTWorkingData wData) { AIEntityWorkingData thisData = wData.As <AIEntityWorkingData>(); var targetPos = thisData.entity.GetBBValue(CBrain.BBKEY_NEXTMOVINGPOSITION, LVector2.zero); var currentPos = thisData.entityTF.pos; if ((targetPos - currentPos).sqrMagnitude < 1) { return(BTRunningStatus.FINISHED); } else { var turnVal = 150 * thisData.deltaTime; bool isReachTargetDeg = false; var fdeg = CTransform2D.TurnToward(targetPos, currentPos, thisData.entityTF.deg, turnVal, out isReachTargetDeg); thisData.entityTF.deg = fdeg; if (isReachTargetDeg) { return(BTRunningStatus.FINISHED); } } return(BTRunningStatus.EXECUTING); }
protected override void onEnter(TBTWorkingData wData) { AIEntityWorkingData thisData = wData.As <AIEntityWorkingData>(); UserContextData userData = getUserContexData <UserContextData>(wData); userData.attackingTime = DEFAULT_WAITING_TIME; thisData.entity.PlayAnimation("Attack"); }
public override bool IsTrue(TBTWorkingData wData) { AIEntityWorkingData thisData = wData.As <AIEntityWorkingData>(); Vector3 targetPos = TMathUtils.Vector3ZeroY(thisData.entity.GetBBValue <Vector3>(AIEntity.BBKEY_NEXTMOVINGPOSITION, Vector3.zero)); Vector3 currentPos = TMathUtils.Vector3ZeroY(thisData.entityTF.position); return(TMathUtils.GetDistance2D(targetPos, currentPos) < 1f); }
protected override void OnEnter(BTWorkingData wData) { AIEntityWorkingData thisData = wData.As <AIEntityWorkingData>(); var userData = (UserContextData *)GetUserContextData(wData); userData->attackingTime = DEFAULT_WAITING_TIME; thisData.entity.PlayAnimation("Attack"); }
protected override void onEnter(TBTWorkingData wData) { AIEntityWorkingData thisData = wData.As <AIEntityWorkingData>(); if (thisData.entity.IsDead) { thisData.entity.PlayAnimation("Reborn"); } else { thisData.entity.PlayAnimation("Walk"); } }
protected override int onExecute(TBTWorkingData wData) { AIEntityWorkingData thisData = wData.As <AIEntityWorkingData>(); UserContextData userData = getUserContexData <UserContextData>(wData); if (userData.attackingTime > 0) { userData.attackingTime -= thisData.deltaTime; if (userData.attackingTime <= 0) { thisData.entityAnimator.SetInteger("DeadRnd", Random.Range(0, 3)); thisData.entity.PlayAnimation("Dead"); thisData.entity.IsDead = true; } } return(TBTRunningStatus.EXECUTING); }
public AIEntity Init() { _behaviorTree = AIEntityBehaviourTreeFactory.GetBehaviourTreeDemo(); _behaviorWorkingData = new AIEntityWorkingData(); _behaviorWorkingData.entity = this; _behaviorWorkingData.entityTF = this.transform; _behaviorWorkingData.entityAnimator = GetComponent <Animator>(); _blackboard = new TBlackBoard(); _nextTimeToGenMovingTarget = 0f; _lastTriggeredAnimation = string.Empty; _isDead = false; _targetDummyObject = GameResourceManager.Instance.LoadResource("AttackTarget"); return(this); }