418 lines
14 KiB
GDScript
418 lines
14 KiB
GDScript
extends Control
|
|
|
|
var LinuxWinePrefix
|
|
var LinuxWinePath
|
|
var LinuxTerminal = "sh"
|
|
#var WorkingDirectory
|
|
var f = File.new()
|
|
var dir = Directory.new()
|
|
var CurrentMenu
|
|
var CTheme
|
|
var Drive = "Z:"
|
|
|
|
var Version = "2009E"
|
|
var PlayerName = "Noob"
|
|
var Map = ""
|
|
var NewServerTexture = load("res://textures/charcustom.png")
|
|
var NewServerTexturePath
|
|
var NewServerIcons = []
|
|
var ServerIndex
|
|
var Servers
|
|
var serverconfig = ConfigFile.new()
|
|
onready var WorkingDirectory = OS.get_executable_path().get_base_dir()
|
|
|
|
func _ready():
|
|
OS.min_window_size = Vector2(700, 600)
|
|
OS.max_window_size = Vector2(1920, 1080)
|
|
#WorkingDirectory = OS.get_executable_path().get_base_dir()
|
|
if !f.file_exists(WorkingDirectory + "/bin/Novetus.exe"):
|
|
WorkingDirectory = OS.get_executable_path().get_base_dir() + "/.."
|
|
print(WorkingDirectory)
|
|
|
|
if f.file_exists(WorkingDirectory + "/bin/Novetus.exe"):
|
|
$Main.visible = true
|
|
print("visible")
|
|
else:
|
|
$Main.visible = false
|
|
$Background/FirstTime.visible = false
|
|
$Background/Info.visible = false
|
|
if !f.file_exists(WorkingDirectory + "/bin/Novetus.exe"): return
|
|
match OS.get_name():
|
|
"X11":
|
|
print("yea")
|
|
Drive = "Z:"
|
|
f.open(WorkingDirectory + "/Start.sh", File.WRITE)
|
|
f.store_string('#!/bin/bash\nif [ -z "$4" ]; then WINEPREFIX=$1 $2 $3; else WINEPREFIX=$1 $2 $3 "$4"; fi')
|
|
f.close()
|
|
"Windows":
|
|
Drive = "C:"
|
|
$Main/Settings/ItemList.remove_item(0)
|
|
_:
|
|
$Background/Control2/RichTextLabel.text = "Your operating system is not supported.\nLinux and Windows only."
|
|
$Main.visible = false
|
|
if !dir.dir_exists(WorkingDirectory + "/NovetusFE"): dir.make_dir(WorkingDirectory + "/NovetusFE")
|
|
if !dir.dir_exists(WorkingDirectory + "/NovetusFE/themes"): dir.make_dir(WorkingDirectory + "/NovetusFE/themes")
|
|
loadconfig("/NovetusFE/nfeconfig.ini")
|
|
for i in customconfig("/config/config.ini"):
|
|
if "SelectedClient=" in i:
|
|
Version = i.replace("SelectedClient=","")
|
|
if "PlayerName=" in i:
|
|
PlayerName = i.replace("PlayerName=","")
|
|
for i in list_files_in_directory(WorkingDirectory + "/clients/"):
|
|
$Main/VersionsWindow/Versions/ItemList.add_item(i, load("res://textures/studio.png"))
|
|
$Main/VersionsWindow/Versions/ItemList.sort_items_by_text()
|
|
$Background/Info.text = $Background/Info.text.replace("%PLAYER%",PlayerName)
|
|
$Background/Info.text = $Background/Info.text.replace("%CLIENT%",Version)
|
|
$Background/Info.text = $Background/Info.text.replace("%MAP%",Map)
|
|
$Main/Serverlist/Versions.text = Version
|
|
$Main/Menu.visible = false
|
|
|
|
func customconfig(configfile):
|
|
var config = File.new()
|
|
config.open(WorkingDirectory + configfile, File.READ)
|
|
var content = config.get_as_text()
|
|
content = content.split("\n")
|
|
config.close()
|
|
return content
|
|
|
|
func loadconfig(arg):
|
|
var config = ConfigFile.new()
|
|
var err = config.load(WorkingDirectory + arg)
|
|
if err != OK:
|
|
return
|
|
match arg:
|
|
"/NovetusFE/nfeconfig.ini":
|
|
LinuxWinePrefix = config.get_value("Linux Settings", "wineprefix")
|
|
LinuxWinePath = config.get_value("Linux Settings", "wine_exec_path")
|
|
LinuxTerminal = config.get_value("Linux Settings", "terminal")
|
|
NewServerIcons = config.get_value("General Settings", "savedicons")
|
|
for i in $Main/AddServerWindow/ScrollContainer/HBoxContainer.get_children():
|
|
if i is TextureButton:
|
|
i.queue_free()
|
|
for i in NewServerIcons:
|
|
imageadd(i)
|
|
$"Main/Settings/Linux Settings/Panel/WPBox".text = LinuxWinePrefix
|
|
$"Main/Settings/Linux Settings/Panel/WPBox2".text = LinuxWinePath
|
|
$"Main/Settings/Linux Settings/Panel/CheckBox".pressed = LinuxTerminal
|
|
"/NovetusFE/servers.ini":
|
|
for i in config.get_sections():
|
|
$Main/Serverlist/ItemList.add_item(i,pathtoimage(config.get_value(i,"icon","res://textures/charcustom.png")))
|
|
|
|
func main_item_activated(index):
|
|
match $Main/Menu/ItemList.get_item_text(index):
|
|
"Settings":
|
|
menu("Settings")
|
|
$Main/Settings/ItemList.grab_focus()
|
|
"Studio":
|
|
menu("Studio")
|
|
$Main/Studio/ItemList.grab_focus()
|
|
"Multiplayer":
|
|
menu("Multiplayer")
|
|
$Main/Multiplayer/ItemList.grab_focus()
|
|
"Versions":
|
|
$Main/VersionsWindow.popup()
|
|
$Main/VersionsWindow/Versions/ItemList.grab_focus()
|
|
|
|
func settings_item_activated(index):
|
|
match $Main/Settings/ItemList.get_item_text(index):
|
|
"Back":
|
|
menu("")
|
|
$Main/Menu/ItemList.grab_focus()
|
|
"Linux Settings":
|
|
$"Main/Settings/Linux Settings".visible = true
|
|
"General Settings":
|
|
$"Main/Settings/General Settings".visible = true
|
|
"Launch Novetus":
|
|
launch("/bin/Novetus.exe")
|
|
|
|
#$Main/Settings/ItemList.grab_focus()
|
|
|
|
func launch(program,arg=""):
|
|
$OverlayLayer/Overlay.visible = true
|
|
yield(get_tree().create_timer(1),"timeout")
|
|
match OS.get_name():
|
|
"Windows":
|
|
if arg == "":
|
|
#OS.shell_open(WorkingDirectory + program)
|
|
OS.execute(WorkingDirectory + program,[])
|
|
else:
|
|
OS.execute(WorkingDirectory + program,[arg])
|
|
"X11":
|
|
if LinuxWinePrefix == "":
|
|
if LinuxWinePath !="":
|
|
OS.execute(LinuxWinePath,[WorkingDirectory + program])
|
|
else:
|
|
OS.shell_open(WorkingDirectory + program)
|
|
else:
|
|
if arg == "":
|
|
OS.execute("sh",[WorkingDirectory + "/Start.sh", LinuxWinePrefix, LinuxWinePath, WorkingDirectory + program])
|
|
else:
|
|
OS.execute("sh",[WorkingDirectory + "/Start.sh", LinuxWinePrefix, LinuxWinePath, WorkingDirectory + program, arg])
|
|
$OverlayLayer/Overlay.visible = false
|
|
func menu(menu, parent=$Main):
|
|
for i in $Main.get_children():
|
|
if i is Control:
|
|
i.visible = false
|
|
if menu == "":
|
|
$Main.visible = true
|
|
$Main/Menu.visible = true
|
|
return
|
|
CurrentMenu = menu
|
|
parent.get_node(menu).visible = !parent.get_node(menu).visible
|
|
|
|
|
|
func Back_pressed():
|
|
match CurrentMenu:
|
|
"Settings":
|
|
$"Main/Settings/Linux Settings".visible = false
|
|
$"Main/Settings/General Settings".visible = false
|
|
|
|
|
|
func _on_Save_pressed():
|
|
saveconfig()
|
|
|
|
func saveconfig():
|
|
var config = ConfigFile.new()
|
|
config.set_value("Linux Settings", "wineprefix", $"Main/Settings/Linux Settings/Panel/WPBox".text)
|
|
config.set_value("Linux Settings", "wine_exec_path", $"Main/Settings/Linux Settings/Panel/WPBox2".text)
|
|
config.set_value("Linux Settings", "terminal", $"Main/Settings/Linux Settings/Panel/CheckBox".pressed)
|
|
config.set_value("General Settings", "savedicons", NewServerIcons)
|
|
config.save(WorkingDirectory + "/NovetusFE/nfeconfig.ini")
|
|
if CTheme != null: get_tree().change_scene_to(CTheme)
|
|
|
|
func _on_ThemeButton_pressed():
|
|
pass # Replace with function body.
|
|
|
|
|
|
func _on_MenuButton_about_to_show():
|
|
$"Main/Settings/General Settings/Panel/OptionButton".clear()
|
|
$"Main/Settings/General Settings/Panel/OptionButton".add_item("Default")
|
|
for i in list_files_in_directory(WorkingDirectory + "/NovetusFE/themes"):
|
|
$"Main/Settings/General Settings/Panel/OptionButton".add_item(i)
|
|
pass
|
|
|
|
func list_files_in_directory(path):
|
|
var files = []
|
|
var dir = Directory.new()
|
|
dir.open(path)
|
|
dir.list_dir_begin()
|
|
|
|
while true:
|
|
var file = dir.get_next()
|
|
if file == "":
|
|
break
|
|
elif not file.begins_with("."):
|
|
files.append(file)
|
|
|
|
dir.list_dir_end()
|
|
|
|
return files
|
|
|
|
func _on_OptionButton_item_selected(index):
|
|
CTheme = load(WorkingDirectory + "/NovetusFE/themes/" + $"Main/Settings/General Settings/Panel/OptionButton".get_item_text(index))
|
|
|
|
|
|
func versionslist_activated(index):
|
|
match $Main/VersionsWindow/Versions/ItemList.get_item_text(index):
|
|
"Back":
|
|
menu("")
|
|
$Main/Menu/ItemList.grab_focus()
|
|
_:
|
|
Version = $Main/VersionsWindow/Versions/ItemList.get_item_text(index)
|
|
$Main/VersionsWindow.visible = false
|
|
$Background/Info.text = "Hello, %PLAYER%! Client Selected: %CLIENT%, Map Selected: %MAP%"
|
|
$Background/Info.text = $Background/Info.text.replace("%PLAYER%",PlayerName)
|
|
$Background/Info.text = $Background/Info.text.replace("%CLIENT%",Version)
|
|
$Main/Serverlist/Versions.text = Version
|
|
$Background/Info.text = $Background/Info.text.replace("%MAP%",$Main/Maps.current_file)
|
|
|
|
func studio_item_activated(index):
|
|
match $Main/Studio/ItemList.get_item_text(index):
|
|
"Back":
|
|
menu("")
|
|
$Main/Studio/ItemList.grab_focus()
|
|
"Launch without map":
|
|
launch("/clients/"+ Version + "/RobloxApp_studio.exe")
|
|
"Launch with map":
|
|
launch("/clients/"+ Version + "/RobloxApp_studio.exe", Drive + Map)
|
|
"Play Solo":
|
|
launch("/clients/"+ Version + "/RobloxApp_solo.exe", Drive + Map)
|
|
|
|
func _input(event):
|
|
if Input.is_action_just_pressed("versions"):
|
|
$Main/VersionsWindow.popup()
|
|
if Input.is_action_just_pressed("map"):
|
|
$Main/Maps.current_dir = WorkingDirectory + "/maps"
|
|
$Main/Maps.popup()
|
|
if Input.is_action_just_pressed("charcus"):
|
|
$Main/CharCus.popup()
|
|
|
|
|
|
func _on_Maps_confirmed():
|
|
print($Main/Maps.current_file)
|
|
Map = str($Main/Maps.current_dir.replace(WorkingDirectory,"") + "/" + $Main/Maps.current_file)
|
|
Map = Map.replacen("/","//")
|
|
Map = WorkingDirectory.replacen("/","//") + Map
|
|
$Background/Info.text = "Hello, %PLAYER%! Client Selected: %CLIENT%, Map Selected: %MAP%"
|
|
$Background/Info.text = $Background/Info.text.replace("%PLAYER%",PlayerName)
|
|
$Background/Info.text = $Background/Info.text.replace("%CLIENT%",Version)
|
|
$Background/Info.text = $Background/Info.text.replace("%MAP%",$Main/Maps.current_file)
|
|
print(Map)
|
|
|
|
|
|
func DirectConnect_Join_pressed():
|
|
var uri = to_uri($Main/DirectConnectWindow/LineEdit.text.split(":")[0].to_ascii().get_string_from_ascii(),$Main/DirectConnectWindow/LineEdit.text.split(":")[1].to_ascii().get_string_from_ascii())
|
|
launch("/bin/NovetusURI.exe novetus://" + uri)
|
|
|
|
func to_uri(ip, port):
|
|
var uri = Marshalls.utf8_to_base64(ip) + "|" + Marshalls.utf8_to_base64(port) + "|" + Marshalls.utf8_to_base64(Version)
|
|
uri = Marshalls.utf8_to_base64(uri)
|
|
return uri
|
|
|
|
func _on_DirectConnect_pressed():
|
|
$Main/DirectConnectWindow.popup()
|
|
|
|
func multiplayert_item_activated(index):
|
|
match $Main/Multiplayer/ItemList.get_item_text(index):
|
|
"Join":
|
|
#$Main/DirectConnectWindow.popup()
|
|
$Main/Serverlist.popup()
|
|
refreshserverlist()
|
|
"Back":
|
|
menu("")
|
|
|
|
func DirectConnect_Close_pressed():
|
|
$Main/DirectConnectWindow.visible = false
|
|
|
|
|
|
func Firsttime_Button_pressed():
|
|
$Main/Menu.visible = true
|
|
|
|
|
|
func _on_AddServer_pressed():
|
|
$Main/AddServerWindow.popup()
|
|
|
|
func new_icon_pressed():
|
|
$Main/AddServerWindow/ImageSelect.current_dir = WorkingDirectory
|
|
$Main/AddServerWindow/ImageSelect.popup()
|
|
|
|
func _on_ImageSelect_file_selected(path):
|
|
NewServerIcons.append(path)
|
|
imageadd(path)
|
|
|
|
func imageadd(path):
|
|
NewServerTexturePath = path
|
|
var t = TextureButton.new()
|
|
t.texture_normal = pathtoimage(path,[56,56])
|
|
$Main/AddServerWindow/ScrollContainer/HBoxContainer.add_child(t)
|
|
NewServerTexture = t.texture_normal
|
|
t.connect("pressed",self,"icon_pressed",[t.texture_normal,t,path])
|
|
var e = t.duplicate()
|
|
$Main/EditServerWindow/ScrollContainer/HBoxContainer.add_child(e)
|
|
e.connect("pressed",self,"icon_pressed",[e.texture_normal,e,path])
|
|
|
|
func pathtoimage(path,resize=null):
|
|
var img = Image.new()
|
|
var err = img.load(path)
|
|
if(err != 0):
|
|
print("error loading the image")
|
|
return null
|
|
if resize != null:
|
|
img.resize(resize[0],resize[1])
|
|
var img_tex = ImageTexture.new()
|
|
img_tex.create_from_image(img)
|
|
return img_tex
|
|
|
|
func icon_pressed(icon,node,path):
|
|
for i in $Main/AddServerWindow/ScrollContainer/HBoxContainer.get_children():
|
|
if i is TextureButton:
|
|
i.modulate = Color("707070")
|
|
for i in $Main/EditServerWindow/ScrollContainer/HBoxContainer.get_children():
|
|
if i is TextureButton:
|
|
i.modulate = Color("707070")
|
|
node.modulate = Color("ffffff")
|
|
NewServerTexture = icon
|
|
NewServerTexturePath = path
|
|
print("pressed")
|
|
|
|
func AddServer_Close_pressed():
|
|
$Main/AddServerWindow.visible = false
|
|
$Main/EditServerWindow.visible = false
|
|
|
|
|
|
func _on_Add_Server_pressed():
|
|
if $Main/AddServerWindow/LineEdit.text == "": return
|
|
saveconfig()
|
|
addtoserverlist($Main/AddServerWindow/LineEdit2.text,NewServerTexture)
|
|
|
|
func refreshserverlist():
|
|
$Main/Serverlist/ItemList.clear()
|
|
loadconfig("/NovetusFE/servers.ini")
|
|
|
|
func addtoserverlist(servername, icon):
|
|
if f.file_exists(WorkingDirectory + "/NovetusFE/servers.ini"):
|
|
serverconfig.load(WorkingDirectory + "/NovetusFE/servers.ini")
|
|
#var uri = to_uri($Main/AddServerWindow/LineEdit.text.split(":")[0].to_ascii().get_string_from_ascii(),$Main/AddServerWindow/LineEdit.text.split(":")[1].to_ascii().get_string_from_ascii())
|
|
var port
|
|
if ":" in $Main/AddServerWindow/LineEdit.text:
|
|
port = $Main/AddServerWindow/LineEdit.text.split(":")[1].to_ascii().get_string_from_ascii()
|
|
else:
|
|
port = "53640"
|
|
var ip = $Main/AddServerWindow/LineEdit.text.split(":")[0].to_ascii().get_string_from_ascii()
|
|
#var port = $Main/AddServerWindow/LineEdit.text.split(":")[1].to_ascii().get_string_from_ascii()
|
|
#serverconfig.set_value(servername, "uri", "novetus://" + uri)
|
|
serverconfig.set_value(servername, "ip", ip)
|
|
serverconfig.set_value(servername, "port", port)
|
|
serverconfig.set_value(servername, "icon", NewServerTexturePath)
|
|
serverconfig.save(WorkingDirectory + "/NovetusFE/servers.ini")
|
|
refreshserverlist()
|
|
#$Main/Serverlist/ItemList.add_item(servername,icon)
|
|
|
|
#print($Main/Serverlist/ItemList.items[servername])
|
|
|
|
|
|
func mplist_item_selected(index):
|
|
$Main/Serverlist/Join.disabled = false
|
|
$Main/Serverlist/Edit.disabled = false
|
|
ServerIndex = index
|
|
|
|
|
|
func _on_Join_pressed():
|
|
var e = $Main/Serverlist/ItemList.get_item_text(ServerIndex)
|
|
serverconfig.load(WorkingDirectory + "/NovetusFE/servers.ini")
|
|
launch("/bin/NovetusURI.exe " + to_uri(serverconfig.get_value(e,"ip"),serverconfig.get_value(e,"port")))
|
|
|
|
|
|
func multi_Versions_pressed():
|
|
$Main/Serverlist/Versions.text = Version
|
|
$Main/VersionsWindow.popup()
|
|
|
|
func multi_closed():
|
|
$Main/Serverlist.visible = false
|
|
|
|
func multi_edit_pressed():
|
|
var e = $Main/Serverlist/ItemList.get_item_text(ServerIndex)
|
|
serverconfig.load(WorkingDirectory + "/NovetusFE/servers.ini")
|
|
$Main/EditServerWindow/LineEdit2.text = e
|
|
$Main/EditServerWindow/LineEdit.text = serverconfig.get_value(e,"ip") + ":" + serverconfig.get_value(e,"port")
|
|
$Main/EditServerWindow.popup()
|
|
|
|
func delete_server_pressed():
|
|
serverconfig.load(WorkingDirectory + "/NovetusFE/servers.ini")
|
|
serverconfig.erase_section($Main/EditServerWindow/LineEdit2.text)
|
|
serverconfig.save(WorkingDirectory + "/NovetusFE/servers.ini")
|
|
$Main/EditServerWindow.visible = false
|
|
refreshserverlist()
|
|
|
|
func save_server_pressed():
|
|
var e = $Main/Serverlist/ItemList.get_item_text(ServerIndex)
|
|
serverconfig.load(WorkingDirectory + "/NovetusFE/servers.ini")
|
|
serverconfig.erase_section(e)
|
|
e = $Main/EditServerWindow/LineEdit2.text
|
|
serverconfig.set_value(e,"ip",$Main/EditServerWindow/LineEdit.text.split(":")[0])
|
|
serverconfig.set_value(e,"port",$Main/EditServerWindow/LineEdit.text.split(":")[1])
|
|
serverconfig.set_value(e, "icon", NewServerTexturePath)
|
|
serverconfig.save(WorkingDirectory + "/NovetusFE/servers.ini")
|
|
refreshserverlist()
|
|
$Main/EditServerWindow.visible = false
|