213 lines
6.9 KiB
GDScript
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 = "";
|
|
|