mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-10-30 08:11:25 +00:00
finish endgamedlg
This commit is contained in:
parent
84af2fa3fb
commit
e2eafd3824
7 changed files with 141 additions and 12 deletions
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
32
src/shaders/GuiClipFilter.hx
Normal file
32
src/shaders/GuiClipFilter.hx
Normal 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);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue