@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