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();
}
}