Initial Void Bastion 0.20 prototype
This commit is contained in:
commit
7362ca0f02
251 files changed
+29688
No files matched your search
@@ -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}}
|
||||
Reference in new issue
Block a user