diff --git a/godot_ship/scenes/Debug Menu.tscn b/godot_ship/scenes/Debug Menu.tscn index fe579aa..94d219a 100644 --- a/godot_ship/scenes/Debug Menu.tscn +++ b/godot_ship/scenes/Debug Menu.tscn @@ -48,6 +48,7 @@ placeholder_text = "By your command." caret_blink = true script = ExtResource( 3 ) -[connection signal="clear_line" from="." to="debug_canvas/VBoxContainer/LineEdit" method="_on_Debug_clear_line"] +[connection signal="clear_in" from="." to="debug_canvas/VBoxContainer/LineEdit" method="_on_Debug_clear_in"] +[connection signal="clear_out" from="." to="debug_canvas/VBoxContainer/TextEdit" method="_on_Debug_clear_out"] [connection signal="print_text" from="." to="debug_canvas/VBoxContainer/TextEdit" method="_on_Debug_print_text"] [connection signal="text_entered" from="debug_canvas/VBoxContainer/LineEdit" to="." method="_on_LineEdit_text_entered"] diff --git a/godot_ship/script/debug/In.gd b/godot_ship/script/debug/In.gd index efdca27..3e76043 100644 --- a/godot_ship/script/debug/In.gd +++ b/godot_ship/script/debug/In.gd @@ -5,5 +5,5 @@ extends LineEdit # var a = 2 # var b = "text" -func _on_Debug_clear_line(): +func _on_Debug_clear_in(): clear() diff --git a/godot_ship/script/debug/LineEdit.gd b/godot_ship/script/debug/LineEdit.gd deleted file mode 100644 index efdca27..0000000 --- a/godot_ship/script/debug/LineEdit.gd +++ /dev/null @@ -1,9 +0,0 @@ -extends LineEdit - - -# Declare member variables here. Examples: -# var a = 2 -# var b = "text" - -func _on_Debug_clear_line(): - clear() diff --git a/godot_ship/script/debug/Out.gd b/godot_ship/script/debug/Out.gd index 90681a6..fdf79f2 100644 --- a/godot_ship/script/debug/Out.gd +++ b/godot_ship/script/debug/Out.gd @@ -8,3 +8,9 @@ func _ready(): func _on_Debug_print_text(text): insert_text_at_cursor(text) + + +func _on_Debug_clear_out(): + cursor_set_line(0) + cursor_set_column(0) + text = ""; diff --git a/godot_ship/script/debug/debug_menu.gd b/godot_ship/script/debug/debug_menu.gd index 9f14b13..149439f 100644 --- a/godot_ship/script/debug/debug_menu.gd +++ b/godot_ship/script/debug/debug_menu.gd @@ -16,7 +16,8 @@ var menu_hidden = Transform2D(Vector2(1,0), Vector2(0,1), Vector2(0,-170)) var menu_active = Transform2D(Vector2(1,0), Vector2(0,1), Vector2(0, 0)) # signals -signal clear_line +signal clear_in +signal clear_out signal print_text(text) # Called when the node enters the scene tree for the first time. @@ -43,36 +44,112 @@ func _input(event): debug_active = !debug_active; func _on_LineEdit_text_entered(line): - emit_signal("clear_line") + emit_signal("clear_in") debug_print_line("") var command = line.split(' ', true, 1) - if command.size() > 0: - match command[0]: - "start": - if command.size() > 1: - MessageBus.emit_signal("change_scene", command[1]) - debug_print_line("start '" + command[1] + "'\n".c_unescape()) - else: - debug_print_line("Usage: start scene") - "kill": - if command.size() > 1 and command[1] != "Debug": - MessageBus.emit_signal("kill_scene", command[1]) - debug_print_line("kill '" + command[1] + "'\n".c_unescape()) - else: - debug_print_line("Usage: kill scene") - "restart": - MessageBus.emit_signal("return_to_title") - "print": - if command.size() > 1: - debug_print_line(command[1].c_unescape()) - "raw_emit": - var mbus_signal = command[1].split(' ', true, 1) - match mbus_signal.size(): - 2: MessageBus.emit_signal(mbus_signal[0], mbus_signal[1]) - 1: MessageBus.emit_signal(mbus_signal[0]) - 0: debug_print_line( "Usage: raw_emit signal [value]\n") - _: - debug_print_line("BY YOUR COMMAND.\n") + match command[0]: + "start", "s": + command_start(command) + "stop", "kill", "k": + command_stop(command) + "list", "ls", "l": + command_list(command) + "restart", "killall": + command_restart(command) + "print", "p": + command_print(command) + "raw_emit", "emit", "r", "e": # Send a signal over the MessageBus + command_emit(command) + "clear","cls": # Clear the output + command_clear(command) + "help", "h": + command_help(command) + _: + debug_print_line("Command not recognized.\n") func debug_print_line(string): emit_signal("print_text", string.c_unescape()) + +# Commands + +# start: Loads scene from res://scenes/*.tscn by filename, and starts it +func command_start (command): + if command.size() > 1: + MessageBus.emit_signal("start_tcsn", command[1]) + debug_print_line("start '" + command[1] + "'\n") + else: + debug_print_line("Usage: start scene") + +# stop: Stops scene by name of root node. +func command_stop (command): + if command.size() > 1 and command[1] != "Debug": + MessageBus.emit_signal("kill_scene", command[1]) + debug_print_line("kill '" + command[1] + "'\n") + else: + debug_print_line("Usage: kill scene") + +# list: Lists names of active scenes (children of Root) +func command_list (command): + debug_print_line("list: ") + MessageBus.emit_signal("list_scenes") + +# restart: Kills the current tree and replants Root +func command_restart (command): + MessageBus.emit_signal("return_to_title") + +# print: prints a message to the in-game debug console +func command_print(command): + if command.size() > 1: + debug_print_line(command[1] + "\n") + +# emit: emits a message onto the MessageBus (!Extremely Danger!) +func command_emit (command): + var mbus_signal = command[1].split(' ', true, 1) + match mbus_signal.size(): + 2: + debug_print_line("Message: " + String(mbus_signal) + "\n") + MessageBus.emit_signal(mbus_signal[0], mbus_signal[1]) + 1: + debug_print_line("Message: " + String(mbus_signal) + "\n") + MessageBus.emit_signal(mbus_signal[0]) + 0: debug_print_line( "Usage: raw_emit signal [value]\n") + +# clear: clears the debug output +func command_clear (command): + emit_signal("clear_out"); + +# help: Prints help dialogue +func command_help (command): + if (command.size() == 1): + debug_print_line("Ship's Commander V0.1\n") + debug_print_line("Valid commands:\nstart, stop, list, restart, print, emit, clear, help\n") + else: + debug_print_line(command[1]) + match command[1]: + "start", "s": + debug_print_line(" filename\nAliases: 'start', 's'\n") + debug_print_line("Loads and runs the scene filename.tscn\n") + "stop", "kill", "k": + debug_print_line(" scene\nAliases: 'stop', 'kill', 'k'\n") + debug_print_line("Kills an active scene whose name matches node.\n") + "list", "ls", "l": + debug_print_line("\nAliases: 'list', 'ls', 'l'\n") + debug_print_line("Lists the currently active scenes\n") + "restart", "killall": + debug_print_line("\nAliases: 'restart', 'killall'\n") + debug_print_line("Kills the current scene tree and plants a new Root.\n") + "print", "p": + debug_print_line(" string\nAliases: 'print', 'p'\n") + debug_print_line("Prints a string to the in-game debug console\n") + "raw_emit", "emit", "r", "e": + debug_print_line(" signal [message]\nAliases: 'raw_emit', 'emit', 'r', 'e'\n") + debug_print_line("Puts a message on the MessageBus without validation.\n") + "clear","cls": + debug_print_line("\nAliases: 'clear', 'cls'\n") + debug_print_line("Clears the debug output.\n") + "help", "h": + debug_print_line(" [command]\nAliases: 'help', 'h'\n") + debug_print_line("Prints information about a command.\n") + _: + debug_print_line(command[1] + "\nIsn't a valid command\n") + debug_print_line("\n") diff --git a/godot_ship/script/game/Main.gd b/godot_ship/script/game/Main.gd index e98fe09..df62d73 100644 --- a/godot_ship/script/game/Main.gd +++ b/godot_ship/script/game/Main.gd @@ -11,9 +11,11 @@ var debug_enabled = true # Called when the node enters the scene tree for the first time. func _ready(): # Connect to signals + MessageBus.connect("start_tcsn", self, "_on_scene_start_by_name") MessageBus.connect("change_scene", self, "_on_scene_start") - MessageBus.connect("kill_scene", self, "_on_scene_kill") - MessageBus.connect("quit", self, "_on_quit_request") + MessageBus.connect("kill_scene", self, "_on_scene_kill") + MessageBus.connect("list_scenes", self, "_on_scene_list") + MessageBus.connect("quit", self, "_on_quit_request") MessageBus.connect("return_to_title", self, "_on_title_request") # Create the scenes title_screen = preload("res://scenes/Title Screen.tscn") @@ -41,24 +43,33 @@ func _on_scene_start(scene): "Title": add_child (title_screen.instance()) return true - + +func _on_scene_start_by_name(scene): + var pack = load("res://scenes/" + scene + ".tscn"); + add_child(pack.instance()); # Kills all child nodes with name matching `scene` func _on_scene_kill(scene): - print ("_on_scene_kill(",scene,")") var c = get_children() for i in range (c.size()): if c[i].name == scene: c[i].queue_free() + MessageBus.emit_signal("print_console", String(c[i].name) + " killed.\n".c_unescape()) return true return false +func _on_scene_list(): + var children = get_children() + var names = [] + for i in range (children.size()): + names.append(children[i].name) + MessageBus.emit_signal("print_console", String(names) + "\n".c_unescape()) + + # Quits func _on_quit_request(): - print ("_on_quit_request()") get_tree().quit() # Kills the current tree and replaces it with a new one func _on_title_request(): - print ("_on_title_request()") return get_tree().change_scene("res://scenes/Main.tscn") diff --git a/godot_ship/script/game/Message Bus.gd b/godot_ship/script/game/Message Bus.gd index 981cf82..334ac6b 100644 --- a/godot_ship/script/game/Message Bus.gd +++ b/godot_ship/script/game/Message Bus.gd @@ -1,9 +1,16 @@ extends Node +# Ignore "unused signal" warnings in this class +# warning-ignore-all:unused_signal + # Ask for a scene change signal change_scene(scene_name) + +signal start_tcsn(scene_tcsn_name) # Ask to kill scene signal kill_scene(scene_name) +# Ask to list active scenes +signal list_scenes() # Ask to quit the game signal quit # Ask to return to title screen