This commit is contained in:
RandomityGuy 2021-06-19 23:00:46 +05:30
parent ea114423a9
commit 90f67366e0
5 changed files with 165 additions and 14 deletions

View file

@ -65,14 +65,13 @@ class Main extends hxd.App {
var mission = new Mission();
mission.root = mis.root;
// canvas = new Canvas(s2d);
canvas = new Canvas(s2d);
// canvas.setContent(new MainMenuGui());
canvas.setContent(new MainMenuGui());
// world = new MarbleWorld(s3d, s2d, mission);
world = new MarbleWorld(s3d, s2d, mission);
world.init();
world.start();
// world.init();
// world.start();
fpsCounter = new Text(DefaultFont.get(), s2d);
fpsCounter.y = 40;
@ -81,17 +80,17 @@ class Main extends hxd.App {
override function update(dt:Float) {
super.update(dt);
// var wnd = Window.getInstance();
// var mouseState:MouseState = {
// position: new Vector(wnd.mouseX, wnd.mouseY)
// }
// canvas.update(dt, mouseState);
world.update(dt);
var wnd = Window.getInstance();
var mouseState:MouseState = {
position: new Vector(wnd.mouseX, wnd.mouseY)
}
canvas.update(dt, mouseState);
// world.update(dt);
fpsCounter.text = 'FPS: ${this.engine.fps}';
}
override function render(e:h3d.Engine) {
this.world.render(e);
// this.world.render(e);
super.render(e);
}

View file

@ -10,6 +10,8 @@ class GuiButton extends GuiAnim {
// 1 is hover
// 2 is pressed
// 3 is disabled
public var pressedAction:GuiControl->Void = null;
public function new(anim:Array<Tile>) {
super(anim);
}
@ -26,4 +28,11 @@ class GuiButton extends GuiAnim {
this.anim.currentFrame = 0;
super.update(dt, mouseState);
}
public override function onMouseRelease(mouseState:MouseState) {
super.onMouseRelease(mouseState);
if (this.pressedAction != null) {
this.pressedAction(this);
}
}
}

View file

@ -1,5 +1,6 @@
package gui;
import hxd.Key;
import h2d.Scene;
import h2d.col.Bounds;
import hxd.Window;
@ -23,6 +24,7 @@ enum VertSizing {
typedef MouseState = {
var position:Vector;
var ?button:Int;
}
@:publicFields
@ -46,6 +48,33 @@ class GuiControl {
}
public function update(dt:Float, mouseState:MouseState) {
var renderRect = getRenderRectangle();
if (renderRect.inRect(mouseState.position)) {
if (Key.isPressed(Key.MOUSE_LEFT)) {
mouseState.button = Key.MOUSE_LEFT;
this.onMousePress(mouseState);
}
if (Key.isPressed(Key.MOUSE_RIGHT)) {
mouseState.button = Key.MOUSE_RIGHT;
this.onMousePress(mouseState);
}
if (Key.isReleased(Key.MOUSE_LEFT)) {
mouseState.button = Key.MOUSE_LEFT;
this.onMouseRelease(mouseState);
}
if (Key.isReleased(Key.MOUSE_RIGHT)) {
mouseState.button = Key.MOUSE_RIGHT;
this.onMouseRelease(mouseState);
}
if (Key.isDown(Key.MOUSE_LEFT)) {
mouseState.button = Key.MOUSE_LEFT;
this.onMouseDown(mouseState);
}
if (Key.isDown(Key.MOUSE_RIGHT)) {
mouseState.button = Key.MOUSE_RIGHT;
this.onMouseDown(mouseState);
}
}
for (c in children) {
c.update(dt, mouseState);
}
@ -122,4 +151,10 @@ class GuiControl {
}
this.children = [];
}
public function onMouseDown(mouseState:MouseState) {}
public function onMousePress(mouseState:MouseState) {}
public function onMouseRelease(mouseState:MouseState) {}
}

View file

@ -1,6 +1,5 @@
package gui;
import hxd.Window;
import gui.GuiControl.MouseState;
import hxd.res.BitmapFont;
import h3d.Vector;
@ -43,6 +42,9 @@ class MainMenuGui extends GuiImage {
var playButton = new GuiButton(loadButtonImages("data/ui/home/play"));
playButton.position = new Vector(50, 113);
playButton.extent = new Vector(270, 95);
playButton.pressedAction = (sender) -> {
cast(this.parent, Canvas).setContent(new PlayMissionGui());
}
homebase.addChild(playButton);
var helpButton = new GuiButton(loadButtonImages("data/ui/home/help"));
@ -58,6 +60,9 @@ class MainMenuGui extends GuiImage {
var exitButton = new GuiButton(loadButtonImages("data/ui/home/exit"));
exitButton.position = new Vector(82, 358);
exitButton.extent = new Vector(203, 88);
exitButton.pressedAction = (sender) -> {
Sys.exit(0);
};
homebase.addChild(exitButton);
}
}

103
src/gui/PlayMissionGui.hx Normal file
View file

@ -0,0 +1,103 @@
package gui;
import src.ResourceLoader;
import h3d.Vector;
class PlayMissionGui extends GuiImage {
public function new() {
super(ResourceLoader.getImage("data/ui/background.jpg").toTile());
this.horizSizing = Width;
this.vertSizing = Height;
this.extent = new Vector(640, 480);
this.position = new Vector(0, 0);
var localContainer = new GuiControl();
localContainer.horizSizing = Center;
localContainer.vertSizing = Center;
localContainer.position = new Vector(-1, 44);
localContainer.extent = new Vector(651, 392);
this.addChild(localContainer);
function loadButtonImages(path:String) {
var normal = ResourceLoader.getImage('${path}_n.png').toTile();
var hover = ResourceLoader.getImage('${path}_h.png').toTile();
var pressed = ResourceLoader.getImage('${path}_d.png').toTile();
return [normal, hover, pressed];
}
var tabAdvanced = new GuiImage(ResourceLoader.getImage("data/ui/play/tab_adv.png").toTile());
tabAdvanced.position = new Vector(410, 21);
tabAdvanced.extent = new Vector(166, 43);
localContainer.addChild(tabAdvanced);
var tabIntermediate = new GuiImage(ResourceLoader.getImage("data/ui/play/tab_inter.png").toTile());
tabIntermediate.position = new Vector(213, 4);
tabIntermediate.extent = new Vector(205, 58);
localContainer.addChild(tabIntermediate);
var tabCustom = new GuiImage(ResourceLoader.getImage("data/ui/play/cust_tab.png").toTile());
tabCustom.position = new Vector(589, 91);
tabCustom.extent = new Vector(52, 198);
localContainer.addChild(tabCustom);
var pmBox = new GuiImage(ResourceLoader.getImage("data/ui/play/playgui.png").toTile());
pmBox.position = new Vector(0, 42);
pmBox.extent = new Vector(610, 351);
pmBox.horizSizing = Right;
pmBox.vertSizing = Bottom;
localContainer.addChild(pmBox);
var textWnd = new GuiImage(ResourceLoader.getImage("data/ui/play/text_window.png").toTile());
textWnd.horizSizing = Right;
textWnd.vertSizing = Bottom;
textWnd.position = new Vector(31, 29);
textWnd.extent = new Vector(276, 229);
pmBox.addChild(textWnd);
var pmPreview = new GuiImage(ResourceLoader.getImage("data/missions/beginner/superspeed.jpg").toTile());
pmPreview.position = new Vector(312, 42);
pmPreview.extent = new Vector(258, 193);
pmBox.addChild(pmPreview);
var levelWnd = new GuiImage(ResourceLoader.getImage("data/ui/play/level_window.png").toTile());
levelWnd.position = new Vector();
levelWnd.extent = new Vector(258, 194);
pmPreview.addChild(levelWnd);
// TODO texts
// var levelBkgnd = new GuiText()
var pmPlay = new GuiButton(loadButtonImages("data/ui/play/play"));
pmPlay.position = new Vector(391, 257);
pmPlay.extent = new Vector(121, 62);
pmBox.addChild(pmPlay);
var pmPrev = new GuiButton(loadButtonImages("data/ui/play/prev"));
pmPrev.position = new Vector(321, 260);
pmPrev.extent = new Vector(77, 58);
pmBox.addChild(pmPrev);
var pmNext = new GuiButton(loadButtonImages("data/ui/play/next"));
pmNext.position = new Vector(507, 262);
pmNext.extent = new Vector(75, 60);
pmBox.addChild(pmNext);
var pmBack = new GuiButton(loadButtonImages("data/ui/play/back"));
pmBack.position = new Vector(102, 260);
pmBack.extent = new Vector(79, 61);
pmBack.pressedAction = (sender) -> {
cast(this.parent, Canvas).setContent(new MainMenuGui());
};
pmBox.addChild(pmBack);
// TODO Pm description
var tabBeginner = new GuiImage(ResourceLoader.getImage("data/ui/play/tab_begin.png").toTile());
tabBeginner.position = new Vector(29, 2);
tabBeginner.extent = new Vector(184, 55);
localContainer.addChild(tabBeginner);
// TODO actual tab buttons
}
}