From fe55bb15fc9ffd8b3db24da613584f55a49aa3c8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tero=20M=C3=A4rij=C3=A4rvi?= <tero.s.marijarvi@utu.fi>
Date: Thu, 5 May 2022 11:32:16 +0300
Subject: [PATCH] Add project files.

---
 shmupgame2022.sln                             |  31 +++
 shmupgame2022/Content/Content.mgcb            |  81 +++++++
 shmupgame2022/Content/Explosion.wav           | Bin 0 -> 41954 bytes
 shmupgame2022/Content/Laser_Shoot_player.wav  | Bin 0 -> 20814 bytes
 shmupgame2022/Content/gameover.png            | Bin 0 -> 718 bytes
 shmupgame2022/Content/laser_shoot_enemy.wav   | Bin 0 -> 20814 bytes
 .../Content/sovproj2022_bullet_ph_sprite.png  | Bin 0 -> 164 bytes
 .../Content/sovproj2022_enemy1_ph_sprite.png  | Bin 0 -> 274 bytes
 .../Content/sovproj2022_player_ph_sprite.png  | Bin 0 -> 392 bytes
 shmupgame2022/EnemyBullet.cs                  |  52 ++++
 shmupgame2022/EnemyShip.cs                    |  56 +++++
 shmupgame2022/EnemyWave.cs                    |  14 ++
 shmupgame2022/EnemyWaveManager.cs             |  63 +++++
 shmupgame2022/EntityManager.cs                | 159 ++++++++++++
 shmupgame2022/GameOverUI.cs                   |  41 ++++
 shmupgame2022/IGameEntity.cs                  |  22 ++
 shmupgame2022/Icon.bmp                        | Bin 0 -> 262282 bytes
 shmupgame2022/Icon.ico                        | Bin 0 -> 147541 bytes
 shmupgame2022/InputController.cs              |  75 ++++++
 shmupgame2022/PlayerBullet.cs                 |  51 ++++
 shmupgame2022/PlayerShip.cs                   |  89 +++++++
 shmupgame2022/Program.cs                      |  14 ++
 shmupgame2022/SHMUPgame.cs                    | 101 ++++++++
 shmupgame2022/Sovproj 2022.ncp                | 229 ++++++++++++++++++
 shmupgame2022/TextureManager.cs               |  27 +++
 shmupgame2022/app.manifest                    |  43 ++++
 shmupgame2022/shmupgame2022.csproj            |  30 +++
 shmupgame2022Test/UnitTest1.cs                |  13 +
 shmupgame2022Test/shmupgame2022Test.csproj    |  16 ++
 shmupgame2022Tests/PlayerShipTests.cs         |  50 ++++
 shmupgame2022Tests/shmupgame2022Tests.csproj  |  20 ++
 31 files changed, 1277 insertions(+)
 create mode 100644 shmupgame2022.sln
 create mode 100644 shmupgame2022/Content/Content.mgcb
 create mode 100644 shmupgame2022/Content/Explosion.wav
 create mode 100644 shmupgame2022/Content/Laser_Shoot_player.wav
 create mode 100644 shmupgame2022/Content/gameover.png
 create mode 100644 shmupgame2022/Content/laser_shoot_enemy.wav
 create mode 100644 shmupgame2022/Content/sovproj2022_bullet_ph_sprite.png
 create mode 100644 shmupgame2022/Content/sovproj2022_enemy1_ph_sprite.png
 create mode 100644 shmupgame2022/Content/sovproj2022_player_ph_sprite.png
 create mode 100644 shmupgame2022/EnemyBullet.cs
 create mode 100644 shmupgame2022/EnemyShip.cs
 create mode 100644 shmupgame2022/EnemyWave.cs
 create mode 100644 shmupgame2022/EnemyWaveManager.cs
 create mode 100644 shmupgame2022/EntityManager.cs
 create mode 100644 shmupgame2022/GameOverUI.cs
 create mode 100644 shmupgame2022/IGameEntity.cs
 create mode 100644 shmupgame2022/Icon.bmp
 create mode 100644 shmupgame2022/Icon.ico
 create mode 100644 shmupgame2022/InputController.cs
 create mode 100644 shmupgame2022/PlayerBullet.cs
 create mode 100644 shmupgame2022/PlayerShip.cs
 create mode 100644 shmupgame2022/Program.cs
 create mode 100644 shmupgame2022/SHMUPgame.cs
 create mode 100644 shmupgame2022/Sovproj 2022.ncp
 create mode 100644 shmupgame2022/TextureManager.cs
 create mode 100644 shmupgame2022/app.manifest
 create mode 100644 shmupgame2022/shmupgame2022.csproj
 create mode 100644 shmupgame2022Test/UnitTest1.cs
 create mode 100644 shmupgame2022Test/shmupgame2022Test.csproj
 create mode 100644 shmupgame2022Tests/PlayerShipTests.cs
 create mode 100644 shmupgame2022Tests/shmupgame2022Tests.csproj

diff --git a/shmupgame2022.sln b/shmupgame2022.sln
new file mode 100644
index 0000000..e234d14
--- /dev/null
+++ b/shmupgame2022.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.32228.343
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "shmupgame2022", "shmupgame2022\shmupgame2022.csproj", "{AC9D58F9-A2DB-45EA-9B91-517E5B09857C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "shmupgame2022Tests", "shmupgame2022Tests\shmupgame2022Tests.csproj", "{749E8F48-CD46-4A07-AB23-B230B7AE27D5}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{AC9D58F9-A2DB-45EA-9B91-517E5B09857C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AC9D58F9-A2DB-45EA-9B91-517E5B09857C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AC9D58F9-A2DB-45EA-9B91-517E5B09857C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{AC9D58F9-A2DB-45EA-9B91-517E5B09857C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{749E8F48-CD46-4A07-AB23-B230B7AE27D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{749E8F48-CD46-4A07-AB23-B230B7AE27D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{749E8F48-CD46-4A07-AB23-B230B7AE27D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{749E8F48-CD46-4A07-AB23-B230B7AE27D5}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {168A0637-FC67-40DF-9729-0B8DA918FF7F}
+	EndGlobalSection
+EndGlobal
diff --git a/shmupgame2022/Content/Content.mgcb b/shmupgame2022/Content/Content.mgcb
new file mode 100644
index 0000000..7e825c5
--- /dev/null
+++ b/shmupgame2022/Content/Content.mgcb
@@ -0,0 +1,81 @@
+
+#----------------------------- Global Properties ----------------------------#
+
+/outputDir:bin/$(Platform)
+/intermediateDir:obj/$(Platform)
+/platform:DesktopGL
+/config:
+/profile:Reach
+/compress:False
+
+#-------------------------------- References --------------------------------#
+
+
+#---------------------------------- Content ---------------------------------#
+
+#begin Explosion.wav
+/importer:WavImporter
+/processor:SoundEffectProcessor
+/processorParam:Quality=Best
+/build:Explosion.wav
+
+#begin gameover.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:gameover.png
+
+#begin laser_shoot_enemy.wav
+/importer:WavImporter
+/processor:SoundEffectProcessor
+/processorParam:Quality=Best
+/build:laser_shoot_enemy.wav
+
+#begin Laser_Shoot_player.wav
+/importer:WavImporter
+/processor:SoundEffectProcessor
+/processorParam:Quality=Best
+/build:Laser_Shoot_player.wav
+
+#begin sovproj2022_bullet_ph_sprite.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:sovproj2022_bullet_ph_sprite.png
+
+#begin sovproj2022_enemy1_ph_sprite.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:sovproj2022_enemy1_ph_sprite.png
+
+#begin sovproj2022_player_ph_sprite.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:sovproj2022_player_ph_sprite.png
+
diff --git a/shmupgame2022/Content/Explosion.wav b/shmupgame2022/Content/Explosion.wav
new file mode 100644
index 0000000000000000000000000000000000000000..f99f61f1f4202024ad7c6085630c1e278fdbade4
GIT binary patch
literal 41954
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
bXb6mkz-S1JhQMeDjE2By2#kinz=r?;WyGcN

literal 0
HcmV?d00001

diff --git a/shmupgame2022/Content/Laser_Shoot_player.wav b/shmupgame2022/Content/Laser_Shoot_player.wav
new file mode 100644
index 0000000000000000000000000000000000000000..978a14905c22f123653756299f499ea368f91489
GIT binary patch
literal 20814
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
Bj1>R?

literal 0
HcmV?d00001

diff --git a/shmupgame2022/Content/gameover.png b/shmupgame2022/Content/gameover.png
new file mode 100644
index 0000000000000000000000000000000000000000..16f4a4e79947c3a2d03d657fcb80b7d867f5da3b
GIT binary patch
literal 718
zcmeAS@N?(olHy`uVBq!ia0y~yU|7V!z#zrJ#=yW}lHJbCz`(#+;1OBOz!2jG!i*wQ
zoE;e$7^F*FBT9nv(@M${i&7b!Q*(+dixq-PN>eiP6+-g!a}F+lSi``;6zS>W7*cWT
z?QGw&!wNhthkc7?=iHv0c6;8ky_|P{?lffUO>3!S+~%7rFu%_2!Ia{Ck;mUZ|Nij!
z_vgxYuNCx%&pwxR{tDAZmisp&0*VCA<s8@Q;Ar7?lRGf;Z6u4}*DF)wew5@iexCcb
ziechP=I{S^CmhLg%AQgazWX2ZL{VjKm$e2nSGL`82w8HSHL0hzsziI;yAB-z_TIL=
zuRer%UdWaYJ|`LV<c;gsP=#%;yt8NB|G&;XHmdsgzn$y?drQ0BWBd8m747TFxfpcY
zBYg3+E?vLiX8GLTcjxy{sk7UcqN!{(>Ds;4JPzydeDg#Wf$Z#!P7%L$FMq$s^@weU
z7;|OMtB(TO9@AE|x|m&!S^R2uxb%Vt3l4wU6DEI!$(Uu)_6@pM)jj?u+-<pJJi)Sh
z!9FP$?<L=xR&;Do6bux6H1o0UvCXy$n>6cK1Z<aE1TwDF?%<e{<K=Kauvmz{MY$=X
zP_I<mbK|xGfwf<ml~r^mPQED<X6xQ18sgy6biyJ+qk~KJ+077<u-8kOpFY$4-Ql6x
zVpZ3lQNduisDA}hdu7~`NjAbsdmUXaZ!5Pu+|c27V)YA&g$vjML-kkXnN{A_5>vb!
zy(C9rk$cUGLP6(>C<`8ixc6a9Pv<UA@?G`(ltai$$8Ar8tgAjro#mSHRCd*tBij~E
zxqf^PI}_K%WTrq#(HZ}gXB$NdD7SPk5?v<ZK2b@8Eim$ccF?3(MXXGVP6;k*_`<Ya
zLpn;be{1W@;6^#=MQe^q2rRy;xar;MJk{7j&u?F}_es8!UDv(maZk$619iDKq%J<@
Z|L%S9af+t;F$M+(22WQ%mvv4FO#qIlIywLV

literal 0
HcmV?d00001

diff --git a/shmupgame2022/Content/laser_shoot_enemy.wav b/shmupgame2022/Content/laser_shoot_enemy.wav
new file mode 100644
index 0000000000000000000000000000000000000000..ecb4b743ac8c1f3d9d83269d42d278c5b8b7d486
GIT binary patch
literal 20814
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

literal 0
HcmV?d00001

diff --git a/shmupgame2022/Content/sovproj2022_bullet_ph_sprite.png b/shmupgame2022/Content/sovproj2022_bullet_ph_sprite.png
new file mode 100644
index 0000000000000000000000000000000000000000..aa387eca45dd4ee806f063c5c6c69588add9659f
GIT binary patch
literal 164
zcmeAS@N?(olHy`uVBq!ia0y~yU|<1Z4mJh`hLs=Z)iE$Ia29w(7Beu!xPdUE$P{Ns
z1_lP{64!{5;QX|b^2DN42IthA;>u!$;F8jm%zTBA{QR7Q%OBP-FfizQx;Tb#Tu=V<
z|G)j==AT0UB_$*zM1<lEjPA`>{}*p()zR44*!b|_rBa?5OfRAsn&Kr@Ju=x-7#J8B
NJYD@<);T3K0RZufGN=Fm

literal 0
HcmV?d00001

diff --git a/shmupgame2022/Content/sovproj2022_enemy1_ph_sprite.png b/shmupgame2022/Content/sovproj2022_enemy1_ph_sprite.png
new file mode 100644
index 0000000000000000000000000000000000000000..c175c5b63afe95a8397fc37b1229e9d2037fe4be
GIT binary patch
literal 274
zcmeAS@N?(olHy`uVBq!ia0y~yV31;9VBp|jV_;x-9`Zhpfq{Xuz$3Dlfg#2Xgc(Jq
zI6E>hFi4lUMwA5Sr<If^7Ns&cr{)w_7Apjol%{0nD}?0d=Nw%Au!ezwVXmi(V~EE2
zsgpJe9yQ=_KI)ct^DxiEP8*iy9jVH7sqz~=_c`l+d7x5MKBuqa&XHAK%Xd#{Y)do|
z65PLzJB^J&W9fpe+cM|z%~(*OYs}10^*$g}NH9HZN>HAH@okgj{J*oZ)(Q*gpL1Yl
zNO)!B`=_EVB>OH)zMA@i7ltNJ-bJ4{W5c^I&7|!5rJU4`3py`M+kGaBHtoCeJAU)M
bXY7X>7QNm3RA4#-0|SGntDnm{r-UW|kc4Ly

literal 0
HcmV?d00001

diff --git a/shmupgame2022/Content/sovproj2022_player_ph_sprite.png b/shmupgame2022/Content/sovproj2022_player_ph_sprite.png
new file mode 100644
index 0000000000000000000000000000000000000000..d88319fd60b5aa083b2e7775452a08b8b06867ba
GIT binary patch
literal 392
zcmeAS@N?(olHy`uVBq!ia0y~yV31>AU=ZbCV_;wi{2rIcz`(#+;1OBOz!2jG!i*wQ
zoE;e$7^F*FBT9nv(@M${i&7b!Q*(+dixq-PN>eiP6+-g!a}F+lSi``;DD3It7~*mK
z?bMBahYbYU>=$><Y;9bbeZ8w<;Umil>G#z0C;Xi9++jn+itKQ;HocjGk7mTMUf0}q
zby{n^XWQr6@}0kB7q6OfD(d&+3E%Hcd1kQn!S1I*4b#8=vPsBZYxTV1b`HY~eX$M?
z!$0zKc;#N_JlGK7Xv!VN!e{1H8k4m;{$TR?V+SG@Hq23)^gt*gSJ3){VS=iwM5u4x
ztCb=$AIcvr%e-RQ-eFKTk4fT~hSKlTQ#bi|8Wz5pa&^*!AKVr1ea~4q<=oyTRX&4t
zo>c*do#^blh1dD3^7R=jKFQnI#e_EUKb^V9VOL#10{<-I#}abSSMFN9yY9l(w>{tA
wvYKCyXW0Gy`StTE4>IbPUvOO`q;bH!Ttl)Ye_mua0|Nttr>mdKI;Vst0P_i^E&u=k

literal 0
HcmV?d00001

diff --git a/shmupgame2022/EnemyBullet.cs b/shmupgame2022/EnemyBullet.cs
new file mode 100644
index 0000000..9e7e25f
--- /dev/null
+++ b/shmupgame2022/EnemyBullet.cs
@@ -0,0 +1,52 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace shmupgame2022
+{
+    class EnemyBullet : IGameEntity
+    {
+        public const float DEFAULT_SPEED = 2f;
+        public const float PLAYER_BULLET_SIZE = 4f;
+
+        private TextureManager _textureAssetManager;
+
+        public Vector2 Position { get; set; }
+        public Vector2 Speed { get; set; }
+        public int DrawOrder { get; set; } = 9;
+        public EntityType entityType { get; set; } = EntityType.ENEMY;
+        public bool IsDead { get; set; } = false;
+        public float Size { get; set; } = PLAYER_BULLET_SIZE;
+
+        public void Draw(GameTime GameTime, SpriteBatch SpriteBatch)
+        {
+            SpriteBatch.Draw(_textureAssetManager.PlayerBulletTexture, this.Position, Color.Red);
+        }
+
+        public void Update(GameTime GameTime, PlayerShip player)
+        {
+            this.Position = this.Position + this.Speed;
+        }
+
+        public bool Collide(IGameEntity other)
+        {
+            if (other.entityType == EntityType.PLAYER)
+            {
+                this.IsDead = true;
+                return true;
+            }
+            else
+                return false;
+        }
+
+        public EnemyBullet(Vector2 spawnLocation, Vector2 initialSpeed, TextureManager textureManager)
+        {
+            this.Position = spawnLocation;
+            this.Speed = initialSpeed * DEFAULT_SPEED;
+            this._textureAssetManager = textureManager;
+            this._textureAssetManager.ShootSoundEnemy.Play();
+        }
+    }
+}
diff --git a/shmupgame2022/EnemyShip.cs b/shmupgame2022/EnemyShip.cs
new file mode 100644
index 0000000..98f99f9
--- /dev/null
+++ b/shmupgame2022/EnemyShip.cs
@@ -0,0 +1,56 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace shmupgame2022
+{
+    public class EnemyShip : IGameEntity
+    {
+        private TextureManager _textureAssetManager;
+
+        public const float DEFAULT_SPEED = 0.3f;
+        public const float DEFAULT_RANDOMNESS = 0.4f;
+
+        public int DrawOrder { get; set; } = 8;
+        public Vector2 Speed { get; set; } = new Vector2(0, DEFAULT_SPEED);
+        public Vector2 Position { get; set; }
+        public EntityType entityType { get; set; } = EntityType.ENEMY;
+        public bool IsDead { get; set; } = false;
+        public float Size { get; set; } = 10f;
+        public float ShootingCooldown { get; set; } = 2f;
+        private Random RandomGenerator { get; set; }
+
+        public void Draw(GameTime GameTime, SpriteBatch SpriteBatch)
+        {
+            SpriteBatch.Draw(this._textureAssetManager.EnemyShipTexture, this.Position - new Vector2(10,10), Color.White);
+        }
+
+        public void Update(GameTime GameTime, PlayerShip player)
+        {
+            this.Position = this.Position + this.Speed;
+            this.ShootingCooldown = this.ShootingCooldown - (float)GameTime.ElapsedGameTime.TotalSeconds;
+        }
+
+        public bool Collide(IGameEntity other)
+        {
+            if(other.entityType == EntityType.PLAYER)
+            {
+                this.IsDead = true;
+                return true;
+            }
+            return false;
+        }
+
+
+        public EnemyShip(TextureManager textureManager, Vector2 spawnPosition)
+        {
+            this.RandomGenerator = new Random();
+            this.Speed = this.Speed + new Vector2(0, DEFAULT_RANDOMNESS * ((float)this.RandomGenerator.NextDouble()));
+            this.ShootingCooldown = this.ShootingCooldown + (float)this.RandomGenerator.NextDouble();
+            this._textureAssetManager = textureManager;
+            this.Position = spawnPosition;
+        }
+    }
+}
diff --git a/shmupgame2022/EnemyWave.cs b/shmupgame2022/EnemyWave.cs
new file mode 100644
index 0000000..b341608
--- /dev/null
+++ b/shmupgame2022/EnemyWave.cs
@@ -0,0 +1,14 @@
+namespace shmupgame2022
+{
+    internal class EnemyWave
+    {
+        public int EnemyNumber { get; set; }
+        public float SecondsToEncounter { get; set; }
+
+        public EnemyWave(int n, float seconds)
+        {
+            this.EnemyNumber = n;
+            this.SecondsToEncounter = seconds;
+        }
+    }
+}
\ No newline at end of file
diff --git a/shmupgame2022/EnemyWaveManager.cs b/shmupgame2022/EnemyWaveManager.cs
new file mode 100644
index 0000000..a1512b4
--- /dev/null
+++ b/shmupgame2022/EnemyWaveManager.cs
@@ -0,0 +1,63 @@
+using Microsoft.Xna.Framework;
+using System.Collections.Generic;
+
+namespace shmupgame2022
+{
+    internal class EnemyWaveManager
+    {
+        public const float ENEMY_WAVE_INTERVAL = 10f;
+        public const int ENEMY_WAVE_COUNT = 1;
+        public const int ENEMY_PER_WAVE = 4;
+
+        public List<EnemyWave> WaveQueue { get; set; }
+
+        public void addWave (EnemyWave wave)
+        {
+            this.WaveQueue.Add(wave);
+        }
+
+        public EnemyWave PopFirstWave()
+        {
+            if (this.WaveQueue.Count > 0)
+            {
+                EnemyWave wave = this.WaveQueue[0];
+                this.WaveQueue.RemoveAt(0);
+                return wave;
+            }
+            else
+                return null;
+        }
+
+        public bool TimeToSpawnNextWave()
+        {
+            if (this.WaveQueue.Count > 0 && this.WaveQueue[0].SecondsToEncounter <= 0)
+            {
+                return true;
+            }
+            else
+                return false;
+        }
+
+        public void Update(GameTime gameTime)
+        {
+            if(this.WaveQueue.Count > 0)
+            {
+                this.WaveQueue[0].SecondsToEncounter = this.WaveQueue[0].SecondsToEncounter - (float)gameTime.ElapsedGameTime.TotalSeconds; 
+            }
+            else
+            {
+
+                this.addWave(new EnemyWave(ENEMY_PER_WAVE, ENEMY_WAVE_INTERVAL));
+            }
+        }
+
+        public EnemyWaveManager()
+        {
+            this.WaveQueue = new List<EnemyWave>();
+            for (int i = ENEMY_WAVE_COUNT; i > 0; i--)
+            {
+                this.addWave(new EnemyWave(ENEMY_PER_WAVE, ENEMY_WAVE_INTERVAL));
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/shmupgame2022/EntityManager.cs b/shmupgame2022/EntityManager.cs
new file mode 100644
index 0000000..50ebac9
--- /dev/null
+++ b/shmupgame2022/EntityManager.cs
@@ -0,0 +1,159 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace shmupgame2022
+{
+    class EntityManager
+    {
+        List<IGameEntity> _gameEntities;
+        List<IGameEntity> _playerEntities;
+        List<IGameEntity> _enemyEntities;
+        InputController _inputController;
+        TextureManager _textureAssetManager;
+        PlayerShip _playerShip;
+        private Random _random;
+        private EnemyWaveManager _enemyWaveManager;
+
+        public const float STATIC_ENEMY_SHOOTING_INTERVAL = 4f;
+
+        public void AddEntity(IGameEntity Entity)
+        {
+            _gameEntities.Add(Entity);
+            if (Entity.entityType == EntityType.PLAYER)
+                _playerEntities.Add(Entity);
+            if (Entity.entityType == EntityType.ENEMY)
+                _enemyEntities.Add(Entity);
+        }
+
+        public void RemoveEntity(IGameEntity Entity)
+        {
+            _gameEntities.Remove(Entity);
+            if (Entity.entityType == EntityType.PLAYER)
+                _playerEntities.Remove(Entity);
+            if (Entity.entityType == EntityType.ENEMY)
+                _enemyEntities.Remove(Entity);
+        }
+
+        public void UpdateEntities(GameTime gameTime)
+        {
+            _inputController.PollControls();
+
+            foreach (IGameEntity e in _gameEntities)
+            {
+                e.Update(gameTime, _playerShip);
+            }
+            foreach (IGameEntity e in _playerEntities)
+            {
+                if(e.entityType == EntityType.PLAYER)
+                {
+                    foreach (IGameEntity entity in _enemyEntities)
+                    {
+                        if(CollisionDetected(e, entity))
+                        {
+                            e.Collide(entity);
+                            entity.Collide(e);
+                        }
+                    }
+                }
+            }
+            List<IGameEntity> shoot_list = new List<IGameEntity>();
+            foreach (IGameEntity e in _enemyEntities)
+            {
+                if (e is EnemyShip)
+                {
+                    EnemyShip eship = (EnemyShip)e;
+                    if (eship.ShootingCooldown <= 0)
+                    {
+                        Vector2 initialspeed = (_playerShip.Position - eship.Position);
+                        initialspeed.Normalize();
+                        shoot_list.Add(new EnemyBullet(eship.Position, initialspeed, _textureAssetManager));
+                        eship.ShootingCooldown = eship.ShootingCooldown + (float)_random.NextDouble() * 3f + STATIC_ENEMY_SHOOTING_INTERVAL;
+                    }
+                }
+            }
+            foreach (IGameEntity e in shoot_list)
+            {
+                this.AddEntity(e);
+            }
+            
+            List<IGameEntity> kill_list = new List<IGameEntity>();
+            foreach (IGameEntity e in _gameEntities)
+            {
+                if (e.IsDead || e.Position.Y > 650)
+                {
+                    kill_list.Add(e);
+                }
+            }
+            if(kill_list.Count > 0)
+            {
+                _textureAssetManager.ExplosionSound.Play();
+            }
+            foreach (IGameEntity e in kill_list)
+            {
+                this.RemoveEntity(e);
+                if (e is PlayerShip)
+                {
+                    this.AddEntity(new GameOverUI(_textureAssetManager));
+                }
+            }
+
+            _enemyWaveManager.Update(gameTime);
+
+            if(_enemyWaveManager.TimeToSpawnNextWave())
+            {
+                this.SpawnEnemyWave(_enemyWaveManager.PopFirstWave().EnemyNumber);
+            }
+        }
+
+        public void DrawEntities(SpriteBatch spriteBatch, GameTime gameTime)
+        {
+            if(spriteBatch != null)
+            {
+                foreach (IGameEntity e in _gameEntities)
+                {
+                    e.Draw(gameTime, spriteBatch);
+                }
+            }
+        }
+
+        public void SpawnPlayer()
+        {
+            PlayerShip ship = new PlayerShip(_textureAssetManager);
+            _inputController.playerShip = ship;
+            _playerShip = ship;
+            this.AddEntity(ship);
+        }
+
+        public void SpawnEnemyWave(int number)
+        {
+            for (int i = number; i > 0; i--)
+            {
+                this.AddEntity(new EnemyShip(_textureAssetManager, new Vector2((float)_random.NextDouble()*300, -10)));
+            }
+        }
+
+        public bool CollisionDetected(IGameEntity a, IGameEntity b)
+        {
+            if (Vector2.Distance(a.Position, b.Position) < (a.Size+b.Size))
+            {
+                return true;
+            }
+            return false;
+        }
+
+        public EntityManager(TextureManager textureManager)
+        {
+            _random = new Random();
+            _enemyWaveManager = new EnemyWaveManager();
+            _gameEntities = new List<IGameEntity>();
+            _playerEntities = new List<IGameEntity>();
+            _enemyEntities = new List<IGameEntity>();
+            _textureAssetManager = textureManager;
+            _inputController = new InputController(this, _textureAssetManager);
+
+        }
+    }
+}
diff --git a/shmupgame2022/GameOverUI.cs b/shmupgame2022/GameOverUI.cs
new file mode 100644
index 0000000..ade1c89
--- /dev/null
+++ b/shmupgame2022/GameOverUI.cs
@@ -0,0 +1,41 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace shmupgame2022
+{
+    class GameOverUI : IGameEntity
+    {
+        public int DrawOrder { get; set; } = 12;
+        public EntityType entityType { get; set; } = EntityType.NONE;
+        public bool IsDead { get; set; } = false;
+        public Vector2 Position { get; set; }
+        public float Size { get; set; }
+
+        private TextureManager _textureAssetManager;
+
+        public bool Collide(IGameEntity other)
+        {
+            // doesn't collide in any way
+            return false;
+        }
+
+        public void Draw(GameTime GameTime, SpriteBatch SpriteBatch)
+        {
+            SpriteBatch.Draw(_textureAssetManager.GameOverUITexture, this.Position, Color.White);
+        }
+
+        public void Update(GameTime GameTime, PlayerShip player)
+        {
+           // doesn't update in any way
+        }
+
+        public GameOverUI(TextureManager textureManager)
+        {
+            this._textureAssetManager = textureManager;
+            this.Position = new Vector2(75, 300);
+        }
+    }
+}
diff --git a/shmupgame2022/IGameEntity.cs b/shmupgame2022/IGameEntity.cs
new file mode 100644
index 0000000..2ec24c3
--- /dev/null
+++ b/shmupgame2022/IGameEntity.cs
@@ -0,0 +1,22 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace shmupgame2022
+{
+    public enum EntityType { NONE, PLAYER, ENEMY}
+
+    public interface IGameEntity
+    {
+        void Update(GameTime GameTime, PlayerShip player);
+        void Draw(GameTime GameTime, SpriteBatch SpriteBatch);
+        int DrawOrder { get; set; }
+        bool Collide(IGameEntity other);
+        EntityType entityType { get; set; }
+        bool IsDead { get; set; }
+        public Vector2 Position { get; set; }
+        public float Size { get; set; }
+    }
+}
diff --git a/shmupgame2022/Icon.bmp b/shmupgame2022/Icon.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..2b481653e241818d2894e4ef33234eaff9aad701
GIT binary patch
literal 262282
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
aP@IC|78J*zxCX^JDDFXNfO1z3T@wK206Rkf

literal 0
HcmV?d00001

diff --git a/shmupgame2022/Icon.ico b/shmupgame2022/Icon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..7d9dec18704053ee43cd7c956022ddbdb34d8de1
GIT binary patch
literal 147541
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

literal 0
HcmV?d00001

diff --git a/shmupgame2022/InputController.cs b/shmupgame2022/InputController.cs
new file mode 100644
index 0000000..861271d
--- /dev/null
+++ b/shmupgame2022/InputController.cs
@@ -0,0 +1,75 @@
+using Microsoft.Xna.Framework.Input;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace shmupgame2022
+{
+    class InputController
+    {
+        private EntityManager _entityManager;
+        private TextureManager _textureAssetManager;
+
+        // this can be null, watch out!
+        public PlayerShip playerShip { get; set; }
+        
+        public InputController(EntityManager entityManager, TextureManager textureManager)
+        {
+            this._entityManager = entityManager;
+            this._textureAssetManager = textureManager;
+            
+        }
+
+        internal void PollControls()
+        {
+            if (playerShip != null)
+            {
+                if (Keyboard.GetState().IsKeyDown(Keys.Up))
+                {
+                    playerShip.IsMovingUp = true;
+                }
+                else
+                {
+                    playerShip.IsMovingUp = false;
+                }
+
+                if (Keyboard.GetState().IsKeyDown(Keys.Down))
+                {
+                    playerShip.IsMovingDown = true;
+                }
+                else
+                {
+                    playerShip.IsMovingDown = false;
+                }
+
+                if (Keyboard.GetState().IsKeyDown(Keys.Left))
+                {
+                    playerShip.IsMovingLeft = true;
+                }
+                else
+                {
+                    playerShip.IsMovingLeft = false;
+                }
+
+                if (Keyboard.GetState().IsKeyDown(Keys.Right))
+                {
+                    playerShip.IsMovingRight = true;
+                }
+                else
+                {
+                    playerShip.IsMovingRight = false;
+                }
+
+                if (Keyboard.GetState().IsKeyDown(Keys.Space))
+                {
+                    if(playerShip.ShootingCooldown <= 0)
+                    {
+                        playerShip.ShootingCooldown = 0.2f;
+                        _entityManager.AddEntity(new PlayerBullet(playerShip.Position, _textureAssetManager));
+                    }
+                }
+
+            }
+        }
+    }
+}
diff --git a/shmupgame2022/PlayerBullet.cs b/shmupgame2022/PlayerBullet.cs
new file mode 100644
index 0000000..f10fe89
--- /dev/null
+++ b/shmupgame2022/PlayerBullet.cs
@@ -0,0 +1,51 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace shmupgame2022
+{
+    class PlayerBullet : IGameEntity
+    {
+        public const float DEFAULT_SPEED = 10f;
+        public const float PLAYER_BULLET_SIZE = 4f;
+
+        private TextureManager _textureAssetManager;
+
+        public Vector2 Position { get; set; }
+        public Vector2 Speed { get; set; } = new Vector2(0, -DEFAULT_SPEED);
+        public int DrawOrder { get; set; } = 9;
+        public EntityType entityType { get; set; } = EntityType.PLAYER;
+        public bool IsDead { get; set; } = false;
+        public float Size { get; set; } = PLAYER_BULLET_SIZE;
+
+        public void Draw(GameTime GameTime, SpriteBatch SpriteBatch)
+        {
+            SpriteBatch.Draw(_textureAssetManager.PlayerBulletTexture, this.Position, Color.White);
+        }
+
+        public void Update(GameTime GameTime, PlayerShip player)
+        {
+            this.Position = this.Position + this.Speed;
+        }
+
+        public bool Collide(IGameEntity other)
+        {
+            if (other.entityType == EntityType.ENEMY)
+            {
+                this.IsDead = true;
+                return true;
+            }
+            else
+                return false;
+        }
+
+        public PlayerBullet(Vector2 spawnLocation, TextureManager textureManager)
+        {
+            this.Position = spawnLocation;
+            this._textureAssetManager = textureManager;
+            this._textureAssetManager.ShootSoundPlayer.Play();
+        }
+    }
+}
diff --git a/shmupgame2022/PlayerShip.cs b/shmupgame2022/PlayerShip.cs
new file mode 100644
index 0000000..8f97335
--- /dev/null
+++ b/shmupgame2022/PlayerShip.cs
@@ -0,0 +1,89 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace shmupgame2022
+{
+    public class PlayerShip : IGameEntity
+    {
+        public const int SHIP_HEIGHT = 20;
+        public const int SHIP_WIDTH = 20;
+        public const float SHIP_SPEED = 100f;
+
+        public const int DEFAULT_X = 150;
+        public const int DEFAULT_Y = 400;
+
+        public const int SHIP_DRAW_ORDER = 10;
+
+        private TextureManager _textureAssetsManager;
+        public int DrawOrder { get; set; } = SHIP_DRAW_ORDER;
+
+        // Note: you can add vectors together
+        public Vector2 Position { get; set; } = new Vector2(DEFAULT_X, DEFAULT_Y);
+        
+        // Note: This method needs more advanced setters (never set to below zero), define later
+        public float ShootingCooldown { get; set; }
+
+        public Vector2 Speed { get; set; }
+
+        public bool IsMovingDown { get; set; } = false;
+        public bool IsMovingUp { get; set; } = false;
+        public bool IsMovingLeft { get; set; } = false;
+        public bool IsMovingRight { get; set; } = false;
+        public EntityType entityType { get; set; } = EntityType.PLAYER;
+        public bool IsDead { get; set; } = false;
+        public float Size { get; set; } = 10f;
+
+        public bool Die()
+        {
+            this.IsDead = true;
+            return true;
+        }
+
+        public void Update(GameTime gameTime, PlayerShip player)
+        {
+            this.Speed = Vector2.Zero;
+
+            if (this.IsMovingUp)
+                this.Speed = this.Speed + new Vector2(0, -SHIP_SPEED);
+            if (this.IsMovingDown)
+                this.Speed = this.Speed + new Vector2(0, SHIP_SPEED);
+            if (this.IsMovingLeft)
+                this.Speed = this.Speed + new Vector2(-SHIP_SPEED, 0);
+            if (this.IsMovingRight)
+                this.Speed = this.Speed + new Vector2(SHIP_SPEED, 0);
+
+            this.Position = this.Position + new Vector2(this.Speed.X, this.Speed.Y) * (float)gameTime.ElapsedGameTime.TotalSeconds;
+
+            this.ShootingCooldown = this.ShootingCooldown - (float)gameTime.ElapsedGameTime.TotalSeconds;
+        }
+
+        public void Draw(GameTime gameTime, SpriteBatch spriteBatch)
+        {
+            if (spriteBatch != null)
+            {
+                spriteBatch.Draw(this._textureAssetsManager.PlayerShipTexture, this.Position - new Vector2(13,13), Color.White);
+            }
+                
+        }
+
+        public bool Collide(IGameEntity other)
+        {
+            if(other.entityType == EntityType.ENEMY)
+            {
+                this.Die();
+                return true;
+            }
+            return false;
+        }
+
+        public PlayerShip(TextureManager textureManager)
+        {
+            this.Position = new Vector2(DEFAULT_X, DEFAULT_Y);
+            this._textureAssetsManager = textureManager;
+        }
+
+    }
+}
diff --git a/shmupgame2022/Program.cs b/shmupgame2022/Program.cs
new file mode 100644
index 0000000..ad2e956
--- /dev/null
+++ b/shmupgame2022/Program.cs
@@ -0,0 +1,14 @@
+using System;
+
+namespace shmupgame2022
+{
+    public static class Program
+    {
+        [STAThread]
+        static void Main()
+        {
+            using (var game = new SHMUPgame())
+                game.Run();
+        }
+    }
+}
diff --git a/shmupgame2022/SHMUPgame.cs b/shmupgame2022/SHMUPgame.cs
new file mode 100644
index 0000000..de062f0
--- /dev/null
+++ b/shmupgame2022/SHMUPgame.cs
@@ -0,0 +1,101 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Audio;
+using Microsoft.Xna.Framework.Graphics;
+using Microsoft.Xna.Framework.Input;
+
+namespace shmupgame2022
+{
+    public class SHMUPgame : Game
+    {
+        EntityManager _entityManager;
+
+        private const string ASSET_NAME_BULLET_SPRITE = "sovproj2022_bullet_ph_sprite";
+        private const string ASSET_NAME_ENEMY1_SPRITE = "sovproj2022_enemy1_ph_sprite";
+        private const string ASSET_NAME_PLAYER_SPRITE = "sovproj2022_player_ph_sprite";
+        private const string ASSET_NAME_GAME_OVER_SPRITE = "gameover";
+
+        private const string ASSET_NAME_EXPLOSION_SOUND = "Explosion";
+        private const string ASSET_NAME_PLAYER_SHOOT_SOUND = "Laser_Shoot_player";
+        private const string ASSET_NAME_ENEMY_SHOOT_SOUND = "laser_shoot_enemy";
+
+        private GraphicsDeviceManager _graphics;
+        private SpriteBatch _spriteBatch;
+
+        //this is how to use sound effects in monogame
+        //private SoundEffect _sfx_shoot;
+
+        private TextureManager _textureManager;
+
+
+        public SHMUPgame()
+        {
+            _graphics = new GraphicsDeviceManager(this);
+            _textureManager = new TextureManager();
+            Content.RootDirectory = "Content";
+            IsMouseVisible = true;
+        }
+
+        protected override void Initialize()
+        {
+            _graphics.PreferredBackBufferWidth = 300;  // set this value to the desired width of your window
+            _graphics.PreferredBackBufferHeight = 600;   // set this value to the desired height of your window
+            _graphics.ApplyChanges();
+            // TODO: Add your initialization logic here
+            _entityManager = new EntityManager(_textureManager);
+
+            base.Initialize();
+        }
+
+        protected override void LoadContent()
+        {
+            _spriteBatch = new SpriteBatch(GraphicsDevice);
+
+            // TODO: use this.Content to load your game content here
+
+            _textureManager.PlayerBulletTexture = Content.Load<Texture2D>(ASSET_NAME_BULLET_SPRITE);
+            _textureManager.EnemyShipTexture = Content.Load<Texture2D>(ASSET_NAME_ENEMY1_SPRITE);
+            _textureManager.PlayerShipTexture = Content.Load<Texture2D>(ASSET_NAME_PLAYER_SPRITE);
+            _textureManager.GameOverUITexture = Content.Load<Texture2D>(ASSET_NAME_GAME_OVER_SPRITE);
+
+            _textureManager.ShootSoundPlayer = Content.Load<SoundEffect>(ASSET_NAME_PLAYER_SHOOT_SOUND);
+            _textureManager.ShootSoundEnemy = Content.Load<SoundEffect>(ASSET_NAME_ENEMY_SHOOT_SOUND);
+            _textureManager.ExplosionSound = Content.Load<SoundEffect>(ASSET_NAME_EXPLOSION_SOUND);
+
+            // It's very awkward to tell the EntityManager to spawn the player entity here, but it's the only way to do it after assets are loaded
+            // This is probably due to threading
+            _entityManager.SpawnPlayer();
+            _entityManager.SpawnEnemyWave(7);
+
+        }
+
+        protected override void Update(GameTime gameTime)
+        {
+            // we leave this here for now
+            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
+                Exit();
+
+            // TODO: Add your update logic here
+            _entityManager.UpdateEntities(gameTime);
+            base.Update(gameTime);
+        }
+
+        protected override void Draw(GameTime gameTime)
+        {
+            GraphicsDevice.Clear(Color.Black);
+
+            _spriteBatch.Begin();
+            // TODO: Add your drawing code here
+
+            // just for testing purposes, let's render the 3 loaded sprites on the screen
+            //_spriteBatch.Draw(_bulletSprite, new Vector2(20, 20), Color.White);
+            //_spriteBatch.Draw(_enemy1Sprite, new Vector2(40, 20), Color.White);
+            //_spriteBatch.Draw(_playerSprite, new Vector2(60, 20), Color.White);
+
+            _entityManager.DrawEntities(_spriteBatch, gameTime);
+
+            _spriteBatch.End();
+
+            base.Draw(gameTime);
+        }
+    }
+}
diff --git a/shmupgame2022/Sovproj 2022.ncp b/shmupgame2022/Sovproj 2022.ncp
new file mode 100644
index 0000000..3f8ae0f
--- /dev/null
+++ b/shmupgame2022/Sovproj 2022.ncp	
@@ -0,0 +1,229 @@
+<Project>
+  <Name>Sovproj 2022</Name>
+  <ProjectItem type="NClass.DiagramEditor.ClassDiagram.Diagram" assembly="NClass.DiagramEditor, Version=2.4.1823.0, Culture=neutral, PublicKeyToken=null">
+    <Name>SHMUP game</Name>
+    <Language>CSharp</Language>
+    <Entities>
+      <Entity type="Class">
+        <Name>SHMUPgame</Name>
+        <Access>Public</Access>
+        <Location left="36" top="177" />
+        <Size width="326" height="216" />
+        <Collapsed>False</Collapsed>
+        <Member type="Field">EntityManager _entityManager</Member>
+        <Modifier>None</Modifier>
+      </Entity>
+      <Entity type="Class">
+        <Name>PlayerShip</Name>
+        <Access>Public</Access>
+        <Location left="438" top="769" />
+        <Size width="221" height="399" />
+        <Collapsed>False</Collapsed>
+        <Member type="Field">private const int SHIP_HEIGHT = 20</Member>
+        <Member type="Field">private float SHIP_SPEED = 5f</Member>
+        <Member type="Field">private int SHIP_WIDTH = 20</Member>
+        <Member type="Property">public bool IsAlive { get; set; }</Member>
+        <Member type="Property">public Vector2 Position { get; set; }</Member>
+        <Member type="Property">public float ShootingCooldown { get; set; }</Member>
+        <Member type="Property">public Vector2 Speed { get; set; }</Member>
+        <Member type="Method">public bool IsMovingDown()</Member>
+        <Member type="Method">public bool IsMovingLeft()</Member>
+        <Member type="Method">public bool IsMovingRight()</Member>
+        <Member type="Method">public bool IsMovingUp()</Member>
+        <Member type="Method">public bool Die()</Member>
+        <Member type="Method">public void Draw(gameTime GameTime, spriteBatch SpriteBatch)</Member>
+        <Member type="Method">public bool Shoot()</Member>
+        <Member type="Method">public void Update(gameTime GameTime)</Member>
+        <Modifier>None</Modifier>
+      </Entity>
+      <Entity type="Class">
+        <Name>EnemyShip</Name>
+        <Access>Public</Access>
+        <Location left="693" top="788" />
+        <Size width="162" height="216" />
+        <Collapsed>False</Collapsed>
+        <Modifier>None</Modifier>
+      </Entity>
+      <Entity type="Class">
+        <Name>Bullet</Name>
+        <Access>Public</Access>
+        <Location left="895" top="88" />
+        <Size width="162" height="216" />
+        <Collapsed>False</Collapsed>
+        <Modifier>Abstract</Modifier>
+      </Entity>
+      <Entity type="Interface">
+        <Name>IGameEntity</Name>
+        <Access>Public</Access>
+        <Location left="438" top="290" />
+        <Size width="372" height="216" />
+        <Collapsed>False</Collapsed>
+        <Member type="Method">void Update(GameTime gameTime)</Member>
+        <Member type="Method">void Draw(gameTime GameTime, SpriteBatch spriteBatch)</Member>
+        <Member type="Property">int DrawOrder { get; }</Member>
+      </Entity>
+      <Entity type="Class">
+        <Name>Boss</Name>
+        <Access>Public</Access>
+        <Location left="980" top="769" />
+        <Size width="162" height="216" />
+        <Collapsed>False</Collapsed>
+        <Modifier>None</Modifier>
+      </Entity>
+      <Entity type="Class">
+        <Name>BossSegment</Name>
+        <Access>Public</Access>
+        <Location left="1181" top="769" />
+        <Size width="162" height="216" />
+        <Collapsed>False</Collapsed>
+        <Modifier>None</Modifier>
+      </Entity>
+      <Entity type="Class">
+        <Name>Game</Name>
+        <Access>Public</Access>
+        <Location left="36" top="29" />
+        <Size width="162" height="216" />
+        <Collapsed>True</Collapsed>
+        <Modifier>Abstract</Modifier>
+      </Entity>
+      <Entity type="Class">
+        <Name>BossBar</Name>
+        <Access>Public</Access>
+        <Location left="895" top="340" />
+        <Size width="269" height="216" />
+        <Collapsed>False</Collapsed>
+        <Modifier>None</Modifier>
+      </Entity>
+      <Entity type="Class">
+        <Name>InputController</Name>
+        <Access>Public</Access>
+        <Location left="783" top="1030" />
+        <Size width="298" height="216" />
+        <Collapsed>False</Collapsed>
+        <Member type="Field">private PlayerShip _playerShip</Member>
+        <Member type="Method">public void ProcessControls(gameTime GameTime)</Member>
+        <Modifier>None</Modifier>
+      </Entity>
+      <Entity type="Class">
+        <Name>EntityManager</Name>
+        <Access>Public</Access>
+        <Location left="36" top="488" />
+        <Size width="365" height="216" />
+        <Collapsed>False</Collapsed>
+        <Member type="Field">private List&lt;IGameEntity&gt; _gameEntities</Member>
+        <Member type="Method">public void AddEntity(IGameEntity entity)</Member>
+        <Member type="Method">public void RemoveEntity(IGameEntity entity)</Member>
+        <Member type="Method">public void UpdateEntities(GameTime gameTime)</Member>
+        <Member type="Method">public void DrawEntities(SpriteBatch spriteBatch, GameTime gameTime)</Member>
+        <Modifier>None</Modifier>
+      </Entity>
+      <Entity type="Class">
+        <Name>EnemyWaveManager</Name>
+        <Access>Public</Access>
+        <Location left="47" top="788" />
+        <Size width="235" height="216" />
+        <Collapsed>False</Collapsed>
+        <Member type="Method">public bool NextWave(GameTime gameTime)</Member>
+        <Member type="Property">public List&lt;EnemyWave&gt; WaveQueue { get; set; }</Member>
+        <Member type="Method">public void AddWave(EnemyWave enemyWave)</Member>
+        <Member type="Method">public EnemyWave RemoveWave()</Member>
+        <Modifier>None</Modifier>
+      </Entity>
+      <Entity type="Class">
+        <Name>EnemyWave</Name>
+        <Access>Public</Access>
+        <Location left="47" top="1073" />
+        <Size width="162" height="216" />
+        <Collapsed>False</Collapsed>
+        <Member type="Property">public int EnemyNumber { get; set; }</Member>
+        <Member type="Property">public float SecondsToWave { get; set; }</Member>
+        <Modifier>None</Modifier>
+      </Entity>
+    </Entities>
+    <Relationships>
+      <Relationship type="Realization" first="1" second="4">
+        <StartOrientation>Vertical</StartOrientation>
+        <EndOrientation>Vertical</EndOrientation>
+        <BendPoint relativeToStartShape="False">
+          <X>478</X>
+          <Y>531</Y>
+        </BendPoint>
+      </Relationship>
+      <Relationship type="Realization" first="2" second="4">
+        <StartOrientation>Vertical</StartOrientation>
+        <EndOrientation>Vertical</EndOrientation>
+        <BendPoint relativeToStartShape="False">
+          <X>551</X>
+          <Y>535</Y>
+        </BendPoint>
+      </Relationship>
+      <Relationship type="Realization" first="3" second="4">
+        <StartOrientation>Horizontal</StartOrientation>
+        <EndOrientation>Horizontal</EndOrientation>
+        <BendPoint relativeToStartShape="False">
+          <X>835</X>
+          <Y>317</Y>
+        </BendPoint>
+      </Relationship>
+      <Relationship type="Generalization" first="0" second="7">
+        <StartOrientation>Vertical</StartOrientation>
+        <EndOrientation>Vertical</EndOrientation>
+        <BendPoint relativeToStartShape="False">
+          <X>139</X>
+          <Y>116</Y>
+        </BendPoint>
+      </Relationship>
+      <Relationship type="Realization" first="8" second="4">
+        <StartOrientation>Horizontal</StartOrientation>
+        <EndOrientation>Horizontal</EndOrientation>
+      </Relationship>
+      <Relationship type="Association" first="9" second="1">
+        <Label>controls</Label>
+        <StartOrientation>Horizontal</StartOrientation>
+        <EndOrientation>Horizontal</EndOrientation>
+        <Direction>Unidirectional</Direction>
+        <AssociationType>Aggregation</AssociationType>
+      </Relationship>
+      <Relationship type="Association" first="10" second="4">
+        <Label>
+        </Label>
+        <StartOrientation>Vertical</StartOrientation>
+        <EndOrientation>Horizontal</EndOrientation>
+        <BendPoint relativeToStartShape="True">
+          <X>235</X>
+          <Y>433</Y>
+        </BendPoint>
+        <Direction>Unidirectional</Direction>
+        <AssociationType>Aggregation</AssociationType>
+      </Relationship>
+      <Relationship type="Association" first="0" second="10">
+        <Label>
+        </Label>
+        <StartOrientation>Vertical</StartOrientation>
+        <EndOrientation>Vertical</EndOrientation>
+        <BendPoint relativeToStartShape="True">
+          <X>88</X>
+          <Y>418</Y>
+        </BendPoint>
+        <Direction>Unidirectional</Direction>
+        <AssociationType>Composition</AssociationType>
+      </Relationship>
+      <Relationship type="Association" first="11" second="12">
+        <Label>
+        </Label>
+        <StartOrientation>Vertical</StartOrientation>
+        <EndOrientation>Vertical</EndOrientation>
+        <Direction>Unidirectional</Direction>
+        <AssociationType>Composition</AssociationType>
+      </Relationship>
+      <Relationship type="Association" first="10" second="11">
+        <Label>
+        </Label>
+        <StartOrientation>Vertical</StartOrientation>
+        <EndOrientation>Vertical</EndOrientation>
+        <Direction>Unidirectional</Direction>
+        <AssociationType>Composition</AssociationType>
+      </Relationship>
+    </Relationships>
+  </ProjectItem>
+</Project>
\ No newline at end of file
diff --git a/shmupgame2022/TextureManager.cs b/shmupgame2022/TextureManager.cs
new file mode 100644
index 0000000..446e633
--- /dev/null
+++ b/shmupgame2022/TextureManager.cs
@@ -0,0 +1,27 @@
+using Microsoft.Xna.Framework.Audio;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace shmupgame2022
+{
+    public class TextureManager
+    {
+        public Texture2D PlayerShipTexture { get; set; }
+        public Texture2D PlayerBulletTexture { get; set; }
+        public Texture2D EnemyShipTexture { get; set; }
+        public Texture2D GameOverUITexture { get; set; }
+
+        public SoundEffect ExplosionSound { get; set; }
+        public SoundEffect ShootSoundPlayer { get; set; }
+        public SoundEffect ShootSoundEnemy { get; set; }
+
+
+        public TextureManager()
+        {
+
+        }
+
+    }
+}
diff --git a/shmupgame2022/app.manifest b/shmupgame2022/app.manifest
new file mode 100644
index 0000000..657d455
--- /dev/null
+++ b/shmupgame2022/app.manifest
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
+  <assemblyIdentity version="1.0.0.0" name="shmupgame2022"/>
+  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
+    <security>
+      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
+        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
+      </requestedPrivileges>
+    </security>
+  </trustInfo>
+
+  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+    <application>
+      <!-- A list of the Windows versions that this application has been tested on and is
+           is designed to work with. Uncomment the appropriate elements and Windows will 
+           automatically selected the most compatible environment. -->
+
+      <!-- Windows Vista -->
+      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />
+
+      <!-- Windows 7 -->
+      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
+
+      <!-- Windows 8 -->
+      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
+
+      <!-- Windows 8.1 -->
+      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
+
+      <!-- Windows 10 -->
+      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
+
+    </application>
+  </compatibility>
+
+  <application xmlns="urn:schemas-microsoft-com:asm.v3">
+    <windowsSettings>
+      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware>
+      <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">permonitorv2,permonitor</dpiAwareness>
+    </windowsSettings>
+  </application>
+
+</assembly>
diff --git a/shmupgame2022/shmupgame2022.csproj b/shmupgame2022/shmupgame2022.csproj
new file mode 100644
index 0000000..db416ef
--- /dev/null
+++ b/shmupgame2022/shmupgame2022.csproj
@@ -0,0 +1,30 @@
+<Project Sdk="Microsoft.NET.Sdk">
+  <PropertyGroup>
+    <OutputType>WinExe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <PublishReadyToRun>false</PublishReadyToRun>
+    <TieredCompilation>false</TieredCompilation>
+  </PropertyGroup>
+  <PropertyGroup>
+    <ApplicationManifest>app.manifest</ApplicationManifest>
+    <ApplicationIcon>Icon.ico</ApplicationIcon>
+  </PropertyGroup>
+  <ItemGroup>
+    <None Remove="Icon.ico" />
+    <None Remove="Icon.bmp" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Icon.ico" />
+    <EmbeddedResource Include="Icon.bmp" />
+  </ItemGroup>
+  <ItemGroup>
+    <MonoGameContentReference Include="Content\Content.mgcb" />
+  </ItemGroup>
+  <ItemGroup>
+    <TrimmerRootAssembly Include="Microsoft.Xna.Framework.Content.ContentTypeReader" Visible="false" />
+  </ItemGroup>
+  <ItemGroup>
+    <PackageReference Include="MonoGame.Framework.DesktopGL" Version="3.8.0.1641" />
+    <PackageReference Include="MonoGame.Content.Builder.Task" Version="3.8.0.1641" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/shmupgame2022Test/UnitTest1.cs b/shmupgame2022Test/UnitTest1.cs
new file mode 100644
index 0000000..f69d6c6
--- /dev/null
+++ b/shmupgame2022Test/UnitTest1.cs
@@ -0,0 +1,13 @@
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace shmupgame2022Test
+{
+    [TestClass]
+    public class UnitTest1
+    {
+        [TestMethod]
+        public void TestMethod1()
+        {
+        }
+    }
+}
diff --git a/shmupgame2022Test/shmupgame2022Test.csproj b/shmupgame2022Test/shmupgame2022Test.csproj
new file mode 100644
index 0000000..1c3ed26
--- /dev/null
+++ b/shmupgame2022Test/shmupgame2022Test.csproj
@@ -0,0 +1,16 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+
+    <IsPackable>false</IsPackable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
+    <PackageReference Include="MSTest.TestAdapter" Version="2.2.3" />
+    <PackageReference Include="MSTest.TestFramework" Version="2.2.3" />
+    <PackageReference Include="coverlet.collector" Version="3.0.2" />
+  </ItemGroup>
+
+</Project>
diff --git a/shmupgame2022Tests/PlayerShipTests.cs b/shmupgame2022Tests/PlayerShipTests.cs
new file mode 100644
index 0000000..5aaba2e
--- /dev/null
+++ b/shmupgame2022Tests/PlayerShipTests.cs
@@ -0,0 +1,50 @@
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using Microsoft.Xna.Framework;
+using shmupgame2022;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace shmupgame2022.Tests
+{
+    [TestClass()]
+    public class PlayerShipTests
+    {
+        [TestMethod()]
+        public void DieTest()
+        {
+            PlayerShip testShip = new PlayerShip(new TextureManager());
+            testShip.Die();
+            Assert.IsTrue(testShip.IsDead);
+        }
+
+        [TestMethod()]
+        public void UpdateTest()
+        {
+            PlayerShip testShip = new PlayerShip(new TextureManager());
+            Vector2 initpos = testShip.Position;
+            testShip.Update(new GameTime(new TimeSpan(0, 1, 0), new TimeSpan(0, 0, 2), false), testShip);
+            if (initpos + testShip.Speed*2 != testShip.Position)
+            {
+                Assert.Fail();
+            }
+        }
+
+        [TestMethod()]
+        public void DrawTest()
+        {
+            PlayerShip testShip = new PlayerShip(new TextureManager());
+            Assert.IsTrue(true);
+            // we don't unit test graphical methods, not sure how that'd be even possible
+        }
+
+        [TestMethod()]
+        public void CollideTest()
+        {
+            PlayerShip testShip = new PlayerShip(new TextureManager());
+            EnemyShip testEnemyShip = new EnemyShip(new TextureManager(), new Microsoft.Xna.Framework.Vector2(0,0));
+            testShip.Collide(testEnemyShip);
+            Assert.IsTrue(testShip.IsDead);
+        }
+    }
+}
\ No newline at end of file
diff --git a/shmupgame2022Tests/shmupgame2022Tests.csproj b/shmupgame2022Tests/shmupgame2022Tests.csproj
new file mode 100644
index 0000000..e6e6829
--- /dev/null
+++ b/shmupgame2022Tests/shmupgame2022Tests.csproj
@@ -0,0 +1,20 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>.NETCoreApp,Version=v3.1</TargetFramework>
+
+    <IsPackable>false</IsPackable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
+    <PackageReference Include="MSTest.TestAdapter" Version="2.2.3" />
+    <PackageReference Include="MSTest.TestFramework" Version="2.2.3" />
+    <PackageReference Include="coverlet.collector" Version="3.0.2" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\shmupgame2022\shmupgame2022.csproj" />
+  </ItemGroup>
+
+</Project>
-- 
GitLab