/// <summary> /// Checks if the Sprite has met its Limit criteria /// </summary> /// <param name="s"> The Sprite to check </param> public static void CheckLimit(Sprite s) { if (s.OnLimit == Wrap) { bool top = (s.LowerBound) < (s.LimitBox.Y); bool bottom = (s.UpperBound) > (s.LimitBox.Y + s.LimitBox.Height); bool right = (s.LeftBound) > s.LimitBox.X + (s.LimitBox.Width); bool left = (s.RightBound) < (s.LimitBox.X); if (top) s.OnLimit(new LimitObject(s, Direction.North)); else if (bottom) s.OnLimit(new LimitObject(s, Direction.South)); else if (right) s.OnLimit(new LimitObject(s, Direction.East)); else if (left) s.OnLimit(new LimitObject(s, Direction.West)); } else if (s.OnLimit == Bounce) { bool top = (s.Position.Y) < (s.LimitBox.Y); bool bottom = (s.Position.Y + s.Size.Y) > (s.LimitBox.Y + s.LimitBox.Height); bool right = (s.Position.X + s.Size.X) > (s.LimitBox.X + s.LimitBox.Height); bool left = (s.Position.X) < (s.LimitBox.X); if (top) s.OnLimit(new LimitObject(s, Direction.North)); else if (bottom) s.OnLimit(new LimitObject(s, Direction.South)); else if (right) s.OnLimit(new LimitObject(s, Direction.East)); else if (left) s.OnLimit(new LimitObject(s, Direction.West)); } }
/// <summary> /// Calls the _onAnimate delgate on the Sprite /// </summary> /// <param name="s"> Does nothing. Here to keep delegates happy </param> public void Animate(Sprite s) { _onAnimate(); }
/// <summary> /// Default constructor for Animator /// </summary> /// <param name="s"> The Sprite associated with the Animator </param> public Animator(Sprite s) { AnimatingSprite = s; }
/// <summary> /// Initializes the Sprites limiting within the limitbox /// </summary> /// <param name="s"> The Sprite to limit </param> /// <param name="onLimit"> The Delegate to call when Sprite hits limitBox </param> /// <param name="limitBox"> The LimitBox the Sprite is confined to </param> public static void LimitInitialize(Sprite s, LimitHit onLimit, Rectangle limitBox) { s.OnUpdate += CheckLimit; s.LimitBox = limitBox; s.OnLimit = onLimit; }
/// <summary> /// Creates a new LimitObject /// </summary> /// <param name="s"> The Sprite being limited </param> /// <param name="direction"> The Direction it has hit the LimitBox </param> public LimitObject(Sprite s, Direction direction) { LimitingSprite = s; Direction = direction; }
/// <summary> /// Returns a vector2 with resultant velocity in the direction the Sprite is facing /// </summary> /// <param name="velocity">The velocity to move the Sprite</param> /// <param name="sprite">The Sprite to get Rotation from</param> /// <returns> Vector2 Holding a velocity </returns> public static Vector2 VelocityAtAngle(float velocity, Sprite sprite) { float x = velocity * (float) Math.Sin(sprite.Rotation); float y = velocity *-(float) Math.Cos(sprite.Rotation); return new Vector2(x, y); }
/// <summary> /// updates the velocity of the Sprite by adding acceleration /// </summary> /// <param name="s"></param> static void UpdateVelocity(Sprite s) { s.Velocity += s.Owner.EventM.ValuePerSecond(s.Acceleration); }
/// <summary> /// updates the position of the Sprite by adding its velocity /// </summary> /// <param name="s"></param> static void UpdatePostition(Sprite s) { s.Position += s.Owner.EventM.ValuePerSecond(s.Velocity); }
/// <summary> /// Updates the acceleration of the Sprite /// </summary> /// <param name="s"></param> static void UpdateAcceleration(Sprite s) { s.Acceleration += s.Owner.EventM.ValuePerSecond(s.ChangeInAcceleration); }