public void Hit(PEntity target) { Experience += target.TakeDamage(this, Strength); Busy = true; }
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); }