diff --git a/AlienAttack.sln b/AlienAttack.sln new file mode 100644 index 0000000..f5ab669 --- /dev/null +++ b/AlienAttack.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36301.6 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AlienAttack.MonoGame", "AlientAttack.MonoGame\AlienAttack.MonoGame.csproj", "{BC3CF028-D58E-4F16-AC13-E4630A2A5B47}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BC3CF028-D58E-4F16-AC13-E4630A2A5B47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BC3CF028-D58E-4F16-AC13-E4630A2A5B47}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BC3CF028-D58E-4F16-AC13-E4630A2A5B47}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BC3CF028-D58E-4F16-AC13-E4630A2A5B47}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {DA3D7BFD-2DB6-4F8A-B9B8-9C563E931D2C} + EndGlobalSection +EndGlobal diff --git a/AlientAttack.MonoGame/.config/dotnet-tools.json b/AlientAttack.MonoGame/.config/dotnet-tools.json new file mode 100644 index 0000000..fbedee1 --- /dev/null +++ b/AlientAttack.MonoGame/.config/dotnet-tools.json @@ -0,0 +1,36 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-mgcb": { + "version": "3.8.4", + "commands": [ + "mgcb" + ] + }, + "dotnet-mgcb-editor": { + "version": "3.8.4", + "commands": [ + "mgcb-editor" + ] + }, + "dotnet-mgcb-editor-linux": { + "version": "3.8.4", + "commands": [ + "mgcb-editor-linux" + ] + }, + "dotnet-mgcb-editor-windows": { + "version": "3.8.4", + "commands": [ + "mgcb-editor-windows" + ] + }, + "dotnet-mgcb-editor-mac": { + "version": "3.8.4", + "commands": [ + "mgcb-editor-mac" + ] + } + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/.vscode/launch.json b/AlientAttack.MonoGame/.vscode/launch.json new file mode 100644 index 0000000..d607e52 --- /dev/null +++ b/AlientAttack.MonoGame/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "C#: AlientAttack.MonoGame Debug", + "type": "dotnet", + "request": "launch", + "projectPath": "${workspaceFolder}/AlientAttack.MonoGame.csproj" + } + ], + } \ No newline at end of file diff --git a/AlientAttack.MonoGame/AlienAttack.MonoGame.csproj b/AlientAttack.MonoGame/AlienAttack.MonoGame.csproj new file mode 100644 index 0000000..9209ee9 --- /dev/null +++ b/AlientAttack.MonoGame/AlienAttack.MonoGame.csproj @@ -0,0 +1,33 @@ + + + WinExe + net8.0 + Major + false + false + + + app.manifest + Icon.ico + + + + + + + + Icon.ico + + + Icon.bmp + + + + + + + + + + + \ No newline at end of file diff --git a/AlientAttack.MonoGame/AlienAttackGame.cs b/AlientAttack.MonoGame/AlienAttackGame.cs new file mode 100644 index 0000000..31bfb96 --- /dev/null +++ b/AlientAttack.MonoGame/AlienAttackGame.cs @@ -0,0 +1,93 @@ +using AlienAttack.MonoGame.GameLoops; +using AlienAttack.MonoGame.View; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using System; +using System.Runtime.InteropServices; + +namespace AlienAttack.MonoGame; + +public class AlienAttackGame : Game +{ + private readonly GraphicsDeviceManager _graphics; + private readonly ViewTransform _viewTransform; + + private SpriteBatch _spriteBatch; + private GameLoop _gameLoop; + + public SpriteBatch SpriteBatch => _spriteBatch; + public ViewTransform ViewTransform => _viewTransform; + + private const string SDL = "SDL2.dll"; + + [DllImport(SDL, CallingConvention = CallingConvention.Cdecl)] + public static extern void SDL_MaximizeWindow(IntPtr window); + + public AlienAttackGame() + { + _graphics = new GraphicsDeviceManager(this); + _viewTransform = new(this, _graphics); + Content.RootDirectory = "Content"; + IsMouseVisible = true; + } + + protected override void Initialize() + { + // TODO: Add your initialization logic here + ConfigureWindow(); + SetResolution(); + + IsFixedTimeStep = true; //Force the game to update at fixed time intervals + TargetElapsedTime = TimeSpan.FromSeconds(1 / 120.0f); //Se + + base.Initialize(); + + MaximizeWindow(); + } + + private void ConfigureWindow() + { + Window.AllowUserResizing = true; + } + + private void SetResolution() + { + _graphics.PreferredBackBufferWidth = 1280; + _graphics.PreferredBackBufferHeight = 720; + _graphics.ApplyChanges(); + } + + private void MaximizeWindow() + { + SDL_MaximizeWindow(Window.Handle); + } + + protected override void LoadContent() + { + _spriteBatch = new SpriteBatch(GraphicsDevice); + _gameLoop = new GameLoop(this); + // TODO: use this.Content to load your game content here + } + + protected override void Update(GameTime gameTime) + { + if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) + Exit(); + + // TODO: Add your update logic here + _gameLoop.Update(gameTime); + + base.Update(gameTime); + } + + protected override void Draw(GameTime gameTime) + { + GraphicsDevice.Clear(Color.Black); + + // TODO: Add your drawing code here + _gameLoop.Draw(); + + base.Draw(gameTime); + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Content/Background/PixelBackgroundSeamless.png b/AlientAttack.MonoGame/Content/Background/PixelBackgroundSeamless.png new file mode 100644 index 0000000..3850166 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Background/PixelBackgroundSeamless.png differ diff --git a/AlientAttack.MonoGame/Content/Background/PixelBackgroundSeamlessVertically.png b/AlientAttack.MonoGame/Content/Background/PixelBackgroundSeamlessVertically.png new file mode 100644 index 0000000..0872d2a Binary files /dev/null and b/AlientAttack.MonoGame/Content/Background/PixelBackgroundSeamlessVertically.png differ diff --git a/AlientAttack.MonoGame/Content/Content.mgcb b/AlientAttack.MonoGame/Content/Content.mgcb new file mode 100644 index 0000000..0e5de6e --- /dev/null +++ b/AlientAttack.MonoGame/Content/Content.mgcb @@ -0,0 +1,1275 @@ + +#----------------------------- Global Properties ----------------------------# + +/outputDir:bin/$(Platform) +/intermediateDir:obj/$(Platform) +/platform:DesktopGL +/config: +/profile:Reach +/compress:False + +#-------------------------------- References --------------------------------# + + +#---------------------------------- Content ---------------------------------# + +#begin Background/PixelBackgroundSeamless.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Background/PixelBackgroundSeamless.png + +#begin Background/PixelBackgroundSeamlessVertically.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Background/PixelBackgroundSeamlessVertically.png + +#begin Sprites/Asteroid 01_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Asteroid 01_png_processed.png + +#begin Sprites/Asteroid 02_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Asteroid 02_png_processed.png + +#begin Sprites/Asteroid 03_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Asteroid 03_png_processed.png + +#begin Sprites/Asteroid 04_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Asteroid 04_png_processed.png + +#begin Sprites/Cover_Blue_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Cover_Blue_png_processed.png + +#begin Sprites/Cover_Green_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Cover_Green_png_processed.png + +#begin Sprites/Cover_Red_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Cover_Red_png_processed.png + +#begin Sprites/Enemy01_Green_Frame_1_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy01_Green_Frame_1_png_processed.png + +#begin Sprites/Enemy01_Green_Frame_2_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy01_Green_Frame_2_png_processed.png + +#begin Sprites/Enemy01_Green_Frame_3_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy01_Green_Frame_3_png_processed.png + +#begin Sprites/Enemy01_Red_Frame_1_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy01_Red_Frame_1_png_processed.png + +#begin Sprites/Enemy01_Red_Frame_2_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy01_Red_Frame_2_png_processed.png + +#begin Sprites/Enemy01_Red_Frame_3_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy01_Red_Frame_3_png_processed.png + +#begin Sprites/Enemy01_Shadow_Frame_1_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy01_Shadow_Frame_1_png_processed.png + +#begin Sprites/Enemy01_Shadow_Frame_2_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy01_Shadow_Frame_2_png_processed.png + +#begin Sprites/Enemy01_Shadow_Frame_3_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy01_Shadow_Frame_3_png_processed.png + +#begin Sprites/Enemy01_Teal_Frame_1_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy01_Teal_Frame_1_png_processed.png + +#begin Sprites/Enemy01_Teal_Frame_2_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy01_Teal_Frame_2_png_processed.png + +#begin Sprites/Enemy01_Teal_Frame_3_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy01_Teal_Frame_3_png_processed.png + +#begin Sprites/Enemy02_Shadow_Frame_1_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy02_Shadow_Frame_1_png_processed.png + +#begin Sprites/Enemy02_Shadow_Frame_2_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy02_Shadow_Frame_2_png_processed.png + +#begin Sprites/Enemy02_Shadow_Frame_3_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy02_Shadow_Frame_3_png_processed.png + +#begin Sprites/Enemy02_Teal_Frame_1_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy02_Teal_Frame_1_png_processed.png + +#begin Sprites/Enemy02_Teal_Frame_2_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy02_Teal_Frame_2_png_processed.png + +#begin Sprites/Enemy02_Teal_Frame_3_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy02_Teal_Frame_3_png_processed.png + +#begin Sprites/Enemy02Green_Frame_1_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy02Green_Frame_1_png_processed.png + +#begin Sprites/Enemy02Green_Frame_2_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy02Green_Frame_2_png_processed.png + +#begin Sprites/Enemy02Green_Frame_3_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy02Green_Frame_3_png_processed.png + +#begin Sprites/Enemy02Red_Frame_1_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy02Red_Frame_1_png_processed.png + +#begin Sprites/Enemy02Red_Frame_2_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy02Red_Frame_2_png_processed.png + +#begin Sprites/Enemy02Red_Frame_3_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Enemy02Red_Frame_3_png_processed.png + +#begin Sprites/Exhaust_Frame_01_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Exhaust_Frame_01_png_processed.png + +#begin Sprites/Exhaust_Frame_02_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Exhaust_Frame_02_png_processed.png + +#begin Sprites/Exhaust_Frame_03_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Exhaust_Frame_03_png_processed.png + +#begin Sprites/Exhaust_Frame_04_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Exhaust_Frame_04_png_processed.png + +#begin Sprites/Exhaust_Frame_05_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Exhaust_Frame_05_png_processed.png + +#begin Sprites/Exhaust_Frame_06_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Exhaust_Frame_06_png_processed.png + +#begin Sprites/Explosion01_Frame_01_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion01_Frame_01_png_processed.png + +#begin Sprites/Explosion01_Frame_02_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion01_Frame_02_png_processed.png + +#begin Sprites/Explosion01_Frame_03_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion01_Frame_03_png_processed.png + +#begin Sprites/Explosion01_Frame_04_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion01_Frame_04_png_processed.png + +#begin Sprites/Explosion01_Frame_05_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion01_Frame_05_png_processed.png + +#begin Sprites/Explosion01_Frame_06_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion01_Frame_06_png_processed.png + +#begin Sprites/Explosion01_Frame_07_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion01_Frame_07_png_processed.png + +#begin Sprites/Explosion01_Frame_08_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion01_Frame_08_png_processed.png + +#begin Sprites/Explosion01_Frame_09_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion01_Frame_09_png_processed.png + +#begin Sprites/Explosion02_Frame_01_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion02_Frame_01_png_processed.png + +#begin Sprites/Explosion02_Frame_02_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion02_Frame_02_png_processed.png + +#begin Sprites/Explosion02_Frame_03_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion02_Frame_03_png_processed.png + +#begin Sprites/Explosion02_Frame_04_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion02_Frame_04_png_processed.png + +#begin Sprites/Explosion02_Frame_05_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion02_Frame_05_png_processed.png + +#begin Sprites/Explosion02_Frame_06_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion02_Frame_06_png_processed.png + +#begin Sprites/Explosion02_Frame_07_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion02_Frame_07_png_processed.png + +#begin Sprites/Explosion02_Frame_08_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion02_Frame_08_png_processed.png + +#begin Sprites/Explosion02_Frame_09_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Explosion02_Frame_09_png_processed.png + +#begin Sprites/GunTurret_ExampleGun_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/GunTurret_ExampleGun_png_processed.png + +#begin Sprites/GunTurret_Green_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/GunTurret_Green_png_processed.png + +#begin Sprites/GunTurret_Orange_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/GunTurret_Orange_png_processed.png + +#begin Sprites/GunTurret_Red_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/GunTurret_Red_png_processed.png + +#begin Sprites/GunTurret_Teal_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/GunTurret_Teal_png_processed.png + +#begin Sprites/GunTurretMount_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/GunTurretMount_png_processed.png + +#begin Sprites/Laser_Large_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Laser_Large_png_processed.png + +#begin Sprites/Laser_Medium_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Laser_Medium_png_processed.png + +#begin Sprites/Laser_Small_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Laser_Small_png_processed.png + +#begin Sprites/Minigun_Large_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Minigun_Large_png_processed.png;Sprites/Minigun_Large.png + +#begin Sprites/Minigun_Medium_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Minigun_Medium_png_processed.png;Sprites/Minigun_Medium.png + +#begin Sprites/Minigun_Small_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Minigun_Small_png_processed.png;Sprites/Minigun_Small.png + +#begin Sprites/Plasma_Large_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Plasma_Large_png_processed.png + +#begin Sprites/Plasma_Medium_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Plasma_Medium_png_processed.png + +#begin Sprites/Plasma_Small_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Plasma_Small_png_processed.png + +#begin Sprites/Platform_01_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Platform_01_png_processed.png + +#begin Sprites/Platform_02_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Platform_02_png_processed.png + +#begin Sprites/Platform_03_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Platform_03_png_processed.png + +#begin Sprites/Platform_04_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Platform_04_png_processed.png + +#begin Sprites/Platform_Corner_NorthEast_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Platform_Corner_NorthEast_png_processed.png + +#begin Sprites/Platform_Corner_NorthWest_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Platform_Corner_NorthWest_png_processed.png + +#begin Sprites/Platform_Corner_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Platform_Corner_png_processed.png + +#begin Sprites/Platform_Corner_SouthEast_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Platform_Corner_SouthEast_png_processed.png + +#begin Sprites/Platform_Corner_SouthWest_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Platform_Corner_SouthWest_png_processed.png + +#begin Sprites/Platform_Edge_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Platform_Edge_png_processed.png + +#begin Sprites/PlatformCorner_NorthEast_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/PlatformCorner_NorthEast_png_processed.png + +#begin Sprites/PlatformCorner_NorthWest_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/PlatformCorner_NorthWest_png_processed.png + +#begin Sprites/PlatformCorner_SouthEast_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/PlatformCorner_SouthEast_png_processed.png + +#begin Sprites/PlatformCorner_SouthWest_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/PlatformCorner_SouthWest_png_processed.png + +#begin Sprites/PlayerBlue_Frame_01_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/PlayerBlue_Frame_01_png_processed.png;Sprites/PlayerBlue_Frame_01.png + +#begin Sprites/PlayerBlue_Frame_02_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/PlayerBlue_Frame_02_png_processed.png;Sprites/PlayerBlue_Frame_02.png + +#begin Sprites/PlayerBlue_Frame_03_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/PlayerBlue_Frame_03_png_processed.png;Sprites/PlayerBlue_Frame_03.png + +#begin Sprites/PlayerRed_Frame_01_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/PlayerRed_Frame_01_png_processed.png;Sprites/PlayerRed_Frame_01.png + +#begin Sprites/PlayerRed_Frame_02_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/PlayerRed_Frame_02_png_processed.png;Sprites/PlayerRed_Frame_02.png + +#begin Sprites/PlayerRed_Frame_03_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/PlayerRed_Frame_03_png_processed.png;Sprites/PlayerRed_Frame_03.png + +#begin Sprites/PlayerShadow_Frame_01_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/PlayerShadow_Frame_01_png_processed.png;Sprites/PlayerShadow_Frame_01.png + +#begin Sprites/PlayerShadow_Frame_02_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/PlayerShadow_Frame_02_png_processed.png;Sprites/PlayerShadow_Frame_02.png + +#begin Sprites/PlayerShadow_Frame_03_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/PlayerShadow_Frame_03_png_processed.png;Sprites/PlayerShadow_Frame_03.png + +#begin Sprites/Powerup_Ammo_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Powerup_Ammo_png_processed.png;Sprites/Powerup_Ammo.png + +#begin Sprites/Powerup_Energy_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Powerup_Energy_png_processed.png;Sprites/Powerup_Energy.png + +#begin Sprites/Powerup_Health_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Powerup_Health_png_processed.png;Sprites/Powerup_Health.png + +#begin Sprites/Powerup_Rockets_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Powerup_Rockets_png_processed.png;Sprites/Powerup_Rockets.png + +#begin Sprites/Powerup_Shadow_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Powerup_Shadow_png_processed.png;Sprites/Powerup_Shadow.png + +#begin Sprites/Powerup_Shields_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Powerup_Shields_png_processed.png;Sprites/Powerup_Shields.png + +#begin Sprites/Proton_Large_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Proton_Large_png_processed.png + +#begin Sprites/Proton_Medium_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Proton_Medium_png_processed.png + +#begin Sprites/Proton_Small_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Proton_Small_png_processed.png + +#begin Sprites/Rotor_png_processed.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Sprites/Rotor_png_processed.png + diff --git a/AlientAttack.MonoGame/Content/Sprites/Asteroid 01_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Asteroid 01_png_processed.png new file mode 100644 index 0000000..9fd1246 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Asteroid 01_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Asteroid 02_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Asteroid 02_png_processed.png new file mode 100644 index 0000000..97deca0 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Asteroid 02_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Asteroid 03_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Asteroid 03_png_processed.png new file mode 100644 index 0000000..9195122 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Asteroid 03_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Asteroid 04_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Asteroid 04_png_processed.png new file mode 100644 index 0000000..62a3de8 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Asteroid 04_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Cover_Blue_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Cover_Blue_png_processed.png new file mode 100644 index 0000000..4f7edd4 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Cover_Blue_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Cover_Green_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Cover_Green_png_processed.png new file mode 100644 index 0000000..aaac34b Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Cover_Green_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Cover_Red_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Cover_Red_png_processed.png new file mode 100644 index 0000000..9d7ef36 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Cover_Red_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy01_Green_Frame_1_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Green_Frame_1_png_processed.png new file mode 100644 index 0000000..5149b1e Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Green_Frame_1_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy01_Green_Frame_2_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Green_Frame_2_png_processed.png new file mode 100644 index 0000000..46e79b6 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Green_Frame_2_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy01_Green_Frame_3_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Green_Frame_3_png_processed.png new file mode 100644 index 0000000..8095570 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Green_Frame_3_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy01_Red_Frame_1_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Red_Frame_1_png_processed.png new file mode 100644 index 0000000..1b6838c Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Red_Frame_1_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy01_Red_Frame_2_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Red_Frame_2_png_processed.png new file mode 100644 index 0000000..f3f006f Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Red_Frame_2_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy01_Red_Frame_3_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Red_Frame_3_png_processed.png new file mode 100644 index 0000000..8a71793 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Red_Frame_3_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy01_Shadow_Frame_1_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Shadow_Frame_1_png_processed.png new file mode 100644 index 0000000..bf32e52 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Shadow_Frame_1_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy01_Shadow_Frame_2_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Shadow_Frame_2_png_processed.png new file mode 100644 index 0000000..d51eb7d Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Shadow_Frame_2_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy01_Shadow_Frame_3_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Shadow_Frame_3_png_processed.png new file mode 100644 index 0000000..c038fe4 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Shadow_Frame_3_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy01_Teal_Frame_1_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Teal_Frame_1_png_processed.png new file mode 100644 index 0000000..7b84a1d Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Teal_Frame_1_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy01_Teal_Frame_2_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Teal_Frame_2_png_processed.png new file mode 100644 index 0000000..b2135ac Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Teal_Frame_2_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy01_Teal_Frame_3_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Teal_Frame_3_png_processed.png new file mode 100644 index 0000000..ad8ad30 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy01_Teal_Frame_3_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy02Green_Frame_1_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy02Green_Frame_1_png_processed.png new file mode 100644 index 0000000..488a3f5 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy02Green_Frame_1_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy02Green_Frame_2_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy02Green_Frame_2_png_processed.png new file mode 100644 index 0000000..c9f4c9d Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy02Green_Frame_2_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy02Green_Frame_3_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy02Green_Frame_3_png_processed.png new file mode 100644 index 0000000..6c0cc7f Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy02Green_Frame_3_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy02Red_Frame_1_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy02Red_Frame_1_png_processed.png new file mode 100644 index 0000000..8f08ea4 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy02Red_Frame_1_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy02Red_Frame_2_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy02Red_Frame_2_png_processed.png new file mode 100644 index 0000000..3b8d741 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy02Red_Frame_2_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy02Red_Frame_3_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy02Red_Frame_3_png_processed.png new file mode 100644 index 0000000..f0ddd6c Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy02Red_Frame_3_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy02_Shadow_Frame_1_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy02_Shadow_Frame_1_png_processed.png new file mode 100644 index 0000000..18e3e00 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy02_Shadow_Frame_1_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy02_Shadow_Frame_2_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy02_Shadow_Frame_2_png_processed.png new file mode 100644 index 0000000..f6ba535 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy02_Shadow_Frame_2_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy02_Shadow_Frame_3_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy02_Shadow_Frame_3_png_processed.png new file mode 100644 index 0000000..0b0f336 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy02_Shadow_Frame_3_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy02_Teal_Frame_1_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy02_Teal_Frame_1_png_processed.png new file mode 100644 index 0000000..848391a Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy02_Teal_Frame_1_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy02_Teal_Frame_2_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy02_Teal_Frame_2_png_processed.png new file mode 100644 index 0000000..353eb8c Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy02_Teal_Frame_2_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Enemy02_Teal_Frame_3_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Enemy02_Teal_Frame_3_png_processed.png new file mode 100644 index 0000000..f3b2ea9 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Enemy02_Teal_Frame_3_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_01_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_01_png_processed.png new file mode 100644 index 0000000..7eb98b6 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_01_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_02_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_02_png_processed.png new file mode 100644 index 0000000..97c7a40 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_02_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_03_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_03_png_processed.png new file mode 100644 index 0000000..2803362 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_03_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_04_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_04_png_processed.png new file mode 100644 index 0000000..d1fa409 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_04_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_05_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_05_png_processed.png new file mode 100644 index 0000000..6c082bc Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_05_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_06_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_06_png_processed.png new file mode 100644 index 0000000..e0fe990 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Exhaust_Frame_06_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_01_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_01_png_processed.png new file mode 100644 index 0000000..5f69994 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_01_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_02_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_02_png_processed.png new file mode 100644 index 0000000..190772f Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_02_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_03_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_03_png_processed.png new file mode 100644 index 0000000..99f02e4 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_03_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_04_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_04_png_processed.png new file mode 100644 index 0000000..3a2cada Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_04_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_05_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_05_png_processed.png new file mode 100644 index 0000000..abf9a82 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_05_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_06_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_06_png_processed.png new file mode 100644 index 0000000..cf8ebb1 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_06_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_07_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_07_png_processed.png new file mode 100644 index 0000000..28ec59e Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_07_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_08_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_08_png_processed.png new file mode 100644 index 0000000..f92856e Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_08_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_09_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_09_png_processed.png new file mode 100644 index 0000000..a1cab72 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion01_Frame_09_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_01_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_01_png_processed.png new file mode 100644 index 0000000..eaa0357 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_01_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_02_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_02_png_processed.png new file mode 100644 index 0000000..77f4c27 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_02_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_03_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_03_png_processed.png new file mode 100644 index 0000000..edadef5 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_03_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_04_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_04_png_processed.png new file mode 100644 index 0000000..8183403 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_04_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_05_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_05_png_processed.png new file mode 100644 index 0000000..73926f7 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_05_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_06_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_06_png_processed.png new file mode 100644 index 0000000..b600788 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_06_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_07_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_07_png_processed.png new file mode 100644 index 0000000..3462af3 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_07_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_08_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_08_png_processed.png new file mode 100644 index 0000000..183eb97 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_08_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_09_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_09_png_processed.png new file mode 100644 index 0000000..d5f0f6e Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Explosion02_Frame_09_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/GunTurretMount_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/GunTurretMount_png_processed.png new file mode 100644 index 0000000..6f1a569 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/GunTurretMount_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/GunTurret_ExampleGun_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/GunTurret_ExampleGun_png_processed.png new file mode 100644 index 0000000..80e37a7 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/GunTurret_ExampleGun_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/GunTurret_Green_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/GunTurret_Green_png_processed.png new file mode 100644 index 0000000..d0598b2 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/GunTurret_Green_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/GunTurret_Orange_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/GunTurret_Orange_png_processed.png new file mode 100644 index 0000000..2fcef8d Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/GunTurret_Orange_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/GunTurret_Red_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/GunTurret_Red_png_processed.png new file mode 100644 index 0000000..1b4dabf Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/GunTurret_Red_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/GunTurret_Teal_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/GunTurret_Teal_png_processed.png new file mode 100644 index 0000000..e26723d Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/GunTurret_Teal_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Laser_Large_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Laser_Large_png_processed.png new file mode 100644 index 0000000..82b7775 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Laser_Large_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Laser_Medium_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Laser_Medium_png_processed.png new file mode 100644 index 0000000..7534d3f Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Laser_Medium_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Laser_Small_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Laser_Small_png_processed.png new file mode 100644 index 0000000..1e44768 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Laser_Small_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Minigun_Large_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Minigun_Large_png_processed.png new file mode 100644 index 0000000..4ad9424 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Minigun_Large_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Minigun_Medium_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Minigun_Medium_png_processed.png new file mode 100644 index 0000000..0e5130d Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Minigun_Medium_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Minigun_Small_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Minigun_Small_png_processed.png new file mode 100644 index 0000000..3904f70 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Minigun_Small_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Plasma_Large_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Plasma_Large_png_processed.png new file mode 100644 index 0000000..1445419 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Plasma_Large_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Plasma_Medium_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Plasma_Medium_png_processed.png new file mode 100644 index 0000000..b99695d Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Plasma_Medium_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Plasma_Small_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Plasma_Small_png_processed.png new file mode 100644 index 0000000..e54facb Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Plasma_Small_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/PlatformCorner_NorthEast_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/PlatformCorner_NorthEast_png_processed.png new file mode 100644 index 0000000..bf33c9c Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/PlatformCorner_NorthEast_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/PlatformCorner_NorthWest_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/PlatformCorner_NorthWest_png_processed.png new file mode 100644 index 0000000..61291a0 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/PlatformCorner_NorthWest_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/PlatformCorner_SouthEast_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/PlatformCorner_SouthEast_png_processed.png new file mode 100644 index 0000000..343085c Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/PlatformCorner_SouthEast_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/PlatformCorner_SouthWest_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/PlatformCorner_SouthWest_png_processed.png new file mode 100644 index 0000000..da77a18 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/PlatformCorner_SouthWest_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Platform_01_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Platform_01_png_processed.png new file mode 100644 index 0000000..1b553be Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Platform_01_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Platform_02_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Platform_02_png_processed.png new file mode 100644 index 0000000..a5505b2 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Platform_02_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Platform_03_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Platform_03_png_processed.png new file mode 100644 index 0000000..9696e4f Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Platform_03_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Platform_04_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Platform_04_png_processed.png new file mode 100644 index 0000000..f3104d9 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Platform_04_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Platform_Corner_NorthEast_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Platform_Corner_NorthEast_png_processed.png new file mode 100644 index 0000000..6cbd110 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Platform_Corner_NorthEast_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Platform_Corner_NorthWest_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Platform_Corner_NorthWest_png_processed.png new file mode 100644 index 0000000..37edd96 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Platform_Corner_NorthWest_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Platform_Corner_SouthEast_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Platform_Corner_SouthEast_png_processed.png new file mode 100644 index 0000000..cf82fe3 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Platform_Corner_SouthEast_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Platform_Corner_SouthWest_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Platform_Corner_SouthWest_png_processed.png new file mode 100644 index 0000000..c54f915 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Platform_Corner_SouthWest_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Platform_Corner_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Platform_Corner_png_processed.png new file mode 100644 index 0000000..247ba12 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Platform_Corner_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Platform_Edge_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Platform_Edge_png_processed.png new file mode 100644 index 0000000..058fcda Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Platform_Edge_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/PlayerBlue_Frame_01_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/PlayerBlue_Frame_01_png_processed.png new file mode 100644 index 0000000..777b396 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/PlayerBlue_Frame_01_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/PlayerBlue_Frame_02_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/PlayerBlue_Frame_02_png_processed.png new file mode 100644 index 0000000..0807e59 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/PlayerBlue_Frame_02_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/PlayerBlue_Frame_03_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/PlayerBlue_Frame_03_png_processed.png new file mode 100644 index 0000000..c83cdb2 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/PlayerBlue_Frame_03_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/PlayerRed_Frame_01_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/PlayerRed_Frame_01_png_processed.png new file mode 100644 index 0000000..2955536 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/PlayerRed_Frame_01_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/PlayerRed_Frame_02_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/PlayerRed_Frame_02_png_processed.png new file mode 100644 index 0000000..a7d2e41 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/PlayerRed_Frame_02_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/PlayerRed_Frame_03_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/PlayerRed_Frame_03_png_processed.png new file mode 100644 index 0000000..0d79762 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/PlayerRed_Frame_03_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/PlayerShadow_Frame_01_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/PlayerShadow_Frame_01_png_processed.png new file mode 100644 index 0000000..6443bd4 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/PlayerShadow_Frame_01_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/PlayerShadow_Frame_02_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/PlayerShadow_Frame_02_png_processed.png new file mode 100644 index 0000000..2b33091 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/PlayerShadow_Frame_02_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/PlayerShadow_Frame_03_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/PlayerShadow_Frame_03_png_processed.png new file mode 100644 index 0000000..3d05ee6 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/PlayerShadow_Frame_03_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Powerup_Ammo_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Powerup_Ammo_png_processed.png new file mode 100644 index 0000000..b217017 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Powerup_Ammo_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Powerup_Energy_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Powerup_Energy_png_processed.png new file mode 100644 index 0000000..f4ac9c0 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Powerup_Energy_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Powerup_Health_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Powerup_Health_png_processed.png new file mode 100644 index 0000000..578f1ca Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Powerup_Health_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Powerup_Rockets_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Powerup_Rockets_png_processed.png new file mode 100644 index 0000000..19ee0ca Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Powerup_Rockets_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Powerup_Shadow_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Powerup_Shadow_png_processed.png new file mode 100644 index 0000000..80de7a9 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Powerup_Shadow_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Powerup_Shields_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Powerup_Shields_png_processed.png new file mode 100644 index 0000000..a3c9627 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Powerup_Shields_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Proton_Large_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Proton_Large_png_processed.png new file mode 100644 index 0000000..7c69a33 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Proton_Large_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Proton_Medium_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Proton_Medium_png_processed.png new file mode 100644 index 0000000..5a66196 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Proton_Medium_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Proton_Small_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Proton_Small_png_processed.png new file mode 100644 index 0000000..41772d1 Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Proton_Small_png_processed.png differ diff --git a/AlientAttack.MonoGame/Content/Sprites/Rotor_png_processed.png b/AlientAttack.MonoGame/Content/Sprites/Rotor_png_processed.png new file mode 100644 index 0000000..f58a80e Binary files /dev/null and b/AlientAttack.MonoGame/Content/Sprites/Rotor_png_processed.png differ diff --git a/AlientAttack.MonoGame/GameLoops/GameLoop.cs b/AlientAttack.MonoGame/GameLoops/GameLoop.cs new file mode 100644 index 0000000..6f3d907 --- /dev/null +++ b/AlientAttack.MonoGame/GameLoops/GameLoop.cs @@ -0,0 +1,196 @@ +using AlienAttack.MonoGame.Things; +using AlienAttack.MonoGame.Things.Enemies; +using AlienAttack.MonoGame.Things.Stars; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace AlienAttack.MonoGame.GameLoops; + +internal class GameLoop : GameLoopBase +{ + private readonly List _spritesToAdd = []; + private readonly Random _random = new(); + + private int _spawnNewEnemyThreshold = 100; + private float _backgroundYOffset = 0; + + private Starfield _starfield; + private Texture2D _pixel; + + protected readonly List Sprites = []; + + public GameLoop(AlienAttackGame game) : base(game) + { + InitializeStarField(game); + Sprites.Add(new Player(game.ViewTransform.ScreenWidth / 2 - 32, game.ViewTransform.ScreenHeight - 64)); + } + + private void InitializeStarField(AlienAttackGame game) + { + _starfield = new Starfield(seed: 42); + + //// Far layer: many tiny, slow, faint + //_starfield.AddLayer(count: 450, speedPxPerSec: 20f, minSize: 1f, maxSize: 1.5f, minAlpha: 0.15f, maxAlpha: 0.35f); + + //// Mid layer + //_starfield.AddLayer(count: 220, speedPxPerSec: 45f, minSize: 1.5f, maxSize: 2.2f, minAlpha: 0.25f, maxAlpha: 0.60f); + + //// Near layer: fewer, bigger, faster, brighter + //_starfield.AddLayer(count: 90, speedPxPerSec: 85f, minSize: 2.0f, maxSize: 3.2f, minAlpha: 0.40f, maxAlpha: 0.90f); + + _starfield.AddLayer(count: 450, velocityPxPerSec: new Vector2(+4f, 20f), minSize: 1f, maxSize: 1.5f, minAlpha: 0.15f, maxAlpha: 0.35f); + _starfield.AddLayer(count: 220, velocityPxPerSec: new Vector2(-10f, 45f), minSize: 1.5f, maxSize: 2.2f, minAlpha: 0.25f, maxAlpha: 0.60f); + _starfield.AddLayer(count: 90, velocityPxPerSec: new Vector2(+20f, 85f), minSize: 2.0f, maxSize: 3.2f, minAlpha: 0.40f, maxAlpha: 0.90f); + + + _pixel = new Texture2D(game.GraphicsDevice, 1, 1); + _pixel.SetData(new[] { Color.White }); + + _starfield.Initialize(ViewTransform.ScreenWidth, ViewTransform.ScreenHeight); + } + + public override void OnDraw() + { + _starfield.Draw(SpriteBatch, _pixel); + //DrawBackground(); + DrawSprites(); + } + + private void DrawBackground() + { + Texture2D backgroundTexture = Content.Load($@"Background\PixelBackgroundSeamlessVertically"); + int blockCountY = (int)Math.Ceiling((decimal)ViewTransform.ScreenHeight / (decimal)backgroundTexture.Height); + int blockCountX = (int)Math.Ceiling((decimal)ViewTransform.ScreenWidth / (decimal)backgroundTexture.Width); + + for (int y = 0; y < blockCountY; y++) + { + float startY = (y * backgroundTexture.Height) + _backgroundYOffset; + _backgroundYOffset = _backgroundYOffset + 0.25f; + + if (_backgroundYOffset > ViewTransform.ScreenHeight) + { + _backgroundYOffset = 0; + } + + for (int x = 0; x < blockCountX; x++) + { + int width = backgroundTexture.Width; + + if (x * backgroundTexture.Width + backgroundTexture.Width > ViewTransform.ScreenWidth) + { + width = ViewTransform.ScreenWidth - (x * backgroundTexture.Width); + } + + Vector2 position = new(x * backgroundTexture.Width, startY); + SpriteBatch.Draw(backgroundTexture, position, new Rectangle(new Point(x, y), new Point(width, backgroundTexture.Height)), Color.White); + } + } + } + + private void DrawSprites() + { + SpriteDrawArgs args = new(Game); + + foreach (Sprite sprite in Sprites) + { + sprite.Draw(args); + } + } + + public override void OnUpdate(GameTime gameTime) + { + _starfield.Update(gameTime); + UpdateSprites(gameTime); + CheckSpriteCollisions(); + ClearDeadSprites(); + AddEnemySprites(); + AddNewSprites(); + } + + private void UpdateSprites(GameTime gameTime) + { + SpriteUpdateContext args = new(Game) + { + Random = _random, + GameTime = gameTime, + SpawnSprite = _spritesToAdd.Add + }; + + foreach (Sprite sprite in Sprites) + { + sprite.Update(args); + } + } + + private void CheckSpriteCollisions() + { + var collisionSprites = Sprites.Where(x => x.CanCollide).ToList(); + + foreach (var sprite in collisionSprites) + { + foreach (var otherSprite in collisionSprites.Where(x => x != sprite)) + { + SpriteCollisionContext context = new(Game) + { + Sprite = otherSprite, + SpawnSprite = _spritesToAdd.Add + }; + + // TODO: If perfomed once; do not perform again + if (sprite.Intersects(otherSprite)) + { + sprite.OnCollision(context); + } + } + } + } + + private void ClearDeadSprites() + { + var deadSprites = Sprites.Where(x => x.IsDead).ToList(); + + foreach (var sprite in deadSprites) + { + Sprites.Remove(sprite); + } + } + + private void AddNewSprites() + { + foreach (Sprite sprite in _spritesToAdd) + { + Sprites.Add(sprite); + } + + _spritesToAdd.Clear(); + } + + private void AddEnemySprites() + { + if (_spawnNewEnemyThreshold > 0) + { + _spawnNewEnemyThreshold--; + } + + if (_spawnNewEnemyThreshold == 0) + { + int randomNumber = _random.Next(0, 100); + + if (randomNumber == 0) + { + Enemy enemy = new(_random.Next(0, ViewTransform.ScreenWidth - 64), -64); + Sprites.Add(enemy); + _spawnNewEnemyThreshold = 100 + _random.Next(0, 100); + } + else if (randomNumber == 1) + { + RedEnemy enemy = new(_random.Next(0, ViewTransform.ScreenWidth - 64), -64); + Sprites.Add(enemy); + _spawnNewEnemyThreshold = 100 + _random.Next(0, 100); + } + } + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/GameLoops/GameLoopBase.cs b/AlientAttack.MonoGame/GameLoops/GameLoopBase.cs new file mode 100644 index 0000000..44be08f --- /dev/null +++ b/AlientAttack.MonoGame/GameLoops/GameLoopBase.cs @@ -0,0 +1,31 @@ +using AlienAttack.MonoGame.View; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; + +namespace AlienAttack.MonoGame.GameLoops; + +internal abstract class GameLoopBase(AlienAttackGame game) : IGameLoop +{ + protected readonly AlienAttackGame Game = game; + protected readonly ContentManager Content = game.Content; + protected readonly SpriteBatch SpriteBatch = game.SpriteBatch; + protected readonly ViewTransform ViewTransform = game.ViewTransform; + + public void Draw() + { + SpriteBatch.Begin(transformMatrix: ViewTransform.ViewMatrix); + + OnDraw(); + + SpriteBatch.End(); + } + + public void Update(GameTime gameTime) + { + OnUpdate(gameTime); + } + + public abstract void OnDraw(); + public abstract void OnUpdate(GameTime gameTime); +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/GameLoops/IGameLoop.cs b/AlientAttack.MonoGame/GameLoops/IGameLoop.cs new file mode 100644 index 0000000..a76ad85 --- /dev/null +++ b/AlientAttack.MonoGame/GameLoops/IGameLoop.cs @@ -0,0 +1,9 @@ +using Microsoft.Xna.Framework; + +namespace AlienAttack.MonoGame.GameLoops; + +internal interface IGameLoop +{ + void Draw(); + void Update(GameTime gameTime); +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Icon.bmp b/AlientAttack.MonoGame/Icon.bmp new file mode 100644 index 0000000..2b48165 Binary files /dev/null and b/AlientAttack.MonoGame/Icon.bmp differ diff --git a/AlientAttack.MonoGame/Icon.ico b/AlientAttack.MonoGame/Icon.ico new file mode 100644 index 0000000..7d9dec1 Binary files /dev/null and b/AlientAttack.MonoGame/Icon.ico differ diff --git a/AlientAttack.MonoGame/Program.cs b/AlientAttack.MonoGame/Program.cs new file mode 100644 index 0000000..c45e387 --- /dev/null +++ b/AlientAttack.MonoGame/Program.cs @@ -0,0 +1,2 @@ +using var game = new AlienAttack.MonoGame.AlienAttackGame(); +game.Run(); diff --git a/AlientAttack.MonoGame/Things/Bullets/Bullet.cs b/AlientAttack.MonoGame/Things/Bullets/Bullet.cs new file mode 100644 index 0000000..f1e9446 --- /dev/null +++ b/AlientAttack.MonoGame/Things/Bullets/Bullet.cs @@ -0,0 +1,51 @@ +using AlienAttack.MonoGame.Things.Items; + +namespace AlienAttack.MonoGame.Things.Bullets; + +internal class Bullet(float x, float y, float xVel, float yVel, Sprite owner) : Sprite(x, y) +{ + protected float XVelocity = xVel; + protected float YVelocity = yVel; + public Sprite Owner { get; protected set; } = owner; + public int Damage { get; protected set; } = 0; + + public override void Draw(SpriteDrawArgs args) + { + base.Draw(args); + } + + public override void Update(SpriteUpdateContext context) + { + XPosition += XVelocity; + YPosition += YVelocity; + + if (XPosition + BoundBox.Width < 0 + || XPosition > context.ViewTransform.ScreenWidth + || YPosition + BoundBox.Height < 0 + || YPosition > context.ViewTransform.ScreenHeight) + { + IsDead = true; + } + + base.Update(context); + } + + public override void OnCollision(SpriteCollisionContext context) + { + if (context.Sprite is Bullet || context.Sprite == Owner || context.Sprite is Item) + return; + + IsDead = true; + + float xVel = 0; + float yVel = 0; + + if (context.Sprite is MoveableSprite moveableSprite) + { + xVel = moveableSprite.XVelocity; + yVel = moveableSprite.YVelocity; + } + + context.SpawnSprite(new MiniExplosion((int)XPosition, (int)YPosition, xVel, yVel)); + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/Bullets/MinigunBulletSmall.cs b/AlientAttack.MonoGame/Things/Bullets/MinigunBulletSmall.cs new file mode 100644 index 0000000..62e3164 --- /dev/null +++ b/AlientAttack.MonoGame/Things/Bullets/MinigunBulletSmall.cs @@ -0,0 +1,26 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System; + +namespace AlienAttack.MonoGame.Things.Bullets; + +internal class MinigunBulletSmall : Bullet +{ + public MinigunBulletSmall(float x, float y, float xVel, float yVel, Sprite owner) : base(x, y, xVel, yVel, owner) + { + XVelocity = xVel; + YVelocity = yVel; + Owner = owner; + Damage = 1; + } + + public override void Draw(SpriteDrawArgs args) + { + Texture2D texture = args.Content.Load(@$"Sprites\Minigun_Small"); + + float rotation = MathF.Atan2(YVelocity, XVelocity) + MathF.PI / 2f; + Vector2 origin = new(texture.Width / 2f, texture.Height / 2f); + + args.SpriteBatch.Draw(texture, Position, null, DrawColor, rotation, origin, 1f, SpriteEffects.None, 1); + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/Enemies/Enemy.cs b/AlientAttack.MonoGame/Things/Enemies/Enemy.cs new file mode 100644 index 0000000..5af8591 --- /dev/null +++ b/AlientAttack.MonoGame/Things/Enemies/Enemy.cs @@ -0,0 +1,117 @@ +using AlienAttack.MonoGame.Things.Bullets; +using AlienAttack.MonoGame.Things.Items; +using AlienAttack.MonoGame.Things.Weapons; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using System; +using System.Collections.Generic; + +namespace AlienAttack.MonoGame.Things.Enemies; + +internal class Enemy : MoveableSprite +{ + //Enemy01_Green_Frame_1_png_processed + + protected ICollection ActiveWeapons = []; + protected int FireThreshold => 20; + protected int CurrentFireThreshold { get; set; } = 20; + protected int Health { get; set; } = 5; + + public Enemy(int x, int y) : base(x, y) + { + BoundBox = new Rectangle(0, 0, 64, 64); + YVelocity = 1; + ActiveWeapons.Add(new Minigun()); + //ActiveWeapons.Add(new FastMinigun()); + } + + public override void Draw(SpriteDrawArgs args) + { + Texture2D texture = args.Content.Load(@$"Sprites\Enemy01_Green_Frame_1_png_processed"); + SpriteEffects spriteEffects = SpriteEffects.None; + + args.SpriteBatch.Draw(texture, Position, null, DrawColor, 0, new Vector2(0, 0), 1, spriteEffects, 1); + + base.Draw(args); + } + + public override void Update(SpriteUpdateContext context) + { + //YPosition += 1; + + if (Health <= 0) + { + IsDead = true; + context.SpawnSprite(new Explosion((int)XPosition, (int)YPosition, XVelocity, YVelocity)); + + switch (context.Random.Next(0, 4)) + { + case 0: + context.SpawnSprite(new Health((int)XPosition, (int)YPosition)); + break; + case 1: + context.SpawnSprite(new Shields((int)XPosition, (int)YPosition)); + break; + case 2: + context.SpawnSprite(new Ammo((int)XPosition, (int)YPosition)); + break; + case 3: + context.SpawnSprite(new Energy((int)XPosition, (int)YPosition)); + break; + case 4: + context.SpawnSprite(new Rockets((int)XPosition, (int)YPosition)); + break; + } + + return; + } + + if (YPosition > context.ViewTransform.ScreenHeight) + { + IsDead = true; + return; + } + + if (CurrentFireThreshold > 0) + { + CurrentFireThreshold--; + } + + if (CurrentFireThreshold == 0 && context.Random.Next(0, 100) == 1) + { + float originX = XPosition + (BoundBox.Width / 2) - (7 / 2); + + context.SpawnSprite(new MinigunBulletSmall(originX - 9, YPosition + BoundBox.Height - 12, 0, 2 + YVelocity, this)); + context.SpawnSprite(new MinigunBulletSmall(originX + 14, YPosition + BoundBox.Height - 12, 0, 2 + YVelocity, this)); + + CurrentFireThreshold = FireThreshold; + } + + //CheckMove(context); + CheckFire(context); + + base.Update(context); + } + + private void CheckFire(SpriteUpdateContext context) + { + //foreach (IWeapon weapon in ActiveWeapons) + //{ + // weapon.UpdateFireThreshold(); + //} + + //foreach (IWeapon weapon in ActiveWeapons) + //{ + // weapon.TryFire(this, context); + //} + } + + public override void OnCollision(SpriteCollisionContext context) + { + if (context.Sprite is Bullet bullet && bullet.Owner is Player) + { + Health -= bullet.Damage; + } + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/Enemies/RedEnemy.cs b/AlientAttack.MonoGame/Things/Enemies/RedEnemy.cs new file mode 100644 index 0000000..f0adefd --- /dev/null +++ b/AlientAttack.MonoGame/Things/Enemies/RedEnemy.cs @@ -0,0 +1,76 @@ +using AlienAttack.MonoGame.Things.Bullets; +using AlienAttack.MonoGame.Things.Weapons; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; + +namespace AlienAttack.MonoGame.Things.Enemies; + +internal class RedEnemy : MoveableSprite +{ + //Enemy01_Green_Frame_1_png_processed + + protected int Health { get; set; } = 10; + + public RedEnemy(int x, int y) : base(x, y) + { + BoundBox = new Rectangle(0, 0, 64, 64); + YVelocity = 2; + //ActiveWeapons.Add(new Minigun()); + //ActiveWeapons.Add(new FastMinigun()); + } + + public override void Draw(SpriteDrawArgs args) + { + Texture2D texture = args.Content.Load(@$"Sprites\Enemy01_Red_Frame_1_png_processed"); + SpriteEffects spriteEffects = SpriteEffects.None; + + args.SpriteBatch.Draw(texture, Position, null, DrawColor, 0, new Vector2(0, 0), 1, spriteEffects, 1); + + base.Draw(args); + } + + public override void Update(SpriteUpdateContext context) + { + //YPosition += 2; + + if (Health <= 0) + { + IsDead = true; + context.SpawnSprite(new Explosion((int)XPosition, (int)YPosition, XVelocity, YVelocity)); + return; + } + + if (YPosition > context.ViewTransform.ScreenHeight) + { + IsDead = true; + return; + } + + //CheckMove(context); + CheckFire(context); + + base.Update(context); + } + + private void CheckFire(SpriteUpdateContext context) + { + //foreach (IWeapon weapon in ActiveWeapons) + //{ + // weapon.UpdateFireThreshold(); + //} + + //foreach (IWeapon weapon in ActiveWeapons) + //{ + // weapon.TryFire(this, context); + //} + } + + public override void OnCollision(SpriteCollisionContext context) + { + if (context.Sprite is Bullet bullet && bullet.Owner is Player) + { + Health -= bullet.Damage; + } + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/Explosion.cs b/AlientAttack.MonoGame/Things/Explosion.cs new file mode 100644 index 0000000..620f906 --- /dev/null +++ b/AlientAttack.MonoGame/Things/Explosion.cs @@ -0,0 +1,44 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; + +namespace AlienAttack.MonoGame.Things; + +internal class Explosion(int x, int y, float xVel, float yVel) : Sprite(x, y) +{ + protected int CurrentFrame { get; private set; } = 1; + protected int MaxFrames => 9; + protected int AnimationThreshold => 3; //5; + protected int CurrentThreshold { get; private set; } = 5; + + public override void Draw(SpriteDrawArgs args) + { + Texture2D texture = args.Content.Load(@$"Sprites\Explosion01_Frame_0{CurrentFrame}_png_processed"); + args.SpriteBatch.Draw(texture, Position, null, DrawColor, 0, new Vector2(0, 0), 1f, SpriteEffects.None, 1); + + base.Draw(args); + } + + public override void Update(SpriteUpdateContext context) + { + base.Update(context); + + XPosition += xVel; + YPosition += yVel; + + if (CurrentThreshold > 0) + { + CurrentThreshold--; + } + else + { + if (CurrentFrame == MaxFrames) + { + IsDead = true; + return; + } + + CurrentFrame++; + CurrentThreshold = AnimationThreshold; + } + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/Items/Ammo.cs b/AlientAttack.MonoGame/Things/Items/Ammo.cs new file mode 100644 index 0000000..5e6cab9 --- /dev/null +++ b/AlientAttack.MonoGame/Things/Items/Ammo.cs @@ -0,0 +1,14 @@ +namespace AlienAttack.MonoGame.Things.Items; + +internal class Ammo : Item +{ + public Ammo(int x, int y) : base(x, y) + { + TextureName = @$"Sprites\Powerup_Ammo"; + } + + protected override void ApplyEffect(Player player) + { + + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/Items/Energy.cs b/AlientAttack.MonoGame/Things/Items/Energy.cs new file mode 100644 index 0000000..9a922e8 --- /dev/null +++ b/AlientAttack.MonoGame/Things/Items/Energy.cs @@ -0,0 +1,14 @@ +namespace AlienAttack.MonoGame.Things.Items; + +internal class Energy : Item +{ + public Energy(int x, int y) : base(x, y) + { + TextureName = @$"Sprites\Powerup_Energy"; + } + + protected override void ApplyEffect(Player player) + { + + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/Items/Health.cs b/AlientAttack.MonoGame/Things/Items/Health.cs new file mode 100644 index 0000000..8d42d23 --- /dev/null +++ b/AlientAttack.MonoGame/Things/Items/Health.cs @@ -0,0 +1,14 @@ +namespace AlienAttack.MonoGame.Things.Items; + +internal class Health : Item +{ + public Health(int x, int y) : base(x, y) + { + TextureName = @$"Sprites\Powerup_Health"; + } + + protected override void ApplyEffect(Player player) + { + + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/Items/Item.cs b/AlientAttack.MonoGame/Things/Items/Item.cs new file mode 100644 index 0000000..51a377f --- /dev/null +++ b/AlientAttack.MonoGame/Things/Items/Item.cs @@ -0,0 +1,68 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System; + +namespace AlienAttack.MonoGame.Things.Items; + +internal abstract class Item : MoveableSprite +{ + private Vector2 _anchor; // the "center" the item orbits around + private float _t; // radians + private float _radius = 6f; // pixels (small circle) + private float _omega = 2.2f; // radians/sec (speed of orbit) + private float _scale = 1f; + + protected string? TextureName; + + public Item(int x, int y) : base(x, y) + { + YVelocity = .5f; + BoundBox = new Rectangle(0, 0, 48, 29); + + _anchor = new Vector2(x, y); + } + + public override void Draw(SpriteDrawArgs args) + { + if (TextureName is null) + return; + + Texture2D texture = args.Content.Load(TextureName); + + args.SpriteBatch.Draw(texture, Position, null, DrawColor, 0, new Vector2(0, 0), _scale, SpriteEffects.None, 1); + } + + public override void Update(SpriteUpdateContext context) + { + // Move the anchor using your normal velocities (downward drift) + _anchor.Y += YVelocity; + _anchor.X += XVelocity; + + // Advance time smoothly (use dt; if you don't have it yet, see note below) + float dt = (float)context.GameTime.ElapsedGameTime.TotalSeconds; + _t += _omega * dt; + + // Apply circular offset around the anchor + XPosition = _anchor.X + MathF.Cos(_t) * _radius; + YPosition = _anchor.Y + MathF.Sin(_t) * _radius; + + if (YPosition > context.ViewTransform.ScreenHeight) + { + IsDead = true; + return; + } + + base.Update(context); + } + + public override void OnCollision(SpriteCollisionContext context) + { + if (context.Sprite is Player player) + { + IsDead = true; + ApplyEffect(player); + } + } + + protected abstract void ApplyEffect(Player player); +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/Items/Rockets.cs b/AlientAttack.MonoGame/Things/Items/Rockets.cs new file mode 100644 index 0000000..194d558 --- /dev/null +++ b/AlientAttack.MonoGame/Things/Items/Rockets.cs @@ -0,0 +1,14 @@ +namespace AlienAttack.MonoGame.Things.Items; + +internal class Rockets : Item +{ + public Rockets(int x, int y) : base(x, y) + { + TextureName = @$"Sprites\Powerup_Rockets"; + } + + protected override void ApplyEffect(Player player) + { + + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/Items/Shields.cs b/AlientAttack.MonoGame/Things/Items/Shields.cs new file mode 100644 index 0000000..6a6d5c2 --- /dev/null +++ b/AlientAttack.MonoGame/Things/Items/Shields.cs @@ -0,0 +1,14 @@ +namespace AlienAttack.MonoGame.Things.Items; + +internal class Shields : Item +{ + public Shields(int x, int y) : base(x, y) + { + TextureName = @$"Sprites\Powerup_Shields"; + } + + protected override void ApplyEffect(Player player) + { + + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/MiniExplosion.cs b/AlientAttack.MonoGame/Things/MiniExplosion.cs new file mode 100644 index 0000000..3e94f01 --- /dev/null +++ b/AlientAttack.MonoGame/Things/MiniExplosion.cs @@ -0,0 +1,44 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; + +namespace AlienAttack.MonoGame.Things; + +internal class MiniExplosion(int x, int y, float xVel, float yVel) : Sprite(x, y) +{ + protected int CurrentFrame { get; private set; } = 1; + protected int MaxFrames => 9; + protected int AnimationThreshold => 3; //5; + protected int CurrentThreshold { get; private set; } = 5; + + public override void Draw(SpriteDrawArgs args) + { + Texture2D texture = args.Content.Load(@$"Sprites\Explosion01_Frame_0{CurrentFrame}_png_processed"); + args.SpriteBatch.Draw(texture, Position, null, DrawColor, 0, new Vector2(0, 0), .25f, SpriteEffects.None, 1); + + base.Draw(args); + } + + public override void Update(SpriteUpdateContext context) + { + base.Update(context); + + XPosition += xVel; + YPosition += yVel; + + if (CurrentThreshold > 0) + { + CurrentThreshold--; + } + else + { + if (CurrentFrame == MaxFrames) + { + IsDead = true; + return; + } + + CurrentFrame++; + CurrentThreshold = AnimationThreshold; + } + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/MoveableSprite.cs b/AlientAttack.MonoGame/Things/MoveableSprite.cs new file mode 100644 index 0000000..514e18c --- /dev/null +++ b/AlientAttack.MonoGame/Things/MoveableSprite.cs @@ -0,0 +1,15 @@ +namespace AlienAttack.MonoGame.Things; + +public class MoveableSprite(int x, int y) : Sprite(x, y) +{ + public float XVelocity { get; protected set; } = 0; + public float YVelocity { get; protected set; } = 0; + + public override void Update(SpriteUpdateContext context) + { + XPosition += XVelocity; + YPosition += YVelocity; + + base.Update(context); + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/Player.cs b/AlientAttack.MonoGame/Things/Player.cs new file mode 100644 index 0000000..c8a4c96 --- /dev/null +++ b/AlientAttack.MonoGame/Things/Player.cs @@ -0,0 +1,272 @@ +using AlienAttack.MonoGame.Things.Weapons; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using System; +using System.Collections.Generic; + +namespace AlienAttack.MonoGame.Things; + +internal enum PlayerHorizontalMoveState +{ + None, + Left, + Right +} + +[Flags] +internal enum MoveFlag +{ + None = 0, + Left = 1, + Right = 2, + Up = 4, + Down = 8 +} + +public class DrwaState +{ + +} + +internal class Player : MoveableSprite +{ + protected PlayerHorizontalMoveState MoveState = PlayerHorizontalMoveState.None; + protected MoveFlag MoveFlags; + protected ulong MoveThreshold = 0; + //protected ulong FireThreshold = 0; + protected ICollection ActiveWeapons = []; + + protected int CurrentExhaustFrame = 1; + protected int MaxExhaustFrames = 6; + protected int ExhaustAnimationThreshold = 30; + protected int CurrentExhaustAnimationThreshold = 10; + protected int CurrentExhaustDirection = 1; + + public Player(int x, int y) : base(x, y) + { + BoundBox = new Rectangle(0, 0, 64, 64); + ActiveWeapons.Add(new Minigun()); + ActiveWeapons.Add(new FastMinigun()); + } + + //Texture2D texture = Game + public override void Draw(SpriteDrawArgs args) + { + //DrawExhaust(args); + + string frameNumber = MoveState == PlayerHorizontalMoveState.None ? "01" : + MoveThreshold < 30 ? "02" : "03"; + SpriteEffects spriteEffects = MoveState == PlayerHorizontalMoveState.Right ? SpriteEffects.FlipHorizontally : SpriteEffects.None; + + Texture2D texture = args.Content.Load(@$"Sprites\PlayerRed_Frame_{frameNumber}"); + //args.SpriteBatch.Draw(texture, Position, DrawColor); + args.SpriteBatch.Draw(texture, Position, null, DrawColor, 0, new Vector2(0, 0), 1, spriteEffects, 1); + } + + private void DrawExhaust(SpriteDrawArgs args) + { + Texture2D texture = args.Content.Load(@$"Sprites\Exhaust_Frame_0{CurrentExhaustFrame}_png_processed"); + args.SpriteBatch.Draw(texture, Position, null, DrawColor, 0, new Vector2(0, 0), 1, SpriteEffects.None, 1); + } + + private string GetPlayerTextureName() + { + switch (MoveState) + { + case PlayerHorizontalMoveState.Left: + return "PlayerRed_Frame_02"; + case PlayerHorizontalMoveState.Right: + return "PlayerRed_Frame_03"; + case PlayerHorizontalMoveState.None: + default: + return "PlayerRed_Frame_01"; + } + } + + public override void Update(SpriteUpdateContext context) + { + //UpdateExhaustAnimationThreshold(); + CheckMove(context); + CheckFire(context); + + base.Update(context); + } + + private void UpdateExhaustAnimationThreshold() + { + if (CurrentExhaustAnimationThreshold > 0) + { + CurrentExhaustAnimationThreshold--; + } + else + { + if (CurrentExhaustFrame == MaxExhaustFrames) + { + CurrentExhaustDirection = -1; + } + else if (CurrentExhaustFrame == 1) + { + CurrentExhaustDirection = 1; + } + + CurrentExhaustFrame += CurrentExhaustDirection; + + CurrentExhaustAnimationThreshold = ExhaustAnimationThreshold; + } + } + + private void CheckMove(SpriteUpdateContext context) + { + UpdateMoveFlag(); + + if (MoveFlags.HasFlag(MoveFlag.Up)) + { + //YPosition -= 4; + YVelocity = -4; + } + else if (MoveFlags.HasFlag(MoveFlag.Down)) + { + //YPosition += 4; + YVelocity = 4; + } + else + { + YVelocity = 0; + } + + if (MoveFlags.HasFlag(MoveFlag.Left)) + { + //XPosition -= 4; + XVelocity = -4; + + if (MoveState != PlayerHorizontalMoveState.Left) + { + MoveThreshold = 0; + } + else + { + MoveThreshold++; + + if (MoveThreshold > 30) + { + MoveThreshold = 30; + } + } + + MoveState = PlayerHorizontalMoveState.Left; + } + else if (MoveFlags.HasFlag(MoveFlag.Right)) + { + //XPosition += 4; + XVelocity = 4; + + if (MoveState != PlayerHorizontalMoveState.Right) + { + MoveThreshold = 0; + } + else + { + MoveThreshold++; + + if (MoveThreshold > 30) + { + MoveThreshold = 30; + } + } + + MoveState = PlayerHorizontalMoveState.Right; + } + else + { + XVelocity = 0; + MoveState = PlayerHorizontalMoveState.None; + MoveThreshold = 0; + } + + if (XPosition < 0) + { + XPosition = 0; + } + + if (XPosition + BoundBox.Width > context.ViewTransform.ScreenWidth) + { + XPosition = context.ViewTransform.ScreenWidth - BoundBox.Width; + } + + if (YPosition < 0) + { + YPosition = 0; + } + + if (YPosition + BoundBox.Height > context.ViewTransform.ScreenHeight) + { + YPosition = context.ViewTransform.ScreenHeight - BoundBox.Height; + } + } + + private void UpdateMoveFlag() + { + MoveFlags = MoveFlag.None; + + KeyboardState keyState = Keyboard.GetState(); + GamePadState gamepadState = GamePad.GetState(0); + + if (keyState.IsKeyDown(Keys.Up) || keyState.IsKeyDown(Keys.W) || gamepadState.ThumbSticks.Left.Y > 0) + { + MoveFlags |= MoveFlag.Up; + } + else if (keyState.IsKeyDown(Keys.Down) || keyState.IsKeyDown(Keys.S) || gamepadState.ThumbSticks.Left.Y < 0) + { + MoveFlags |= MoveFlag.Down; + } + + if (keyState.IsKeyDown(Keys.Left) || keyState.IsKeyDown(Keys.A) || gamepadState.ThumbSticks.Left.X < 0) + { + MoveFlags |= MoveFlag.Left; + } + else if (keyState.IsKeyDown(Keys.Right) || keyState.IsKeyDown(Keys.D) || gamepadState.ThumbSticks.Left.X > 0) + { + MoveFlags |= MoveFlag.Right; + } + } + + private void CheckFire(SpriteUpdateContext context) + { + //if (FireThreshold > 0) + //{ + // FireThreshold--; + // return; + //} + + foreach (IWeapon weapon in ActiveWeapons) + { + weapon.UpdateFireThreshold(); + } + + if (IsFireButtonPressed() == false) + return; + + foreach (IWeapon weapon in ActiveWeapons) + { + weapon.TryFire(this, context); + } + + //MinigunBulletSmall bullet1 = new((int)Position.X + 12, (int)Position.Y + 6, 0, -4, this); + //MinigunBulletSmall bullet2 = new((int)Position.X + BoundBox.Width - 20, (int)Position.Y + 6, 0, -4, this); + + //context.SpawnSprite(bullet1); + //context.SpawnSprite(bullet2); + + //FireThreshold = 15; + } + + private static bool IsFireButtonPressed() + { + KeyboardState keyState = Keyboard.GetState(); + MouseState mouseState = Mouse.GetState(); + GamePadState gamePadState = GamePad.GetState(0); + + return keyState.IsKeyDown(Keys.Space) || mouseState.LeftButton == ButtonState.Pressed || gamePadState.Buttons.A == ButtonState.Pressed; + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/Sprite.cs b/AlientAttack.MonoGame/Things/Sprite.cs new file mode 100644 index 0000000..2acc9fd --- /dev/null +++ b/AlientAttack.MonoGame/Things/Sprite.cs @@ -0,0 +1,38 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; + +namespace AlienAttack.MonoGame.Things; + +public class Sprite(float x, float y) +{ + public float XPosition { get; protected set; } = x; + public float YPosition { get; protected set; } = y; + public Vector2 Position => new(XPosition, YPosition); + public Rectangle BoundBox { get; protected set; } + + protected Rectangle CollisionBox; + protected Color DrawColor = Color.White; + + public bool CanCollide { get; protected set; } = true; + public bool IsDead { get; protected set; } + + public virtual void Update(SpriteUpdateContext context) + { + CollisionBox = new Rectangle((int)XPosition + BoundBox.X, (int)YPosition + BoundBox.Y, BoundBox.Width, BoundBox.Height); + } + + public bool Intersects(Sprite sprite) + { + return CollisionBox.Intersects(sprite.CollisionBox); + } + + public virtual void Draw(SpriteDrawArgs args) + { + //spriteBatch.Draw(Texture, Position, DrawColor); + } + + public virtual void OnCollision(SpriteCollisionContext context) + { + + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/SpriteDrawArgs.cs b/AlientAttack.MonoGame/Things/SpriteDrawArgs.cs new file mode 100644 index 0000000..4afb710 --- /dev/null +++ b/AlientAttack.MonoGame/Things/SpriteDrawArgs.cs @@ -0,0 +1,11 @@ +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using System; + +namespace AlienAttack.MonoGame.Things; + +public class SpriteDrawArgs(AlienAttackGame game) +{ + public SpriteBatch SpriteBatch => game.SpriteBatch; + public ContentManager Content => game.Content; +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/SpriteUpdateContext.cs b/AlientAttack.MonoGame/Things/SpriteUpdateContext.cs new file mode 100644 index 0000000..a204670 --- /dev/null +++ b/AlientAttack.MonoGame/Things/SpriteUpdateContext.cs @@ -0,0 +1,20 @@ +using AlienAttack.MonoGame.View; +using Microsoft.Xna.Framework; +using System; + +namespace AlienAttack.MonoGame.Things; + +public class SpriteUpdateContext(AlienAttackGame game) +{ + public ViewTransform ViewTransform => game.ViewTransform; + public required Action SpawnSprite { get; init; } + public required Random Random { get; init; } + public required GameTime GameTime { get; init; } +} + +public class SpriteCollisionContext(AlienAttackGame game) +{ + public ViewTransform ViewTransform => game.ViewTransform; + public required Sprite Sprite { get; init; } + public required Action SpawnSprite { get; init; } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/Stars/Starfield.cs b/AlientAttack.MonoGame/Things/Stars/Starfield.cs new file mode 100644 index 0000000..bd4ac61 --- /dev/null +++ b/AlientAttack.MonoGame/Things/Stars/Starfield.cs @@ -0,0 +1,190 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AlienAttack.MonoGame.Things.Stars +{ + using Microsoft.Xna.Framework; + using Microsoft.Xna.Framework.Graphics; + using System; + using System.Collections.Generic; + + public sealed class Starfield + { + private readonly List _layers = new(); + private readonly Random _rng; + + public Starfield(int seed = 12345) => _rng = new Random(seed); + + public void AddLayer(int count, Vector2 velocityPxPerSec, float minSize, float maxSize, float minAlpha, float maxAlpha) + { + _layers.Add(new StarLayer(_rng, count, velocityPxPerSec, minSize, maxSize, minAlpha, maxAlpha)); + } + + public void Initialize(int screenWidth, int screenHeight) + { + foreach (var layer in _layers) + layer.Initialize(screenWidth, screenHeight); + } + + public void OnResize(int screenWidth, int screenHeight) + { + foreach (var layer in _layers) + layer.OnResize(screenWidth, screenHeight); + } + + public void Update(GameTime gameTime) + { + float dt = (float)gameTime.ElapsedGameTime.TotalSeconds; + foreach (var layer in _layers) + layer.Update(dt); + } + + public void Draw(SpriteBatch spriteBatch, Texture2D pixel) + { + foreach (var layer in _layers) + layer.Draw(spriteBatch, pixel); + } + + private sealed class StarLayer + { + private readonly Random _rng; + private readonly int _count; + //private readonly float _speed; + private readonly Vector2 _velocity; // pixels/sec + private readonly float _minSize, _maxSize; + private readonly float _minAlpha, _maxAlpha; + + private int _w, _h; + private readonly Star[] _stars; + + public StarLayer(Random rng, int count, Vector2 velocityPxPerSec, float minSize, float maxSize, float minAlpha, float maxAlpha) + { + _rng = rng; + _count = count; + //_speed = speedPxPerSec; + _velocity = velocityPxPerSec; + _minSize = minSize; + _maxSize = maxSize; + _minAlpha = minAlpha; + _maxAlpha = maxAlpha; + + _stars = new Star[_count]; + } + + public void Initialize(int screenWidth, int screenHeight) + { + _w = screenWidth; + _h = screenHeight; + + for (int i = 0; i < _stars.Length; i++) + _stars[i] = CreateStar(randomY: true); + } + + public void OnResize(int screenWidth, int screenHeight) + { + // Keep existing stars but clamp/wrap them into the new bounds. + _w = screenWidth; + _h = screenHeight; + + for (int i = 0; i < _stars.Length; i++) + { + var s = _stars[i]; + s.Pos.X = Wrap(s.Pos.X, _w); + s.Pos.Y = Wrap(s.Pos.Y, _h); + _stars[i] = s; + } + } + + public void Update(float dt) + { + for (int i = 0; i < _stars.Length; i++) + { + var s = _stars[i]; + + // Move down (positive Y). Add slight horizontal drift if you want: + // s.Pos.X += s.DriftX * dt; + + //s.Pos.Y += _speed * dt; + s.Pos += _velocity * dt; + + // Wrap X continuously so diagonal drift never runs out of stars + if (s.Pos.X < -s.Size) s.Pos.X = _w + s.Size; + if (s.Pos.X > _w + s.Size) s.Pos.X = -s.Size; + + if (s.Pos.Y >= _h + s.Size) + { + // Respawn at top; keep it entering from above + s = CreateStar(randomY: false); + s.Pos.Y = -s.Size; + } + + // Optional subtle twinkle: + s.TwinkleT += dt * s.TwinkleSpeed; + + _stars[i] = s; + } + } + + public void Draw(SpriteBatch sb, Texture2D pixel) + { + for (int i = 0; i < _stars.Length; i++) + { + var s = _stars[i]; + + float twinkle = 1f; + if (s.TwinkleSpeed > 0f) + twinkle = 0.85f + 0.15f * (float)Math.Sin(s.TwinkleT); + + var color = Color.White * (s.Alpha * twinkle); + + // Draw as a scaled 1x1 pixel (super fast) + sb.Draw(pixel, s.Pos, null, color, 0f, Vector2.Zero, s.Size, SpriteEffects.None, 0f); + } + } + + private Star CreateStar(bool randomY) + { + float x = (float)_rng.NextDouble() * _w; + float y = randomY ? (float)_rng.NextDouble() * _h : 0f; + + float size = Lerp(_minSize, _maxSize, (float)_rng.NextDouble()); + float alpha = Lerp(_minAlpha, _maxAlpha, (float)_rng.NextDouble()); + + // Twinkle: keep it more common on “near” layers by setting a nonzero speed range + float twinkleSpeed = Lerp(0f, 6f, (float)_rng.NextDouble()) * 0.4f; // tweak or set 0 for none + + return new Star + { + Pos = new Vector2(x, y), + Size = size, + Alpha = alpha, + TwinkleSpeed = twinkleSpeed, + TwinkleT = (float)_rng.NextDouble() * MathF.PI * 2f + }; + } + + private static float Wrap(float v, float max) + { + if (max <= 0) return 0; + v %= max; + if (v < 0) v += max; + return v; + } + + private static float Lerp(float a, float b, float t) => a + (b - a) * t; + + private struct Star + { + public Vector2 Pos; + public float Size; + public float Alpha; + + public float TwinkleSpeed; + public float TwinkleT; + } + } + } +} diff --git a/AlientAttack.MonoGame/Things/Weapons/IWeapon.cs b/AlientAttack.MonoGame/Things/Weapons/IWeapon.cs new file mode 100644 index 0000000..d2f1e7d --- /dev/null +++ b/AlientAttack.MonoGame/Things/Weapons/IWeapon.cs @@ -0,0 +1,8 @@ +namespace AlienAttack.MonoGame.Things.Weapons; + +public interface IWeapon +{ + int FireThreshold { get; } + void UpdateFireThreshold(); + bool TryFire(Sprite owner, SpriteUpdateContext context); +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/Weapons/Minigun.cs b/AlientAttack.MonoGame/Things/Weapons/Minigun.cs new file mode 100644 index 0000000..e4aeec9 --- /dev/null +++ b/AlientAttack.MonoGame/Things/Weapons/Minigun.cs @@ -0,0 +1,43 @@ +using AlienAttack.MonoGame.Things.Bullets; +using Microsoft.Xna.Framework; + +namespace AlienAttack.MonoGame.Things.Weapons; + +public class Minigun : Weapon +{ + public override int FireThreshold => 15; + + public override void Fire(Sprite owner, SpriteUpdateContext context) + { + // Calculate bullet spawn positions relative to the player's bounding box + int x1 = (int)owner.XPosition + 12; + int x2 = (int)owner.XPosition + owner.BoundBox.Width - 20; + int y = (int)owner.YPosition + 6; + + // Create bullets with velocity (0, -4) + MinigunBulletSmall bullet1 = new(x1, y, 0, -6, owner); + MinigunBulletSmall bullet2 = new(x2, y, 0, -6, owner); + + // Queue the bullets for spawning + context.SpawnSprite(bullet1); + context.SpawnSprite(bullet2); + } +} + +public class FastMinigun : Weapon +{ + public override int FireThreshold => 10; + + public override void Fire(Sprite owner, SpriteUpdateContext context) + { + // Calculate bullet spawn positions relative to the player's bounding box + float x = (owner.Position.X - (7/2) + owner.BoundBox.Width / 2); + float y = owner.YPosition - 16; + + // Create bullets with velocity (0, -4) + MinigunBulletSmall bullet = new(x, y, 0, -6, owner); + + // Queue the bullets for spawning + context.SpawnSprite(bullet); + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/Things/Weapons/Weapon.cs b/AlientAttack.MonoGame/Things/Weapons/Weapon.cs new file mode 100644 index 0000000..6ed6a53 --- /dev/null +++ b/AlientAttack.MonoGame/Things/Weapons/Weapon.cs @@ -0,0 +1,26 @@ +namespace AlienAttack.MonoGame.Things.Weapons; + +public abstract class Weapon : IWeapon +{ + public abstract int FireThreshold { get; } + public int CurrentFireThreshold { get; private set; } + + public void UpdateFireThreshold() + { + if (CurrentFireThreshold > 0) + CurrentFireThreshold--; + } + + public bool TryFire(Sprite owner, SpriteUpdateContext context) + { + if (CurrentFireThreshold > 0) + return false; + + Fire(owner, context); + CurrentFireThreshold = FireThreshold; + + return true; + } + + public abstract void Fire(Sprite owner, SpriteUpdateContext context); +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/View/ViewTransform.cs b/AlientAttack.MonoGame/View/ViewTransform.cs new file mode 100644 index 0000000..17acba2 --- /dev/null +++ b/AlientAttack.MonoGame/View/ViewTransform.cs @@ -0,0 +1,70 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; + +namespace AlienAttack.MonoGame.View; + +public class ViewTransform(Game game, GraphicsDeviceManager graphics) +{ + public readonly GameWindow Window = game.Window; + public readonly ContentManager Content = game.Content; + public readonly GraphicsDeviceManager Graphics = graphics; + public readonly GraphicsDevice GraphicsDevice = game.GraphicsDevice; + public readonly SpriteBatch SpriteBatch; + + public float ScaleX => (float)WindowWidth / Graphics.PreferredBackBufferWidth; + public float ScaleY => (float)WindowHeight / Graphics.PreferredBackBufferHeight; + public float ScaleMin => MathHelper.Min(ScaleX, ScaleY); + + public float OffsetX => KeepAspectRatio ? MathHelper.Max(ScaleX - ScaleY, 0) * ScreenWidth : 0; + public float OffsetY => KeepAspectRatio ? MathHelper.Max(ScaleY - ScaleX, 0) * ScreenHeight : 0; + + public bool KeepAspectRatio = true; + + public int ScreenWidth + { + get + { + return Graphics.PreferredBackBufferWidth; + } + } + + public int ScreenHeight + { + get + { + return Graphics.PreferredBackBufferHeight; + } + } + + public int WindowWidth + { + get + { + return Window.ClientBounds.Width; + } + } + + public int WindowHeight + { + get + { + return Window.ClientBounds.Height; + } + } + + public Matrix ViewMatrix + { + get + { + if (KeepAspectRatio) + { + return Matrix.CreateScale(ScaleMin, ScaleMin, 1.0f) * Matrix.CreateTranslation(OffsetX / 2, OffsetY / 2, 0); + } + else + { + return Matrix.CreateScale(ScaleX, ScaleY, 1.0f); + } + } + } +} \ No newline at end of file diff --git a/AlientAttack.MonoGame/app.manifest b/AlientAttack.MonoGame/app.manifest new file mode 100644 index 0000000..03837ea --- /dev/null +++ b/AlientAttack.MonoGame/app.manifest @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true/pm + permonitorv2,permonitor + + + +