From 632f7fd732ad1c2425748e88755ad4cd5970d850 Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Mon, 21 Nov 2022 14:32:07 +0530 Subject: [PATCH] achievement logic --- src/gui/AchievementsGui.hx | 140 +++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) diff --git a/src/gui/AchievementsGui.hx b/src/gui/AchievementsGui.hx index 6c3426a3..18ff028e 100644 --- a/src/gui/AchievementsGui.hx +++ b/src/gui/AchievementsGui.hx @@ -1,8 +1,11 @@ package gui; +import hxd.res.BitmapFont; import h3d.Vector; import src.ResourceLoader; import src.MarbleGame; +import src.Settings; +import src.Mission; class AchievementsGui extends GuiImage { public function new() { @@ -18,6 +21,29 @@ class AchievementsGui extends GuiImage { achiev.extent = new Vector(176, 50); this.addChild(achiev); + var arial14fontdata = ResourceLoader.getFileEntry("data/font/Arial Bold.fnt"); + var arial14b = new BitmapFont(arial14fontdata.entry); + @:privateAccess arial14b.loader = ResourceLoader.loader; + var arial14 = arial14b.toSdfFont(cast 12 * Settings.uiScale, MultiChannel); + + var domcasual32fontdata = ResourceLoader.getFileEntry("data/font/DomCasualD.fnt"); + var domcasual32b = new BitmapFont(domcasual32fontdata.entry); + @:privateAccess domcasual32b.loader = ResourceLoader.loader; + var domcasual32 = domcasual32b.toSdfFont(cast 26 * Settings.uiScale, MultiChannel); + var domcasual64 = domcasual32b.toSdfFont(cast 58 * Settings.uiScale, MultiChannel); + var domcasual24 = domcasual32b.toSdfFont(cast 20 * Settings.uiScale, MultiChannel); + + function mlFontLoader(text:String) { + switch (text) { + case "DomCasual24": + return domcasual24; + case "Arial14": + return arial14; + default: + return null; + } + } + function loadButtonImages(path:String) { var normal = ResourceLoader.getResource('${path}_n.png', ResourceLoader.getImage, this.imageResources).toTile(); var hover = ResourceLoader.getResource('${path}_h.png', ResourceLoader.getImage, this.imageResources).toTile(); @@ -26,6 +52,61 @@ class AchievementsGui extends GuiImage { return [normal, hover, pressed, disabled]; } + var achievText = new GuiMLText(domcasual32, mlFontLoader); + achievText.position = new Vector(156, 60); + achievText.extent = new Vector(262, 410); + achievText.text.textColor = 0; + achievText.text.text = 'Amateur Marbler
Beat all Beginner levels.
+Experienced Marbler
Beat all Intermediate levels.
+Pro Marbler
Beat all Advanced levels.
+Skilled Marbler
Beat all Expert Levels
+Marble Master
Beat all of the Platinum Times.
+Legendary Marbler
Beat all of the Ultimate Times.
+Egg Seeker
Find any Easter Egg.
+Easter Bunny
Find all of the Easter Eggs.'; + + this.addChild(achievText); + + var bmp1 = new GuiImage(ResourceLoader.getResource("data/ui/achiev/nonachiev.png", ResourceLoader.getImage, this.imageResources).toTile()); + bmp1.position = new Vector(39, 62); + bmp1.extent = new Vector(113, 44); + this.addChild(bmp1); + + var bmp2 = new GuiImage(ResourceLoader.getResource("data/ui/achiev/nonachiev.png", ResourceLoader.getImage, this.imageResources).toTile()); + bmp2.position = new Vector(35, 115); + bmp2.extent = new Vector(117, 44); + this.addChild(bmp2); + + var bmp3 = new GuiImage(ResourceLoader.getResource("data/ui/achiev/nonachiev.png", ResourceLoader.getImage, this.imageResources).toTile()); + bmp3.position = new Vector(30, 168); + bmp3.extent = new Vector(122, 44); + this.addChild(bmp3); + + var bmp4 = new GuiImage(ResourceLoader.getResource("data/ui/achiev/nonachiev.png", ResourceLoader.getImage, this.imageResources).toTile()); + bmp4.position = new Vector(30, 221); + bmp4.extent = new Vector(122, 44); + this.addChild(bmp4); + + var bmp5 = new GuiImage(ResourceLoader.getResource("data/ui/achiev/nonachiev.png", ResourceLoader.getImage, this.imageResources).toTile()); + bmp5.position = new Vector(36, 274); + bmp5.extent = new Vector(116, 44); + this.addChild(bmp5); + + var bmp6 = new GuiImage(ResourceLoader.getResource("data/ui/achiev/nonachiev.png", ResourceLoader.getImage, this.imageResources).toTile()); + bmp6.position = new Vector(37, 327); + bmp6.extent = new Vector(115, 44); + this.addChild(bmp6); + + var bmp7 = new GuiImage(ResourceLoader.getResource("data/ui/achiev/nonachiev.png", ResourceLoader.getImage, this.imageResources).toTile()); + bmp7.position = new Vector(38, 380); + bmp7.extent = new Vector(114, 44); + this.addChild(bmp7); + + var bmp8 = new GuiImage(ResourceLoader.getResource("data/ui/achiev/nonachiev.png", ResourceLoader.getImage, this.imageResources).toTile()); + bmp8.position = new Vector(39, 433); + bmp8.extent = new Vector(113, 44); + this.addChild(bmp8); + var closeButton = new GuiButton(loadButtonImages("data/ui/achiev/close")); closeButton.position = new Vector(355, 426); closeButton.extent = new Vector(95, 45); @@ -33,5 +114,64 @@ class AchievementsGui extends GuiImage { MarbleGame.canvas.popDialog(this); } this.addChild(closeButton); + + // Now do the actual achievement check logic + var completions:Map> = []; + + var totalPlatinums = 0; + var totalUltimates = 0; + + for (difficulty => missions in MissionList.missionList["platinum"]) { + completions.set(difficulty, missions.map(mis -> { + var misScores = Settings.getScores(mis.path); + if (misScores.length == 0) { + return { + mission: mis, + beatPar: false, + beatPlatinum: false, + beatUltimate: false, + beaten: false + } + } + var bestTime = misScores[0]; + var beatPar = bestTime.time < mis.qualifyTime; + var beatPlatinum = bestTime.time < mis.goldTime; + var beatUltimate = bestTime.time < mis.ultimateTime; + var beaten = beatPar || beatPlatinum || beatUltimate; + return { + mission: mis, + beatPar: beatPar, + beatPlatinum: beatPlatinum, + beatUltimate: beatUltimate, + beaten: beaten + }; + })); + } + + var beginnerFinishAchiev = completions["beginner"].filter(x -> !x.beatPar).length == 0; + var intermediateFinishAchiev = completions["intermediate"].filter(x -> !x.beatPar).length == 0; + var advancedFinishAchiev = completions["advanced"].filter(x -> !x.beatPar).length == 0; + var expertFinishAchiev = completions["expert"].filter(x -> !x.beatPar).length == 0; + var beatPlatinumAchiev = totalPlatinums == 120; + var beatUltimateAchiev = totalUltimates == 120; + + if (beginnerFinishAchiev) + bmp1.bmp.tile = ResourceLoader.getResource("data/ui/achiev/n1.png", ResourceLoader.getImage, this.imageResources).toTile(); + if (intermediateFinishAchiev) + bmp2.bmp.tile = ResourceLoader.getResource("data/ui/achiev/n2.png", ResourceLoader.getImage, this.imageResources).toTile(); + if (advancedFinishAchiev) + bmp3.bmp.tile = ResourceLoader.getResource("data/ui/achiev/n3.png", ResourceLoader.getImage, this.imageResources).toTile(); + if (expertFinishAchiev) + bmp4.bmp.tile = ResourceLoader.getResource("data/ui/achiev/n4.png", ResourceLoader.getImage, this.imageResources).toTile(); + if (beatPlatinumAchiev) + bmp5.bmp.tile = ResourceLoader.getResource("data/ui/achiev/n6.png", ResourceLoader.getImage, this.imageResources).toTile(); + if (beatUltimateAchiev) + bmp6.bmp.tile = ResourceLoader.getResource("data/ui/achiev/n5.png", ResourceLoader.getImage, this.imageResources).toTile(); } }