playgui and powerup names

This commit is contained in:
RandomityGuy 2023-06-17 02:23:46 +05:30
parent ad0f5bfe67
commit 5b3da1277d
13 changed files with 249 additions and 81 deletions

View file

@ -1865,7 +1865,7 @@ class Marble extends GameObject {
} }
public function useBlast() { public function useBlast() {
if (this.level.blastAmount < 0.2 || this.level.game != "ultra") if (this.level.blastAmount < 0.25 || this.level.game != "ultra")
return; return;
var impulse = this.level.currentUp.multiply(Math.max(Math.sqrt(this.level.blastAmount), this.level.blastAmount) * 10); var impulse = this.level.currentUp.multiply(Math.max(Math.sqrt(this.level.blastAmount), this.level.blastAmount) * 10);
this.applyImpulse(impulse); this.applyImpulse(impulse);

View file

@ -139,6 +139,8 @@ class MarbleWorld extends Scheduler {
public var gemCount:Int = 0; public var gemCount:Int = 0;
public var blastAmount:Float = 0; public var blastAmount:Float = 0;
var renderBlastAmount:Float = 0;
public var cursorLock:Bool = true; public var cursorLock:Bool = true;
var timeTravelSound:Channel; var timeTravelSound:Channel;
@ -446,6 +448,7 @@ class MarbleWorld extends Scheduler {
this.bonusTime = 0; this.bonusTime = 0;
this.outOfBounds = false; this.outOfBounds = false;
this.blastAmount = 0; this.blastAmount = 0;
this.renderBlastAmount = 0;
this.outOfBoundsTime = null; this.outOfBoundsTime = null;
this.finishTime = null; this.finishTime = null;
@ -1173,9 +1176,12 @@ class MarbleWorld extends Scheduler {
function updateBlast(timestate:TimeState) { function updateBlast(timestate:TimeState) {
if (this.game == "ultra") { if (this.game == "ultra") {
if (this.blastAmount < 1) { if (this.blastAmount < 1) {
this.blastAmount = Util.clamp(this.blastAmount + (timeState.dt / 25), 0, 1); this.blastAmount = Util.clamp(this.blastAmount + (timeState.dt / 30), 0, 1);
this.renderBlastAmount = this.blastAmount;
} else {
this.renderBlastAmount = Math.min(this.blastAmount, timestate.dt * 0.75 + this.renderBlastAmount);
} }
this.playGui.setBlastValue(this.blastAmount); this.playGui.setBlastValue(this.renderBlastAmount);
} }
} }
@ -1245,7 +1251,7 @@ class MarbleWorld extends Scheduler {
// Show a notification (and play a sound) based on the gems remaining // Show a notification (and play a sound) based on the gems remaining
if (this.gemCount == this.totalGems) { if (this.gemCount == this.totalGems) {
string = "You have all the diamonds, head for the finish!"; string = "You have all the gems, head for the finish!";
// if (!this.rewinding) // if (!this.rewinding)
AudioManager.playSound(ResourceLoader.getResource('data/sound/gem_all.wav', ResourceLoader.getAudio, this.soundResources)); AudioManager.playSound(ResourceLoader.getResource('data/sound/gem_all.wav', ResourceLoader.getAudio, this.soundResources));
@ -1256,13 +1262,13 @@ class MarbleWorld extends Scheduler {
// this.touchFinish(completionOfImpact); // this.touchFinish(completionOfImpact);
// } // }
} else { } else {
string = "You picked up a diamond. "; string = "You picked up a gem. ";
var remaining = this.totalGems - this.gemCount; var remaining = this.totalGems - this.gemCount;
if (remaining == 1) { if (remaining == 1) {
string += "Only one diamond to go!"; string += "Only one gem to go!";
} else { } else {
string += '${remaining} diamonds to go!'; string += '${remaining} gems to go!';
} }
// if (!this.rewinding) // if (!this.rewinding)
@ -1402,7 +1408,7 @@ class MarbleWorld extends Scheduler {
if (this.gemCount < this.totalGems) { if (this.gemCount < this.totalGems) {
AudioManager.playSound(ResourceLoader.getResource('data/sound/missinggems.wav', ResourceLoader.getAudio, this.soundResources)); AudioManager.playSound(ResourceLoader.getResource('data/sound/missinggems.wav', ResourceLoader.getAudio, this.soundResources));
displayAlert("You can't finish without all the diamonds!!"); displayAlert("You can't finish without all the gems!");
} else { } else {
this.endPad.spawnFirework(this.timeState); this.endPad.spawnFirework(this.timeState);
this.finishTime = this.timeState.clone(); this.finishTime = this.timeState.clone();

View file

@ -18,6 +18,7 @@ enum HorizSizing {
Left; Left;
Center; Center;
Relative; Relative;
Height;
} }
enum VertSizing { enum VertSizing {
@ -26,6 +27,7 @@ enum VertSizing {
Top; Top;
Center; Center;
Relative; Relative;
Width;
} }
typedef MouseState = { typedef MouseState = {
@ -40,6 +42,8 @@ class GuiControl {
var position:Vector; var position:Vector;
var extent:Vector; var extent:Vector;
var xScale:Float = 1;
var yScale:Float = 1;
var children:Array<GuiControl> = []; var children:Array<GuiControl> = [];
@ -130,7 +134,7 @@ class GuiControl {
if (this.parent != null) { if (this.parent != null) {
parentRect = this.parent.getRenderRectangle(); parentRect = this.parent.getRenderRectangle();
rect.position = parentRect.position.add(this.position.multiply(uiScaleFactor)); rect.position = parentRect.position.add(new Vector(this.position.x * uiScaleFactor * xScale, this.position.y * uiScaleFactor * yScale));
} }
var scaleFactor = 1.0 / Window.getInstance().windowToPixelRatio; var scaleFactor = 1.0 / Window.getInstance().windowToPixelRatio;
@ -144,6 +148,14 @@ class GuiControl {
else else
rect.extent.x = Window.getInstance().width * scaleFactor; rect.extent.x = Window.getInstance().width * scaleFactor;
} }
if (this.horizSizing == HorizSizing.Height) {
if (this.parent != null)
rect.extent.x = parentRect.extent.y * (this.extent.y / parent.extent.y);
else
rect.extent.x = Window.getInstance().height * scaleFactor;
}
if (this.vertSizing == VertSizing.Height) { if (this.vertSizing == VertSizing.Height) {
if (this.parent != null) if (this.parent != null)
rect.extent.y = parentRect.extent.y * (this.extent.y / parent.extent.y); rect.extent.y = parentRect.extent.y * (this.extent.y / parent.extent.y);
@ -151,40 +163,47 @@ class GuiControl {
rect.extent.y = Window.getInstance().height * scaleFactor; rect.extent.y = Window.getInstance().height * scaleFactor;
} }
if (this.vertSizing == VertSizing.Width) {
if (this.parent != null)
rect.extent.y = parentRect.extent.x * (this.extent.x / parent.extent.x);
else
rect.extent.y = Window.getInstance().width * scaleFactor;
}
if (this.horizSizing == HorizSizing.Center) { if (this.horizSizing == HorizSizing.Center) {
if (this.parent != null) { if (this.parent != null) {
rect.position.x = parentRect.position.x + parentRect.extent.x / 2 - (rect.extent.x * uiScaleFactor) / 2; rect.position.x = parentRect.position.x + parentRect.extent.x / 2 - (rect.extent.x * uiScaleFactor * xScale) / 2;
rect.extent.x *= uiScaleFactor; rect.extent.x *= uiScaleFactor * xScale;
} }
} }
if (this.vertSizing == VertSizing.Center) { if (this.vertSizing == VertSizing.Center) {
if (this.parent != null) { if (this.parent != null) {
rect.position.y = parentRect.position.y + parentRect.extent.y / 2 - (rect.extent.y * uiScaleFactor) / 2; rect.position.y = parentRect.position.y + parentRect.extent.y / 2 - (rect.extent.y * uiScaleFactor * yScale) / 2;
rect.extent.y *= uiScaleFactor; rect.extent.y *= uiScaleFactor * yScale;
} }
} }
if (this.horizSizing == HorizSizing.Right) { if (this.horizSizing == HorizSizing.Right) {
if (this.parent != null) { if (this.parent != null) {
rect.position.x = parentRect.position.x + this.position.x * uiScaleFactor; rect.position.x = parentRect.position.x + this.position.x * uiScaleFactor * xScale;
rect.extent.x *= uiScaleFactor; rect.extent.x *= uiScaleFactor * xScale;
} }
} }
if (this.vertSizing == VertSizing.Bottom) { if (this.vertSizing == VertSizing.Bottom) {
if (this.parent != null) { if (this.parent != null) {
rect.position.y = parentRect.position.y + this.position.y * uiScaleFactor; rect.position.y = parentRect.position.y + this.position.y * uiScaleFactor * yScale;
rect.extent.y *= uiScaleFactor; rect.extent.y *= uiScaleFactor * yScale;
} }
} }
if (this.horizSizing == HorizSizing.Left) { if (this.horizSizing == HorizSizing.Left) {
if (this.parent != null) { if (this.parent != null) {
rect.position.x = parentRect.position.x + parentRect.extent.x - (parent.extent.x - this.position.x) * uiScaleFactor; rect.position.x = parentRect.position.x + parentRect.extent.x - (parent.extent.x - this.position.x) * uiScaleFactor * xScale;
rect.extent.x *= uiScaleFactor; rect.extent.x *= uiScaleFactor * xScale;
} }
} }
if (this.vertSizing == VertSizing.Top) { if (this.vertSizing == VertSizing.Top) {
if (this.parent != null) { if (this.parent != null) {
rect.position.y = parentRect.position.y + parentRect.extent.y - (parent.extent.y - this.position.y) * uiScaleFactor; rect.position.y = parentRect.position.y + parentRect.extent.y - (parent.extent.y - this.position.y) * uiScaleFactor * yScale;
rect.extent.y *= uiScaleFactor; rect.extent.y *= uiScaleFactor * yScale;
} }
} }
if (this.parent != null) { if (this.parent != null) {

View file

@ -1,5 +1,6 @@
package gui; package gui;
import h3d.Matrix;
import src.ProfilerUI; import src.ProfilerUI;
import hxd.App; import hxd.App;
import hxd.res.Image; import hxd.res.Image;
@ -47,6 +48,7 @@ class PlayGui {
var gemCountNumbers:Array<GuiAnim> = []; var gemCountNumbers:Array<GuiAnim> = [];
var gemCountSlash:GuiImage; var gemCountSlash:GuiImage;
var gemHUD:GuiImage;
var powerupBox:GuiAnim; var powerupBox:GuiAnim;
var RSGOCenterText:Anim; var RSGOCenterText:Anim;
@ -57,12 +59,14 @@ class PlayGui {
var blastBar:GuiControl; var blastBar:GuiControl;
var blastFill:GuiImage; var blastFill:GuiImage;
var blastFillUltra:GuiImage;
var blastFrame:GuiImage; var blastFrame:GuiImage;
var imageResources:Array<Resource<Image>> = []; var imageResources:Array<Resource<Image>> = [];
var textureResources:Array<Resource<Texture>> = []; var textureResources:Array<Resource<Texture>> = [];
var soundResources:Array<Resource<Sound>> = []; var soundResources:Array<Resource<Sound>> = [];
var playGuiCtrlOuter:GuiControl;
var playGuiCtrl:GuiControl; var playGuiCtrl:GuiControl;
var resizeEv:Void->Void; var resizeEv:Void->Void;
@ -73,9 +77,11 @@ class PlayGui {
var middleMessages:Array<MiddleMessage> = []; var middleMessages:Array<MiddleMessage> = [];
var totalGems:Int = 0;
public function dispose() { public function dispose() {
if (_init) { if (_init) {
playGuiCtrl.dispose(); playGuiCtrlOuter.dispose();
RSGOCenterText.remove(); RSGOCenterText.remove();
for (textureResource in textureResources) { for (textureResource in textureResources) {
@ -95,12 +101,24 @@ class PlayGui {
public function init(scene2d:h2d.Scene, game:String) { public function init(scene2d:h2d.Scene, game:String) {
this.scene2d = scene2d; this.scene2d = scene2d;
this._init = true; this._init = true;
// Settings.uiScale = 2.25;
playGuiCtrlOuter = new GuiControl();
playGuiCtrlOuter.position = new Vector();
playGuiCtrlOuter.extent = new Vector(640, 480);
playGuiCtrlOuter.horizSizing = Width;
playGuiCtrlOuter.vertSizing = Height;
playGuiCtrl = new GuiControl(); playGuiCtrl = new GuiControl();
playGuiCtrl.position = new Vector(); playGuiCtrl.position = new Vector(145, 82);
playGuiCtrl.extent = new Vector(640, 480);
var subX = 640 - (scene2d.width - 145 * 2) * 640 / scene2d.width;
var subY = 480 - (scene2d.height - 82 * 2) * 480 / scene2d.height;
playGuiCtrl.extent = new Vector(640 - subX, 480 - subY);
playGuiCtrl.horizSizing = Width; playGuiCtrl.horizSizing = Width;
playGuiCtrl.vertSizing = Height; playGuiCtrl.vertSizing = Height;
playGuiCtrlOuter.addChild(playGuiCtrl);
var numberTiles = []; var numberTiles = [];
for (i in 0...10) { for (i in 0...10) {
@ -137,11 +155,12 @@ class PlayGui {
MarbleGame.instance.touchInput.showControls(this.playGuiCtrl, game == 'ultra'); MarbleGame.instance.touchInput.showControls(this.playGuiCtrl, game == 'ultra');
} }
playGuiCtrl.render(scene2d); playGuiCtrlOuter.render(scene2d);
resizeEv = () -> { resizeEv = () -> {
var wnd = Window.getInstance(); var wnd = Window.getInstance();
playGuiCtrl.render(MarbleGame.canvas.scene2d); powerupBox.position.x = wnd.width * 469.0 / 640.0;
playGuiCtrlOuter.render(MarbleGame.canvas.scene2d);
}; };
Window.getInstance().addResizeEvent(resizeEv); Window.getInstance().addResizeEvent(resizeEv);
@ -151,44 +170,64 @@ class PlayGui {
public function initTimer() { public function initTimer() {
var timerCtrl = new GuiImage(ResourceLoader.getResource('data/ui/game/timebackdrop0.png', ResourceLoader.getImage, this.imageResources).toTile()); var timerCtrl = new GuiImage(ResourceLoader.getResource('data/ui/game/timebackdrop0.png', ResourceLoader.getImage, this.imageResources).toTile());
timerCtrl.horizSizing = HorizSizing.Center;
timerCtrl.position = new Vector(215, 0); timerCtrl.position = new Vector(215, 0);
timerCtrl.extent = new Vector(256, 64); timerCtrl.extent = new Vector(256, 64);
timerCtrl.horizSizing = Center;
timerCtrl.xScale = (scene2d.height - 82 * 2) / 480;
timerCtrl.yScale = (scene2d.height - 82 * 2) / 480;
var innerCtrl = new GuiControl(); var innerCtrl = new GuiControl();
innerCtrl.position = new Vector(26, 0); innerCtrl.position = new Vector(26, 0);
innerCtrl.extent = new Vector(256, 64); innerCtrl.extent = new Vector(256, 64);
innerCtrl.xScale = (scene2d.height - 82 * 2) / 480;
innerCtrl.yScale = (scene2d.height - 82 * 2) / 480;
timerCtrl.addChild(innerCtrl); timerCtrl.addChild(innerCtrl);
timerNumbers[0].position = new Vector(20, 4); timerNumbers[0].position = new Vector(20, 4);
timerNumbers[0].extent = new Vector(43, 55); timerNumbers[0].extent = new Vector(43, 55);
timerNumbers[0].xScale = (scene2d.height - 82 * 2) / 480;
timerNumbers[0].yScale = (scene2d.height - 82 * 2) / 480;
timerNumbers[1].position = new Vector(40, 4); timerNumbers[1].position = new Vector(40, 4);
timerNumbers[1].extent = new Vector(43, 55); timerNumbers[1].extent = new Vector(43, 55);
timerNumbers[1].xScale = (scene2d.height - 82 * 2) / 480;
timerNumbers[1].yScale = (scene2d.height - 82 * 2) / 480;
var colonCols = ResourceLoader.getResource('data/ui/game/numbers/colon.png', ResourceLoader.getImage, this.imageResources).toTile(); var colonCols = ResourceLoader.getResource('data/ui/game/numbers/colon.png', ResourceLoader.getImage, this.imageResources).toTile();
timerColon = new GuiImage(colonCols); timerColon = new GuiImage(colonCols);
timerColon.position = new Vector(55, 4); timerColon.position = new Vector(55, 4);
timerColon.extent = new Vector(43, 55); timerColon.extent = new Vector(43, 55);
timerColon.xScale = (scene2d.height - 82 * 2) / 480;
timerColon.yScale = (scene2d.height - 82 * 2) / 480;
timerNumbers[2].position = new Vector(70, 4); timerNumbers[2].position = new Vector(70, 4);
timerNumbers[2].extent = new Vector(43, 55); timerNumbers[2].extent = new Vector(43, 55);
timerNumbers[2].xScale = (scene2d.height - 82 * 2) / 480;
timerNumbers[2].yScale = (scene2d.height - 82 * 2) / 480;
timerNumbers[3].position = new Vector(90, 4); timerNumbers[3].position = new Vector(90, 4);
timerNumbers[3].extent = new Vector(43, 55); timerNumbers[3].extent = new Vector(43, 55);
timerNumbers[3].xScale = (scene2d.height - 82 * 2) / 480;
timerNumbers[3].yScale = (scene2d.height - 82 * 2) / 480;
var pointCols = ResourceLoader.getResource('data/ui/game/numbers/point.png', ResourceLoader.getImage, this.imageResources).toTile(); var pointCols = ResourceLoader.getResource('data/ui/game/numbers/point.png', ResourceLoader.getImage, this.imageResources).toTile();
timerPoint = new GuiImage(pointCols); timerPoint = new GuiImage(pointCols);
timerPoint.position = new Vector(105, 4); timerPoint.position = new Vector(105, 4);
timerPoint.extent = new Vector(43, 55); timerPoint.extent = new Vector(43, 55);
timerPoint.xScale = (scene2d.height - 82 * 2) / 480;
timerPoint.yScale = (scene2d.height - 82 * 2) / 480;
timerNumbers[4].position = new Vector(120, 4); timerNumbers[4].position = new Vector(120, 4);
timerNumbers[4].extent = new Vector(43, 55); timerNumbers[4].extent = new Vector(43, 55);
timerNumbers[4].xScale = (scene2d.height - 82 * 2) / 480;
timerNumbers[4].yScale = (scene2d.height - 82 * 2) / 480;
timerNumbers[5].position = new Vector(140, 4); timerNumbers[5].position = new Vector(140, 4);
timerNumbers[5].extent = new Vector(43, 55); timerNumbers[5].extent = new Vector(43, 55);
timerNumbers[5].xScale = (scene2d.height - 82 * 2) / 480;
timerNumbers[5].yScale = (scene2d.height - 82 * 2) / 480;
timerNumbers[6].position = new Vector(191, 0); timerNumbers[6].position = new Vector(191, 0);
timerNumbers[6].extent = new Vector(43, 55); timerNumbers[6].extent = new Vector(43, 55);
@ -238,37 +277,57 @@ class PlayGui {
var gemBox = new GuiControl(); var gemBox = new GuiControl();
gemBox.position = new Vector(0, 0); gemBox.position = new Vector(0, 0);
gemBox.extent = new Vector(300, 200); gemBox.extent = new Vector(300, 200);
gemBox.xScale = (scene2d.height - 82 * 2) / 480;
gemBox.yScale = (scene2d.height - 82 * 2) / 480;
var innerCtrl = new GuiControl(); var innerCtrl = new GuiControl();
innerCtrl.position = new Vector(26, 0); innerCtrl.position = new Vector(26, 0);
innerCtrl.extent = new Vector(256, 64); innerCtrl.extent = new Vector(256, 64);
innerCtrl.xScale = (scene2d.height - 82 * 2) / 480;
innerCtrl.yScale = (scene2d.height - 82 * 2) / 480;
gemBox.addChild(innerCtrl); gemBox.addChild(innerCtrl);
gemCountNumbers[0].position = new Vector(20, 4); gemCountNumbers[0].position = new Vector(20, 4);
gemCountNumbers[0].extent = new Vector(43, 55); gemCountNumbers[0].extent = new Vector(43, 55);
gemCountNumbers[0].xScale = (scene2d.height - 82 * 2) / 480;
gemCountNumbers[0].yScale = (scene2d.height - 82 * 2) / 480;
gemCountNumbers[1].position = new Vector(38, 4); gemCountNumbers[1].position = new Vector(38, 4);
gemCountNumbers[1].extent = new Vector(43, 55); gemCountNumbers[1].extent = new Vector(43, 55);
gemCountNumbers[1].xScale = (scene2d.height - 82 * 2) / 480;
gemCountNumbers[1].yScale = (scene2d.height - 82 * 2) / 480;
gemCountNumbers[2].position = new Vector(56, 4); gemCountNumbers[2].position = new Vector(56, 4);
gemCountNumbers[2].extent = new Vector(43, 55); gemCountNumbers[2].extent = new Vector(43, 55);
gemCountNumbers[2].xScale = (scene2d.height - 82 * 2) / 480;
gemCountNumbers[2].yScale = (scene2d.height - 82 * 2) / 480;
gemCountSlash = new GuiImage(ResourceLoader.getResource('data/ui/game/numbers/slash.png', ResourceLoader.getImage, this.imageResources).toTile()); gemCountSlash = new GuiImage(ResourceLoader.getResource('data/ui/game/numbers/slash.png', ResourceLoader.getImage, this.imageResources).toTile());
gemCountSlash.position = new Vector(73, 4); gemCountSlash.position = new Vector(73, 4);
gemCountSlash.extent = new Vector(43, 55); gemCountSlash.extent = new Vector(43, 55);
gemCountSlash.xScale = (scene2d.height - 82 * 2) / 480;
gemCountSlash.yScale = (scene2d.height - 82 * 2) / 480;
gemCountNumbers[3].position = new Vector(89, 4); gemCountNumbers[3].position = new Vector(89, 4);
gemCountNumbers[3].extent = new Vector(43, 55); gemCountNumbers[3].extent = new Vector(43, 55);
gemCountNumbers[3].xScale = (scene2d.height - 82 * 2) / 480;
gemCountNumbers[3].yScale = (scene2d.height - 82 * 2) / 480;
gemCountNumbers[4].position = new Vector(107, 4); gemCountNumbers[4].position = new Vector(107, 4);
gemCountNumbers[4].extent = new Vector(43, 55); gemCountNumbers[4].extent = new Vector(43, 55);
gemCountNumbers[4].xScale = (scene2d.height - 82 * 2) / 480;
gemCountNumbers[4].yScale = (scene2d.height - 82 * 2) / 480;
gemCountNumbers[5].position = new Vector(125, 4); gemCountNumbers[5].position = new Vector(125, 4);
gemCountNumbers[5].extent = new Vector(43, 55); gemCountNumbers[5].extent = new Vector(43, 55);
gemCountNumbers[5].xScale = (scene2d.height - 82 * 2) / 480;
gemCountNumbers[5].yScale = (scene2d.height - 82 * 2) / 480;
var gemHUD = new GuiImage(ResourceLoader.getResource('data/ui/game/gem.png', ResourceLoader.getImage, this.imageResources).toTile()); gemHUD = new GuiImage(ResourceLoader.getResource('data/ui/game/gem.png', ResourceLoader.getImage, this.imageResources).toTile());
gemHUD.position = new Vector(144, 2); gemHUD.position = new Vector(144, 2);
gemHUD.extent = new Vector(64, 64); gemHUD.extent = new Vector(64, 64);
gemHUD.xScale = (scene2d.height - 82 * 2) / 480;
gemHUD.yScale = (scene2d.height - 82 * 2) / 480;
innerCtrl.addChild(gemCountNumbers[0]); innerCtrl.addChild(gemCountNumbers[0]);
innerCtrl.addChild(gemCountNumbers[1]); innerCtrl.addChild(gemCountNumbers[1]);
@ -294,36 +353,39 @@ class PlayGui {
]; ];
powerupBox = new GuiAnim(powerupImgs); powerupBox = new GuiAnim(powerupImgs);
powerupBox.position = new Vector(469, 0); // powerupBox.position = new Vector(469, 0);
powerupBox.position = new Vector(playGuiCtrl.extent.x - 171, 0);
powerupBox.extent = new Vector(170, 170); powerupBox.extent = new Vector(170, 170);
powerupBox.horizSizing = Left; powerupBox.horizSizing = Left;
powerupBox.vertSizing = Bottom; powerupBox.vertSizing = Bottom;
powerupBox.xScale = (scene2d.height - 82 * 2) / 480;
powerupBox.yScale = (scene2d.height - 82 * 2) / 480;
playGuiCtrl.addChild(powerupBox); playGuiCtrl.addChild(powerupBox);
} }
function initTexts() { function initTexts() {
var domcasual32fontdata = ResourceLoader.getFileEntry("data/font/DomCasualD.fnt"); var arial14fontdata = ResourceLoader.getFileEntry("data/font/Arial Bold.fnt");
var domcasual32b = new BitmapFont(domcasual32fontdata.entry); var arial14b = new BitmapFont(arial14fontdata.entry);
@:privateAccess domcasual32b.loader = ResourceLoader.loader; @:privateAccess arial14b.loader = ResourceLoader.loader;
var bfont = domcasual32b.toSdfFont(cast 26 * Settings.uiScale, MultiChannel); var arial14 = arial14b.toSdfFont(cast 26 * Settings.uiScale, MultiChannel);
var helpTextCtrl = new GuiControl(); var helpTextCtrl = new GuiControl();
helpTextCtrl.position = new Vector(0, 210); helpTextCtrl.position = new Vector(0, playGuiCtrl.extent.y * 190 / 480);
helpTextCtrl.extent = new Vector(640, 60); helpTextCtrl.extent = new Vector(640, 60);
helpTextCtrl.vertSizing = Center; helpTextCtrl.vertSizing = Center;
helpTextCtrl.horizSizing = Width; helpTextCtrl.horizSizing = Width;
helpTextBackground = new GuiText(bfont); helpTextBackground = new GuiText(arial14);
helpTextBackground.text.textColor = 0x777777; helpTextBackground.text.textColor = 0x000000;
helpTextBackground.position = new Vector(1, 1); helpTextBackground.position = new Vector(2, 2);
helpTextBackground.extent = new Vector(640, 14); helpTextBackground.extent = new Vector(640, 14);
helpTextBackground.vertSizing = Height; helpTextBackground.vertSizing = Height;
helpTextBackground.horizSizing = Width; helpTextBackground.horizSizing = Width;
helpTextBackground.justify = Center; helpTextBackground.justify = Center;
helpTextForeground = new GuiText(bfont); helpTextForeground = new GuiText(arial14);
helpTextForeground.text.textColor = 0xFFFFFF; helpTextForeground.text.textColor = 0xEBEBEB;
helpTextForeground.position = new Vector(0, 0); helpTextForeground.position = new Vector(0, 0);
helpTextForeground.extent = new Vector(640, 16); helpTextForeground.extent = new Vector(640, 16);
helpTextForeground.vertSizing = Height; helpTextForeground.vertSizing = Height;
@ -334,21 +396,21 @@ class PlayGui {
helpTextCtrl.addChild(helpTextForeground); helpTextCtrl.addChild(helpTextForeground);
var alertTextCtrl = new GuiControl(); var alertTextCtrl = new GuiControl();
alertTextCtrl.position = new Vector(0, 371); alertTextCtrl.position = new Vector(0, playGuiCtrl.extent.y * 375 / 480);
alertTextCtrl.extent = new Vector(640, 105); alertTextCtrl.extent = new Vector(640, 105);
alertTextCtrl.vertSizing = Top; alertTextCtrl.vertSizing = Top;
alertTextCtrl.horizSizing = Width; alertTextCtrl.horizSizing = Width;
alertTextBackground = new GuiText(bfont); alertTextBackground = new GuiText(arial14);
alertTextBackground.text.textColor = 0x776622; alertTextBackground.text.textColor = 0x000000;
alertTextBackground.position = new Vector(1, 1); alertTextBackground.position = new Vector(2, 2);
alertTextBackground.extent = new Vector(640, 32); alertTextBackground.extent = new Vector(640, 32);
alertTextBackground.vertSizing = Height; alertTextBackground.vertSizing = Height;
alertTextBackground.horizSizing = Width; alertTextBackground.horizSizing = Width;
alertTextBackground.justify = Center; alertTextBackground.justify = Center;
alertTextForeground = new GuiText(bfont); alertTextForeground = new GuiText(arial14);
alertTextForeground.text.textColor = 0xffEE99; alertTextForeground.text.textColor = 0xEBEBEB;
alertTextForeground.position = new Vector(0, 0); alertTextForeground.position = new Vector(0, 0);
alertTextForeground.extent = new Vector(640, 32); alertTextForeground.extent = new Vector(640, 32);
alertTextForeground.vertSizing = Height; alertTextForeground.vertSizing = Height;
@ -358,8 +420,8 @@ class PlayGui {
alertTextCtrl.addChild(alertTextBackground); alertTextCtrl.addChild(alertTextBackground);
alertTextCtrl.addChild(alertTextForeground); alertTextCtrl.addChild(alertTextForeground);
playGuiCtrl.addChild(helpTextCtrl); playGuiCtrlOuter.addChild(helpTextCtrl);
playGuiCtrl.addChild(alertTextCtrl); playGuiCtrlOuter.addChild(alertTextCtrl);
} }
function initFPSMeter() { function initFPSMeter() {
@ -388,44 +450,72 @@ class PlayGui {
function initBlastBar() { function initBlastBar() {
blastBar = new GuiControl(); blastBar = new GuiControl();
blastBar.position = new Vector(6, 445); blastBar.position = new Vector(0, 400);
blastBar.extent = new Vector(120, 28); blastBar.extent = new Vector(170, 83);
blastBar.vertSizing = Top; blastBar.vertSizing = Bottom;
blastBar.xScale = (scene2d.height - 82 * 2) / 480;
blastBar.yScale = (scene2d.height - 82 * 2) / 480;
this.playGuiCtrl.addChild(blastBar); this.playGuiCtrl.addChild(blastBar);
blastFill = new GuiImage(ResourceLoader.getResource("data/ui/game/blastbar_bargreen.png", ResourceLoader.getImage, this.imageResources).toTile()); blastFill = new GuiImage(ResourceLoader.getResource("data/ui/game/powerbarMask.png", ResourceLoader.getImage, this.imageResources).toTile());
blastFill.position = new Vector(5, 5); blastFill.position = new Vector(36, 38);
blastFill.extent = new Vector(58, 17); blastFill.extent = new Vector(100, 27);
blastFill.doClipping = false; blastFill.xScale = (scene2d.height - 82 * 2) / 480;
blastFill.yScale = (scene2d.height - 82 * 2) / 480;
var colorMat = Matrix.I();
colorMat.colorSet(0x0080FF);
blastFill.bmp.filter = new h2d.filter.ColorMatrix(colorMat);
blastBar.addChild(blastFill); blastBar.addChild(blastFill);
blastFrame = new GuiImage(ResourceLoader.getResource("data/ui/game/blastbar.png", ResourceLoader.getImage, this.imageResources).toTile()); blastFillUltra = new GuiImage(ResourceLoader.getResource("data/ui/game/powerbarMask.png", ResourceLoader.getImage, this.imageResources).toTile());
blastFillUltra.position = new Vector(36, 38);
blastFillUltra.extent = new Vector(100, 27);
blastFillUltra.xScale = (scene2d.height - 82 * 2) / 480;
blastFillUltra.yScale = (scene2d.height - 82 * 2) / 480;
var colorMat = Matrix.I();
colorMat.colorSet(0xC4FF00);
blastFillUltra.bmp.filter = new h2d.filter.ColorMatrix(colorMat);
blastBar.addChild(blastFillUltra);
blastFrame = new GuiImage(ResourceLoader.getResource("data/ui/game/powerbar.png", ResourceLoader.getImage, this.imageResources).toTile());
blastFrame.position = new Vector(0, 0); blastFrame.position = new Vector(0, 0);
blastFrame.extent = new Vector(120, 28); blastFrame.extent = new Vector(170, 83);
blastFrame.xScale = (scene2d.height - 82 * 2) / 480;
blastFrame.yScale = (scene2d.height - 82 * 2) / 480;
blastBar.addChild(blastFrame); blastBar.addChild(blastFrame);
} }
var blastValue:Float = 0;
public function setBlastValue(value:Float) { public function setBlastValue(value:Float) {
if (value <= 1) { if (value <= 1) {
if (blastFill.extent.y == 16) { // Was previously charged var oldVal = blastValue;
blastFrame.bmp.tile = ResourceLoader.getResource("data/ui/game/blastbar.png", ResourceLoader.getImage, this.imageResources).toTile(); blastValue = value;
} blastFill.bmp.tile.setSize(Util.lerp(0, 75, value), 20);
var oldVal = blastFill.extent.x; blastFill.bmp.scaleX = value;
blastFill.extent = new Vector(Util.lerp(0, 110, value), 17); // blastFill.extent = new Vector(Util.lerp(0, 100, value), 27);
if (oldVal < 22 && blastFill.extent.x >= 22) { if (oldVal < 0.25 && value >= 0.25) {
blastFill.bmp.tile = ResourceLoader.getResource("data/ui/game/blastbar_bargreen.png", ResourceLoader.getImage, this.imageResources).toTile(); var colorMat = cast(blastFill.bmp.filter, h2d.filter.ColorMatrix);
colorMat.matrix.colorSet(0x0080FF);
MarbleGame.instance.touchInput.blastbutton.setEnabled(true); MarbleGame.instance.touchInput.blastbutton.setEnabled(true);
} }
if (oldVal >= 22 && blastFill.extent.x < 22) { if (oldVal >= 0.25 && value < 0.25) {
blastFill.bmp.tile = ResourceLoader.getResource("data/ui/game/blastbar_bargray.png", ResourceLoader.getImage, this.imageResources).toTile(); var colorMat = cast(blastFill.bmp.filter, h2d.filter.ColorMatrix);
colorMat.matrix.colorSet(0xCDD2D7);
MarbleGame.instance.touchInput.blastbutton.setEnabled(false); MarbleGame.instance.touchInput.blastbutton.setEnabled(false);
} }
blastFillUltra.bmp.visible = false;
} else { } else {
blastFill.extent = new Vector(0, 16); // WE will just use this extra number to store whether it was previously charged or not blastFillUltra.bmp.visible = true;
blastFrame.bmp.tile = ResourceLoader.getResource("data/ui/game/blastbar_charged.png", ResourceLoader.getImage, this.imageResources).toTile();
var fillPercent = (value - 1) * 6;
blastFillUltra.bmp.tile.setSize(Util.lerp(0, 75, fillPercent), 20);
blastFillUltra.bmp.scaleX = fillPercent;
MarbleGame.instance.touchInput.blastbutton.setEnabled(true); MarbleGame.instance.touchInput.blastbutton.setEnabled(true);
} }
this.blastBar.render(scene2d);
} }
public function setHelpTextOpacity(value:Float) { public function setHelpTextOpacity(value:Float) {
@ -472,17 +562,70 @@ class PlayGui {
} }
} }
public function resizeGemCounter(total:Int) {
if (total >= 100) {
// 3 digits
gemCountNumbers[0].anim.visible = true;
gemCountNumbers[1].anim.visible = true;
gemCountNumbers[2].anim.visible = true;
gemCountNumbers[3].anim.visible = true;
gemCountNumbers[4].anim.visible = true;
gemCountNumbers[5].anim.visible = true;
gemCountNumbers[0].position.x = 20;
gemCountNumbers[1].position.x = 38;
gemCountNumbers[2].position.x = 56;
gemCountNumbers[3].position.x = 89;
gemCountNumbers[4].position.x = 107;
gemCountNumbers[5].position.x = 125;
gemCountSlash.position.x = 73;
gemHUD.position.x = 144;
} else if (total >= 10) {
// 2 digits
gemCountNumbers[0].anim.visible = false;
gemCountNumbers[1].anim.visible = true;
gemCountNumbers[2].anim.visible = true;
gemCountNumbers[3].anim.visible = false;
gemCountNumbers[4].anim.visible = true;
gemCountNumbers[5].anim.visible = true;
gemCountNumbers[2].position.x = 32;
gemCountNumbers[5].position.x = 83;
gemCountNumbers[1].position.x = 14;
gemCountNumbers[4].position.x = 65;
gemCountSlash.position.x = 49;
gemHUD.position.x = 101;
} else {
// 1 digit
gemCountNumbers[0].anim.visible = false;
gemCountNumbers[1].anim.visible = false;
gemCountNumbers[2].anim.visible = true;
gemCountNumbers[3].anim.visible = false;
gemCountNumbers[4].anim.visible = false;
gemCountNumbers[5].anim.visible = true;
gemCountNumbers[2].position.x = 8;
gemCountNumbers[5].position.x = 41;
gemCountSlash.position.x = 25;
gemHUD.position.x = 59;
}
gemHUD.parent.render(scene2d, @:privateAccess gemHUD.parent.parent._flow);
}
public function formatGemCounter(collected:Int, total:Int) { public function formatGemCounter(collected:Int, total:Int) {
if (total == 0) { if (total == 0) {
for (number in gemCountNumbers) { for (number in gemCountNumbers) {
number.anim.visible = false; number.anim.visible = false;
} }
gemCountSlash.bmp.visible = false; gemCountSlash.bmp.visible = false;
gemHUD.bmp.visible = false;
} else { } else {
for (number in gemCountNumbers) { if (totalGems != total) {
number.anim.visible = true; resizeGemCounter(total);
totalGems = total;
} }
gemCountSlash.bmp.visible = true; gemCountSlash.bmp.visible = true;
gemHUD.bmp.visible = true;
} }
var totalHundredths = Math.floor(total / 100); var totalHundredths = Math.floor(total / 100);

View file

@ -14,7 +14,7 @@ class AntiGravity extends PowerUp {
this.isCollideable = false; this.isCollideable = false;
this.isTSStatic = false; this.isTSStatic = false;
this.identifier = "AntiGravity"; this.identifier = "AntiGravity";
this.pickUpName = "Gravity Defier"; this.pickUpName = "a Gravity Modifier";
this.autoUse = true; this.autoUse = true;
this.useInstancing = true; this.useInstancing = true;
this.animateSubObjectOpacities = true; this.animateSubObjectOpacities = true;

View file

@ -13,7 +13,7 @@ class Blast extends PowerUp {
this.isTSStatic = false; this.isTSStatic = false;
this.showSequences = true; this.showSequences = true;
this.identifier = "Blast"; this.identifier = "Blast";
this.pickUpName = "Blast PowerUp"; this.pickUpName = "a Blast powerup";
this.ambientRotate = false; this.ambientRotate = false;
this.autoUse = true; this.autoUse = true;
} }
@ -32,7 +32,7 @@ class Blast extends PowerUp {
} }
public function use(timeState:TimeState) { public function use(timeState:TimeState) {
this.level.blastAmount = 1.03; this.level.blastAmount = 1.2;
} }
override function postProcessMaterial(matName:String, material:h3d.mat.Material) { override function postProcessMaterial(matName:String, material:h3d.mat.Material) {

View file

@ -23,10 +23,10 @@ class EasterEgg extends PowerUp {
if (!found) { if (!found) {
Settings.easterEggs.set(this.level.mission.path, this.level.timeState.currentAttemptTime); Settings.easterEggs.set(this.level.mission.path, this.level.timeState.currentAttemptTime);
this.pickupSound = ResourceLoader.getResource("data/sound/easter_egg.wav", ResourceLoader.getAudio, this.soundResources); this.pickupSound = ResourceLoader.getResource("data/sound/easter_egg.wav", ResourceLoader.getAudio, this.soundResources);
this.customPickupMessage = "You found an Easter Egg!"; this.customPickupMessage = "You picked up an Easter Egg!";
} else { } else {
this.pickupSound = ResourceLoader.getResource("data/sound/easterfound.wav", ResourceLoader.getAudio, this.soundResources); this.pickupSound = ResourceLoader.getResource("data/sound/easterfound.wav", ResourceLoader.getAudio, this.soundResources);
this.customPickupMessage = "You already found this Easter Egg."; this.customPickupMessage = "You picked up an Easter Egg!.";
} }
return true; return true;

View file

@ -16,7 +16,7 @@ class Helicopter extends PowerUp {
this.isTSStatic = false; this.isTSStatic = false;
this.showSequences = false; this.showSequences = false;
this.identifier = "Helicopter"; this.identifier = "Helicopter";
this.pickUpName = "Helicopter PowerUp"; this.pickUpName = "a Gyrocopter powerup";
} }
public override function init(level:MarbleWorld, onFinish:Void->Void) { public override function init(level:MarbleWorld, onFinish:Void->Void) {

View file

@ -15,7 +15,7 @@ class MegaMarble extends PowerUp {
this.isTSStatic = false; this.isTSStatic = false;
this.showSequences = true; this.showSequences = true;
this.identifier = "MegaMarble"; this.identifier = "MegaMarble";
this.pickUpName = "Mega Marble PowerUp"; this.pickUpName = "a Mega-Marble powerup";
} }
public override function init(level:MarbleWorld, onFinish:Void->Void) { public override function init(level:MarbleWorld, onFinish:Void->Void) {

View file

@ -41,7 +41,7 @@ abstract class PowerUp extends DtsObject {
if (customPickupMessage != null) if (customPickupMessage != null)
this.level.displayAlert(customPickupMessage); this.level.displayAlert(customPickupMessage);
else else
this.level.displayAlert('You picked up a ${this.pickUpName}!'); this.level.displayAlert('You picked up ${this.pickUpName}!');
if (this.element.showhelponpickup == "1" && !this.autoUse) if (this.element.showhelponpickup == "1" && !this.autoUse)
this.level.displayHelp('Press <func:bind mousefire> to use the ${this.pickUpName}!'); this.level.displayHelp('Press <func:bind mousefire> to use the ${this.pickUpName}!');

View file

@ -42,7 +42,7 @@ class SuperJump extends PowerUp {
this.isCollideable = false; this.isCollideable = false;
this.isTSStatic = false; this.isTSStatic = false;
this.identifier = "SuperJump"; this.identifier = "SuperJump";
this.pickUpName = "Jump Boost PowerUp"; this.pickUpName = "a Super Jump powerup";
this.showSequences = false; this.showSequences = false;
sjEmitterParticleData = new ParticleData(); sjEmitterParticleData = new ParticleData();
sjEmitterParticleData.identifier = "superJumpParticle"; sjEmitterParticleData.identifier = "superJumpParticle";

View file

@ -47,7 +47,7 @@ class SuperSpeed extends PowerUp {
this.isCollideable = false; this.isCollideable = false;
this.isTSStatic = false; this.isTSStatic = false;
this.identifier = "SuperSpeed"; this.identifier = "SuperSpeed";
this.pickUpName = "Speed Booster PowerUp"; this.pickUpName = "a Super Speed powerup";
this.useInstancing = true; this.useInstancing = true;
ssEmitterParticleData = new ParticleData(); ssEmitterParticleData = new ParticleData();
ssEmitterParticleData.identifier = "superSpeedParticle"; ssEmitterParticleData.identifier = "superSpeedParticle";

View file

@ -24,7 +24,7 @@ class TimeTravel extends PowerUp {
this.timeBonus = -MisParser.parseNumber(element.timepenalty) / 1000; this.timeBonus = -MisParser.parseNumber(element.timepenalty) / 1000;
} }
this.pickUpName = '${this.timeBonus} second Time ${this.timeBonus >= 0 ? 'Modifier' : 'Penalty'}'; this.pickUpName = '${this.timeBonus} seconds of Time Travel ${this.timeBonus >= 0 ? 'bonus' : 'Penalty'}';
this.cooldownDuration = 1e8; this.cooldownDuration = 1e8;
this.useInstancing = true; this.useInstancing = true;
this.autoUse = true; this.autoUse = true;