From 97c68c5ab9951ce66a1c09d25378b0d37d73dc16 Mon Sep 17 00:00:00 2001 From: Jensen Lynch <75227155+Fabninja@users.noreply.github.com> Date: Wed, 15 May 2024 13:13:53 -0700 Subject: [PATCH] Added test sprites to test game window scaling --- Game1.cs | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/Game1.cs b/Game1.cs index 55ade89..b378f3e 100644 --- a/Game1.cs +++ b/Game1.cs @@ -1,6 +1,7 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; +using System; namespace LunaLightXMG { @@ -12,6 +13,13 @@ namespace LunaLightXMG // Test Render Target private RenderTarget2D renderTarget; private Rectangle renderDestination; + bool resizing; + + // Test sprites + Texture2D sprRo; + Texture2D sprCave1_background; + Texture2D sprCave1_foreground; + Texture2D sprCave1_walls; // Native retro scale private int retroWidth = 320; @@ -23,11 +31,21 @@ namespace LunaLightXMG Content.RootDirectory = "Content"; IsMouseVisible = true; - //Window.ClientSizeChanged += OnClientSizeChanged; // Jensen can implement + Window.ClientSizeChanged += OnClientSizeChanged; // Jensen can implement Window.AllowUserResizing = true; IsMouseVisible = true; } + private void OnClientSizeChanged(object sender, EventArgs eventArgs) + { + if (!resizing && Window.ClientBounds.Width > 0 && Window.ClientBounds.Height > 0) + { + resizing = true; + CalculateRenderDestination(); + resizing = false; + } + } + protected override void Initialize() { // Set initial window size @@ -36,12 +54,30 @@ namespace LunaLightXMG graphics.ApplyChanges(); base.Initialize(); - //CalculateRenderDestination(); // Jensen can implement + CalculateRenderDestination(); // Jensen can implement } + private void CalculateRenderDestination() + { + Point size = GraphicsDevice.Viewport.Bounds.Size; + + float scaleX = (float)size.X / renderTarget.Width; + float scaleY = (float)size.Y / renderTarget.Height; + float scale = Math.Min(scaleX, scaleY); + + renderDestination.Width = (int)(renderTarget.Width * scale); + renderDestination.Height = (int)(renderTarget.Height * scale); + + renderDestination.X = (size.X - renderDestination.Width) / 2; + renderDestination.Y = (size.Y - renderDestination.Height) / 2; + } protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); + sprRo = Content.Load("sprRo_Wall"); + sprCave1_background = Content.Load("spr_cave1_background"); + sprCave1_foreground = Content.Load("spr_Cave1_foreground"); + sprCave1_walls = Content.Load("spr_Cave1_walls"); // Test Render Target renderTarget = new RenderTarget2D(GraphicsDevice, retroWidth, retroHeight); @@ -68,8 +104,13 @@ namespace LunaLightXMG // Test Sprite spriteBatch.Begin(samplerState: SamplerState.PointClamp); // Draw sprites here + spriteBatch.Draw(sprCave1_background,new Vector2(0,0),Color.White); + spriteBatch.Draw(sprRo, new Vector2(163, 63), Color.White); + spriteBatch.Draw(sprCave1_walls, new Vector2(0, 0), Color.White); + spriteBatch.Draw(sprCave1_foreground, new Vector2(0, 0), Color.White); spriteBatch.End(); + // Test Render Target - Draw render target to the screen GraphicsDevice.SetRenderTarget(null); spriteBatch.Begin(samplerState: SamplerState.PointClamp);