diff --git a/TouchyTickets/Content/Localization/Localization.json b/TouchyTickets/Content/Localization/Localization.json index ae65e80..42247b9 100644 --- a/TouchyTickets/Content/Localization/Localization.json +++ b/TouchyTickets/Content/Localization/Localization.json @@ -6,6 +6,7 @@ "Yes": "Yes", "Okay": "Okay", "RequiresTickets": "1 requires {0}", + "AppliedUpgrades": "Active Upgrades", "Tutorial1": "Hi! Welcome to Touchy Tickets. To start the game, simply tap the ticket booth to sell a . Start by racking up 50!", "Tutorial2": "Great! Now, you can buy your first attraction. Access the menu on the right by swiping and purchase a carousel.", "Tutorial3": "This is your park map. The area inside the fence is what belongs to you. Place the carousel by dragging it to the perfect location and then pressing the button below.", diff --git a/TouchyTickets/Ui.cs b/TouchyTickets/Ui.cs index 5e9278f..45f18c2 100644 --- a/TouchyTickets/Ui.cs +++ b/TouchyTickets/Ui.cs @@ -204,30 +204,7 @@ namespace TouchyTickets { var upgradeList = upgradeUi.AddChild(new Panel(Anchor.AutoLeft, new Vector2(1, 0.73F), Vector2.Zero, false, true, new Point(10, 30), false) { ChildPadding = new Padding(5, 15, 5, 5) }); - foreach (var upgrade in Upgrade.Upgrades.Values) { - var button = upgradeList.AddChild(new Button(Anchor.AutoLeft, new Vector2(1)) { - SetHeightBasedOnChildren = true, - PositionOffset = new Vector2(0, 1), - ChildPadding = new Vector2(4), - OnPressed = e => { - GameImpl.Instance.Stars -= upgrade.Price; - GameImpl.Instance.AppliedUpgrades.Add(upgrade); - upgrade.OnApplied(); - } - }); - button.OnUpdated += (e, time) => { - // we want to hide if we're active, or if we still need a dependency to be active - button.IsHidden = upgrade.IsActive() || upgrade.Dependencies.Any(u => !u.IsActive()); - button.IsDisabled = GameImpl.Instance.Stars < upgrade.Price; - }; - button.AddChild(new Paragraph(Anchor.TopCenter, 1, Localization.Get(upgrade.Name), true)); - button.AddChild(new Image(Anchor.CenterLeft, new Vector2(0.2F, 40), upgrade.Texture) { - Padding = new Vector2(4) - }); - var right = button.AddChild(new Group(Anchor.TopRight, new Vector2(0.8F, 1)) {CanBeMoused = false}); - right.AddChild(new Paragraph(Anchor.TopRight, 1, p => upgrade.Price + "", true)); - right.AddChild(new Paragraph(Anchor.AutoLeft, 1, Localization.Get(upgrade.Name + "Description"), true) {TextScale = 0.08F}); - } + PopulateUpgradeList(upgradeList); this.uiSystem.Add("Upgrade", upgradeUi); this.swipeRelations = new Element[] {upgradeUi, main, buyUi}; @@ -334,6 +311,42 @@ namespace TouchyTickets { CoroutineHandler.Start(Impl()); } + private static void PopulateUpgradeList(Element upgradeList) { + upgradeList.RemoveChildren(c => !(c is ScrollBar)); + var reachedActive = false; + foreach (var upgrade in Upgrade.Upgrades.Values.OrderBy(u => u.IsActive())) { + // the first active upgrade should be preceded by a section separator paragraph + if (!reachedActive && upgrade.IsActive()) { + reachedActive = true; + upgradeList.AddChild(new Paragraph(Anchor.AutoCenter, 1, Localization.Get("AppliedUpgrades"), true) { + PositionOffset = new Vector2(0, 4) + }); + } + var button = upgradeList.AddChild(new Button(Anchor.AutoLeft, new Vector2(1)) { + SetHeightBasedOnChildren = true, + PositionOffset = new Vector2(0, 1), + ChildPadding = new Vector2(4), + OnPressed = e => { + GameImpl.Instance.Stars -= upgrade.Price; + GameImpl.Instance.AppliedUpgrades.Add(upgrade); + upgrade.OnApplied(); + PopulateUpgradeList(upgradeList); + } + }); + button.OnUpdated += (e, time) => { + button.IsHidden = upgrade.Dependencies.Any(u => !u.IsActive()); + button.IsDisabled = upgrade.IsActive() || GameImpl.Instance.Stars < upgrade.Price; + }; + button.AddChild(new Paragraph(Anchor.TopCenter, 1, Localization.Get(upgrade.Name), true)); + button.AddChild(new Image(Anchor.CenterLeft, new Vector2(0.2F, 40), upgrade.Texture) { + Padding = new Vector2(4) + }); + var right = button.AddChild(new Group(Anchor.TopRight, new Vector2(0.8F, 1)) {CanBeMoused = false}); + right.AddChild(new Paragraph(Anchor.TopRight, 1, p => upgrade.Price + "", true)); + right.AddChild(new Paragraph(Anchor.AutoLeft, 1, Localization.Get(upgrade.Name + "Description"), true) {TextScale = 0.08F}); + } + } + private static IEnumerator WobbleElement(CustomDrawGroup element, float intensity = 0.02F) { var sin = 0F; while (sin < MathHelper.Pi) {