Beispiel #1
0
            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);
            }
Beispiel #2
0
            public BTreeLeafState Update(TimeSpan deltaTime)
            {
                if (mUnit.mTarget == null)
                {
                    return(BTreeLeafState.Failed);
                }

                return(mUnit.DistanceTo(mUnit.mTarget) > mUnit.AttackRange ? BTreeLeafState.Failed : BTreeLeafState.Successed);
            }
Beispiel #3
0
            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);
            }