added CSG toolkit
This commit is contained in:
99
addons/csg_toolkit/scripts/csg_toolkit_config.gd
Normal file
99
addons/csg_toolkit/scripts/csg_toolkit_config.gd
Normal file
@@ -0,0 +1,99 @@
|
||||
@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)
|
||||
Reference in New Issue
Block a user