Implemented scren shake in the Camera2D class

This commit is contained in:
jme9
2025-03-19 18:59:13 -07:00
parent 0e60bb4207
commit 1c5f4b1b12
4 changed files with 102 additions and 23 deletions
+18 -18
View File
@@ -27,11 +27,11 @@ 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;
@@ -44,8 +44,8 @@ namespace LunaLightXMG
private SpriteFont debugFont;
private Texture2D debugGrid;
// Utility
private static Random random;
// Util
Utilities util;
public LunaLightGame()
{
@@ -63,11 +63,11 @@ namespace LunaLightXMG
playerInput = new PlayerInput();
enemies = new List<Enemy>();
random = new Random(42);
// Init number of platforms / enemies
numOfPlatforms = 4;
numOfEnemies = 10;
util = new Utilities();
}
protected override void Initialize()
@@ -80,7 +80,7 @@ namespace LunaLightXMG
playerInput.HasControl = true; // May need to find a new home for this
base.Initialize();
// Initialize camera
camera2D = new Camera2D(retroWidth, retroHeight);
// camera test - set level bounds
@@ -103,7 +103,7 @@ namespace LunaLightXMG
var KeyB = keyboardState.IsKeyDown(Keys.B);
var KeyN = keyboardState.IsKeyDown(Keys.N);
var KeyM = keyboardState.IsKeyDown(Keys.M);
var KeyP = keyboardState.IsKeyDown(Keys.P);
if (KeyK)
{
camera2D.Rotation -= 0.01f;
@@ -124,6 +124,10 @@ namespace LunaLightXMG
{
renderHandler.ZoomOut();
}
if (KeyP)
{
camera2D.ScreenShake(0.5f, 5f);
}
}
// ---------------------------------------
protected override void LoadContent()
@@ -161,7 +165,7 @@ namespace LunaLightXMG
// Test player input and movement with abstracted player class
playerInput.Update();
player.Update(gameTime, playerInput, platforms);
foreach (var enemy in enemies) {
enemy.Update(gameTime, player, platforms);
}
@@ -169,12 +173,13 @@ namespace LunaLightXMG
renderHandler.UpdateZoom();
// Update camera position
camera2D.Follow(player.position);
camera2D.UpdateScreenShake(gameTime);
// camera testing
TestCameraWhilePlaying();
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
@@ -211,7 +216,7 @@ namespace LunaLightXMG
for (int i = 0; i < numberOfEnemies; i++)
{
Vector2 spawnPosition = new Vector2(16 + i * 3, -16);
Enemy enemy = new Enemy(spawnPosition, GetRandomValueBetween1And3());
Enemy enemy = new(spawnPosition, util.ChooseFromRange(1,3));
enemy.LoadContent(Content);
enemies.Add(enemy);
}
@@ -258,16 +263,11 @@ namespace LunaLightXMG
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: B, Zoom normal: N, Zoom out: M", new Vector2(10, 210), Color.White);
spriteBatch.DrawString(debugFont, $"Press P to test screen shake.", new Vector2(10, 230), Color.White);
spriteBatch.End();
}
public static float GetRandomValueBetween1And3()
{
return (float)(1 + 2 * random.NextDouble());
}
private void ResetGame()
{
// reset cam