68 lines
1.8 KiB
GDScript
68 lines
1.8 KiB
GDScript
@tool
|
|
extends RefCounted
|
|
|
|
const _Result = preload("result.gd").Class
|
|
|
|
var __editor_settings: EditorSettings
|
|
|
|
var __name: StringName
|
|
var __initial_value: Variant
|
|
var __type: Variant.Type
|
|
var __hint: PropertyHint
|
|
var __hint_string: String
|
|
var __is_required: bool
|
|
var __is_value_empty_func: Callable
|
|
|
|
func __default_is_value_empty_func(value: Variant) -> bool:
|
|
if value: return false
|
|
return true
|
|
|
|
func _init(
|
|
name: String,
|
|
initial_value: Variant,
|
|
type: int,
|
|
hint: int,
|
|
hint_string: String = "",
|
|
is_required: bool = false,
|
|
is_value_empty_func: Callable = __default_is_value_empty_func
|
|
) -> void:
|
|
__name = "importality/" + name
|
|
__initial_value = initial_value
|
|
__type = type
|
|
__hint = hint
|
|
__hint_string = hint_string
|
|
__is_required = is_required
|
|
__is_value_empty_func = is_value_empty_func
|
|
|
|
func register(editor_settings: EditorSettings) -> void:
|
|
__editor_settings = editor_settings
|
|
if not __editor_settings.has_setting(__name):
|
|
__editor_settings.set_setting(__name, __initial_value)
|
|
__editor_settings.set_initial_value(__name, __initial_value, false)
|
|
var property_info: Dictionary = {
|
|
"name": __name,
|
|
"type": __type,
|
|
"hint": __hint, }
|
|
if __hint_string:
|
|
property_info["hint_string"] = __hint_string
|
|
__editor_settings.add_property_info(property_info)
|
|
|
|
class GettingValueResult:
|
|
extends _Result
|
|
var value: Variant
|
|
func success(value: Variant) -> void:
|
|
_success()
|
|
self.value = value
|
|
|
|
func get_value() -> GettingValueResult:
|
|
var result = GettingValueResult.new()
|
|
var value = __editor_settings.get_setting(__name)
|
|
if __is_required:
|
|
if __is_value_empty_func.call(value):
|
|
result.fail(ERR_UNCONFIGURED,
|
|
"The project settging \"%s\" is not specified!" % [__name] + \
|
|
"Specify it in Projest Settings -> General -> Importality.")
|
|
return result
|
|
result.success(value)
|
|
return result
|