Initial Void Bastion 0.20 prototype

This commit is contained in:
Emporex committed 2026-10-03 21:28:56 +02:00
commit 7362ca0f02
251 files changed
+29688

No files matched your search

+89
View File
@@ -0,0 +1,89 @@
@tool
extends RefCounted
# project.get_setting — read a value from project.godot. Returns {exists: false} if unset.
# Params: {key: "application/config/name"}
static func get_setting(params: Dictionary) -> Dictionary:
var key: String = params.get("key", "")
if key == "":
return _err(-32602, "missing 'key'")
if not ProjectSettings.has_setting(key):
return _ok({"key": key, "exists": false})
return _ok({"key": key, "exists": true, "value": ProjectSettings.get_setting(key)})
# project.set_setting — write a value to project.godot and save.
# DESTRUCTIVE: mutates project.godot. Prefer targeted tools (autoload.add, etc.) when available.
# Params: {key, value}
static func set_setting(params: Dictionary) -> Dictionary:
var key: String = params.get("key", "")
if key == "":
return _err(-32602, "missing 'key'")
if not params.has("value"):
return _err(-32602, "missing 'value'")
ProjectSettings.set_setting(key, params["value"])
var err := ProjectSettings.save()
if err != OK:
return _err(-32001, "ProjectSettings.save() failed: %d" % err)
return _ok({"key": key, "value": params["value"]})
# autoload.add — register an autoload (singleton by default).
# Params: {name, path, singleton?: true}
static func autoload_add(params: Dictionary) -> Dictionary:
var autoload_name: String = params.get("name", "")
var path: String = params.get("path", "")
var singleton: bool = params.get("singleton", true)
if autoload_name == "" or path == "":
return _err(-32602, "missing 'name' or 'path'")
if not ResourceLoader.exists(path):
return _err(-32001, "path does not exist: %s" % path)
var value := ("*" + path) if singleton else path
ProjectSettings.set_setting("autoload/" + autoload_name, value)
var err := ProjectSettings.save()
if err != OK:
return _err(-32001, "save failed: %d" % err)
return _ok({"name": autoload_name, "path": path, "singleton": singleton})
# autoload.remove — unregister an autoload.
# Params: {name}
static func autoload_remove(params: Dictionary) -> Dictionary:
var autoload_name: String = params.get("name", "")
if autoload_name == "":
return _err(-32602, "missing 'name'")
var key := "autoload/" + autoload_name
if not ProjectSettings.has_setting(key):
return _err(-32001, "autoload not found: %s" % autoload_name)
ProjectSettings.clear(key)
var err := ProjectSettings.save()
if err != OK:
return _err(-32001, "save failed: %d" % err)
return _ok({"removed": autoload_name})
# autoload.list — enumerate all registered autoloads.
static func autoload_list(_params: Dictionary) -> Dictionary:
var items: Array = []
# ProjectSettings.get_property_list() contains our autoload entries under "autoload/*".
for p in ProjectSettings.get_property_list():
var name: String = p.name
if not name.begins_with("autoload/"):
continue
var value: String = str(ProjectSettings.get_setting(name))
var singleton := value.begins_with("*")
items.append({
"name": name.trim_prefix("autoload/"),
"path": value.trim_prefix("*") if singleton else value,
"singleton": singleton,
})
return _ok({"autoloads": items})
static func _ok(data) -> Dictionary:
return {"data": data}
static func _err(code: int, msg: String) -> Dictionary:
return {"error": {"code": code, "message": msg}}