From 1706c165408fae9ae3d1526e3c67e1578fdfd751 Mon Sep 17 00:00:00 2001
From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com>
Date: Mon, 1 Jul 2024 00:59:05 +0530
Subject: [PATCH] make server list little better and add passworded joins
---
src/gui/JoinServerGui.hx | 121 ++++++++++++++++++++++++++++++----
src/net/MasterServerClient.hx | 2 +
src/net/Net.hx | 6 +-
3 files changed, 113 insertions(+), 16 deletions(-)
diff --git a/src/gui/JoinServerGui.hx b/src/gui/JoinServerGui.hx
index 9c546b7b..e72a9f04 100644
--- a/src/gui/JoinServerGui.hx
+++ b/src/gui/JoinServerGui.hx
@@ -64,17 +64,91 @@ class JoinServerGui extends GuiImage {
this.position = new Vector();
this.extent = new Vector(640, 480);
+ var passwordPopup = new GuiControl();
+ passwordPopup.position = new Vector(0, 0);
+ passwordPopup.extent = new Vector(640, 480);
+ passwordPopup.horizSizing = Width;
+ passwordPopup.vertSizing = Height;
+
+ var passwordWindow = new GuiImage(ResourceLoader.getResource("data/ui/mp/join/window2.png", ResourceLoader.getImage, this.imageResources).toTile());
+ passwordWindow.horizSizing = Center;
+ passwordWindow.vertSizing = Center;
+ passwordWindow.position = new Vector(144, 199);
+ passwordWindow.extent = new Vector(508, 202);
+ passwordPopup.addChild(passwordWindow);
+
+ var passwordTitle = new GuiText(markerFelt32);
+ passwordTitle.position = new Vector(22, 28);
+ passwordTitle.extent = new Vector(463, 14);
+ passwordTitle.text.textColor = 0xFFFFFF;
+ passwordTitle.horizSizing = Center;
+ passwordTitle.justify = Center;
+ passwordTitle.text.text = "Password Required";
+ passwordTitle.text.dropShadow = {
+ dx: 1,
+ dy: 1,
+ alpha: 0.5,
+ color: 0
+ };
+ passwordWindow.addChild(passwordTitle);
+
+ var passwordBar = new GuiImage(ResourceLoader.getResource("data/ui/mp/join/textbar.png", ResourceLoader.getImage, this.imageResources).toTile());
+ passwordBar.position = new Vector(22, 73);
+ passwordBar.extent = new Vector(463, 47);
+ passwordWindow.addChild(passwordBar);
+
+ var passwordInput = new GuiTextInput(markerFelt24);
+ passwordInput.position = new Vector(30, 79);
+ passwordInput.extent = new Vector(447, 38);
+ passwordInput.horizSizing = Center;
+ passwordInput.text.textColor = 0;
+ passwordWindow.addChild(passwordInput);
+
+ var passwordCancel = new GuiButton(loadButtonImages("data/ui/mp/join/cancel"));
+ passwordCancel.position = new Vector(29, 126);
+ passwordCancel.extent = new Vector(94, 45);
+ passwordCancel.pressedAction = (e) -> {
+ passwordInput.text.text = "";
+ MarbleGame.canvas.popDialog(passwordPopup, false);
+ }
+ passwordWindow.addChild(passwordCancel);
+
+ var passwordJoin = new GuiButton(loadButtonImages("data/ui/mp/join/join"));
+ passwordJoin.position = new Vector(385, 126);
+ passwordJoin.extent = new Vector(94, 45);
+ passwordWindow.addChild(passwordJoin);
+
var window = new GuiImage(ResourceLoader.getResource("data/ui/mp/join/window.png", ResourceLoader.getImage, this.imageResources).toTile());
window.horizSizing = Center;
window.vertSizing = Center;
window.position = new Vector(-60, 5);
window.extent = new Vector(759, 469);
+ var serverInfoContainer = new GuiControl();
+ serverInfoContainer.position = new Vector(520, 58);
+ serverInfoContainer.extent = new Vector(210, 166);
+ window.addChild(serverInfoContainer);
+
+ var serverInfo = new GuiMLText(markerFelt24, mlFontLoader);
+ serverInfo.position = new Vector(0, 0);
+ serverInfo.extent = new Vector(210, 166);
+ serverInfo.text.text = '
Select a Server
';
+ serverInfo.text.dropShadow = {
+ dx: 1,
+ dy: 1,
+ alpha: 0.5,
+ color: 0
+ };
+ serverInfo.text.textColor = 0xFFFFFF;
+ serverInfoContainer.addChild(serverInfo);
+
var serverListContainer = new GuiControl();
serverListContainer.position = new Vector(30, 80);
serverListContainer.extent = new Vector(475, 290);
window.addChild(serverListContainer);
+ var ourServerList:Array = [];
+
var curSelection = -1;
var serverList = new GuiTextListCtrl(markerFelt18, [], 0xFFFFFF);
serverList.position = new Vector(0, 0);
@@ -83,12 +157,18 @@ class JoinServerGui extends GuiImage {
serverList.textYOffset = -6;
serverList.onSelectedFunc = (sel) -> {
curSelection = sel;
+
+ if (curSelection == -1) {
+ serverInfo.text.text = 'Select a Server
or Host your own
';
+ } else {
+ var server = ourServerList[curSelection];
+ serverInfo.text.text = '${server.name}
Hosted by ${server.host}
${server.description}
';
+ }
}
serverListContainer.addChild(serverList);
var serverDisplays = [];
- var ourServerList:Array = [];
var platformToString = ["unknown", "pc", "mac", "web", "android"];
function updateServerListDisplay() {
@@ -113,10 +193,7 @@ class JoinServerGui extends GuiImage {
}
window.addChild(hostBtn);
- var joinBtn = new GuiButton(loadButtonImages("data/ui/mp/join/join"));
- joinBtn.position = new Vector(628, 379);
- joinBtn.extent = new Vector(93, 45);
- joinBtn.pressedAction = (e) -> {
+ var joinFunc = (password:String) -> {
if (curSelection != -1) {
var selectedServerVersion = ourServerList[curSelection].version;
// if (selectedServerVersion != MarbleGame.currentVersion) {
@@ -135,14 +212,31 @@ class JoinServerGui extends GuiImage {
}
}
}, 15000);
- Net.joinServer(ourServerList[curSelection].name, "", () -> {
+ Net.joinServer(ourServerList[curSelection].name, password, () -> {
failed = false;
Net.remoteServerInfo = ourServerList[curSelection];
});
}
}
+
+ var joinBtn = new GuiButton(loadButtonImages("data/ui/mp/join/join"));
+ joinBtn.position = new Vector(628, 379);
+ joinBtn.extent = new Vector(93, 45);
+ joinBtn.pressedAction = (e) -> {
+ if (curSelection != -1) {
+ if (ourServerList[curSelection].passworded) {
+ MarbleGame.canvas.pushDialog(passwordPopup);
+ } else {
+ joinFunc("");
+ }
+ }
+ }
window.addChild(joinBtn);
+ passwordJoin.pressedAction = (e) -> {
+ joinFunc(passwordInput.text.text);
+ }
+
var refreshing = false;
var refreshBtn = new GuiButton(loadButtonImagesExt("data/ui/mp/join/refresh/refresh-1"));
refreshBtn.position = new Vector(126, 379);
@@ -196,19 +290,18 @@ class JoinServerGui extends GuiImage {
titleText.text.textColor = 0xFFFFFF;
window.addChild(titleText);
- var serverInfoHeader = new GuiText(markerFelt24);
- serverInfoHeader.position = new Vector(520, 58);
- serverInfoHeader.extent = new Vector(210, 166);
- serverInfoHeader.justify = Center;
- serverInfoHeader.text.text = "Select a Server";
- serverInfoHeader.text.dropShadow = {
+ var listTitle = new GuiText(markerFelt24);
+ listTitle.position = new Vector(30, 48);
+ listTitle.extent = new Vector(480, 22);
+ listTitle.text.textColor = 0xDDDDEE;
+ listTitle.text.dropShadow = {
dx: 1,
dy: 1,
alpha: 0.5,
color: 0
};
- serverInfoHeader.text.textColor = 0xFFFFFF;
- window.addChild(serverInfoHeader);
+ listTitle.text.text = " Server Name";
+ window.addChild(listTitle);
this.addChild(window);
}
diff --git a/src/net/MasterServerClient.hx b/src/net/MasterServerClient.hx
index fa746fd9..677c5b06 100644
--- a/src/net/MasterServerClient.hx
+++ b/src/net/MasterServerClient.hx
@@ -11,6 +11,7 @@ import src.Console;
typedef RemoteServerInfo = {
name:String,
+ host:String,
description:String,
players:Int,
maxPlayers:Int,
@@ -212,6 +213,7 @@ class MasterServerClient {
queueMessage(Json.stringify({
type: "serverInfo",
name: serverInfo.name,
+ host: serverInfo.hostname,
description: serverInfo.description,
players: serverInfo.players,
maxPlayers: serverInfo.maxPlayers,
diff --git a/src/net/Net.hx b/src/net/Net.hx
index 0a915acf..21db81e9 100644
--- a/src/net/Net.hx
+++ b/src/net/Net.hx
@@ -46,6 +46,7 @@ enum abstract NetPacketType(Int) from Int to Int {
@:publicFields
class ServerInfo {
var name:String;
+ var hostname:String;
var description:String;
var players:Int;
var maxPlayers:Int;
@@ -53,8 +54,9 @@ class ServerInfo {
var state:String;
var platform:NetPlatform;
- public function new(name:String, description:String, players:Int, maxPlayers:Int, password:String, state:String, platform:NetPlatform) {
+ public function new(name:String, hostname:String, description:String, players:Int, maxPlayers:Int, password:String, state:String, platform:NetPlatform) {
this.name = name;
+ this.hostname = hostname;
this.description = description;
this.players = players;
this.maxPlayers = maxPlayers;
@@ -103,7 +105,7 @@ class Net {
public static var turnServer:String = "";
public static function hostServer(name:String, description:String, maxPlayers:Int, password:String, onHosted:() -> Void) {
- serverInfo = new ServerInfo(name, description, 1, maxPlayers, password, "LOBBY", getPlatform());
+ serverInfo = new ServerInfo(name, Settings.highscoreName, description, 1, maxPlayers, password, "LOBBY", getPlatform());
MasterServerClient.connectToMasterServer(() -> {
isHost = true;
isClient = false;