From db6811cc20139f52031600e64aa48c53bddd9a04 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 5 Jun 2020 23:40:31 +0200 Subject: [PATCH] attraction flags and haunted house modifier --- TouchyTickets/Attractions/Attraction.cs | 9 +++-- TouchyTickets/Attractions/AttractionFlags.cs | 13 ++++++ TouchyTickets/Attractions/AttractionType.cs | 37 +++++++++--------- .../Content/Localization/Localization.json | 4 +- TouchyTickets/Content/Textures/Ui.aseprite | Bin 2296 -> 2418 bytes TouchyTickets/Content/Textures/Ui.png | Bin 3622 -> 3805 bytes TouchyTickets/Upgrade.cs | 3 +- 7 files changed, 42 insertions(+), 24 deletions(-) create mode 100644 TouchyTickets/Attractions/AttractionFlags.cs diff --git a/TouchyTickets/Attractions/Attraction.cs b/TouchyTickets/Attractions/Attraction.cs index 7e62e82..dd47b4b 100644 --- a/TouchyTickets/Attractions/Attraction.cs +++ b/TouchyTickets/Attractions/Attraction.cs @@ -8,6 +8,8 @@ using MLEM.Extensions; using MLEM.Misc; using MLEM.Startup; using MLEM.Textures; +using static TouchyTickets.Attractions.AttractionFlags; +using static TouchyTickets.Attractions.AttractionType; namespace TouchyTickets.Attractions { [DataContract] @@ -28,11 +30,12 @@ namespace TouchyTickets.Attractions { public float Update(GameTime time, TimeSpan passed, ParkMap map, Point position) { var genRate = this.Type.GetGenerationRate(); - // only apply dynamic upgrades here, static ones go into the type - if (Upgrade.FoodCourtModifier.IsActive() && this.GetSurrounding(map, position, AttractionType.FoodCourt).Any()) + if (Upgrade.FoodCourtModifier.IsActive() && this.GetSurrounding(map, position, FoodCourt).Any()) genRate *= 2; - if (Upgrade.SpiralSlideModifier.IsActive() && this.GetSurrounding(map, position, AttractionType.SpiralSlide).Any()) + if (Upgrade.SpiralSlideModifier.IsActive() && this.GetSurrounding(map, position, SpiralSlide).Any()) genRate *= 2; + if (Upgrade.HauntedHouseModifier.IsActive() && this.Type.Flags.HasFlag(Relaxed) && this.GetSurrounding(map, position, HauntedHouse).Any()) + genRate *= 3; this.ticketPercentage += genRate * (float) passed.TotalSeconds; var amount = this.ticketPercentage.Floor(); diff --git a/TouchyTickets/Attractions/AttractionFlags.cs b/TouchyTickets/Attractions/AttractionFlags.cs new file mode 100644 index 0000000..d786cfd --- /dev/null +++ b/TouchyTickets/Attractions/AttractionFlags.cs @@ -0,0 +1,13 @@ +using System; + +namespace TouchyTickets.Attractions { + [Flags] + public enum AttractionFlags { + + None = 0, + Relaxed = 1, + FastCars = 2, + Walking = 4 + + } +} \ No newline at end of file diff --git a/TouchyTickets/Attractions/AttractionType.cs b/TouchyTickets/Attractions/AttractionType.cs index 6e553eb..e2b908b 100644 --- a/TouchyTickets/Attractions/AttractionType.cs +++ b/TouchyTickets/Attractions/AttractionType.cs @@ -3,23 +3,24 @@ using System.Collections.Generic; using Microsoft.Xna.Framework; using MLEM.Textures; using Newtonsoft.Json; +using static TouchyTickets.Attractions.AttractionFlags; namespace TouchyTickets.Attractions { [JsonConverter(typeof(Converter))] public class AttractionType { public static readonly Dictionary Attractions = new Dictionary(); - public static readonly AttractionType Carousel = Register(new AttractionType("Carousel", RectArea(1, 1), Attraction.Texture[0, 0, 1, 1], 0.5F, 50)); - public static readonly AttractionType MirrorHouse = Register(new AttractionType("MirrorHouse", RectArea(1, 1), Attraction.Texture[3, 0, 1, 1], 1, 150)); - public static readonly AttractionType FoodCourt = Register(new AttractionType("FoodCourt", RectArea(2, 1), Attraction.Texture[1, 0, 2, 1], 2F, 300)); - public static readonly AttractionType SpiralSlide = Register(new AttractionType("SpiralSlide", RectArea(1, 2), Attraction.Texture[5, 0, 1, 2], 4, 1200)); - public static readonly AttractionType HedgeMaze = Register(new AttractionType("HedgeMaze", RectArea(2, 2), Attraction.Texture[3, 3, 2, 2], 8, 2500)); - public static readonly AttractionType FerrisWheel = Register(new AttractionType("FerrisWheel", RectArea(2, 2), Attraction.Texture[0, 1, 2, 2], 12, 4000)); - public static readonly AttractionType FreefallCoaster = Register(new AttractionType("FreefallCoaster", new[,] {{true, false, true}, {true, true, true}}, Attraction.Texture[6, 0, 3, 2], 24, 8000)); - public static readonly AttractionType HauntedHouse = Register(new AttractionType("HauntedHouse", RectArea(2, 2), Attraction.Texture[3, 5, 2, 2], 30, 12000)); - public static readonly AttractionType WildMouse = Register(new AttractionType("WildMouse", RectArea(3, 2), Attraction.Texture[2, 1, 3, 2], 50, 24000)); - public static readonly AttractionType LogFlume = Register(new AttractionType("LogFlume", new[,] {{true, true, false}, {true, true, true}}, Attraction.Texture[0, 3, 3, 2], 75, 38000)); - public static readonly AttractionType WoodCoaster = Register(new AttractionType("WoodCoaster", RectArea(3, 3), Attraction.Texture[0, 5, 3, 3], 140, 60000)); + public static readonly AttractionType Carousel = Register(new AttractionType("Carousel", RectArea(1, 1), Attraction.Texture[0, 0, 1, 1], 0.5F, 50, Relaxed)); + public static readonly AttractionType MirrorHouse = Register(new AttractionType("MirrorHouse", RectArea(1, 1), Attraction.Texture[3, 0, 1, 1], 1, 150, Relaxed | Walking)); + public static readonly AttractionType FoodCourt = Register(new AttractionType("FoodCourt", RectArea(2, 1), Attraction.Texture[1, 0, 2, 1], 2F, 300, None)); + public static readonly AttractionType SpiralSlide = Register(new AttractionType("SpiralSlide", RectArea(1, 2), Attraction.Texture[5, 0, 1, 2], 4, 1200, Relaxed | Walking)); + public static readonly AttractionType HedgeMaze = Register(new AttractionType("HedgeMaze", RectArea(2, 2), Attraction.Texture[3, 3, 2, 2], 8, 2500, Relaxed | Walking)); + public static readonly AttractionType FerrisWheel = Register(new AttractionType("FerrisWheel", RectArea(2, 2), Attraction.Texture[0, 1, 2, 2], 12, 4000, Relaxed)); + public static readonly AttractionType FreefallCoaster = Register(new AttractionType("FreefallCoaster", new[,] {{true, false, true}, {true, true, true}}, Attraction.Texture[6, 0, 3, 2], 24, 8000, FastCars)); + public static readonly AttractionType HauntedHouse = Register(new AttractionType("HauntedHouse", RectArea(2, 2), Attraction.Texture[3, 5, 2, 2], 30, 12000, FastCars)); + public static readonly AttractionType WildMouse = Register(new AttractionType("WildMouse", RectArea(3, 2), Attraction.Texture[2, 1, 3, 2], 50, 24000, FastCars)); + public static readonly AttractionType LogFlume = Register(new AttractionType("LogFlume", new[,] {{true, true, false}, {true, true, true}}, Attraction.Texture[0, 3, 3, 2], 75, 38000, FastCars)); + public static readonly AttractionType WoodCoaster = Register(new AttractionType("WoodCoaster", RectArea(3, 3), Attraction.Texture[0, 5, 3, 3], 140, 60000, FastCars)); public readonly string Name; public readonly bool[,] Area; @@ -28,19 +29,19 @@ namespace TouchyTickets.Attractions { public readonly TextureRegion TextureRegion; private readonly float generationPerSecond; public readonly long InitialPrice; - private readonly Constructor create; + public readonly AttractionFlags Flags; - public AttractionType(string name, bool[,] area, TextureRegion texture, float generationPerSecond, long initialPrice, Constructor constructor = null) { + public AttractionType(string name, bool[,] area, TextureRegion texture, float generationPerSecond, long initialPrice, AttractionFlags flags) { this.Name = name; this.Area = area; this.TextureRegion = texture; this.generationPerSecond = generationPerSecond; this.InitialPrice = initialPrice; - this.create = constructor ?? (t => new Attraction(t)); + this.Flags = flags; } public Attraction Create() { - return this.create(this); + return new Attraction(this); } public float GetGenerationRate() { @@ -48,11 +49,9 @@ namespace TouchyTickets.Attractions { if (this == FerrisWheel && Upgrade.FerrisWheelModifier.IsActive()) genRate *= 4; - // this should contain all car-based coasters that are fast - if ((this == Carousel || this == WildMouse || this == WoodCoaster || this == FreefallCoaster) && Upgrade.RollerCoasterModifier.IsActive()) + if (this.Flags.HasFlag(FastCars) && Upgrade.RollerCoasterModifier.IsActive()) genRate *= 2; - // this should contain all coasters where people just walk around on their own - if ((this == SpiralSlide || this == HedgeMaze || this == MirrorHouse) && Upgrade.ManualRideModifier.IsActive()) + if (this.Flags.HasFlag(Walking) && Upgrade.ManualRideModifier.IsActive()) genRate *= 3; return genRate; diff --git a/TouchyTickets/Content/Localization/Localization.json b/TouchyTickets/Content/Localization/Localization.json index f3a370b..0cabc0d 100644 --- a/TouchyTickets/Content/Localization/Localization.json +++ b/TouchyTickets/Content/Localization/Localization.json @@ -54,5 +54,7 @@ "ManualRideModifier": "Push and Shove", "ManualRideModifierDescription": "Increases the amount of people allowed on manual (walking-based) rides, tripling their ticket sales.", "SpiralSlideModifier": "Sightseeing", - "SpiralSlideModifierDescription": "New binoculars allow spiral slide visitors to check out adjacent rides whose ticket sales are doubled as a result." + "SpiralSlideModifierDescription": "New binoculars allow spiral slide visitors to check out adjacent rides whose ticket sales are doubled as a result.", + "HauntedHouseModifier": "Spooky, Scary", + "HauntedHouseModifierDescription": "Haunted houses become even scarier, causing riders to seek relaxation immediately. Triples ticket sales for all adjacent relaxed rides." } \ No newline at end of file diff --git a/TouchyTickets/Content/Textures/Ui.aseprite b/TouchyTickets/Content/Textures/Ui.aseprite index 3acdc6aa339b2f058296948e3374703fb7b371df..82c85079ead50bbdd216bf31bf8fb6378f2f0fd0 100644 GIT binary patch delta 1928 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 m&;{2Iv+)ca0T}=wxBmxo`lWfYVRml-0000t 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 M07*qoM6N<$g4vDQ1^@s6 diff --git a/TouchyTickets/Upgrade.cs b/TouchyTickets/Upgrade.cs index e69bee3..b89c24b 100644 --- a/TouchyTickets/Upgrade.cs +++ b/TouchyTickets/Upgrade.cs @@ -15,7 +15,8 @@ namespace TouchyTickets { public static readonly Upgrade RollerCoasterModifier = Register(new Upgrade("RollerCoasterModifier", 2, Ui.Texture[3, 3])); public static readonly Upgrade ManualRideModifier = Register(new Upgrade("ManualRideModifier", 2, Ui.Texture[4, 3])); public static readonly Upgrade SpiralSlideModifier = Register(new Upgrade("SpiralSlideModifier", 2, Ui.Texture[5, 3])); - + public static readonly Upgrade HauntedHouseModifier = Register(new Upgrade("HauntedHouseModifier", 2, Ui.Texture[7, 3])); + public readonly string Name; public readonly int Price; public readonly TextureRegion Texture;