From 0c66a0bc39a8b26966026f500e9aceef6a187a2f Mon Sep 17 00:00:00 2001 From: Caden Maxwell <109488523+caden-maxwell@users.noreply.github.com> Date: Sun, 7 Apr 2024 16:54:06 -0600 Subject: [PATCH] 38 map generation (#40) * add single tile * orientation is radians * zoom out + bigger tile --- src/Client/Content/Content.mgcb | 114 ++++++++++++----------- src/Client/Content/Textures/SandTile.png | Bin 0 -> 55461 bytes src/Client/GameModel.cs | 15 +-- src/Client/Systems/Camera.cs | 2 +- src/Client/Systems/Renderer.cs | 31 ++++-- src/Shared/Systems/WormMovement.cs | 14 ++- 6 files changed, 100 insertions(+), 76 deletions(-) create mode 100644 src/Client/Content/Textures/SandTile.png diff --git a/src/Client/Content/Content.mgcb b/src/Client/Content/Content.mgcb index b857953..9b70229 100644 --- a/src/Client/Content/Content.mgcb +++ b/src/Client/Content/Content.mgcb @@ -13,7 +13,45 @@ #---------------------------------- Content ---------------------------------# -#begin Textures/playerShip1_blue.png +#begin Audio/backgroundMusic.mp3 +/importer:Mp3Importer +/processor:SongProcessor +/processorParam:Quality=Best +/build:Audio/backgroundMusic.mp3 + +#begin Audio/menu.mp3 +/importer:Mp3Importer +/processor:SoundEffectProcessor +/processorParam:Quality=Best +/build:Audio/menu.mp3 + +#begin Audio/menuSelect.mp3 +/importer:Mp3Importer +/processor:SoundEffectProcessor +/processorParam:Quality=Best +/build:Audio/menuSelect.mp3 + +#begin Audio/success.mp3 +/importer:Mp3Importer +/processor:SoundEffectProcessor +/processorParam:Quality=Best +/build:Audio/success.mp3 + +#begin Fonts/menu-select.spritefont +/importer:FontDescriptionImporter +/processor:FontDescriptionProcessor +/processorParam:PremultiplyAlpha=True +/processorParam:TextureFormat=Compressed +/build:Fonts/menu-select.spritefont + +#begin Fonts/menu.spritefont +/importer:FontDescriptionImporter +/processor:FontDescriptionProcessor +/processorParam:PremultiplyAlpha=True +/processorParam:TextureFormat=Compressed +/build:Fonts/menu.spritefont + +#begin Images/background.png /importer:TextureImporter /processor:TextureProcessor /processorParam:ColorKeyColor=255,0,255,255 @@ -23,9 +61,9 @@ /processorParam:ResizeToPowerOfTwo=False /processorParam:MakeSquare=False /processorParam:TextureFormat=Color -/build:Textures/playerShip1_blue.png +/build:Images/background.png -#begin Textures/playerShip1_red.png +#begin Images/MenuBackground.png /importer:TextureImporter /processor:TextureProcessor /processorParam:ColorKeyColor=255,0,255,255 @@ -35,9 +73,9 @@ /processorParam:ResizeToPowerOfTwo=False /processorParam:MakeSquare=False /processorParam:TextureFormat=Color -/build:Textures/playerShip1_red.png +/build:Images/MenuBackground.png -#begin Textures/head.png +#begin Textures/body.png /importer:TextureImporter /processor:TextureProcessor /processorParam:ColorKeyColor=255,0,255,255 @@ -47,9 +85,9 @@ /processorParam:ResizeToPowerOfTwo=False /processorParam:MakeSquare=False /processorParam:TextureFormat=Color -/build:Textures/head.png +/build:Textures/body.png -#begin Textures/body.png +#begin Textures/head.png /importer:TextureImporter /processor:TextureProcessor /processorParam:ColorKeyColor=255,0,255,255 @@ -59,9 +97,9 @@ /processorParam:ResizeToPowerOfTwo=False /processorParam:MakeSquare=False /processorParam:TextureFormat=Color -/build:Textures/body.png +/build:Textures/head.png -#begin Textures/tail.png +#begin Textures/playerShip1_blue.png /importer:TextureImporter /processor:TextureProcessor /processorParam:ColorKeyColor=255,0,255,255 @@ -71,24 +109,21 @@ /processorParam:ResizeToPowerOfTwo=False /processorParam:MakeSquare=False /processorParam:TextureFormat=Color -/build:Textures/tail.png - - -#begin Fonts/menu.spritefont -/importer:FontDescriptionImporter -/processor:FontDescriptionProcessor -/processorParam:PremultiplyAlpha=True -/processorParam:TextureFormat=Compressed -/build:Fonts/menu.spritefont +/build:Textures/playerShip1_blue.png -#begin Fonts/menu-select.spritefont -/importer:FontDescriptionImporter -/processor:FontDescriptionProcessor +#begin Textures/playerShip1_red.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False /processorParam:PremultiplyAlpha=True -/processorParam:TextureFormat=Compressed -/build:Fonts/menu-select.spritefont +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Textures/playerShip1_red.png -#begin Images/MenuBackground.png +#begin Textures/SandTile.png /importer:TextureImporter /processor:TextureProcessor /processorParam:ColorKeyColor=255,0,255,255 @@ -98,9 +133,9 @@ /processorParam:ResizeToPowerOfTwo=False /processorParam:MakeSquare=False /processorParam:TextureFormat=Color -/build:Images/MenuBackground.png +/build:Textures/SandTile.png -#begin Images/background.png +#begin Textures/tail.png /importer:TextureImporter /processor:TextureProcessor /processorParam:ColorKeyColor=255,0,255,255 @@ -110,30 +145,5 @@ /processorParam:ResizeToPowerOfTwo=False /processorParam:MakeSquare=False /processorParam:TextureFormat=Color -/build:Images/background.png - -#begin Audio/success.mp3 -/importer:Mp3Importer -/processor:SoundEffectProcessor -/processorParam:Quality=Best -/build:Audio/success.mp3 - -#begin Audio/backgroundMusic.mp3 -/importer:Mp3Importer -/processor:SongProcessor -/processorParam:Quality=Best -/build:Audio/backgroundMusic.mp3 - -#begin Audio/menuSelect.mp3 -/importer:Mp3Importer -/processor:SoundEffectProcessor -/processorParam:Quality=Best -/build:Audio/menuSelect.mp3 - -#begin Audio/menu.mp3 -/importer:Mp3Importer -/processor:SoundEffectProcessor -/processorParam:Quality=Best -/build:Audio/menu.mp3 - +/build:Textures/tail.png diff --git a/src/Client/Content/Textures/SandTile.png b/src/Client/Content/Textures/SandTile.png new file mode 100644 index 0000000000000000000000000000000000000000..5fde7e23f92432165fe994fa840041d603ef08ba GIT binary patch literal 55461 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 spqvu8T3 /// This is where everything performs its update. @@ -56,11 +57,13 @@ public void render(TimeSpan elapsedTime, SpriteBatch spriteBatch) public bool initialize(ContentManager contentManager, Controls controls, GraphicsDeviceManager graphics) { m_font = contentManager.Load("Fonts/menu"); + m_sand = contentManager.Load("Textures/SandTile"); + m_contentManager = contentManager; m_entities = new Dictionary(); m_systemInterpolation = new Systems.Interpolation(); m_systemCamera = new Systems.Camera(new Vector2(graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight)); - m_renderer = new Systems.Renderer(m_systemCamera, graphics, m_font); + m_renderer = new Systems.Renderer(m_systemCamera, graphics, m_font, m_sand); m_systemWormMovement = new Shared.Systems.WormMovement(); m_systemNetwork = new Systems.Network(); @@ -111,19 +114,19 @@ private Entity createEntity(Shared.Messages.NewEntity message) { entity.add(new Shared.Components.Input(message.inputs)); } - + if (message.hasCollision) { entity.add(new Collision()); } - + // Worm parts - + if (message.hasHead) { entity.add(new Head()); } - + if (message.hasTail) { entity.add(new Tail()); @@ -138,7 +141,7 @@ private Entity createEntity(Shared.Messages.NewEntity message) { entity.add(new ChildId(message.childId)); } - + if (message.hasWorm) { entity.add(new Worm()); diff --git a/src/Client/Systems/Camera.cs b/src/Client/Systems/Camera.cs index 7e1c3d4..da47396 100644 --- a/src/Client/Systems/Camera.cs +++ b/src/Client/Systems/Camera.cs @@ -10,7 +10,7 @@ public class Camera : Shared.Systems.System { private Rectangle m_viewport = new(); public Rectangle Viewport { get { return m_viewport; } } - private float m_zoom = 1.0f; + private float m_zoom = 0.6f; public float Zoom { get { return m_zoom; } } public Camera(Vector2 viewportSize) : diff --git a/src/Client/Systems/Renderer.cs b/src/Client/Systems/Renderer.cs index 71b9d9b..a9604cd 100644 --- a/src/Client/Systems/Renderer.cs +++ b/src/Client/Systems/Renderer.cs @@ -18,8 +18,9 @@ public class Renderer : Shared.Systems.System private Systems.Camera m_camera; private GraphicsDeviceManager m_graphics; private SpriteFont m_font; + private Texture2D m_sand; - public Renderer(Systems.Camera camera, GraphicsDeviceManager graphics, SpriteFont font) : + public Renderer(Systems.Camera camera, GraphicsDeviceManager graphics, SpriteFont font, Texture2D sand) : base( typeof(Position), typeof(Sprite) ) @@ -27,6 +28,7 @@ public Renderer(Systems.Camera camera, GraphicsDeviceManager graphics, SpriteFon m_camera = camera; m_graphics = graphics; m_font = font; + m_sand = sand; } public override void update(TimeSpan elapsedTime) { } @@ -36,20 +38,33 @@ public void render(TimeSpan elapsedTime, SpriteBatch spriteBatch) float scale = m_camera.Zoom; Matrix matrix = Matrix.Identity; Vector2 offset = -m_camera.Viewport.Location.ToVector2() - + new Vector2(m_camera.Viewport.Width,m_camera.Viewport.Height) / scale / 2; + + new Vector2(m_camera.Viewport.Width, m_camera.Viewport.Height) / scale / 2; float scaleX = m_graphics.PreferredBackBufferWidth / (float)m_camera.Viewport.Width * scale; float scaleY = m_graphics.PreferredBackBufferHeight / (float)m_camera.Viewport.Height * scale; matrix *= Matrix.CreateTranslation(new Vector3(offset, 0)); matrix *= Matrix.CreateScale(scaleX, scaleY, 1); - // spriteBatch.Begin(transformMatrix: matrix); - spriteBatch.Begin(); + //spriteBatch.Begin(); + spriteBatch.Begin(transformMatrix: matrix); + + Rectangle rect = new(0, 0, 500, 500); + spriteBatch.Draw( + m_sand, + rect, + null, + Color.White, + 0, + Vector2.Zero, + SpriteEffects.None, + 0 + ); + var heads = new List(); var bodies = new List(); var tails = new List(); var others = new List(); - + foreach (Entity entity in m_entities.Values) { if (entity.contains()) @@ -61,7 +76,7 @@ public void render(TimeSpan elapsedTime, SpriteBatch spriteBatch) else others.Add(entity); } - + foreach (Entity entity in others) { renderEntity(elapsedTime, spriteBatch, entity); @@ -78,7 +93,7 @@ public void render(TimeSpan elapsedTime, SpriteBatch spriteBatch) { renderEntity(elapsedTime, spriteBatch, entity); } - + spriteBatch.End(); } @@ -113,7 +128,5 @@ private void renderEntity(TimeSpan elapsedTime, SpriteBatch spriteBatch, Entity Vector2 namePosition = new Vector2(position.X - size.X + 10, position.Y - size.Y - 10); Drawing.DrawPlayerName(m_font, entity.get().name, namePosition, Color.White, spriteBatch); } - } - } diff --git a/src/Shared/Systems/WormMovement.cs b/src/Shared/Systems/WormMovement.cs index dc8b57a..1673b15 100644 --- a/src/Shared/Systems/WormMovement.cs +++ b/src/Shared/Systems/WormMovement.cs @@ -34,12 +34,12 @@ public override void update(TimeSpan elapsedTime) public static void ninetyLeft(Entity head, TimeSpan elapsedTime) { - applyLeftRotation(head, -90); + applyLeftRotation(head, -MathHelper.PiOver2); } public static void ninetyRight(Entity head, TimeSpan elapsedTime) { - applyRightRotation(head, 90); + applyRightRotation(head, MathHelper.PiOver2); } private static Entity getHead(Entity entity, Dictionary entities) @@ -139,20 +139,18 @@ private void applyThrust(Entity wormHead, TimeSpan elapsedTime) // We don't need to update the entire worm with these because it will be updated in the next frame when thrust is applied - private static void applyLeftRotation(Entity head, int degrees) + private static void applyLeftRotation(Entity head, float radians) { var position = head.get(); var movement = head.get(); - // Rotate left 90 degrees - position.orientation += degrees; + position.orientation += radians; } - private static void applyRightRotation(Entity head, int degrees) + private static void applyRightRotation(Entity head, float radians) { var position = head.get(); var movement = head.get(); - // Rotate right 90 degrees - position.orientation += degrees; + position.orientation += radians; } } \ No newline at end of file