broken_seals_2d/game/addons/multirun/Multirun.gd

95 lines
3.1 KiB
GDScript

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)