Files

63 lines
1.7 KiB
GDScript

class_name cCommandLine
extends CanvasLayer
var commands_directory = DirAccess.open("res://Scripts/Gameplay/CommandLine/Commands/")
@export var output_text: TextEdit
@export var input_line: LineEdit
var commands: Dictionary = {}
func _ready():
_load_commands()
input_line.text_submitted.connect(self._on_command_entered)
# To make a new command, write it in ./Commands with a main() function for entry.
# This function will automatically find and register all command files
func _load_commands():
if not commands_directory:
push_error("Failed to open commands folder!")
return
commands_directory.list_dir_begin()
var file_name = commands_directory.get_next()
while file_name != "":
if file_name.ends_with(".gd"):
var command_name = file_name.get_basename().to_lower()
var script = load("res://Scripts/Gameplay/CommandLine/Commands/" + file_name)
commands[command_name] = script
file_name = commands_directory.get_next()
commands_directory.list_dir_end()
func _print(text: String) -> void:
var line = output_text.get_line_count() - 1
output_text.insert_text(text + "\n", line, 0)
func _on_command_entered(new_text: String) -> void:
input_line.clear()
_print("> " + new_text)
var parts = new_text.strip_edges().split(" ")
if parts.size() == 0:
return
# Parse command and arguments
var cmd = parts[0].to_lower()
var args = parts.slice(1, parts.size())
if commands.has(cmd):
var cmd_script = commands[cmd].new()
if cmd_script.has_method("main"):
cmd_script.main(args, self)
else:
_print("DEV ERROR !\nCommand '%s' has no main() function!" % cmd)
else:
_print("Unknown command: %s" % cmd)
input_line.clear()
func _button_shock():
_print("Shocked")
func _button_alarm():
_print("Alarm Triggered")