Пример #1
0
 public void Hit(PEntity target)
 {
     Experience += target.TakeDamage(this, Strength);
     Busy        = true;
 }
Пример #2
0
        public bool Move(Time elapsed)
        {
            Vector2f deltaFirst  = new Vector2f(0, 0);
            Vector2f deltaSecond = new Vector2f(0, 0);

            if (Velocity.X < 0)
            {
                deltaFirst.X  = -1;
                deltaSecond.X = -1;
            }
            else if ((Velocity * elapsed.AsSeconds()).X > 0)
            {
                deltaFirst.X  = 1;
                deltaSecond.X = 1;
            }
            if ((Velocity * elapsed.AsSeconds()).Y < 0)
            {
                deltaFirst.Y = -1;
            }
            else if ((Velocity * elapsed.AsSeconds()).Y > 0)
            {
                deltaFirst.Y = 1;
            }
            float longer  = MathF.Abs((Velocity * elapsed.AsSeconds()).X);
            float shorter = MathF.Abs((Velocity * elapsed.AsSeconds()).Y);

            if (!(longer > shorter))
            {
                longer  = shorter;
                shorter = MathF.Abs((Velocity * elapsed.AsSeconds()).X);
                if ((Velocity * elapsed.AsSeconds()).Y < 0)
                {
                    deltaSecond.Y = -1;
                }
                else if ((Velocity * elapsed.AsSeconds()).Y > 0)
                {
                    deltaSecond.Y = 1;
                }
                deltaSecond.X = 0;
            }

            float numerator = longer / 2;

            for (int i = 0; i <= longer; i++)
            {
                PEntity found = Game.EntityAt(Position);
                if (found != null && found != Owner && found.IsHittable() && found != this)
                {
                    Owner.Experience += found.TakeDamage(Owner, Owner.Agility);
                    return(true);
                }
                numerator += shorter;
                if (!(numerator < longer))
                {
                    numerator  -= longer;
                    Position.X += deltaFirst.X;
                    Position.Y += deltaFirst.Y;
                }
                else
                {
                    Position.X += deltaSecond.X;
                    Position.Y += deltaSecond.Y;
                }
            }

            return(false);
        }