In Monogame (c#), I can't figure out how to keep an object (in this case a burger) to stay inside the game window's borders so it doesn't go off the game window when the cursor does. Or in other words, "clamp" an object to the game window.
public class Burger
{
#region Fields
// graphic and drawing info
Texture2D sprite;
Rectangle drawRectangle;
// burger stats
int health = 100;
// shooting support
bool canShoot = true;
int elapsedCooldownMilliseconds = 0;
// sound effect
SoundEffect shootSound;
#endregion
#region Constructors
/// <summary>
/// Constructs a burger
/// </summary>
/// <param name="contentManager">the content manager for loading content</param>
/// <param name="spriteName">the sprite name</param>
/// <param name="x">the x location of the center of the burger</param>
/// <param name="y">the y location of the center of the burger</param>
/// <param name="shootSound">the sound the burger plays when shooting</param>
public Burger(ContentManager contentManager, string spriteName, int x, int y,
SoundEffect shootSound)
{
LoadContent(contentManager, spriteName, x, y);
this.shootSound = shootSound;
}
#endregion
#region Properties
/// <summary>
/// Gets the collision rectangle for the burger
/// </summary>
public Rectangle CollisionRectangle
{
get { return drawRectangle; }
}
#endregion
#region Public methods
/// <summary>
/// Updates the burger's location based on mouse. Also fires
/// french fries as appropriate
/// </summary>
/// <param name="gameTime">game time</param>
/// <param name="mouse">the current state of the mouse</param>
public void Update(GameTime gameTime, MouseState mouse)
{
// burger should only respond to input if it still has health
// move burger using mouse
if (health > 0)
{
drawRectangle.X = mouse.X;
drawRectangle.Y = mouse.Y;
}
// clamp burger in window
[THIS IS WHERE THE CODE SHOULD GO]
// update shooting allowed
// timer concept (for animations) introduced in Chapter 7
// shoot if appropriate
}
/// <summary>
/// Draws the burger
/// </summary>
/// <param name="spriteBatch">the sprite batch to use</param>
public void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Draw(sprite, drawRectangle, Color.CornflowerBlue);
}
#endregion
#region Private methods
/// <summary>
/// Loads the content for the burger
/// </summary>
/// <param name="contentManager">the content manager to use</param>
/// <param name="spriteName">the name of the sprite for the burger</param>
/// <param name="x">the x location of the center of the burger</param>
/// <param name="y">the y location of the center of the burger</param>
private void LoadContent(ContentManager contentManager, string spriteName,
int x, int y)
{
// load content and set remainder of draw rectangle
sprite = contentManager.Load<Texture2D>(spriteName);
drawRectangle = new Rectangle(x - sprite.Width / 2,
y - sprite.Height / 2, sprite.Width,
sprite.Height);
}
#endregion
}
Any ideas how I could go about this? I've tried using mouse.Getstate and trying to lock the mouse cursor to the window but that didn't seem to work.