mirror of
https://github.com/Relintai/broken_seals.git
synced 2024-12-21 13:16:49 +01:00
95 lines
3.1 KiB
GDScript3
95 lines
3.1 KiB
GDScript3
|
tool
|
||
|
extends EditorPlugin
|
||
|
|
||
|
var panel1
|
||
|
var panel2
|
||
|
var pids = []
|
||
|
|
||
|
func _enter_tree():
|
||
|
var editor_node = get_tree().get_root().get_child(0)
|
||
|
var gui_base = editor_node.get_gui_base()
|
||
|
var icon_transition = gui_base.get_icon("TransitionSync", "EditorIcons") #ToolConnect
|
||
|
var icon_transition_auto = gui_base.get_icon("TransitionSyncAuto", "EditorIcons")
|
||
|
var icon_load = gui_base.get_icon("Load", "EditorIcons")
|
||
|
|
||
|
panel2 = _add_tooblar_button("_loaddir_pressed", icon_load, icon_load)
|
||
|
panel1 = _add_tooblar_button("_multirun_pressed", icon_transition, icon_transition_auto)
|
||
|
|
||
|
_add_setting("debug/multirun/number_of_windows", TYPE_INT, 2)
|
||
|
_add_setting("debug/multirun/window_distance", TYPE_INT, 1270)
|
||
|
_add_setting("debug/multirun/add_custom_args", TYPE_BOOL, true)
|
||
|
_add_setting("debug/multirun/first_window_args", TYPE_STRING, "listen")
|
||
|
_add_setting("debug/multirun/other_window_args", TYPE_STRING, "join")
|
||
|
|
||
|
func _multirun_pressed():
|
||
|
var window_count : int = ProjectSettings.get_setting("debug/multirun/number_of_windows")
|
||
|
var window_dist : int = ProjectSettings.get_setting("debug/multirun/window_distance")
|
||
|
var add_custom_args : bool = ProjectSettings.get_setting("debug/multirun/add_custom_args")
|
||
|
var first_args : String = ProjectSettings.get_setting("debug/multirun/first_window_args")
|
||
|
var other_args : String = ProjectSettings.get_setting("debug/multirun/other_window_args")
|
||
|
var commands = ["--position", "50,10"]
|
||
|
if first_args && add_custom_args:
|
||
|
for arg in first_args.split(" "):
|
||
|
commands.push_front(arg)
|
||
|
|
||
|
var main_run_args = ProjectSettings.get_setting("editor/main_run_args")
|
||
|
if main_run_args != first_args:
|
||
|
ProjectSettings.set_setting("editor/main_run_args", first_args)
|
||
|
var interface = get_editor_interface()
|
||
|
interface.play_main_scene()
|
||
|
if main_run_args != first_args:
|
||
|
ProjectSettings.set_setting("editor/main_run_args", main_run_args)
|
||
|
|
||
|
kill_pids()
|
||
|
for i in range(window_count-1):
|
||
|
commands = ["--position", str(50 + (i+1) * window_dist) + ",10"]
|
||
|
if other_args && add_custom_args:
|
||
|
for arg in other_args.split(" "):
|
||
|
commands.push_front(arg)
|
||
|
pids.append(OS.execute(OS.get_executable_path(), commands, false))
|
||
|
|
||
|
func _loaddir_pressed():
|
||
|
OS.shell_open(OS.get_user_data_dir())
|
||
|
|
||
|
func _exit_tree():
|
||
|
_remove_panels()
|
||
|
kill_pids()
|
||
|
|
||
|
func kill_pids():
|
||
|
for pid in pids:
|
||
|
OS.kill(pid)
|
||
|
pids = []
|
||
|
|
||
|
func _remove_panels():
|
||
|
if panel1:
|
||
|
remove_control_from_container(CONTAINER_TOOLBAR, panel1)
|
||
|
panel1.free()
|
||
|
if panel2:
|
||
|
remove_control_from_container(CONTAINER_TOOLBAR, panel2)
|
||
|
panel2.free()
|
||
|
|
||
|
func _unhandled_input(event):
|
||
|
if event is InputEventKey:
|
||
|
if event.pressed and event.scancode == KEY_F4:
|
||
|
_multirun_pressed()
|
||
|
|
||
|
func _add_tooblar_button(action:String, icon_normal, icon_pressed):
|
||
|
var panel = PanelContainer.new()
|
||
|
var b = TextureButton.new();
|
||
|
b.texture_normal = icon_normal
|
||
|
b.texture_pressed = icon_pressed
|
||
|
b.connect("pressed", self, action)
|
||
|
panel.add_child(b)
|
||
|
add_control_to_container(CONTAINER_TOOLBAR, panel)
|
||
|
return panel
|
||
|
|
||
|
func _add_setting(name:String, type, value):
|
||
|
if ProjectSettings.has_setting(name):
|
||
|
return
|
||
|
ProjectSettings.set(name, value)
|
||
|
var property_info = {
|
||
|
"name": name,
|
||
|
"type": type
|
||
|
}
|
||
|
ProjectSettings.add_property_info(property_info)
|