public BTreeLeafState Update(TimeSpan deltaTime) { mUnit.IsAttacks = false; if (mUnit.mTarget == null) { return(BTreeLeafState.Failed); } if (mUnit.DistanceTo(mUnit.mTarget) > mUnit.AttackRange) { return(BTreeLeafState.Processing); } mUnit.PathFinder.SetLookAt(PositionOf(mUnit.mTarget), mUnit.Game.Map.Data); mUnit.IsAttacks = true; mAttackTimer -= deltaTime; if (mAttackTimer > TimeSpan.Zero) { return(BTreeLeafState.Processing); } mUnit.mTarget.Health -= mUnit.Damage; if (mUnit.mTarget.Health <= 0) { mUnit.Game.RemoveObject(mUnit.mTarget.ID); mUnit.mTarget = null; mUnit.IsAttacks = false; return(BTreeLeafState.Successed); } mAttackTimer = TimeSpan.FromSeconds(1 / mUnit.AttackSpeed); return(BTreeLeafState.Processing); }
public BTreeLeafState Update(TimeSpan deltaTime) { if (mUnit.mTarget == null) { return(BTreeLeafState.Failed); } return(mUnit.DistanceTo(mUnit.mTarget) > mUnit.AttackRange ? BTreeLeafState.Failed : BTreeLeafState.Successed); }
public BTreeLeafState Update(TimeSpan deltaTime) { if (mUnit.mTarget == null) { return(BTreeLeafState.Failed); } mUnit.PathFinder.SetTarget(PositionOf(mUnit.mTarget), mUnit.Game.Map.Data); if (mUnit.DistanceTo(mUnit.mTarget) <= mUnit.AttackRange) { mUnit.PathFinder.Stop(); return(BTreeLeafState.Successed); } return(BTreeLeafState.Processing); }