diff options
Diffstat (limited to 'Penguloon')
22 files changed, 303 insertions, 40 deletions
diff --git a/Penguloon/Content/Content.mgcb b/Penguloon/Content/Content.mgcb index a65c337..ceea1e6 100644 --- a/Penguloon/Content/Content.mgcb +++ b/Penguloon/Content/Content.mgcb @@ -1003,3 +1003,15 @@ /processorParam:TextureFormat=Color /build:UI/BtnUnmutePressed.png +#begin SplashArt/5.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:SplashArt/5.png + diff --git a/Penguloon/Content/SplashArt/5.png b/Penguloon/Content/SplashArt/5.png Binary files differnew file mode 100644 index 0000000..2747b6e --- /dev/null +++ b/Penguloon/Content/SplashArt/5.png diff --git a/Penguloon/ContentPathManager.cs b/Penguloon/ContentPathManager.cs index a2f59ba..71b17e9 100644 --- a/Penguloon/ContentPathManager.cs +++ b/Penguloon/ContentPathManager.cs @@ -81,6 +81,7 @@ namespace Penguloon "SplashArt/2", "SplashArt/3", "SplashArt/4", + "SplashArt/5", "Enemies/pop", "Enemies/red", diff --git a/Penguloon/Controls/IngameOptions.cs b/Penguloon/Controls/IngameOptions.cs index e5a6890..137094c 100644 --- a/Penguloon/Controls/IngameOptions.cs +++ b/Penguloon/Controls/IngameOptions.cs @@ -23,6 +23,8 @@ namespace Penguloon.Controls public MessageBox QuitConfirmationBox { get; set; } public DateTime ShowTimeMsgBox { get; set; } + public MuteButton BtnMute { get; set; } + public IngameOptions(SceneBase parentScene, Vector2 position, Vector2 size) : base(parentScene, position, size) { this.DrawText = false; @@ -33,6 +35,10 @@ namespace Penguloon.Controls Vector2 BtnSize = new Vector2(Size.X - 90, StaticUIValues.IngameUIPlayButtonHeight); Vector2 MsgBoxSize = new Vector2(900, 550); + BtnMute = new MuteButton(parentScene, + new Vector2(position.X + (Size.X / 2) - (BtnSize.X / 2), Position.Y + Size.Y - (50 * 2) - (BtnSize.Y * 2)), + new Vector2(StaticUIValues.MenuButtonSize.Y, StaticUIValues.MenuButtonSize.Y)); + BtnContinue = new Button(parentScene, new Vector2(position.X + (Size.X / 2) - (BtnSize.X / 2), Position.Y + 50), BtnSize, parentScene.Main.Resources.GetString(Resource.String.IngameOptionsContinue)); @@ -58,7 +64,10 @@ namespace Penguloon.Controls GameScene gameScene = (GameScene)ParentScene; gameScene.Level.FinishGame(); - SceneManager.SelectedScene = SelectedScene.Menu; + gameScene.Level.EndDate = DateTime.Now; + gameScene.IngameEndStats.State = IngameOptionsState.Show; + + //SceneManager.SelectedScene = SelectedScene.Menu; } private void QuitConfirmationBox_OnMissClick(object sender, EventArgs e) @@ -93,6 +102,7 @@ namespace Penguloon.Controls BtnContinue.Draw(deltaTime); BtnQuit.Draw(deltaTime); QuitConfirmationBox.Draw(deltaTime); + BtnMute.Draw(deltaTime); } public override void Update(float deltaTime, TouchLocation[] touchLocations) @@ -109,6 +119,7 @@ namespace Penguloon.Controls BtnContinue.Update(deltaTime, touchLocations); BtnQuit.Update(deltaTime, touchLocations); + BtnMute.Update(deltaTime, touchLocations); } } }
\ No newline at end of file diff --git a/Penguloon/Controls/LevelSelector.cs b/Penguloon/Controls/LevelSelector.cs index de3b080..b5f0b26 100644 --- a/Penguloon/Controls/LevelSelector.cs +++ b/Penguloon/Controls/LevelSelector.cs @@ -107,6 +107,7 @@ namespace Penguloon.Controls Levels.Add(new IceLevel3()); Levels.Add(new SandLevel1()); + Levels.Add(new SandLevel2()); } public override void Draw(float deltaTime) diff --git a/Penguloon/Controls/MuteButton.cs b/Penguloon/Controls/MuteButton.cs index fdd1d91..a8d415d 100644 --- a/Penguloon/Controls/MuteButton.cs +++ b/Penguloon/Controls/MuteButton.cs @@ -5,8 +5,6 @@ namespace Penguloon.Controls { public class MuteButton : ControlBase { - public bool Muted { get; set; } = false; - public MuteButton(SceneBase parentScene, Vector2 position, Vector2 size) : base(parentScene, position, size) { this.BackgroundIdle = ContentManager.GetTexture("UI/BtnMuteIdle"); @@ -23,11 +21,9 @@ namespace Penguloon.Controls private void Button_OnClick(object sender, ClickArgs e) { - Muted = !Muted; - - SoundManager.Muted = Muted; + SoundManager.Muted = !SoundManager.Muted; - if (Muted) + if (SoundManager.Muted) { this.BackgroundIdle = ContentManager.GetTexture("UI/BtnUnmuteIdle"); this.BackgroundPressed = ContentManager.GetTexture("UI/BtnUnmutePressed"); diff --git a/Penguloon/Controls/ObjectSelector.cs b/Penguloon/Controls/ObjectSelector.cs index fd444c8..b2ae221 100644 --- a/Penguloon/Controls/ObjectSelector.cs +++ b/Penguloon/Controls/ObjectSelector.cs @@ -126,11 +126,11 @@ namespace Penguloon.Controls private void LoadObjects() { Objects.Add(new Tuple<ObjectBase,int>(new PenguinObject(Map), 250)); - Objects.Add(new Tuple<ObjectBase, int>(new GoldPenguinObject(Map), 360)); + Objects.Add(new Tuple<ObjectBase, int>(new GoldPenguinObject(Map), 420)); Objects.Add(new Tuple<ObjectBase, int>(new CannonObject(Map), 650)); Objects.Add(new Tuple<ObjectBase, int>(new HealthGeneratorObject(Map), 800)); - Objects.Add(new Tuple<ObjectBase, int>(new MortarObject(Map), 1200)); - Objects.Add(new Tuple<ObjectBase, int>(new KingPenguinObject(Map), 2550)); + Objects.Add(new Tuple<ObjectBase, int>(new MortarObject(Map), 1750)); + Objects.Add(new Tuple<ObjectBase, int>(new KingPenguinObject(Map), 3550)); } public override void Update(float deltaTime, TouchLocation[] touchLocations) diff --git a/Penguloon/Enemies/DarkRainbowBalloon.cs b/Penguloon/Enemies/DarkRainbowBalloon.cs index 167aa69..c1349be 100644 --- a/Penguloon/Enemies/DarkRainbowBalloon.cs +++ b/Penguloon/Enemies/DarkRainbowBalloon.cs @@ -7,7 +7,7 @@ namespace Penguloon.Enemies public DarkRainbowBalloon(Map map) : base(map) { this.Texture = ContentManager.GetTexture("Enemies/rainbow_dark"); - this.Speed = 85f; + this.Speed = 105f; this.Health = 1; this.ChildObject = typeof(RainbowBalloon); this.HealthToTake = 8; diff --git a/Penguloon/Levels/IceLevel.cs b/Penguloon/Levels/IceLevel.cs index 4532774..07d57b7 100644 --- a/Penguloon/Levels/IceLevel.cs +++ b/Penguloon/Levels/IceLevel.cs @@ -11,7 +11,7 @@ namespace Penguloon.Levels public IceLevel() : base() { this.SplashArt = ContentManager.GetTexture("SplashArt/1"); - this.Money = 12350; + this.Money = 123350; this.Health = 200; this.ID = 1; this.MinimumLevel = 1; diff --git a/Penguloon/Levels/LevelBase.cs b/Penguloon/Levels/LevelBase.cs index 7d67d70..a9340b2 100644 --- a/Penguloon/Levels/LevelBase.cs +++ b/Penguloon/Levels/LevelBase.cs @@ -85,6 +85,7 @@ namespace Penguloon.Levels public void Restart() { + NewPR = false; CreateMap(); Map.WaveManager.CurrentWave = 1; @@ -311,8 +312,11 @@ namespace Penguloon.Levels } - public void FinishGame() + public void FinishGame(bool exit = false) { + ParentScene.OptionsMenu.State = IngameOptionsState.Hide; + + if (!exit) SoundManager.PlayGameOverSound(); Finished = true; diff --git a/Penguloon/Levels/Map.cs b/Penguloon/Levels/Map.cs index 547c0bc..362b1ba 100644 --- a/Penguloon/Levels/Map.cs +++ b/Penguloon/Levels/Map.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System; using Penguloon.Objects; using Penguloon.Controls; +using System.Linq; namespace Penguloon.Levels { @@ -71,9 +72,14 @@ namespace Penguloon.Levels for (int i = 0; i < Enemies.Count; i++) { - if (Enemies[i].Texture != null) - ParentScene.Main.SpriteBatch.Draw(Enemies[i].Texture, - destinationRectangle: Enemies[i].Box); + try + { + if (Enemies[i] != null) + if (Enemies[i].Texture != null) + ParentScene.Main.SpriteBatch.Draw(Enemies[i].Texture, + destinationRectangle: Enemies[i].Box); + } + catch { } } for (int i = 0; i < Objects.Count; i++) @@ -151,7 +157,12 @@ namespace Penguloon.Levels { for (int i = 0; i < Enemies.Count; i++) { - Enemies[i].Update(deltaTime); + try + { + if (Enemies[i] != null) + Enemies[i].Update(deltaTime); + } + catch { } } if (ParentScene.Level.Finished) return; @@ -169,7 +180,7 @@ namespace Penguloon.Levels if(Enemies.Count == 0 && WaveManager.DoneSpawning && WaveManager.RoundActive) { WaveManager.RoundActive = false; - Level.Money += (WaveManager.CurrentWave * 15); + Level.Money += (WaveManager.CurrentWave * 25); } } diff --git a/Penguloon/Levels/SandLevel2.cs b/Penguloon/Levels/SandLevel2.cs new file mode 100644 index 0000000..5662e84 --- /dev/null +++ b/Penguloon/Levels/SandLevel2.cs @@ -0,0 +1,89 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Input.Touch; +using Penguloon.Enemies; +using Penguloon.Objects; +using Penguloon.Scenes; + +namespace Penguloon.Levels +{ + public class SandLevel2 : LevelBase + { + public SandLevel2() : base() + { + this.SplashArt = ContentManager.GetTexture("SplashArt/5"); + this.Money = 350; + this.Health = 200; + this.ID = 4; + this.MinimumLevel = 20; + LevelType = LevelType.Sand; + } + + public override void DrawUnique(float deltaTime) + { + base.DrawUnique(deltaTime); + } + + public override void UpdateUnique(float deltaTime, TouchLocation[] touchLocations) + { + base.UpdateUnique(deltaTime, touchLocations); + } + + public override void CreateMap() + { + Map = new Map(ParentScene, this); + Map.SpawnPoint = new Vector2(-1 * Map.TileWidth, 6 * Map.TileHeight); + Map.SpawnPointTargetPos = new Vector2(0 * Map.TileWidth, 6 * Map.TileHeight); + Map.FinishPoint = new Vector2(-1 * Map.TileWidth, 7 * Map.TileHeight); + + Tile OO = new Tile(0, Direction.None); + + Tile DN = new Tile(6, Direction.Down); + Tile RT = new Tile(5, Direction.Right); + Tile LT = new Tile(5, Direction.Left); + Tile UP = new Tile(6, Direction.Up); + + Tile TR = new Tile(4, Direction.Right); + Tile RU = new Tile(4, Direction.Up); + Tile DR = new Tile(3, Direction.Right); + + Tile DL = new Tile(1, Direction.Down); + Tile RD = new Tile(3, Direction.Down); + Tile LD = new Tile(1, Direction.Left); + Tile LU = new Tile(2, Direction.Left); + Tile TL = new Tile(2, Direction.Up); + + Tile FN = new Tile(5, Direction.Finish); + + Map.TileMap = new Tile[13, 18] + { + { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO }, + { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO }, + { OO,OO,DR,RT,RT,DL,OO,OO,DR,RT,RT,DL,OO,OO,DR,RT,RT,DL }, + { OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN }, + { OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN }, + { OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN }, + { RT,RT,TL,OO,OO,TR,RT,RT,TL,OO,OO,TR,RT,RT,TL,OO,OO,DN }, + { FN,LT,LD,OO,OO,RD,LT,LT,LD,OO,OO,RD,LT,LT,LD,OO,OO,DN }, + { OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN }, + { OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN }, + { OO,OO,RU,LT,LT,LU,OO,OO,RU,LT,LT,LU,OO,OO,RU,LT,LT,LU }, + { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO }, + { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO }, + }; + + // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO }, + // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO }, + // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO }, + // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO }, + // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO }, + // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO }, + // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO }, + // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO }, + // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO }, + // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO }, + // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO }, + // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO }, + // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO }, + } + } +}
\ No newline at end of file diff --git a/Penguloon/Levels/WaveManager.cs b/Penguloon/Levels/WaveManager.cs index d7be1ba..cb17596 100644 --- a/Penguloon/Levels/WaveManager.cs +++ b/Penguloon/Levels/WaveManager.cs @@ -43,6 +43,15 @@ namespace Penguloon.Levels /* 13 */ Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(OrangeBalloon), 25), new Tuple<Type, int>(typeof(PurpleBalloon), 7) }, 500)); /* 14 */ Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(OrangeBalloon), 25), new Tuple<Type, int>(typeof(PurpleBalloon), 12) }, 500)); /* 15 */ Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(OrangeBalloon), 7), new Tuple<Type, int>(typeof(PurpleBalloon), 20) }, 500)); + + /* 16 */ Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(RainbowBalloon), 10) }, 500)); + /* 17 */ Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(RainbowBalloon), 25) }, 500)); + /* 18 */ Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(RainbowBalloon), 25), new Tuple<Type, int>(typeof(DarkRainbowBalloon), 7) }, 500)); + /* 19 */ Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(RainbowBalloon), 25), new Tuple<Type, int>(typeof(DarkRainbowBalloon), 12) }, 500)); + /* 20 */ Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(RainbowBalloon), 7), new Tuple<Type, int>(typeof(DarkRainbowBalloon), 20) }, 500)); + + for (int i = 0; i < 400; i++) + Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(DarkRainbowBalloon), 30 + (i * 10)) }, 300)); } public void StartSpawningEnemies() diff --git a/Penguloon/Objects/CannonObject.cs b/Penguloon/Objects/CannonObject.cs index 41ed9bf..01afab8 100644 --- a/Penguloon/Objects/CannonObject.cs +++ b/Penguloon/Objects/CannonObject.cs @@ -7,6 +7,8 @@ namespace Penguloon.Objects { class CannonObject : ObjectBase { + int extraPops = 0; + public CannonObject(Vector2 position, Map map) : base(position, map) { this.Texture = ContentManager.GetTexture("Objects/cannon"); @@ -27,6 +29,28 @@ namespace Penguloon.Objects this.infoText = map.Level.ParentScene.Main.Resources.GetString(Resource.String.ObjectCannon); } + public override void CreateUpgrades() + { + ObjectUpgrade pop3 = new ObjectUpgrade(650, UpgradeType.PopCount, "+1 pop", null, Map.Level); + ObjectUpgrade pop2 = new ObjectUpgrade(500, UpgradeType.PopCount, "+1 pop", pop3, Map.Level); + ObjectUpgrade pop1 = new ObjectUpgrade(350, UpgradeType.PopCount, "+1 pop", pop2, Map.Level); + pop1.OnClick += delegate { extraPops++; }; pop2.OnClick += delegate { extraPops++; }; pop3.OnClick += delegate { extraPops++; }; + + ObjectUpgrade rng3 = new ObjectUpgrade(650, UpgradeType.Range, "+1 range", null, Map.Level); + ObjectUpgrade rng2 = new ObjectUpgrade(500, UpgradeType.Range, "+1 range", rng3, Map.Level); + ObjectUpgrade rng1 = new ObjectUpgrade(350, UpgradeType.Range, "+1 range", rng2, Map.Level); + rng1.OnClick += delegate { Range += Map.TileWidth; }; rng2.OnClick += delegate { Range += Map.TileWidth; }; rng3.OnClick += delegate { Range += Map.TileWidth; }; + + ObjectUpgrade spd3 = new ObjectUpgrade(650, UpgradeType.Speed, "+0.1 speed", null, Map.Level); + ObjectUpgrade spd2 = new ObjectUpgrade(500, UpgradeType.Speed, "+0.1 speed", spd3, Map.Level); + ObjectUpgrade spd1 = new ObjectUpgrade(350, UpgradeType.Speed, "+0.1 speed", spd2, Map.Level); + spd1.OnClick += delegate { AttackSpeedMS -= 100; }; spd2.OnClick += delegate { AttackSpeedMS -= 100; }; spd3.OnClick += delegate { AttackSpeedMS -= 100; }; + + UpgradeList.Add(pop1); + UpgradeList.Add(rng1); + UpgradeList.Add(spd1); + } + public override void DrawUnique(float deltaTime) { @@ -39,7 +63,7 @@ namespace Penguloon.Objects public override void SpawnUnique() { - Projectiles.Add(new CannonballProjectile(this, this.Rotation)); + Projectiles.Add(new SnowballProjectile(this, this.Rotation, extraPops)); } } }
\ No newline at end of file diff --git a/Penguloon/Objects/GoldPenguinObject.cs b/Penguloon/Objects/GoldPenguinObject.cs index 1b15131..5926559 100644 --- a/Penguloon/Objects/GoldPenguinObject.cs +++ b/Penguloon/Objects/GoldPenguinObject.cs @@ -7,13 +7,15 @@ namespace Penguloon.Objects { public class GoldPenguinObject : ObjectBase { + int extraPops = 0; + public GoldPenguinObject(Vector2 position, Map map) : base(position, map) { this.Texture = ContentManager.GetTexture("Objects/penguin2"); this.TileSpanX = 1; this.TileSpanY = 1; this.Range = Map.TileWidth * 2.5f; - this.AttackSpeedMS = 500; + this.AttackSpeedMS = 700; this.infoText = map.Level.ParentScene.Main.Resources.GetString(Resource.String.ObjectGoldPenguin); } @@ -23,10 +25,32 @@ namespace Penguloon.Objects this.TileSpanX = 1; this.TileSpanY = 1; this.Range = Map.TileWidth * 2.5f; - this.AttackSpeedMS = 500; + this.AttackSpeedMS = 700; this.infoText = map.Level.ParentScene.Main.Resources.GetString(Resource.String.ObjectGoldPenguin); } + public override void CreateUpgrades() + { + ObjectUpgrade pop3 = new ObjectUpgrade(550, UpgradeType.PopCount, "+1 pop", null, Map.Level); + ObjectUpgrade pop2 = new ObjectUpgrade(400, UpgradeType.PopCount, "+1 pop", pop3, Map.Level); + ObjectUpgrade pop1 = new ObjectUpgrade(250, UpgradeType.PopCount, "+1 pop", pop2, Map.Level); + pop1.OnClick += delegate { extraPops++; }; pop2.OnClick += delegate { extraPops++; }; pop3.OnClick += delegate { extraPops++; }; + + ObjectUpgrade rng3 = new ObjectUpgrade(550, UpgradeType.Range, "+1 range", null, Map.Level); + ObjectUpgrade rng2 = new ObjectUpgrade(400, UpgradeType.Range, "+1 range", rng3, Map.Level); + ObjectUpgrade rng1 = new ObjectUpgrade(250, UpgradeType.Range, "+1 range", rng2, Map.Level); + rng1.OnClick += delegate { Range += Map.TileWidth; }; rng2.OnClick += delegate { Range += Map.TileWidth; }; rng3.OnClick += delegate { Range += Map.TileWidth; }; + + ObjectUpgrade spd3 = new ObjectUpgrade(550, UpgradeType.Speed, "+0.1 speed", null, Map.Level); + ObjectUpgrade spd2 = new ObjectUpgrade(400, UpgradeType.Speed, "+0.1 speed", spd3, Map.Level); + ObjectUpgrade spd1 = new ObjectUpgrade(250, UpgradeType.Speed, "+0.1 speed", spd2, Map.Level); + spd1.OnClick += delegate { AttackSpeedMS -= 100; }; spd2.OnClick += delegate { AttackSpeedMS -= 100; }; spd3.OnClick += delegate { AttackSpeedMS -= 100; }; + + UpgradeList.Add(pop1); + UpgradeList.Add(rng1); + UpgradeList.Add(spd1); + } + public override void DrawUnique(float deltaTime) { @@ -39,7 +63,7 @@ namespace Penguloon.Objects public override void SpawnUnique() { - Projectiles.Add(new SnowballProjectile(this, this.Rotation)); + Projectiles.Add(new SnowballProjectile(this, this.Rotation, extraPops)); } } }
\ No newline at end of file diff --git a/Penguloon/Objects/HealthGeneratorObject.cs b/Penguloon/Objects/HealthGeneratorObject.cs index bce4d78..703cb60 100644 --- a/Penguloon/Objects/HealthGeneratorObject.cs +++ b/Penguloon/Objects/HealthGeneratorObject.cs @@ -41,6 +41,17 @@ namespace Penguloon.Objects Font = ContentManager.GetFont(StaticUIValues.IngameFont); } + public override void CreateUpgrades() + { + ObjectUpgrade spd3 = new ObjectUpgrade(1850, UpgradeType.Speed, "+15 health/r", null, Map.Level); + ObjectUpgrade spd2 = new ObjectUpgrade(1200, UpgradeType.Speed, "+15 health/r", spd3, Map.Level); + ObjectUpgrade spd1 = new ObjectUpgrade(850, UpgradeType.Speed, "+15 health/r", spd2, Map.Level); + spd1.OnClick += delegate { HealthToRegenerate += 15; }; spd2.OnClick += delegate { HealthToRegenerate += 15; }; spd3.OnClick += delegate { HealthToRegenerate += 15; }; + + UpgradeList.Add(spd1); + } + + public override void DrawUnique(float deltaTime) { if (DrawText) diff --git a/Penguloon/Objects/KingPenguinObject.cs b/Penguloon/Objects/KingPenguinObject.cs index 721497b..b9cb1b1 100644 --- a/Penguloon/Objects/KingPenguinObject.cs +++ b/Penguloon/Objects/KingPenguinObject.cs @@ -7,6 +7,8 @@ namespace Penguloon.Objects { public class KingPenguinObject : ObjectBase { + int extraPops = 0; + public KingPenguinObject(Vector2 position, Map map) : base(position, map) { this.Texture = ContentManager.GetTexture("Objects/penguin3"); @@ -27,6 +29,28 @@ namespace Penguloon.Objects this.infoText = map.Level.ParentScene.Main.Resources.GetString(Resource.String.ObjectKingPenguin); } + public override void CreateUpgrades() + { + ObjectUpgrade pop3 = new ObjectUpgrade(1850, UpgradeType.PopCount, "+1 pop", null, Map.Level); + ObjectUpgrade pop2 = new ObjectUpgrade(1200, UpgradeType.PopCount, "+1 pop", pop3, Map.Level); + ObjectUpgrade pop1 = new ObjectUpgrade(850, UpgradeType.PopCount, "+1 pop", pop2, Map.Level); + pop1.OnClick += delegate { extraPops++; }; pop2.OnClick += delegate { extraPops++; }; pop3.OnClick += delegate { extraPops++; }; + + ObjectUpgrade rng3 = new ObjectUpgrade(1850, UpgradeType.Range, "+1 range", null, Map.Level); + ObjectUpgrade rng2 = new ObjectUpgrade(1200, UpgradeType.Range, "+1 range", rng3, Map.Level); + ObjectUpgrade rng1 = new ObjectUpgrade(850, UpgradeType.Range, "+1 range", rng2, Map.Level); + rng1.OnClick += delegate { Range += Map.TileWidth; }; rng2.OnClick += delegate { Range += Map.TileWidth; }; rng3.OnClick += delegate { Range += Map.TileWidth; }; + + ObjectUpgrade spd3 = new ObjectUpgrade(1850, UpgradeType.Speed, "+0.1 speed", null, Map.Level); + ObjectUpgrade spd2 = new ObjectUpgrade(1200, UpgradeType.Speed, "+0.1 speed", spd3, Map.Level); + ObjectUpgrade spd1 = new ObjectUpgrade(850, UpgradeType.Speed, "+0.1 speed", spd2, Map.Level); + spd1.OnClick += delegate { AttackSpeedMS -= 100; }; spd2.OnClick += delegate { AttackSpeedMS -= 100; }; spd3.OnClick += delegate { AttackSpeedMS -= 100; }; + + UpgradeList.Add(pop1); + UpgradeList.Add(rng1); + UpgradeList.Add(spd1); + } + public override void DrawUnique(float deltaTime) { @@ -39,7 +63,7 @@ namespace Penguloon.Objects public override void SpawnUnique() { - Projectiles.Add(new SnowballProjectile(this, this.Rotation)); + Projectiles.Add(new SnowballProjectile(this, this.Rotation, extraPops)); } } }
\ No newline at end of file diff --git a/Penguloon/Objects/MortarObject.cs b/Penguloon/Objects/MortarObject.cs index c210044..e1d58ca 100644 --- a/Penguloon/Objects/MortarObject.cs +++ b/Penguloon/Objects/MortarObject.cs @@ -7,6 +7,8 @@ namespace Penguloon.Objects { class MortarObject : ObjectBase { + int extraPops = 0; + public MortarObject(Vector2 position, Map map) : base(position, map) { this.Texture = ContentManager.GetTexture("Objects/mortar"); @@ -29,6 +31,28 @@ namespace Penguloon.Objects this.infoText = map.Level.ParentScene.Main.Resources.GetString(Resource.String.ObjectMortar); } + public override void CreateUpgrades() + { + ObjectUpgrade pop3 = new ObjectUpgrade(850, UpgradeType.PopCount, "+1 pop", null, Map.Level); + ObjectUpgrade pop2 = new ObjectUpgrade(700, UpgradeType.PopCount, "+1 pop", pop3, Map.Level); + ObjectUpgrade pop1 = new ObjectUpgrade(550, UpgradeType.PopCount, "+1 pop", pop2, Map.Level); + pop1.OnClick += delegate { extraPops++; }; pop2.OnClick += delegate { extraPops++; }; pop3.OnClick += delegate { extraPops++; }; + + ObjectUpgrade rng3 = new ObjectUpgrade(850, UpgradeType.Range, "+1 range", null, Map.Level); + ObjectUpgrade rng2 = new ObjectUpgrade(700, UpgradeType.Range, "+1 range", rng3, Map.Level); + ObjectUpgrade rng1 = new ObjectUpgrade(550, UpgradeType.Range, "+1 range", rng2, Map.Level); + rng1.OnClick += delegate { Range += Map.TileWidth; }; rng2.OnClick += delegate { Range += Map.TileWidth; }; rng3.OnClick += delegate { Range += Map.TileWidth; }; + + ObjectUpgrade spd3 = new ObjectUpgrade(850, UpgradeType.Speed, "+0.1 speed", null, Map.Level); + ObjectUpgrade spd2 = new ObjectUpgrade(700, UpgradeType.Speed, "+0.1 speed", spd3, Map.Level); + ObjectUpgrade spd1 = new ObjectUpgrade(550, UpgradeType.Speed, "+0.1 speed", spd2, Map.Level); + spd1.OnClick += delegate { AttackSpeedMS -= 100; }; spd2.OnClick += delegate { AttackSpeedMS -= 100; }; spd3.OnClick += delegate { AttackSpeedMS -= 100; }; + + UpgradeList.Add(pop1); + UpgradeList.Add(rng1); + UpgradeList.Add(spd1); + } + public override void DrawUnique(float deltaTime) { @@ -41,7 +65,7 @@ namespace Penguloon.Objects public override void SpawnUnique() { - Projectiles.Add(new CannonballProjectile(this, this.Rotation)); + Projectiles.Add(new SnowballProjectile(this, this.Rotation, extraPops)); } } }
\ No newline at end of file diff --git a/Penguloon/Objects/PenguinObject.cs b/Penguloon/Objects/PenguinObject.cs index de48e4c..00aa1da 100644 --- a/Penguloon/Objects/PenguinObject.cs +++ b/Penguloon/Objects/PenguinObject.cs @@ -8,6 +8,8 @@ namespace Penguloon.Objects { class PenguinObject : ObjectBase { + int extraPops = 0; + public PenguinObject(Vector2 position, Map map) : base(position, map) { this.Texture = ContentManager.GetTexture("Objects/penguin1"); @@ -30,10 +32,24 @@ namespace Penguloon.Objects public override void CreateUpgrades() { - ObjectUpgrade upg = new ObjectUpgrade(12341234, UpgradeType.PopCount, "+2 pop", null, Map.Level); + ObjectUpgrade pop3 = new ObjectUpgrade(450, UpgradeType.PopCount, "+1 pop", null, Map.Level); + ObjectUpgrade pop2 = new ObjectUpgrade(300, UpgradeType.PopCount, "+1 pop", pop3, Map.Level); + ObjectUpgrade pop1 = new ObjectUpgrade(150, UpgradeType.PopCount, "+1 pop", pop2, Map.Level); + pop1.OnClick += delegate { extraPops++; }; pop2.OnClick += delegate { extraPops++; }; pop3.OnClick += delegate { extraPops++; }; + + ObjectUpgrade rng3 = new ObjectUpgrade(450, UpgradeType.Range, "+1 range", null, Map.Level); + ObjectUpgrade rng2 = new ObjectUpgrade(300, UpgradeType.Range, "+1 range", rng3, Map.Level); + ObjectUpgrade rng1 = new ObjectUpgrade(150, UpgradeType.Range, "+1 range", rng2, Map.Level); + rng1.OnClick += delegate { Range += Map.TileWidth; }; rng2.OnClick += delegate { Range += Map.TileWidth; }; rng3.OnClick += delegate { Range += Map.TileWidth; }; + + ObjectUpgrade spd3 = new ObjectUpgrade(450, UpgradeType.Speed, "+0.1 speed", null, Map.Level); + ObjectUpgrade spd2 = new ObjectUpgrade(300, UpgradeType.Speed, "+0.1 speed", spd3, Map.Level); + ObjectUpgrade spd1 = new ObjectUpgrade(150, UpgradeType.Speed, "+0.1 speed", spd2, Map.Level); + spd1.OnClick += delegate { AttackSpeedMS -= 100; }; spd2.OnClick += delegate { AttackSpeedMS -= 100; }; spd3.OnClick += delegate { AttackSpeedMS -= 100; }; - UpgradeList.Add(new ObjectUpgrade(100, UpgradeType.PopCount, "+1 pop", upg, Map.Level)); - UpgradeList.Add(new ObjectUpgrade(100, UpgradeType.Range, "+15 Range", null, Map.Level)); + UpgradeList.Add(pop1); + UpgradeList.Add(rng1); + UpgradeList.Add(spd1); } public override void DrawUnique(float deltaTime) @@ -48,7 +64,7 @@ namespace Penguloon.Objects public override void SpawnUnique() { - Projectiles.Add(new SnowballProjectile(this, this.Rotation)); + Projectiles.Add(new SnowballProjectile(this, this.Rotation, extraPops)); } } }
\ No newline at end of file diff --git a/Penguloon/Penguloon.csproj b/Penguloon/Penguloon.csproj index 4ef5e9b..a5330ce 100644 --- a/Penguloon/Penguloon.csproj +++ b/Penguloon/Penguloon.csproj @@ -86,6 +86,7 @@ <Compile Include="Enemies\RainbowBalloon.cs" /> <Compile Include="Enemies\RedBalloon.cs" /> <Compile Include="Enemies\YellowBalloon.cs" /> + <Compile Include="Levels\SandLevel2.cs" /> <Compile Include="Levels\SandLevel1.cs" /> <Compile Include="Levels\IceLevel3.cs" /> <Compile Include="Levels\IceLevel2.cs" /> diff --git a/Penguloon/Projectiles/ProjectileBase.cs b/Penguloon/Projectiles/ProjectileBase.cs index 4a4f1a2..6427c35 100644 --- a/Penguloon/Projectiles/ProjectileBase.cs +++ b/Penguloon/Projectiles/ProjectileBase.cs @@ -61,21 +61,26 @@ namespace Penguloon.Projectiles for(int i = 0; i < ParentObject.Map.Enemies.Count; i++) { - if (ParentObject.Map.Enemies[i].Dead) continue; - - if (projectileRec.Intersects(ParentObject.Map.Enemies[i].Box)) + try { - ParentObject.Map.Enemies[i].GetHit(); - - this.BaloonsPopped++; + if (ParentObject.Map.Enemies[i] != null) + if (ParentObject.Map.Enemies[i].Dead) continue; - // Remove object if it has hit maximum amount of targets - if(BaloonsPopped >= MaxBalloonPops) + if (projectileRec.Intersects(ParentObject.Map.Enemies[i].Box)) { - ParentObject.Projectiles.Remove(this); - return; + ParentObject.Map.Enemies[i].GetHit(); + + this.BaloonsPopped++; + + // Remove object if it has hit maximum amount of targets + if (BaloonsPopped >= MaxBalloonPops) + { + ParentObject.Projectiles.Remove(this); + return; + } } } + catch { } } } } diff --git a/Penguloon/Projectiles/SnowballProjectile.cs b/Penguloon/Projectiles/SnowballProjectile.cs index 9f72794..c841fa9 100644 --- a/Penguloon/Projectiles/SnowballProjectile.cs +++ b/Penguloon/Projectiles/SnowballProjectile.cs @@ -5,13 +5,13 @@ namespace Penguloon.Projectiles { public class SnowballProjectile : ProjectileBase { - public SnowballProjectile(ObjectBase ParentObject, float RotationAngle) : base(ParentObject, RotationAngle) + public SnowballProjectile(ObjectBase ParentObject, float RotationAngle, int extraPops = 0) : base(ParentObject, RotationAngle) { this.Texture = ContentManager.GetTexture("Bullets/penguin-ammo"); this.Speed = 250f; this.RotationSpeed = 5f; this.Size = new Vector2(ParentObject.Map.TileWidth / 2, ParentObject.Map.TileHeight / 2); - this.MaxBalloonPops = 1; + this.MaxBalloonPops = 1 + extraPops; Rectangle parentRec = new Rectangle(ParentObject.Position.ToPoint(), new Point(ParentObject.TileSpanX * ParentObject.Map.TileWidth, ParentObject.TileSpanY * ParentObject.Map.TileHeight)); |
