NovetusFE/scenes/main.gd

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