red_dragon_pon/addons/numeric-modifiers/numeric_mods_property.gd
2025-07-26 18:32:16 +05:00

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