Files
MovementTests/addons/csg_toolkit/scripts/csg_toolkit_config.gd
Minimata 2b74c9e70c
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Test (push) Successful in 7m54s
Create tag and build when new code gets to main / Export (push) Successful in 9m52s
added CSG toolkit
2026-02-06 18:35:38 +01:00

100 lines
3.6 KiB
GDScript

@tool
extends Node
class_name CsgTkConfig
# ProjectSettings paths
const SETTING_DEFAULT_BEHAVIOR = "addons/csg_toolkit/default_behavior"
const SETTING_ACTION_KEY = "addons/csg_toolkit/action_key"
const SETTING_SECONDARY_ACTION_KEY = "addons/csg_toolkit/secondary_action_key"
const SETTING_AUTO_HIDE = "addons/csg_toolkit/auto_hide"
# Default values
const DEFAULT_DEFAULT_BEHAVIOR = CSGBehavior.SIBLING
const DEFAULT_ACTION_KEY = KEY_SHIFT
const DEFAULT_SECONDARY_ACTION_KEY = KEY_ALT
const DEFAULT_AUTO_HIDE = true
# Configurable properties
## Default behavior when adding new CSG nodes
var default_behavior: CSGBehavior = CSGBehavior.SIBLING:
get: return _get_setting(SETTING_DEFAULT_BEHAVIOR, DEFAULT_DEFAULT_BEHAVIOR)
set(value): _set_setting(SETTING_DEFAULT_BEHAVIOR, value)
## Key to hold for primary action (e.g., adding CSG nodes)
var action_key: Key = KEY_SHIFT:
get: return _get_setting(SETTING_ACTION_KEY, DEFAULT_ACTION_KEY)
set(value): _set_setting(SETTING_ACTION_KEY, value)
## Key to hold for secondary action (e.g., alternative CSG operations)
var secondary_action_key: Key = KEY_ALT:
get: return _get_setting(SETTING_SECONDARY_ACTION_KEY, DEFAULT_SECONDARY_ACTION_KEY)
set(value): _set_setting(SETTING_SECONDARY_ACTION_KEY, value)
## Whether to auto-hide the CSG toolkit UI when not in use
var auto_hide: bool = true:
get: return _get_setting(SETTING_AUTO_HIDE, DEFAULT_AUTO_HIDE)
set(value): _set_setting(SETTING_AUTO_HIDE, value)
signal config_saved()
enum CSGBehavior { SIBLING, CHILD }
func _enter_tree():
_ensure_settings_exist()
func _ensure_settings_exist():
"""Register settings in ProjectSettings if they don't exist."""
if not ProjectSettings.has_setting(SETTING_DEFAULT_BEHAVIOR):
ProjectSettings.set_setting(SETTING_DEFAULT_BEHAVIOR, DEFAULT_DEFAULT_BEHAVIOR)
ProjectSettings.set_initial_value(SETTING_DEFAULT_BEHAVIOR, DEFAULT_DEFAULT_BEHAVIOR)
ProjectSettings.add_property_info({
"name": SETTING_DEFAULT_BEHAVIOR,
"type": TYPE_INT,
"hint": PROPERTY_HINT_ENUM,
"hint_string": "Sibling,Child"
})
if not ProjectSettings.has_setting(SETTING_ACTION_KEY):
ProjectSettings.set_setting(SETTING_ACTION_KEY, DEFAULT_ACTION_KEY)
ProjectSettings.set_initial_value(SETTING_ACTION_KEY, DEFAULT_ACTION_KEY)
ProjectSettings.add_property_info({
"name": SETTING_ACTION_KEY,
"type": TYPE_INT,
"hint": PROPERTY_HINT_NONE
})
if not ProjectSettings.has_setting(SETTING_SECONDARY_ACTION_KEY):
ProjectSettings.set_setting(SETTING_SECONDARY_ACTION_KEY, DEFAULT_SECONDARY_ACTION_KEY)
ProjectSettings.set_initial_value(SETTING_SECONDARY_ACTION_KEY, DEFAULT_SECONDARY_ACTION_KEY)
ProjectSettings.add_property_info({
"name": SETTING_SECONDARY_ACTION_KEY,
"type": TYPE_INT,
"hint": PROPERTY_HINT_NONE
})
if not ProjectSettings.has_setting(SETTING_AUTO_HIDE):
ProjectSettings.set_setting(SETTING_AUTO_HIDE, DEFAULT_AUTO_HIDE)
ProjectSettings.set_initial_value(SETTING_AUTO_HIDE, DEFAULT_AUTO_HIDE)
ProjectSettings.add_property_info({
"name": SETTING_AUTO_HIDE,
"type": TYPE_BOOL
})
func _get_setting(path: String, default_value: Variant) -> Variant:
"""Get a setting from ProjectSettings."""
return ProjectSettings.get_setting(path, default_value)
func _set_setting(path: String, value: Variant):
"""Set a setting in ProjectSettings."""
ProjectSettings.set_setting(path, value)
func save_config():
"""Save settings to project.godot file."""
var err = ProjectSettings.save()
if err == OK:
print("CsgToolkit: Saved Config to ProjectSettings")
config_saved.emit()
else:
push_error("CsgToolkit: Failed to save config - error code %d" % err)