Files

213 lines
6.9 KiB
GDScript

class_name Lobby
extends Node
var port = 2500;
var _GuiAnimate : int = -1;
var GUIAlpha : float = 0;
var GUIHide : float = 0;
var _gameName = "marsxplr";
var _timeoutHostList = 0.00;
var _lastHostListRequest = -1000.0;
var _lastHostListRefresh = -1000.0;
var _hostListRefreshTimeout = 5.0;
#UE: private var natCapable : ConnectionTesterStatus = ConnectionTesterStatus.Undetermined;
var _NATHosts = false;
var _probingPublicIP = false;
var _doneTesting = false;
var _timer : float = 0.0;
var _filterNATHosts = false;
var _forceNAT = false;
var _hideTest = false;
var _masterServerMessage = "";
var _masterServerConFailures = 0;
var _testMessage = "";
var _netConIP : Array[String];
var _netConPort : int;
var _netConAttempts = 0;
var _useMasterServer : bool = true;
var _disableMasterServer : bool = false;
var _doNetworking = true;
var userName = "";
var userCode = "";
var _userIsRegistered = false;
var _remoteIP : String;
var _userNameTemp = "";
var _userPassword = "";
var _userRemembered = false;
var _userAuthenticating = "";
var windowRect : Rect2;
var temp = "";
var _scrollPosition : Vector2;
var _outdated = "";
var _hostRegistered = false;
var _serverLevel = "";
var _showSettings = false;
var _autoHostListRefresh = true;
@export var useAlternateServer = false;
var messages : Array[String];
var _listServerIP : String = "";
var _listServerPort : int;
var _backupServerIP : String;
var _backupServerPort : int = 23456;
var _buttonHeight : float;
var _buttonHeightTarget : float;
var _mouseInServerList : bool;
var _serverDetails : String = "";
var _serverDetailsBoxAlpha : float;
@export var skin : Theme;
#UE: var serverDetailsBox : GUIStyle;
@export var lobbyDecor : LobbyDecor;
@export var contentWidth : int = 0;
var _hostDedicated : bool = false;
var _dedicatedIP : Array[String];
var _dedicatedPort : int;
var _dedicatedNAT : bool;
var _dedicatedHostAttempts : int;
@onready var GUI : Control = $GUI;
var _www_data : String = "";
var _www_response_code : int;
func _www_on_request_completed(_result, response_code, _headers, body):
_www_data = body.get_string_from_utf8();
_www_response_code = response_code;
func _ready():
## Awake
## Start
_userPassword = PlayerPrefs.GetString("userPassword", "");
userCode = PlayerPrefs.GetString("userCode", "");
_userRemembered = (PlayerPrefs.GetInt("userRemembered", 0) == 1);
_userIsRegistered = (PlayerPrefs.GetInt("userRegistered", 0) == 1);
GameData.masterBlacklist = "";
if GameData.userName != "": ##They just left a server
userName = GameData.userName;
if _userRemembered: _userNameTemp = userName;
elif _userPassword != "": ##They are trying to play authenticated - don't let them in without validating their password
_userNameTemp = PlayerPrefs.GetString("userName", "");
authenticateUser();
else:
_userNameTemp = PlayerPrefs.GetString("userName", "");
userName = _userNameTemp + ("-" if _userNameTemp != "" else "");
var msgs : Array[String] = [];
var wlds : Array[GameData.GameWorldDesc] = [];
var www : HTTPRequest = HTTPRequest.new();
add_child(www);
www.request_completed.connect(self._www_on_request_completed);
var www_error = www.request("http://73.189.4.24/upd3");
await www.request_completed
remove_child(www);
if(www_error == OK && _www_response_code == HTTPClient.RESPONSE_OK):
var data = _www_data.split('\n');
for dat : String in data:
if dat == "": continue;
var pos : int = dat.find('=');
if !pos || pos == -1: continue;
var val : Array[String] = [dat.substr(0, pos), dat.substr(pos + 1)];
if val[0] == "v" && val[1].to_float() > GameData.gameVersion:
_outdated = val[1];
elif val[0] == "d": _hostDedicated = (val[1] == "1" || val[1] == "true");
elif val[0] == "m": msgs.append(val[1]);
elif val[0] == "w":
var nme = "";
var url = "";
var featured = false;
var wrld = val[1].split(';');
for str : String in wrld:
if str == "": continue;
if str == "featured":
featured = true;
continue;
var vals = str.split(':');
if vals[0] == "nme": nme = vals[1];
elif vals[0] == "url": url = str.substr(4);
wlds.append(GameData.GameWorldDesc.new(nme, url, featured));
elif (val[0] == "s" && !useAlternateServer) || (val[0] == "s2" && useAlternateServer):
var ipStr = val[1].split(':');
_listServerIP = ipStr[0];
_listServerPort = ipStr[1].to_int();
#UE: MasterServer.ipAddress = listServerIP;
#UE: MasterServer.port = listServerPort;
elif (val[0] == "f" && !useAlternateServer) || (val[0] == "f2" && useAlternateServer):
var ipStr = val[1].split(':');
#UE: Network.natFacilitatorIP = ipStr[0];
#UE: Network.natFacilitatorPort = parseInt(ipStr[1]);
elif (val[0] == "t" && !useAlternateServer) || (val[0] == "t2" && useAlternateServer):
var ipStr = val[1].split(':');
#UE: Network.connectionTesterIP = ipStr[0];
#UE: Network.connectionTesterPort = parseInt(ipStr[1]);
elif val[0] == "b":
GameData.masterBlacklist += ("\n" if GameData.masterBlacklist != "" else "") + val[1];
elif val[0] == "n":
GameData.networkMode = val[1].to_int();
else:
GameData.errorMessage = "Alert: Update server is unreachable.\nIf this computer is online, the update server may be down.\n\nYou need to be connected to the internet to play Mars Explorer.\n\nPlease check MarsXPLR.com for news & updates!";
GameData.gameWorlds = wlds;
messages = msgs;
#UE: MasterServer.RequestHostList(gameName);
func _gui(delta : float):
GUI.theme = skin;
GUI.modulate.a = GUIAlpha;
#UE: if(QualitySettings.currentLevel < 3) QualitySettings.currentLevel = 3; //Server List GUI looks terrible at 1/4 res :)
var t_elapsed : float = (Time.get_ticks_msec() as float) / 1000;
var screen_size : Vector2 = get_viewport().get_visible_rect().size;
if t_elapsed > 4.25:
##Fade GUI Out
if _GuiAnimate == 1:
if GUIAlpha <= 0:
GUIAlpha = 0;
_GuiAnimate = 0;
else: GUIAlpha = GUIAlpha - delta * .35;
if GUIHide > 1:
GUIHide = 1;
else: GUIHide += delta * .5;
##Fade GUI In
elif _GuiAnimate == -1:
GUIAlpha = 0;
_GuiAnimate = -2;
elif _GuiAnimate == -2:
if GUIAlpha >= 1.4:
GUIAlpha = 1.4;
_GuiAnimate = 0;
else: GUIAlpha += delta * .5;
var width = screen_size.y * 1.2; ## * .84
if width > 800: width -= (width - 800) * .5;
if width > 1200: width = 1200;
if width > screen_size.x - 30: width = screen_size.x - 30;
if width < 600: width = 600;
contentWidth = width;
func _process(delta : float):
_gui(delta);
func authenticateUser():
_userAuthenticating = "";
if(_userRemembered):
PlayerPrefs.SetString("userName", _userNameTemp);
PlayerPrefs.SetString("userPassword", _userPassword);
PlayerPrefs.SetInt("userRemembered", 1);
PlayerPrefs.SetInt("userRegistered", 1);
else:
PlayerPrefs.SetString("userName", "");
PlayerPrefs.SetString("userPassword", "");
PlayerPrefs.SetInt("userRemembered", 0);
PlayerPrefs.SetInt("userRegistered", 0);
_userNameTemp = "";
_userPassword = "";