170 lines
6.4 KiB
GDScript
170 lines
6.4 KiB
GDScript
extends RefCounted
|
|
## BuiltinCommands
|
|
|
|
|
|
const Util := preload("res://addons/limbo_console/util.gd")
|
|
|
|
|
|
static func register_commands() -> void:
|
|
LimboConsole.register_command(cmd_alias, "alias", "add command alias")
|
|
LimboConsole.register_command(cmd_aliases, "aliases", "list all aliases")
|
|
LimboConsole.register_command(LimboConsole.clear_console, "clear", "clear console screen")
|
|
LimboConsole.register_command(cmd_commands, "commands", "list all commands")
|
|
LimboConsole.register_command(LimboConsole.info, "echo", "display a line of text")
|
|
LimboConsole.register_command(cmd_eval, "eval", "evaluate an expression")
|
|
LimboConsole.register_command(cmd_exec, "exec", "execute commands from file")
|
|
LimboConsole.register_command(cmd_fps_max, "fps_max", "limit framerate")
|
|
LimboConsole.register_command(cmd_fullscreen, "fullscreen", "toggle fullscreen mode")
|
|
LimboConsole.register_command(cmd_help, "help", "show command info")
|
|
LimboConsole.register_command(cmd_log, "log", "show recent log entries")
|
|
LimboConsole.register_command(cmd_quit, "quit", "exit the application")
|
|
LimboConsole.register_command(cmd_unalias, "unalias", "remove command alias")
|
|
LimboConsole.register_command(cmd_vsync, "vsync", "adjust V-Sync")
|
|
LimboConsole.register_command(LimboConsole.erase_history, "erase_history", "erases current history and persisted history")
|
|
LimboConsole.add_argument_autocomplete_source("help", 1, LimboConsole.get_command_names.bind(true))
|
|
|
|
|
|
static func cmd_alias(p_alias: String, p_command: String) -> void:
|
|
LimboConsole.info("Adding %s => %s" % [LimboConsole.format_name(p_alias), p_command])
|
|
LimboConsole.add_alias(p_alias, p_command)
|
|
|
|
|
|
static func cmd_aliases() -> void:
|
|
var aliases: Array = LimboConsole.get_aliases()
|
|
aliases.sort()
|
|
for alias in aliases:
|
|
var alias_argv: PackedStringArray = LimboConsole.get_alias_argv(alias)
|
|
var cmd_name: String = alias_argv[0]
|
|
var desc: String = LimboConsole.get_command_description(cmd_name)
|
|
alias_argv[0] = LimboConsole.format_name(cmd_name)
|
|
if desc.is_empty():
|
|
LimboConsole.info(LimboConsole.format_name(alias))
|
|
else:
|
|
LimboConsole.info("%s is alias of: %s %s" % [
|
|
LimboConsole.format_name(alias),
|
|
' '.join(alias_argv),
|
|
LimboConsole.format_tip(" // " + desc)
|
|
])
|
|
|
|
|
|
static func cmd_commands() -> void:
|
|
LimboConsole.info("Available commands:")
|
|
for name in LimboConsole.get_command_names(false):
|
|
var desc: String = LimboConsole.get_command_description(name)
|
|
name = LimboConsole.format_name(name)
|
|
LimboConsole.info(name if desc.is_empty() else "%s -- %s" % [name, desc])
|
|
|
|
|
|
static func cmd_eval(p_expression: String) -> Error:
|
|
var exp := Expression.new()
|
|
var err: int = exp.parse(p_expression, LimboConsole.get_eval_input_names())
|
|
if err != OK:
|
|
LimboConsole.error(exp.get_error_text())
|
|
return err
|
|
var result = exp.execute(LimboConsole.get_eval_inputs(),
|
|
LimboConsole.get_eval_base_instance())
|
|
if not exp.has_execute_failed():
|
|
if result != null:
|
|
LimboConsole.info(str(result))
|
|
return OK
|
|
else:
|
|
LimboConsole.error(exp.get_error_text())
|
|
return ERR_SCRIPT_FAILED
|
|
|
|
|
|
static func cmd_exec(p_file: String, p_silent: bool = true) -> void:
|
|
if not p_file.ends_with(".lcs"):
|
|
# Prevent users from reading other game assets.
|
|
p_file += ".lcs"
|
|
if not FileAccess.file_exists(p_file):
|
|
p_file = "user://" + p_file
|
|
LimboConsole.execute_script(p_file, p_silent)
|
|
|
|
|
|
static func cmd_fps_max(p_limit: int = -1) -> void:
|
|
if p_limit < 0:
|
|
if Engine.max_fps == 0:
|
|
LimboConsole.info("Framerate is unlimited.")
|
|
else:
|
|
LimboConsole.info("Framerate is limited to %d FPS." % [Engine.max_fps])
|
|
return
|
|
|
|
Engine.max_fps = p_limit
|
|
if p_limit > 0:
|
|
LimboConsole.info("Limiting framerate to %d FPS." % [p_limit])
|
|
elif p_limit == 0:
|
|
LimboConsole.info("Removing framerate limits.")
|
|
|
|
|
|
static func cmd_fullscreen() -> void:
|
|
if LimboConsole.get_viewport().mode == Window.MODE_WINDOWED:
|
|
# get_viewport().mode = Window.MODE_EXCLUSIVE_FULLSCREEN
|
|
LimboConsole.get_viewport().mode = Window.MODE_FULLSCREEN
|
|
LimboConsole.info("Window switched to fullscreen mode.")
|
|
else:
|
|
LimboConsole.get_viewport().mode = Window.MODE_WINDOWED
|
|
LimboConsole.info("Window switched to windowed mode.")
|
|
|
|
|
|
static func cmd_help(p_command_name: String = "") -> Error:
|
|
if p_command_name.is_empty():
|
|
LimboConsole.print_line(LimboConsole.format_tip("Type %s to list all available commands." %
|
|
[LimboConsole.format_name("commands")]))
|
|
LimboConsole.print_line(LimboConsole.format_tip("Type %s to get more info about the command." %
|
|
[LimboConsole.format_name("help command")]))
|
|
return OK
|
|
else:
|
|
return LimboConsole.usage(p_command_name)
|
|
|
|
|
|
static func cmd_log(p_num_lines: int = 10) -> Error:
|
|
var fn: String = ProjectSettings.get_setting("debug/file_logging/log_path")
|
|
var file = FileAccess.open(fn, FileAccess.READ)
|
|
if not file:
|
|
LimboConsole.error("Can't open file: " + fn)
|
|
return ERR_CANT_OPEN
|
|
var contents := file.get_as_text()
|
|
var lines := contents.split('\n')
|
|
if lines.size() and lines[lines.size() - 1].strip_edges() == "":
|
|
lines.remove_at(lines.size() - 1)
|
|
lines = lines.slice(maxi(lines.size() - p_num_lines, 0))
|
|
for line in lines:
|
|
LimboConsole.print_line(Util.bbcode_escape(line), false)
|
|
return OK
|
|
|
|
|
|
static func cmd_quit() -> void:
|
|
LimboConsole.get_tree().quit()
|
|
|
|
|
|
static func cmd_unalias(p_alias: String) -> void:
|
|
if LimboConsole.has_alias(p_alias):
|
|
LimboConsole.remove_alias(p_alias)
|
|
LimboConsole.info("Alias removed.")
|
|
else:
|
|
LimboConsole.warn("Alias not found.")
|
|
|
|
|
|
static func cmd_vsync(p_mode: int = -1) -> void:
|
|
if p_mode < 0:
|
|
var current: int = DisplayServer.window_get_vsync_mode()
|
|
if current == 0:
|
|
LimboConsole.info("V-Sync: disabled.")
|
|
elif current == 1:
|
|
LimboConsole.info('V-Sync: enabled.')
|
|
elif current == 2:
|
|
LimboConsole.info('Current V-Sync mode: adaptive.')
|
|
LimboConsole.info("Adjust V-Sync mode with an argument: 0 - disabled, 1 - enabled, 2 - adaptive.")
|
|
elif p_mode == DisplayServer.VSYNC_DISABLED:
|
|
LimboConsole.info("Changing to disabled.")
|
|
DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED)
|
|
elif p_mode == DisplayServer.VSYNC_ENABLED:
|
|
LimboConsole.info("Changing to default V-Sync.")
|
|
DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_ENABLED)
|
|
elif p_mode == DisplayServer.VSYNC_ADAPTIVE:
|
|
LimboConsole.info("Changing to adaptive V-Sync.")
|
|
DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_ADAPTIVE)
|
|
else:
|
|
LimboConsole.error("Invalid mode.")
|
|
LimboConsole.info("Acceptable modes: 0 - disabled, 1 - enabled, 2 - adaptive.")
|