gui render crap

This commit is contained in:
RandomityGuy 2021-06-18 17:49:36 +05:30
parent cbc0257509
commit e8cd086e80
7 changed files with 385 additions and 98 deletions

View file

@ -701,12 +701,7 @@ class MarbleWorld extends Scheduler {
var spherebounds = new Bounds(); var spherebounds = new Bounds();
var center = marble.collider.transform.getPosition(); var center = marble.collider.transform.getPosition();
var radius = marble._radius; var radius = marble._radius;
spherebounds.xMin = center.x - radius; spherebounds.addSpherePos(center.x, center.y, center.z, radius);
spherebounds.yMin = center.y - radius;
spherebounds.zMin = center.z - radius;
spherebounds.xMax = center.x + radius;
spherebounds.yMax = center.y + radius;
spherebounds.zMax = center.z + radius;
var gjkSphere = new collision.gjk.Sphere(); var gjkSphere = new collision.gjk.Sphere();
gjkSphere.position = center; gjkSphere.position = center;

26
src/gui/GuiAnim.hx Normal file
View file

@ -0,0 +1,26 @@
package gui;
import h2d.Anim;
import h2d.Scene;
import h2d.Tile;
import h2d.Bitmap;
@:publicFields
class GuiAnim extends GuiControl {
var anim:Anim;
public function new(textures:Array<Tile>) {
super();
this.anim = new Anim(textures, 0);
}
public override function render(scene2d:Scene) {
super.render(scene2d);
var renderRect = this.getRenderRectangle();
anim.setPosition(renderRect.position.x, renderRect.position.y);
anim.scaleX = renderRect.extent.x / anim.getFrame().width;
anim.scaleY = renderRect.extent.y / anim.getFrame().height;
if (!scene2d.contains(anim))
scene2d.addChild(anim);
}
}

101
src/gui/GuiControl.hx Normal file
View file

@ -0,0 +1,101 @@
package gui;
import h2d.Scene;
import h2d.col.Bounds;
import hxd.Window;
import h3d.Vector;
enum HorizSizing {
Right;
Width;
Left;
Center;
Relative;
}
enum VertSizing {
Bottom;
Height;
Top;
Center;
Relative;
}
@:publicFields
class GuiControl {
var horizSizing:HorizSizing = Right;
var vertSizing:VertSizing = Bottom;
var position:Vector;
var extent:Vector;
var children:Array<GuiControl> = [];
var parent:GuiControl;
public function new() {}
public function render(scene2d:Scene) {
for (c in children) {
c.render(scene2d);
}
}
public function getRenderRectangle() {
var rect = new Rect(this.position, this.extent);
var parentRect:Rect = null;
if (this.parent != null) {
parentRect = this.parent.getRenderRectangle();
rect.position = parentRect.position.add(this.position);
}
if (this.horizSizing == HorizSizing.Width) {
if (this.parent != null)
rect.extent.x = parentRect.extent.x;
else
rect.extent.x = Window.getInstance().width;
}
if (this.vertSizing == VertSizing.Height) {
if (this.parent != null)
rect.extent.y = parentRect.extent.y;
else
rect.extent.y = Window.getInstance().height;
}
if (this.horizSizing == HorizSizing.Center) {
if (this.parent != null) {
rect.position.x = parentRect.position.x + parentRect.extent.x / 2 - rect.extent.x / 2;
}
}
if (this.vertSizing == VertSizing.Center) {
if (this.parent != null) {
rect.position.y = parentRect.position.y + parentRect.extent.y / 2 - rect.extent.y / 2;
}
}
if (this.horizSizing == HorizSizing.Right) {
if (this.parent != null) {
rect.position.x = parentRect.position.x + this.position.x;
}
}
if (this.vertSizing == VertSizing.Bottom) {
if (this.parent != null) {
rect.position.y = parentRect.position.y + this.position.y;
}
}
if (this.horizSizing == HorizSizing.Left) {
if (this.parent != null) {
rect.position.x = parentRect.extent.x - (parent.extent.x - this.position.x);
}
}
if (this.vertSizing == VertSizing.Top) {
if (this.parent != null) {
rect.position.y = parentRect.extent.y - (parent.extent.y - this.position.y);
}
}
return rect;
}
public function addChild(ctrl:GuiControl) {
this.children.push(ctrl);
ctrl.parent = this;
}
}

25
src/gui/GuiImage.hx Normal file
View file

@ -0,0 +1,25 @@
package gui;
import h2d.Scene;
import h2d.Tile;
import h2d.Bitmap;
@:publicFields
class GuiImage extends GuiControl {
var bmp:Bitmap;
public function new(texture:Tile) {
super();
this.bmp = new Bitmap(texture);
}
public override function render(scene2d:Scene) {
super.render(scene2d);
var renderRect = this.getRenderRectangle();
bmp.setPosition(renderRect.position.x, renderRect.position.y);
bmp.scaleX = renderRect.extent.x / bmp.tile.width;
bmp.scaleY = renderRect.extent.y / bmp.tile.height;
if (!scene2d.contains(bmp))
scene2d.addChild(bmp);
}
}

41
src/gui/GuiText.hx Normal file
View file

@ -0,0 +1,41 @@
package gui;
import h2d.Scene;
import hxd.res.BitmapFont;
import h2d.Text;
enum Justification {
Left;
Right;
Center;
}
@:publicFields
class GuiText extends GuiControl {
var text:Text;
var justify:Justification = Left;
public function new(font:BitmapFont) {
super();
this.text = new Text(font.toFont());
}
public override function render(scene2d:Scene) {
super.render(scene2d);
var renderRect = this.getRenderRectangle();
if (justify == Left) {
text.setPosition(renderRect.position.x, renderRect.position.y);
text.textAlign = Left;
}
if (justify == Right) {
text.setPosition(renderRect.position.x + renderRect.extent.x, renderRect.position.y);
text.textAlign = Right;
}
if (justify == Center) {
text.setPosition(renderRect.position.x + renderRect.extent.x / 2, renderRect.position.y);
text.textAlign = Center;
}
if (!scene2d.contains(text))
scene2d.addChild(text);
}
}

View file

@ -1,5 +1,7 @@
package gui; package gui;
import hxd.snd.WavData;
import gui.GuiControl.HorizSizing;
import src.TimeState; import src.TimeState;
import format.gif.Data.Block; import format.gif.Data.Block;
import hxd.res.BitmapFont; import hxd.res.BitmapFont;
@ -23,32 +25,40 @@ class PlayGui {
public function new() {} public function new() {}
var timerNumbers:Array<Anim> = []; var timerNumbers:Array<GuiAnim> = [];
var timerPoint:Bitmap; var timerPoint:GuiImage;
var timerColon:Bitmap; var timerColon:GuiImage;
var gemCountNumbers:Array<Anim> = []; var gemCountNumbers:Array<GuiAnim> = [];
var gemCountSlash:Bitmap; var gemCountSlash:GuiImage;
var gemImageScene:h3d.scene.Scene; var gemImageScene:h3d.scene.Scene;
var gemImageSceneTarget:Texture; var gemImageSceneTarget:Texture;
var gemImageObject:DtsObject; var gemImageObject:DtsObject;
var gemImageSceneTargetBitmap:Bitmap; var gemImageSceneTargetBitmap:Bitmap;
var powerupBox:Bitmap; var powerupBox:GuiImage;
var powerupImageScene:h3d.scene.Scene; var powerupImageScene:h3d.scene.Scene;
var powerupImageSceneTarget:Texture; var powerupImageSceneTarget:Texture;
var powerupImageObject:DtsObject; var powerupImageObject:DtsObject;
var RSGOCenterText:Anim; var RSGOCenterText:Anim;
var helpTextForeground:Text; var helpTextForeground:GuiText;
var helpTextBackground:Text; var helpTextBackground:GuiText;
var alertTextForeground:Text; var alertTextForeground:GuiText;
var alertTextBackground:Text; var alertTextBackground:GuiText;
var playGuiCtrl:GuiControl;
public function init(scene2d:h2d.Scene) { public function init(scene2d:h2d.Scene) {
this.scene2d = scene2d; this.scene2d = scene2d;
playGuiCtrl = new GuiControl();
playGuiCtrl.position = new Vector();
playGuiCtrl.extent = new Vector(640, 480);
playGuiCtrl.horizSizing = Width;
playGuiCtrl.vertSizing = Height;
var numberTiles = []; var numberTiles = [];
for (i in 0...10) { for (i in 0...10) {
var tile = ResourceLoader.getImage('data/ui/game/numbers/${i}.png').toTile(); var tile = ResourceLoader.getImage('data/ui/game/numbers/${i}.png').toTile();
@ -56,11 +66,11 @@ class PlayGui {
} }
for (i in 0...7) { for (i in 0...7) {
timerNumbers.push(new Anim(numberTiles, 0, scene2d)); timerNumbers.push(new GuiAnim(numberTiles));
} }
for (i in 0...4) { for (i in 0...4) {
gemCountNumbers.push(new Anim(numberTiles, 0, scene2d)); gemCountNumbers.push(new GuiAnim(numberTiles));
} }
var rsgo = []; var rsgo = [];
@ -70,38 +80,62 @@ class PlayGui {
rsgo.push(ResourceLoader.getImage("data/ui/game/outofbounds.png").toTile()); rsgo.push(ResourceLoader.getImage("data/ui/game/outofbounds.png").toTile());
RSGOCenterText = new Anim(rsgo, 0, scene2d); RSGOCenterText = new Anim(rsgo, 0, scene2d);
timerPoint = new Bitmap(ResourceLoader.getImage('data/ui/game/numbers/point.png').toTile(), scene2d); powerupBox = new GuiImage(ResourceLoader.getImage('data/ui/game/powerup.png').toTile());
timerColon = new Bitmap(ResourceLoader.getImage('data/ui/game/numbers/colon.png').toTile(), scene2d);
gemCountSlash = new Bitmap(ResourceLoader.getImage('data/ui/game/numbers/slash.png').toTile(), scene2d);
powerupBox = new Bitmap(ResourceLoader.getImage('data/ui/game/powerup.png').toTile(), scene2d);
initTimer(); initTimer();
initGemCounter(); initGemCounter();
initCenterText(); initCenterText();
initPowerupBox(); initPowerupBox();
initTexts(); initTexts();
playGuiCtrl.render(scene2d);
} }
public function initTimer() { public function initTimer() {
var screenWidth = scene2d.width; var timerCtrl = new GuiControl();
var screenHeight = scene2d.height; timerCtrl.horizSizing = HorizSizing.Center;
timerCtrl.position = new Vector(215, 1);
timerCtrl.extent = new Vector(234, 58);
function toScreenSpaceX(x:Float) { timerNumbers[0].position = new Vector(23, 0);
return screenWidth / 2 - (234 / 2) + x; timerNumbers[0].extent = new Vector(43, 55);
}
function toScreenSpaceY(y:Float) {
return (y / 480) * screenHeight;
}
timerNumbers[0].x = toScreenSpaceX(23); timerNumbers[1].position = new Vector(47, 0);
timerNumbers[1].x = toScreenSpaceX(47); timerNumbers[1].extent = new Vector(43, 55);
timerColon.x = toScreenSpaceX(67);
timerNumbers[2].x = toScreenSpaceX(83); timerColon = new GuiImage(ResourceLoader.getImage('data/ui/game/numbers/colon.png').toTile());
timerNumbers[3].x = toScreenSpaceX(107); timerColon.position = new Vector(67, 0);
timerPoint.x = toScreenSpaceX(127); timerColon.extent = new Vector(43, 55);
timerNumbers[4].x = toScreenSpaceX(143);
timerNumbers[5].x = toScreenSpaceX(167); timerNumbers[2].position = new Vector(83, 0);
timerNumbers[6].x = toScreenSpaceX(191); timerNumbers[2].extent = new Vector(43, 55);
timerNumbers[3].position = new Vector(107, 0);
timerNumbers[3].extent = new Vector(43, 55);
timerPoint = new GuiImage(ResourceLoader.getImage('data/ui/game/numbers/point.png').toTile());
timerPoint.position = new Vector(127, 0);
timerPoint.extent = new Vector(43, 55);
timerNumbers[4].position = new Vector(143, 0);
timerNumbers[4].extent = new Vector(43, 55);
timerNumbers[5].position = new Vector(167, 0);
timerNumbers[5].extent = new Vector(43, 55);
timerNumbers[6].position = new Vector(191, 0);
timerNumbers[6].extent = new Vector(43, 55);
timerCtrl.addChild(timerNumbers[0]);
timerCtrl.addChild(timerNumbers[1]);
timerCtrl.addChild(timerColon);
timerCtrl.addChild(timerNumbers[2]);
timerCtrl.addChild(timerNumbers[3]);
timerCtrl.addChild(timerPoint);
timerCtrl.addChild(timerNumbers[4]);
timerCtrl.addChild(timerNumbers[5]);
timerCtrl.addChild(timerNumbers[6]);
playGuiCtrl.addChild(timerCtrl);
} }
public function initCenterText() { public function initCenterText() {
@ -132,11 +166,27 @@ class PlayGui {
} }
public function initGemCounter() { public function initGemCounter() {
gemCountNumbers[0].x = 30; gemCountNumbers[0].position = new Vector(30, 0);
gemCountNumbers[1].x = 54; gemCountNumbers[0].extent = new Vector(43, 55);
gemCountSlash.x = 75;
gemCountNumbers[2].x = 96; gemCountNumbers[1].position = new Vector(54, 0);
gemCountNumbers[3].x = 120; gemCountNumbers[1].extent = new Vector(43, 55);
gemCountSlash = new GuiImage(ResourceLoader.getImage('data/ui/game/numbers/slash.png').toTile());
gemCountSlash.position = new Vector(75, 0);
gemCountSlash.extent = new Vector(43, 55);
gemCountNumbers[2].position = new Vector(96, 0);
gemCountNumbers[2].extent = new Vector(43, 55);
gemCountNumbers[3].position = new Vector(120, 0);
gemCountNumbers[3].extent = new Vector(43, 55);
playGuiCtrl.addChild(gemCountNumbers[0]);
playGuiCtrl.addChild(gemCountNumbers[1]);
playGuiCtrl.addChild(gemCountSlash);
playGuiCtrl.addChild(gemCountNumbers[2]);
playGuiCtrl.addChild(gemCountNumbers[3]);
this.gemImageScene = new h3d.scene.Scene(); this.gemImageScene = new h3d.scene.Scene();
var gemImageRenderer = cast(this.gemImageScene.renderer, h3d.scene.pbr.Renderer); var gemImageRenderer = cast(this.gemImageScene.renderer, h3d.scene.pbr.Renderer);
@ -168,8 +218,11 @@ class PlayGui {
} }
function initPowerupBox() { function initPowerupBox() {
powerupBox.x = scene2d.width - 102; powerupBox.position = new Vector(538, 6);
powerupBox.y = 6; powerupBox.extent = new Vector(97, 96);
powerupBox.horizSizing = Left;
playGuiCtrl.addChild(powerupBox);
this.powerupImageScene = new h3d.scene.Scene(); this.powerupImageScene = new h3d.scene.Scene();
var powerupImageRenderer = cast(this.powerupImageScene.renderer, h3d.scene.pbr.Renderer); var powerupImageRenderer = cast(this.powerupImageScene.renderer, h3d.scene.pbr.Renderer);
@ -187,57 +240,89 @@ class PlayGui {
var fontdata = ResourceLoader.loader.load("data/font/DomCasual32px.fnt"); var fontdata = ResourceLoader.loader.load("data/font/DomCasual32px.fnt");
var bfont = new BitmapFont(fontdata.entry); var bfont = new BitmapFont(fontdata.entry);
@:privateAccess bfont.loader = ResourceLoader.loader; @:privateAccess bfont.loader = ResourceLoader.loader;
helpTextBackground = new Text(bfont.toFont(), scene2d);
helpTextBackground.text = "Bruh";
helpTextBackground.x = scene2d.width / 2 - helpTextBackground.textWidth / 2 + 1;
helpTextBackground.y = scene2d.height * 0.45 + 1;
helpTextBackground.textColor = 0x000000;
helpTextForeground = new Text(bfont.toFont(), scene2d); var helpTextCtrl = new GuiControl();
helpTextForeground.text = "Bruh"; helpTextCtrl.position = new Vector(0, 210);
helpTextForeground.x = scene2d.width / 2 - helpTextForeground.textWidth / 2; helpTextCtrl.extent = new Vector(640, 60);
helpTextForeground.y = scene2d.height * 0.45; helpTextCtrl.vertSizing = Center;
helpTextForeground.textColor = 0xFFFFFF; helpTextCtrl.horizSizing = Width;
alertTextBackground = new Text(bfont.toFont(), scene2d); helpTextBackground = new GuiText(bfont);
alertTextBackground.text = "Bruh"; helpTextBackground.text.textColor = 0x000000;
alertTextBackground.x = scene2d.width / 2 - alertTextBackground.textWidth / 2 + 1; helpTextBackground.position = new Vector(1, 1);
alertTextBackground.y = scene2d.height - 102 + 1; helpTextBackground.extent = new Vector(640, 14);
alertTextBackground.textColor = 0x000000; helpTextBackground.vertSizing = Height;
helpTextBackground.horizSizing = Width;
helpTextBackground.justify = Center;
alertTextForeground = new Text(bfont.toFont(), scene2d); helpTextForeground = new GuiText(bfont);
alertTextForeground.text = "Bruh"; helpTextForeground.text.textColor = 0xFFFFFF;
alertTextForeground.x = scene2d.width / 2 - alertTextForeground.textWidth / 2; helpTextForeground.position = new Vector(0, 0);
alertTextForeground.y = scene2d.height - 102; helpTextForeground.extent = new Vector(640, 16);
alertTextForeground.textColor = 0xFFE240; helpTextForeground.vertSizing = Height;
helpTextForeground.horizSizing = Width;
helpTextForeground.justify = Center;
helpTextCtrl.addChild(helpTextBackground);
helpTextCtrl.addChild(helpTextForeground);
var alertTextCtrl = new GuiControl();
alertTextCtrl.position = new Vector(0, 378);
alertTextCtrl.extent = new Vector(640, 98);
alertTextCtrl.vertSizing = Top;
alertTextCtrl.horizSizing = Width;
alertTextBackground = new GuiText(bfont);
alertTextBackground.text.textColor = 0x000000;
alertTextBackground.position = new Vector(1, 1);
alertTextBackground.extent = new Vector(640, 32);
alertTextBackground.vertSizing = Height;
alertTextBackground.horizSizing = Width;
alertTextBackground.justify = Center;
alertTextForeground = new GuiText(bfont);
alertTextForeground.text.textColor = 0xFFE240;
alertTextForeground.position = new Vector(0, 0);
alertTextForeground.extent = new Vector(640, 32);
alertTextForeground.vertSizing = Height;
alertTextForeground.horizSizing = Width;
alertTextForeground.justify = Center;
alertTextCtrl.addChild(alertTextBackground);
alertTextCtrl.addChild(alertTextForeground);
playGuiCtrl.addChild(helpTextCtrl);
playGuiCtrl.addChild(alertTextCtrl);
} }
public function setHelpTextOpacity(value:Float) { public function setHelpTextOpacity(value:Float) {
helpTextForeground.color.a = value; helpTextForeground.text.color.a = value;
helpTextBackground.color.a = value; helpTextBackground.text.color.a = value;
} }
public function setAlertTextOpacity(value:Float) { public function setAlertTextOpacity(value:Float) {
alertTextForeground.color.a = value; alertTextForeground.text.color.a = value;
alertTextBackground.color.a = value; alertTextBackground.text.color.a = value;
} }
public function setAlertText(text:String) { public function setAlertText(text:String) {
this.alertTextForeground.text = text; this.alertTextForeground.text.text = text;
this.alertTextBackground.text = text; this.alertTextBackground.text.text = text;
alertTextForeground.x = scene2d.width / 2 - alertTextForeground.textWidth / 2; alertTextBackground.render(scene2d);
alertTextForeground.y = scene2d.height - 102; // alertTextForeground.x = scene2d.width / 2 - alertTextForeground.textWidth / 2;
alertTextBackground.x = scene2d.width / 2 - alertTextBackground.textWidth / 2 + 1; // alertTextForeground.y = scene2d.height - 102;
alertTextBackground.y = scene2d.height - 102 + 1; // alertTextBackground.x = scene2d.width / 2 - alertTextBackground.textWidth / 2 + 1;
// alertTextBackground.y = scene2d.height - 102 + 1;
} }
public function setHelpText(text:String) { public function setHelpText(text:String) {
this.helpTextForeground.text = text; this.helpTextForeground.text.text = text;
this.helpTextBackground.text = text; this.helpTextBackground.text.text = text;
helpTextForeground.x = scene2d.width / 2 - helpTextForeground.textWidth / 2; helpTextBackground.render(scene2d);
helpTextForeground.y = scene2d.height * 0.45; // helpTextForeground.x = scene2d.width / 2 - helpTextForeground.textWidth / 2;
helpTextBackground.x = scene2d.width / 2 - helpTextBackground.textWidth / 2 + 1; // helpTextForeground.y = scene2d.height * 0.45;
helpTextBackground.y = scene2d.height * 0.45 + 1; // helpTextBackground.x = scene2d.width / 2 - helpTextBackground.textWidth / 2 + 1;
// helpTextBackground.y = scene2d.height * 0.45 + 1;
} }
public function setPowerupImage(powerupIdentifier:String) { public function setPowerupImage(powerupIdentifier:String) {
@ -281,15 +366,15 @@ class PlayGui {
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.visible = false; number.anim.visible = false;
} }
gemCountSlash.visible = false; gemCountSlash.bmp.visible = false;
gemImageSceneTargetBitmap.visible = false; gemImageSceneTargetBitmap.visible = false;
} else { } else {
for (number in gemCountNumbers) { for (number in gemCountNumbers) {
number.visible = true; number.anim.visible = true;
} }
gemCountSlash.visible = true; gemCountSlash.bmp.visible = true;
gemImageSceneTargetBitmap.visible = true; gemImageSceneTargetBitmap.visible = true;
} }
@ -299,10 +384,10 @@ class PlayGui {
var collectedTenths = Math.floor(collected / 10); var collectedTenths = Math.floor(collected / 10);
var collectedOnes = collected % 10; var collectedOnes = collected % 10;
gemCountNumbers[0].currentFrame = collectedTenths; gemCountNumbers[0].anim.currentFrame = collectedTenths;
gemCountNumbers[1].currentFrame = collectedOnes; gemCountNumbers[1].anim.currentFrame = collectedOnes;
gemCountNumbers[2].currentFrame = totalTenths; gemCountNumbers[2].anim.currentFrame = totalTenths;
gemCountNumbers[3].currentFrame = totalOnes; gemCountNumbers[3].anim.currentFrame = totalOnes;
} }
public function formatTimer(time:Float) { public function formatTimer(time:Float) {
@ -320,13 +405,13 @@ class PlayGui {
var hundredthOne = hundredth % 10; var hundredthOne = hundredth % 10;
var hundredthTen = (hundredth - hundredthOne) / 10; var hundredthTen = (hundredth - hundredthOne) / 10;
timerNumbers[0].currentFrame = minutesTen; timerNumbers[0].anim.currentFrame = minutesTen;
timerNumbers[1].currentFrame = minutesOne; timerNumbers[1].anim.currentFrame = minutesOne;
timerNumbers[2].currentFrame = secondsTen; timerNumbers[2].anim.currentFrame = secondsTen;
timerNumbers[3].currentFrame = secondsOne; timerNumbers[3].anim.currentFrame = secondsOne;
timerNumbers[4].currentFrame = hundredthTen; timerNumbers[4].anim.currentFrame = hundredthTen;
timerNumbers[5].currentFrame = hundredthOne; timerNumbers[5].anim.currentFrame = hundredthOne;
timerNumbers[6].currentFrame = thousandth; timerNumbers[6].anim.currentFrame = thousandth;
} }
public function render(engine:h3d.Engine) { public function render(engine:h3d.Engine) {

14
src/gui/Rect.hx Normal file
View file

@ -0,0 +1,14 @@
package gui;
import h3d.Vector;
@:publicFields
class Rect {
var position:Vector;
var extent:Vector;
public function new(position:Vector, extent:Vector) {
this.position = position.clone();
this.extent = extent.clone();
}
}