finish endgamedlg

This commit is contained in:
RandomityGuy 2022-11-19 12:11:55 +05:30
parent 84af2fa3fb
commit e2eafd3824
7 changed files with 141 additions and 12 deletions

View file

@ -224,6 +224,9 @@ class MarbleGame {
public function playMission(mission:Mission) {
canvas.clearContent();
if (world != null) {
world.dispose();
}
world = new MarbleWorld(scene, scene2d, mission, toRecord);
toRecord = false;
world.init();

View file

@ -29,6 +29,8 @@ class Mission {
public var id:Int;
public var isClaMission:Bool;
var next:Mission;
var imageResources:Array<Resource<Image>> = [];
var imgFileEntry:hxd.fs.FileEntry;
@ -72,6 +74,10 @@ class Mission {
return mission;
}
public function getNextMission() {
return this.next;
}
public function getPreviewImage(onLoaded:h2d.Tile->Void) {
if (!this.isClaMission) {
var basename = haxe.io.Path.withoutExtension(this.path);

View file

@ -8,6 +8,7 @@ class MissionList {
static var beginnerMissions:Array<Mission>;
static var intermediateMissions:Array<Mission>;
static var advancedMissions:Array<Mission>;
static var expertMissions:Array<Mission>;
static var customMissions:Array<Mission>;
static var missions:Map<String, Mission>;
@ -40,14 +41,24 @@ class MissionList {
}
}
difficultyMissions.sort((a, b) -> Std.parseInt(a.missionInfo.level) - Std.parseInt(b.missionInfo.level));
for (i in 0...difficultyMissions.length - 1) {
@:privateAccess difficultyMissions[i].next = difficultyMissions[i + 1];
}
return difficultyMissions;
}
beginnerMissions = parseDifficulty("beginner");
intermediateMissions = parseDifficulty("intermediate");
advancedMissions = parseDifficulty("advanced");
expertMissions = parseDifficulty("expert");
customMissions = parseDifficulty("expert");
@:privateAccess beginnerMissions[beginnerMissions.length - 1].next = intermediateMissions[0];
@:privateAccess intermediateMissions[intermediateMissions.length - 1].next = advancedMissions[0];
@:privateAccess advancedMissions[advancedMissions.length - 1].next = expertMissions[0];
@:privateAccess expertMissions[expertMissions.length - 1].next = beginnerMissions[0];
// parseCLAList();
_build = true;

View file

@ -1,5 +1,7 @@
package gui;
import hxd.BitmapData;
import h2d.Tile;
import src.MarbleGame;
import src.Settings.Score;
import src.Settings.Settings;
@ -55,23 +57,29 @@ class EndGameGui extends GuiControl {
nextLevel.position = new Vector(326, 307);
nextLevel.extent = new Vector(130, 110);
var nextLevelPreview = new GuiImage(ResourceLoader.getResource('data/missions/beginner/LearnTheWall-Hit.png', ResourceLoader.getImage,
this.imageResources)
.toTile());
var temprev = new BitmapData(1, 1);
temprev.setPixel(0, 0, 0);
var tmpprevtile = Tile.fromBitmap(temprev);
var nextLevelPreview = new GuiImage(tmpprevtile);
nextLevelPreview.position = new Vector(-15, 0);
nextLevelPreview.extent = new Vector(160, 110);
nextLevel.addChild(nextLevelPreview);
mission.getNextMission().getPreviewImage(t -> {
nextLevelPreview.bmp.tile = t;
});
var nextLevelBtn = new GuiButton(loadButtonImages('data/ui/endgame/level_window'));
nextLevelBtn.horizSizing = Width;
nextLevelBtn.vertSizing = Height;
nextLevelBtn.position = new Vector(0, 0);
nextLevelBtn.extent = new Vector(130, 110);
nextLevelBtn.pressedAction = function(self:GuiControl) {
// var nextMission = Mission.getNextMission(mission);
// if (nextMission != null) {
// continueFunc(self);
// }
var nextMission = mission.getNextMission();
if (nextMission != null) {
cast(this.parent, Canvas).marbleGame.playMission(nextMission);
}
};
nextLevel.addChild(nextLevelBtn);
@ -147,6 +155,36 @@ class EndGameGui extends GuiControl {
egFifthLine.text.filter = new DropShadow(1.414, 0.785, 0x7777777F, 1, 0, 0.4, 1, true);
pg.addChild(egFifthLine);
var egFirstLineScore = new GuiMLText(domcasual24, mlFontLoader);
egFirstLineScore.position = new Vector(475, 150);
egFirstLineScore.extent = new Vector(210, 25);
egFirstLineScore.text.filter = new DropShadow(1.414, 0.785, 0x7777777F, 1, 0, 0.4, 1, true);
pg.addChild(egFirstLineScore);
var egSecondLineScore = new GuiMLText(domcasual24, mlFontLoader);
egSecondLineScore.position = new Vector(476, 178);
egSecondLineScore.extent = new Vector(209, 25);
egSecondLineScore.text.filter = new DropShadow(1.414, 0.785, 0x7777777F, 1, 0, 0.4, 1, true);
pg.addChild(egSecondLineScore);
var egThirdLineScore = new GuiMLText(domcasual24, mlFontLoader);
egThirdLineScore.position = new Vector(476, 206);
egThirdLineScore.extent = new Vector(209, 25);
egThirdLineScore.text.filter = new DropShadow(1.414, 0.785, 0x7777777F, 1, 0, 0.4, 1, true);
pg.addChild(egThirdLineScore);
var egFourthLineScore = new GuiMLText(domcasual24, mlFontLoader);
egFourthLineScore.position = new Vector(476, 234);
egFourthLineScore.extent = new Vector(209, 25);
egFourthLineScore.text.filter = new DropShadow(1.414, 0.785, 0x7777777F, 1, 0, 0.4, 1, true);
pg.addChild(egFourthLineScore);
var egFifthLineScore = new GuiMLText(domcasual24, mlFontLoader);
egFifthLineScore.position = new Vector(476, 262);
egFifthLineScore.extent = new Vector(209, 25);
egFifthLineScore.text.filter = new DropShadow(1.414, 0.785, 0x7777777F, 1, 0, 0.4, 1, true);
pg.addChild(egFifthLineScore);
var egTitleText = new GuiMLText(expo50, mlFontLoader);
egTitleText.text.textColor = 0xffff00;
egTitleText.text.text = '<font color="#FFFFFF" face="DomCasual64">Your Time:</font>';
@ -201,16 +239,22 @@ class EndGameGui extends GuiControl {
egFourthLine.text.text = '<p align="left"><font color="#A4A4A4">4. </font>${scoreData[3].name}</p>';
egFifthLine.text.text = '<p align="left"><font color="#949494">5. </font>${scoreData[4].name}</p>';
var lineelems = [egFirstLine, egSecondLine, egThirdLine, egFourthLine, egFifthLine];
var lineelems = [
egFirstLineScore,
egSecondLineScore,
egThirdLineScore,
egFourthLineScore,
egFifthLineScore
];
for (i in 0...5) {
if (scoreData[i].time < mission.ultimateTime) {
lineelems[i].text.text += '<p align="right"><font color="#FFDD22">${Util.formatTime(scoreData[i].time)}</font></p>';
lineelems[i].text.text = '<font color="#FFDD22">${Util.formatTime(scoreData[i].time)}</font>';
} else {
if (scoreData[i].time < mission.goldTime) {
lineelems[i].text.text += '<p align="right"><font color="#CCCCCC">${Util.formatTime(scoreData[i].time)}</font></p>';
lineelems[i].text.text = '<font color="#CCCCCC">${Util.formatTime(scoreData[i].time)}</font>';
} else {
lineelems[i].text.text += '<p align="right">${Util.formatTime(scoreData[i].time)}</p>';
lineelems[i].text.text = '${Util.formatTime(scoreData[i].time)}';
}
}
}
@ -257,7 +301,7 @@ class EndGameGui extends GuiControl {
}
Settings.save();
if (idx <= 2) {
if (idx <= 4) {
var end = new EnterNameDlg(idx, (name) -> {
if (scoreSubmitted)
return;
@ -266,6 +310,24 @@ class EndGameGui extends GuiControl {
scoreData.push(myScore);
scoreData.sort((a, b) -> a.time == b.time ? 0 : (a.time > b.time ? 1 : -1));
egFirstLine.text.text = '<p align="left"><font color="#EEC884">1. </font>${scoreData[0].name}</p>';
egSecondLine.text.text = '<p align="left"><font color="#CDCDCD">2. </font>${scoreData[1].name}</p>';
egThirdLine.text.text = '<p align="left"><font color="#C9AFA0">3. </font>${scoreData[2].name}</p>';
egFourthLine.text.text = '<p align="left"><font color="#A4A4A4">4. </font>${scoreData[3].name}</p>';
egFifthLine.text.text = '<p align="left"><font color="#949494">5. </font>${scoreData[4].name}</p>';
for (i in 0...5) {
if (scoreData[i].time < mission.ultimateTime) {
lineelems[i].text.text = '<font color="#FFDD22">${Util.formatTime(scoreData[i].time)}</font>';
} else {
if (scoreData[i].time < mission.goldTime) {
lineelems[i].text.text = '<font color="#CCCCCC">${Util.formatTime(scoreData[i].time)}</font>';
} else {
lineelems[i].text.text = '${Util.formatTime(scoreData[i].time)}';
}
}
}
Settings.saveScore(mission.path, myScore);
scoreSubmitted = true;

View file

@ -1,5 +1,7 @@
package gui;
import shaders.GuiClipFilter;
import h2d.filter.Mask;
import gui.GuiControl.MouseState;
import h2d.Scene;
import h2d.Tile;
@ -12,6 +14,8 @@ class GuiImage extends GuiControl {
public var pressedAction:GuiControl->Void = null;
public var doClipping:Bool = true;
public function new(texture:Tile) {
super();
this.bmp = new Bitmap(texture);
@ -19,6 +23,16 @@ class GuiImage extends GuiControl {
public override function render(scene2d:Scene) {
var renderRect = this.getRenderRectangle();
var hittestRect = this.getHitTestRect();
if (doClipping
&& (hittestRect.position.x > renderRect.position.x
|| hittestRect.position.y > renderRect.position.y
|| hittestRect.extent.x < renderRect.extent.x
|| hittestRect.extent.y < renderRect.extent.y)) {
if (bmp.filter == null) {
bmp.filter = new GuiClipFilter(hittestRect);
}
}
bmp.setPosition(Math.floor(renderRect.position.x), Math.floor(renderRect.position.y));
// bmp.scaleX = renderRect.extent.x / bmp.tile.width;
// bmp.scaleY = renderRect.extent.y / bmp.tile.height;

View file

@ -164,6 +164,7 @@ class PlayGui {
.toTile());
timerTransparency.position = new Vector(14, -7);
timerTransparency.extent = new Vector(228, 71);
timerTransparency.doClipping = false;
timerCtrl.addChild(timerTransparency);
timerNumbers[0].position = new Vector(23, 0);

View file

@ -0,0 +1,32 @@
package shaders;
import h3d.Vector;
import h2d.Mask;
import h2d.filter.Shader;
import h2d.Object;
import h2d.col.Bounds;
import h2d.col.Point;
import gui.Rect;
import h2d.RenderContext;
import h2d.filter.Filter;
class GuiClipFilter extends Filter {
public var renderRect:Rect;
public function new(rect:Rect) {
super();
this.renderRect = rect;
}
override function draw(ctx:RenderContext, t:h2d.Tile) {
var tout = ctx.textures.allocTileTarget("guiClip", t);
ctx.pushTarget(tout);
ctx.flush();
ctx.clipRenderZone(renderRect.position.x, renderRect.position.y, renderRect.extent.x, renderRect.extent.y);
h3d.pass.Copy.run(t.getTexture(), tout);
ctx.flush();
ctx.popRenderZone();
ctx.popTarget();
return h2d.Tile.fromTexture(tout);
}
}