From a0d01656ab8634205ff77d5a16b7a28bffe01347 Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Sun, 23 Jun 2024 21:37:16 +0530 Subject: [PATCH] better mp message boxes --- src/gui/JoinServerGui.hx | 11 ++-- src/gui/MPMessageGui.hx | 106 ++++++++++++++++++++++++++++++++++ src/net/MasterServerClient.hx | 9 ++- src/net/Net.hx | 29 ++++++---- src/net/NetCommands.hx | 7 +-- 5 files changed, 141 insertions(+), 21 deletions(-) create mode 100644 src/gui/MPMessageGui.hx diff --git a/src/gui/JoinServerGui.hx b/src/gui/JoinServerGui.hx index 3cfadcf7..b74aa9b9 100644 --- a/src/gui/JoinServerGui.hx +++ b/src/gui/JoinServerGui.hx @@ -117,13 +117,14 @@ class JoinServerGui extends GuiImage { // return; // } - // MarbleGame.canvas.setContent(new MultiplayerLoadingGui("Connecting")); + MarbleGame.canvas.setContent(new MPMessageGui("Please Wait", "Connecting")); var failed = true; haxe.Timer.delay(() -> { - if (failed) { - MarbleGame.canvas.setContent(new JoinServerGui()); - MarbleGame.canvas.pushDialog(new MessageBoxOkDlg("Failed to connect to server. Please try again.")); - Net.disconnect(); + if (MarbleGame.canvas.content is MPMessageGui) { + var loadGui:MPMessageGui = cast MarbleGame.canvas.content; + if (loadGui != null) { + loadGui.setTexts("Error", "Failed to connect to server"); + } } }, 15000); Net.joinServer(ourServerList[curSelection].name, "", () -> { diff --git a/src/gui/MPMessageGui.hx b/src/gui/MPMessageGui.hx new file mode 100644 index 00000000..f5422e9a --- /dev/null +++ b/src/gui/MPMessageGui.hx @@ -0,0 +1,106 @@ +package gui; + +import net.Net; +import hxd.res.BitmapFont; +import src.ResourceLoader; +import h3d.Vector; +import src.MarbleGame; +import src.Util; +import src.Settings; + +class MPMessageGui extends GuiImage { + public function new(titleText:String, msgText:String) { + function chooseBg() { + var rand = Math.random(); + if (rand >= 0 && rand <= 0.244) + return ResourceLoader.getImage('data/ui/backgrounds/gold/${cast (Math.floor(Util.lerp(1, 12, Math.random())), Int)}.jpg'); + if (rand > 0.244 && rand <= 0.816) + return ResourceLoader.getImage('data/ui/backgrounds/platinum/${cast (Math.floor(Util.lerp(1, 28, Math.random())), Int)}.jpg'); + return ResourceLoader.getImage('data/ui/backgrounds/ultra/${cast (Math.floor(Util.lerp(1, 9, Math.random())), Int)}.jpg'); + } + var img = chooseBg(); + super(img.resource.toTile()); + + function loadButtonImages(path:String) { + var normal = ResourceLoader.getResource('${path}_n.png', ResourceLoader.getImage, this.imageResources).toTile(); + var hover = ResourceLoader.getResource('${path}_h.png', ResourceLoader.getImage, this.imageResources).toTile(); + var pressed = ResourceLoader.getResource('${path}_d.png', ResourceLoader.getImage, this.imageResources).toTile(); + return [normal, hover, pressed]; + } + + var markerFelt32fontdata = ResourceLoader.getFileEntry("data/font/MarkerFelt.fnt"); + var markerFelt32b = new BitmapFont(markerFelt32fontdata.entry); + @:privateAccess markerFelt32b.loader = ResourceLoader.loader; + var markerFelt48 = markerFelt32b.toSdfFont(cast 42 * Settings.uiScale, MultiChannel); + var markerFelt28 = markerFelt32b.toSdfFont(cast 26 * Settings.uiScale, MultiChannel); + + this.horizSizing = Width; + this.vertSizing = Height; + this.position = new Vector(0, 0); + this.extent = new Vector(640, 480); + + var container = new GuiControl(); + container.horizSizing = Center; + container.vertSizing = Center; + container.position = new Vector(80, 60); + container.extent = new Vector(640, 480); + + this.addChild(container); + + var wnd = new GuiImage(ResourceLoader.getResource("data/ui/mp/window.png", ResourceLoader.getImage, this.imageResources).toTile()); + wnd.position = new Vector(64, 91); + wnd.extent = new Vector(511, 297); + wnd.horizSizing = Center; + wnd.vertSizing = Center; + container.addChild(wnd); + + var title = new GuiText(markerFelt48); + title.text.text = titleText; + title.text.textColor = 0xFFFFFF; + title.text.dropShadow = { + dx: 1, + dy: 1, + alpha: 0.5, + color: 0 + }; + title.horizSizing = Center; + title.position = new Vector(47, 26); + title.extent = new Vector(416, 14); + title.justify = Center; + wnd.addChild(title); + + var msg = new GuiText(markerFelt28); + msg.text.text = msgText; + msg.text.textColor = 0xFFFFFF; + msg.text.dropShadow = { + dx: 1, + dy: 1, + alpha: 0.5, + color: 0 + }; + msg.horizSizing = Relative; + msg.vertSizing = Relative; + msg.position = new Vector(15, 136); + msg.extent = new Vector(483, 65); + msg.justify = Center; + wnd.addChild(msg); + + var cancelBtn = new GuiButton(loadButtonImages('data/ui/mp/join/cancel')); + cancelBtn.position = new Vector(208, 210); + cancelBtn.extent = new Vector(94, 45); + cancelBtn.horizSizing = Center; + cancelBtn.vertSizing = Top; + cancelBtn.pressedAction = (e) -> { + Net.disconnect(); + MarbleGame.canvas.setContent(new JoinServerGui()); + } + wnd.addChild(cancelBtn); + + setTexts = (t, m) -> { + title.text.text = t; + msg.text.text = m; + } + } + + public dynamic function setTexts(titleText:String, msgText:String) {} +} diff --git a/src/net/MasterServerClient.hx b/src/net/MasterServerClient.hx index 5a606213..289f434c 100644 --- a/src/net/MasterServerClient.hx +++ b/src/net/MasterServerClient.hx @@ -1,5 +1,6 @@ package net; +import gui.MPMessageGui; import gui.JoinServerGui; import gui.MessageBoxOkDlg; import src.MarbleGame; @@ -295,8 +296,12 @@ class MasterServerClient { @:privateAccess Net.client.setRemoteDescription(sdpObj.sdp, sdpObj.type); } if (conts.type == "connectFailed") { - MarbleGame.canvas.setContent(new JoinServerGui()); - MarbleGame.canvas.pushDialog(new MessageBoxOkDlg(conts.reason)); + if (MarbleGame.canvas.content is MPMessageGui) { + var loadGui:MPMessageGui = cast MarbleGame.canvas.content; + if (loadGui != null) { + loadGui.setTexts("Error", conts.reason); + } + } } if (conts.type == "turnserver") { Net.turnServer = conts.server; // Turn server! diff --git a/src/net/Net.hx b/src/net/Net.hx index c4307270..b7850804 100644 --- a/src/net/Net.hx +++ b/src/net/Net.hx @@ -1,5 +1,6 @@ package net; +import gui.MPMessageGui; import gui.MessageBoxOkDlg; import gui.JoinServerGui; import gui.MPPreGameDlg; @@ -214,8 +215,14 @@ class Net { MarbleGame.instance.quitMission(); } if (!weLeftOurselves || forceShow) { - MarbleGame.canvas.setContent(new JoinServerGui()); - MarbleGame.canvas.pushDialog(new MessageBoxOkDlg(msg)); + if (MarbleGame.canvas.content is MPMessageGui) { + var loadGui:MPMessageGui = cast MarbleGame.canvas.content; + if (loadGui != null) { + loadGui.setTexts("Error", msg); + } + } else { + MarbleGame.canvas.setContent(new MPMessageGui("Error", msg)); + } } } @@ -289,12 +296,12 @@ class Net { } openFlags |= idx; if (openFlags == 3) { - // if (MarbleGame.canvas.content is MultiplayerLoadingGui) { - // var loadGui:MultiplayerLoadingGui = cast MarbleGame.canvas.content; - // if (loadGui != null) { - // loadGui.setLoadingStatus("Handshaking"); - // } - // } + if (MarbleGame.canvas.content is MPMessageGui) { + var loadGui:MPMessageGui = cast MarbleGame.canvas.content; + if (loadGui != null) { + loadGui.setTexts("Please Wait", "Handshaking"); + } + } Console.log("Successfully connected!"); clients.set(client, new ClientConnection(0, client, clientDatachannel, clientDatachannelUnreliable)); // host is always 0 clientIdMap[0] = clients[client]; @@ -420,8 +427,10 @@ class Net { if (MarbleGame.instance.world != null) { MarbleGame.instance.quitMission(); } - MarbleGame.canvas.setContent(new JoinServerGui()); - MarbleGame.canvas.pushDialog(new MessageBoxOkDlg("Timed out")); + if (!(MarbleGame.canvas.content is MPMessageGui)) { + var loadGui = new MPMessageGui("Error", "Timed out"); + MarbleGame.canvas.setContent(loadGui); + } } } } diff --git a/src/net/NetCommands.hx b/src/net/NetCommands.hx index 06558e48..b7d4a332 100644 --- a/src/net/NetCommands.hx +++ b/src/net/NetCommands.hx @@ -1,5 +1,6 @@ package net; +import gui.MPMessageGui; import gui.MessageBoxOkDlg; import gui.JoinServerGui; import gui.MPExitGameDlg; @@ -270,16 +271,14 @@ class NetCommands { if (MarbleGame.instance.world != null) { MarbleGame.instance.quitMission(); } - MarbleGame.canvas.setContent(new JoinServerGui()); - MarbleGame.canvas.pushDialog(new MessageBoxOkDlg("Server closed")); + MarbleGame.canvas.setContent(new MPMessageGui("Info", "Server closed")); } } @:rpc(server) public static function getKicked() { if (Net.isClient) { Net.disconnect(); - MarbleGame.canvas.setContent(new JoinServerGui()); - MarbleGame.canvas.pushDialog(new MessageBoxOkDlg("Kicked from server")); + MarbleGame.canvas.setContent(new MPMessageGui("Info", "You have been kicked from the server")); } }