From 90f67366e0ee02dd103560e4a291eecf5e7170b9 Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Sat, 19 Jun 2021 23:00:46 +0530 Subject: [PATCH] some PMG --- src/Main.hx | 25 +++++---- src/gui/GuiButton.hx | 9 ++++ src/gui/GuiControl.hx | 35 +++++++++++++ src/gui/MainMenuGui.hx | 7 ++- src/gui/PlayMissionGui.hx | 103 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 165 insertions(+), 14 deletions(-) create mode 100644 src/gui/PlayMissionGui.hx diff --git a/src/Main.hx b/src/Main.hx index 7f30c5f0..aa1d52eb 100644 --- a/src/Main.hx +++ b/src/Main.hx @@ -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); } diff --git a/src/gui/GuiButton.hx b/src/gui/GuiButton.hx index 26b41b94..73296dd8 100644 --- a/src/gui/GuiButton.hx +++ b/src/gui/GuiButton.hx @@ -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) { 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); + } + } } diff --git a/src/gui/GuiControl.hx b/src/gui/GuiControl.hx index a71f2a5e..25dbd045 100644 --- a/src/gui/GuiControl.hx +++ b/src/gui/GuiControl.hx @@ -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) {} } diff --git a/src/gui/MainMenuGui.hx b/src/gui/MainMenuGui.hx index 2d1e7443..a6d759d5 100644 --- a/src/gui/MainMenuGui.hx +++ b/src/gui/MainMenuGui.hx @@ -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); } } diff --git a/src/gui/PlayMissionGui.hx b/src/gui/PlayMissionGui.hx new file mode 100644 index 00000000..a5bfde57 --- /dev/null +++ b/src/gui/PlayMissionGui.hx @@ -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 + } +}