mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-10-30 08:11:25 +00:00
achievement logic
This commit is contained in:
parent
592a6d78ec
commit
632f7fd732
1 changed files with 140 additions and 0 deletions
|
|
@ -1,8 +1,11 @@
|
||||||
package gui;
|
package gui;
|
||||||
|
|
||||||
|
import hxd.res.BitmapFont;
|
||||||
import h3d.Vector;
|
import h3d.Vector;
|
||||||
import src.ResourceLoader;
|
import src.ResourceLoader;
|
||||||
import src.MarbleGame;
|
import src.MarbleGame;
|
||||||
|
import src.Settings;
|
||||||
|
import src.Mission;
|
||||||
|
|
||||||
class AchievementsGui extends GuiImage {
|
class AchievementsGui extends GuiImage {
|
||||||
public function new() {
|
public function new() {
|
||||||
|
|
@ -18,6 +21,29 @@ class AchievementsGui extends GuiImage {
|
||||||
achiev.extent = new Vector(176, 50);
|
achiev.extent = new Vector(176, 50);
|
||||||
this.addChild(achiev);
|
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) {
|
function loadButtonImages(path:String) {
|
||||||
var normal = ResourceLoader.getResource('${path}_n.png', ResourceLoader.getImage, this.imageResources).toTile();
|
var normal = ResourceLoader.getResource('${path}_n.png', ResourceLoader.getImage, this.imageResources).toTile();
|
||||||
var hover = ResourceLoader.getResource('${path}_h.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];
|
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 = '<font face="DomCasual24">Amateur Marbler</font><br/><font face="Arial14">Beat all Beginner levels.</font><br/>
|
||||||
|
<font face="DomCasual24">Experienced Marbler</font><br/><font face="Arial14">Beat all Intermediate levels.</font><br/>
|
||||||
|
<font face="DomCasual24">Pro Marbler</font><br/><font face="Arial14">Beat all Advanced levels.</font><br/>
|
||||||
|
<font face="DomCasual24">Skilled Marbler</font><br/><font face="Arial14">Beat all Expert Levels</font><br/>
|
||||||
|
<font face="DomCasual24">Marble Master</font><br/><font face="Arial14">Beat all of the Platinum Times.</font><br/>
|
||||||
|
<font face="DomCasual24">Legendary Marbler</font><br/><font face="Arial14">Beat all of the Ultimate Times.</font><br/>
|
||||||
|
<font face="DomCasual24">Egg Seeker</font><br/><font face="Arial14">Find any Easter Egg.</font><br/>
|
||||||
|
<font face="DomCasual24">Easter Bunny</font><br/><font face="Arial14">Find all of the Easter Eggs.</font>';
|
||||||
|
|
||||||
|
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"));
|
var closeButton = new GuiButton(loadButtonImages("data/ui/achiev/close"));
|
||||||
closeButton.position = new Vector(355, 426);
|
closeButton.position = new Vector(355, 426);
|
||||||
closeButton.extent = new Vector(95, 45);
|
closeButton.extent = new Vector(95, 45);
|
||||||
|
|
@ -33,5 +114,64 @@ class AchievementsGui extends GuiImage {
|
||||||
MarbleGame.canvas.popDialog(this);
|
MarbleGame.canvas.popDialog(this);
|
||||||
}
|
}
|
||||||
this.addChild(closeButton);
|
this.addChild(closeButton);
|
||||||
|
|
||||||
|
// Now do the actual achievement check logic
|
||||||
|
var completions:Map<String, Array<{
|
||||||
|
mission:Mission,
|
||||||
|
beatPar:Bool,
|
||||||
|
beatPlatinum:Bool,
|
||||||
|
beatUltimate:Bool,
|
||||||
|
beaten:Bool
|
||||||
|
}>> = [];
|
||||||
|
|
||||||
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue