66 lines
1.6 KiB
GDScript
66 lines
1.6 KiB
GDScript
@tool
|
|
extends EditorProperty
|
|
|
|
class_name NumericModsProperty
|
|
|
|
var control : VBoxContainer
|
|
var mod : NumericModifiers
|
|
var updating : bool
|
|
|
|
func _init() -> void:
|
|
control = preload("uid://d2ne6ml10xgcl").instantiate()
|
|
add_child(control)
|
|
add_focusable(control)
|
|
|
|
refresh_control()
|
|
|
|
control.get_node("%Flat").value_changed.connect(update_flat)
|
|
control.get_node("%Percentage").value_changed.connect(update_percentage)
|
|
control.get_node("%Mult").value_changed.connect(update_mult)
|
|
|
|
func refresh_control():
|
|
if mod == null: return
|
|
|
|
control.get_node("%Flat").set_value_no_signal(mod.flat_value)
|
|
control.get_node("%Percentage").set_value_no_signal(mod.percentage_value)
|
|
control.get_node("%Mult").set_value_no_signal(mod.mult_value)
|
|
|
|
func update_flat(value : float):
|
|
if updating: return
|
|
|
|
mod.flat_value = value
|
|
|
|
refresh_control()
|
|
emit_changed(get_edited_property(),mod)
|
|
|
|
func update_percentage(value : float):
|
|
if updating: return
|
|
|
|
mod.percentage_value = value
|
|
|
|
refresh_control()
|
|
emit_changed(get_edited_property(),mod)
|
|
|
|
func update_mult(value : float):
|
|
if updating: return
|
|
|
|
mod.mult_value = value
|
|
|
|
refresh_control()
|
|
emit_changed(get_edited_property(),mod)
|
|
|
|
func _update_property() -> void:
|
|
var new_value = get_edited_object().get(get_edited_property()) as NumericModifiers
|
|
if new_value == null:
|
|
new_value = NumericModifiers.new()
|
|
new_value.resource_local_to_scene = true
|
|
emit_changed(get_edited_property(),new_value)
|
|
if new_value.resource_local_to_scene == false:
|
|
new_value.resource_local_to_scene = true
|
|
if new_value == mod:
|
|
return
|
|
|
|
updating = true
|
|
mod = new_value
|
|
refresh_control()
|
|
updating = false
|