From 409d602362082c74c28d1ed3980d82e35b4c8d4c Mon Sep 17 00:00:00 2001 From: hellka7 Date: Sun, 13 Apr 2025 17:11:34 -0700 Subject: [PATCH] Cannot get keyboard input to function still. --- Enemy.cs | 9 ++++- Level.cs | 92 +++++++++++++++++++++++++----------------------- LunaLightGame.cs | 59 ++++++++++++++----------------- PlayerInput.cs | 6 ++-- RenderHandler.cs | 26 ++++++++++++++ 5 files changed, 112 insertions(+), 80 deletions(-) diff --git a/Enemy.cs b/Enemy.cs index 9f30555..dcb2642 100644 --- a/Enemy.cs +++ b/Enemy.cs @@ -7,6 +7,12 @@ namespace LunaLightXMG { public class Enemy { + public Level Level + { + get { return level; } + } + Level level; + private float hsp; // Horizontal speed private float hspPrev; private float vsp; // Vertical speed @@ -38,8 +44,9 @@ namespace LunaLightXMG random = new Random(42); } - public Enemy(Vector2 initPosition, float initHsp, ContentManager Content) + public Enemy(Level level, Vector2 initPosition, float initHsp, ContentManager Content) { + this.level = level; hsp = initHsp; vsp = 0; hsp_frac = 0; diff --git a/Level.cs b/Level.cs index 6ab4e1e..d146052 100644 --- a/Level.cs +++ b/Level.cs @@ -9,7 +9,7 @@ using Microsoft.Xna.Framework.Audio; namespace LunaLightXMG { - class Level : Game, IDisposable + public class Level : Game, IDisposable { // Objects private Camera2D camera2D; @@ -20,7 +20,7 @@ namespace LunaLightXMG private int retroHeight = 180; // Entities - private List enemies = new List(); + private List enemies; private int numberOfEnemies; public Player Player { @@ -78,8 +78,13 @@ namespace LunaLightXMG #region Loading // Level Definition - public Level(SpriteBatch spriteBatch, RenderHandler render_handler) + public Level(IServiceProvider serviceProvider,SpriteBatch spriteBatch, RenderHandler render_handler) { + // Create content manager to load content used by just this level. + content = new ContentManager(serviceProvider, "Content"); + + renderHandler = render_handler; + // Initialize camera camera2D = new Camera2D(retroWidth, retroHeight); // camera test - set level bounds @@ -99,6 +104,7 @@ namespace LunaLightXMG Vector2 initPlayerPosition = new Vector2(163, 0); player = new Player(initPlayerPosition); playerInput = new PlayerInput(); + playerInput.HasControl = true; player.LoadContent(Content); // Init number of platforms / enemies @@ -106,7 +112,7 @@ namespace LunaLightXMG numberOfEnemies = 10; // Load enemies - SpawnEnemies(numberOfEnemies); + enemies = SpawnEnemies(numberOfEnemies); @@ -129,52 +135,53 @@ namespace LunaLightXMG platforms = PlatformGenerator.CreatePlatforms(numberOfPlatforms); } - private void SpawnEnemies(int numOfEnemies) + private List SpawnEnemies(int numOfEnemies) { - enemies = new List(); + List newEnemies = new List(); for (int i = 0; i < numOfEnemies; i++) { Vector2 spawnPosition = new Vector2(16 + i * 3, -16); - enemies.Add(new Enemy(spawnPosition, utilities.RandomFromRange(1,3), Content)); + Enemy enemy = new(spawnPosition, random.Next(1,3)); + enemy.LoadContent(Content); + newEnemies.Add(enemy); } + return newEnemies; } #endregion #region Update - public void Update(GameTime gameTime) + public void Update(GameTime gameTime, KeyboardState keyboardState) { // Temporary quit game - if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) + if (keyboardState.IsKeyDown(Keys.Escape)) Exit(); // Check for game reset - if (Keyboard.GetState().IsKeyDown(Keys.R)) + if (keyboardState.IsKeyDown(Keys.R)) ResetGame(); - else - { - // Update player - playerInput.Update(); - player.Update(gameTime, playerInput, platforms); - - // Update Enemies - foreach(var enemy in enemies) - enemy.Update(gameTime, player, platforms); - // Test render handler - renderHandler.UpdateZoom(); + // Update player + playerInput.Update(keyboardState); + player.Update(gameTime, playerInput, platforms); - //Update camera position - camera2D.Follow(gameTime, player.position); - camera2D.UpdateScreenShake(gameTime); + // Update Enemies + foreach(var enemy in enemies) + enemy.Update(gameTime, player, platforms); + + // Test render handler + renderHandler.UpdateZoom(); - // Camera testing - TestCameraWhilePlaying(); - ToggleBackgroundMusic(); - - // Update keyState - prevKeyState = Keyboard.GetState(); - } + //Update camera position + camera2D.Follow(gameTime, player.position); + camera2D.UpdateScreenShake(gameTime); + + // Camera testing + TestCameraWhilePlaying(); + ToggleBackgroundMusic(); + + // Update keyState + prevKeyState = Keyboard.GetState(); } public void Dispose() @@ -206,10 +213,10 @@ namespace LunaLightXMG } renderHandler.EndRenderTarget(); - renderHandler.DrawRenderTarget(); + + renderHandler.DrawRenderTarget(player, debugFont, camera2D); - // Debugging - DrawDebugInfo(spriteBatch); + } #endregion @@ -233,7 +240,7 @@ namespace LunaLightXMG } } - private void ResetGame() + public void ResetGame() { // reset cam camera2D.Rotation = 0; @@ -253,10 +260,14 @@ namespace LunaLightXMG LoadPlatforms(); } + + + #endregion + + #region Testing + private void DrawDebugInfo(SpriteBatch spriteBatch) { - spriteBatch.Begin(); - // Draw debug messages spriteBatch.DrawString(debugFont, $"VSP: {player.vsp}", new Vector2(10, 10), Color.White); spriteBatch.DrawString(debugFont, $"Grounded: {player.grounded}", new Vector2(10, 30), Color.White); @@ -265,21 +276,14 @@ namespace LunaLightXMG spriteBatch.DrawString(debugFont, $"Camera Position: {camera2D.Position}", new Vector2(10, 90), Color.White); spriteBatch.DrawString(debugFont, $"Camera Rotation: {camera2D.Rotation}", new Vector2(10, 110), Color.White); spriteBatch.DrawString(debugFont, $"Render Target Zoom: {renderHandler.ZoomLevel}", new Vector2(10, 130), Color.White); - spriteBatch.DrawString(debugFont, $"Camera Rotation Control - Rotate left: K, Rotate right: L", new Vector2(10, 190), Color.White); spriteBatch.DrawString(debugFont, $"Render Target Zoom Control - Zoom in: U, Zoom normal: I, Zoom out: O", new Vector2(10, 210), Color.White); spriteBatch.DrawString(debugFont, $"Press P to test screen shake.", new Vector2(10, 230), Color.White); spriteBatch.DrawString(debugFont, $"Press M to toggle game music.", new Vector2(10, 250), Color.White); spriteBatch.DrawString(debugFont, $"Press R to reset level.", new Vector2(10, 270), Color.White); - - spriteBatch.End(); } - #endregion - - #region Testing - private void ToggleBackgroundMusic() { KeyboardState currKeyState = Keyboard.GetState(); diff --git a/LunaLightGame.cs b/LunaLightGame.cs index 790ca52..77b0ad3 100644 --- a/LunaLightGame.cs +++ b/LunaLightGame.cs @@ -6,6 +6,7 @@ using Microsoft.Xna.Framework.Media; using System; using System.Collections.Generic; using System.Runtime.CompilerServices; +using System.Reflection.Metadata; namespace LunaLightXMG { @@ -14,8 +15,6 @@ namespace LunaLightXMG // Class Objects private Player player; private PlayerInput playerInput; - private List enemies; - private int numOfEnemies; private GraphicsDeviceManager graphics; private Camera2D camera2D; private SpriteBatch spriteBatch; @@ -27,44 +26,29 @@ namespace LunaLightXMG // Test Render Target Handler private RenderHandler renderHandler; bool resizing; - - // Test sprites - eventually handle in a sprite manager? - private Texture2D platformTexture; - private Texture2D sinkArea; - - // Test platforms - private Platform[] platforms; - private int numOfPlatforms; // Level Object private Level level; - // Music - private SoundEffect sinkBeats; - private SoundEffectInstance backgroundMusicInstance; + // 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; - // Debugging - private SpriteFont debugFont; - private Texture2D debugGrid; - - // Keyboard input - private KeyboardState prevKeyState; - // Util - Utilities util; - 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; - - playerInput = new PlayerInput(); - - //level = new Level(spriteBatch, renderHandler); } protected override void Initialize() @@ -73,8 +57,6 @@ namespace LunaLightXMG graphics.PreferredBackBufferWidth = 1920; graphics.PreferredBackBufferHeight = 1080; graphics.ApplyChanges(); - - playerInput.HasControl = true; // May need to find a new home for this base.Initialize(); } @@ -87,24 +69,38 @@ namespace LunaLightXMG if (level != null) level.Dispose(); - level = new Level(spriteBatch, renderHandler); + level = new Level(Services, spriteBatch, renderHandler); } protected override void Update(GameTime gameTime) { - level.Update(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) @@ -114,8 +110,7 @@ namespace LunaLightXMG resizing = false; } } - - + #endregion diff --git a/PlayerInput.cs b/PlayerInput.cs index 31e1f7d..33c3e0c 100644 --- a/PlayerInput.cs +++ b/PlayerInput.cs @@ -18,14 +18,14 @@ namespace LunaLightXMG public bool KeyAttack { get; private set; } public bool KeyWallClimb { get; private set; } - public void Update() + public void Update(KeyboardState keyboardState) { if (HasControl) { if (Controller) { // If using controller, switch to keyboard by pressing any key - if (Keyboard.GetState().GetPressedKeys().Length > 0) + if (keyboardState.GetPressedKeys().Length > 0) { // TODO: Insert logic to create the objMouseJoyStick instance Controller = false; @@ -72,7 +72,7 @@ namespace LunaLightXMG } // Keyboard input - KeyboardState keyboardState = Keyboard.GetState(); + //KeyboardState keyboardState = Keyboard.GetState(); KeyLeft = keyboardState.IsKeyDown(Keys.A) ? 1 : 0; KeyRight = keyboardState.IsKeyDown(Keys.D) ? 1 : 0; diff --git a/RenderHandler.cs b/RenderHandler.cs index 369d66b..b91ee2f 100644 --- a/RenderHandler.cs +++ b/RenderHandler.cs @@ -101,5 +101,31 @@ namespace LunaLightXMG spriteBatch.End(); } + public void DrawRenderTarget(Player player, SpriteFont debugFont, Camera2D camera2D) + { + spriteBatch.Begin(samplerState: SamplerState.PointClamp); + spriteBatch.Draw(renderTarget, renderDestination, Color.White); + DebugInfo(player, debugFont, camera2D); + spriteBatch.End(); + } + + public void DebugInfo(Player player, SpriteFont debugFont, Camera2D camera2D) + { + // Draw debug messages + spriteBatch.DrawString(debugFont, $"VSP: {player.vsp}", new Vector2(10, 10), Color.White); + spriteBatch.DrawString(debugFont, $"Grounded: {player.grounded}", new Vector2(10, 30), Color.White); + spriteBatch.DrawString(debugFont, $"Walled: {player.walled}", new Vector2(10, 50), Color.White); + spriteBatch.DrawString(debugFont, $"Position: {player.position}", new Vector2(10, 70), Color.White); + spriteBatch.DrawString(debugFont, $"Camera Position: {camera2D.Position}", new Vector2(10, 90), Color.White); + spriteBatch.DrawString(debugFont, $"Camera Rotation: {camera2D.Rotation}", new Vector2(10, 110), Color.White); + spriteBatch.DrawString(debugFont, $"Render Target Zoom: {ZoomLevel}", new Vector2(10, 130), Color.White); + + spriteBatch.DrawString(debugFont, $"Camera Rotation Control - Rotate left: K, Rotate right: L", new Vector2(10, 190), Color.White); + spriteBatch.DrawString(debugFont, $"Render Target Zoom Control - Zoom in: U, Zoom normal: I, Zoom out: O", new Vector2(10, 210), Color.White); + spriteBatch.DrawString(debugFont, $"Press P to test screen shake.", new Vector2(10, 230), Color.White); + spriteBatch.DrawString(debugFont, $"Press M to toggle game music.", new Vector2(10, 250), Color.White); + spriteBatch.DrawString(debugFont, $"Press R to reset level.", new Vector2(10, 270), Color.White); + } + } } \ No newline at end of file