Files
LunaLightXMG/LunaLightGame.cs
2025-04-13 17:11:34 -07:00

119 lines
3.4 KiB
C#

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Media;
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Reflection.Metadata;
namespace LunaLightXMG
{
public class LunaLightGame : Game
{
// Class Objects
private Player player;
private PlayerInput playerInput;
private GraphicsDeviceManager graphics;
private Camera2D camera2D;
private SpriteBatch spriteBatch;
// Native retro scale
private int retroWidth = 320;
private int retroHeight = 180;
// Test Render Target Handler
private RenderHandler renderHandler;
bool resizing;
// Level Object
private Level level;
// Input
// We store our input states so that we only poll once per frame,
// then we use the same input state wherever needed
private KeyboardState keyboardState;
public LunaLightGame()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
IsMouseVisible = true;
//Vector2 initPlayerPosition = new Vector2(163,0);
//player = new Player(initPlayerPosition);
//playerInput = new PlayerInput();
Window.ClientSizeChanged += OnClientSizeChanged;
Window.AllowUserResizing = true;
IsMouseVisible = true;
}
protected override void Initialize()
{
// Set initial window size
graphics.PreferredBackBufferWidth = 1920;
graphics.PreferredBackBufferHeight = 1080;
graphics.ApplyChanges();
base.Initialize();
}
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
renderHandler = new RenderHandler(GraphicsDevice, spriteBatch, retroWidth, retroHeight);
if (level != null)
level.Dispose();
level = new Level(Services, spriteBatch, renderHandler);
}
protected override void Update(GameTime gameTime)
{
HandleInput(gameTime);
level.Update(gameTime, keyboardState);
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
level.Draw(gameTime, spriteBatch);
base.Draw(gameTime);
}
#region Methods
private void HandleInput(GameTime gameTime)
{
keyboardState = Keyboard.GetState();
// Temporary quit game - eventually handle in a pause menu class
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
Exit();
if (keyboardState.IsKeyDown(Keys.R))
level.ResetGame();
}
private void OnClientSizeChanged(object sender, EventArgs eventArgs)
{
if (!resizing && Window.ClientBounds.Width > 0 && Window.ClientBounds.Height > 0)
{
resizing = true;
renderHandler.CalculateRenderDestination();
resizing = false;
}
}
#endregion
}
}