@@ -2,8 +2,6 @@ extends "../vt_action.gd"
22
33const Serializers = preload ("res://lib/utils/serializers.gd" )
44
5- const VALUE_SLOT = 1
6-
75@onready var input : OptionButton = % Parameters
86
97var parameter : int = - 1 :
@@ -44,7 +42,8 @@ var invert_value: bool = false :
4442var value : float :
4543 set (v ):
4644 value = v
47- % Input/Value .value = v
45+ % Input/Value .set_value_no_signal (v )
46+ _dirty = true
4847
4948var _dirty = false
5049
@@ -55,6 +54,20 @@ func _ready() -> void:
5554 input .set_item_metadata (input .item_count - 1 , m )
5655 input .select (parameter )
5756
57+ func bind (slot : int , node : GraphNode ) -> void :
58+ if slot == 0 :
59+ % Input/Value .editable = false
60+
61+ func unbind (slot : int , node : GraphNode ) -> void :
62+ if slot == 0 :
63+ % Input/Value .editable = true
64+
65+ func reset_value (slot : int ) -> void :
66+ if parameter < 0 :
67+ return
68+ var definition = model .parameters .values ()[parameter ]
69+ value = definition .default
70+
5871func get_type ():
5972 return "model_parameter"
6073
@@ -81,10 +94,15 @@ func deserialize(data: Dictionary):
8194 clamp_range = value_range
8295
8396func load_from_vts (data : Dictionary ):
84- parameter = model .parameters .values ().find_custom (
97+ var parameters = model .parameters .values ()
98+ parameter = parameters .find_custom (
8599 func (f ):
86100 return f .name == data ["OutputLive2D" ]
87101 )
102+ if parameter == - 1 :
103+ return
104+
105+ var definition = parameters [parameter ]
88106
89107 var output_range = Vector2 (
90108 data ["OutputRangeLower" ],
@@ -97,6 +115,7 @@ func load_from_vts(data: Dictionary):
97115 invert_value = false
98116 clamp_range = output_range
99117 clamp_enabled = data .get ("ClampOutput" , false )
118+ reset_value (0 )
100119
101120func update_value (_slot : int , v : float ) -> void :
102121 if input .get_selected_metadata () == null :
@@ -111,14 +130,13 @@ func update_value(_slot: int, v: float) -> void:
111130 v = clampf (v , clamp_range .x , clamp_range .y )
112131
113132 value = v
114- _dirty = true
115133
116134func _update_model ():
117135 if model_parameter .is_empty ():
118136 return
119137 if not _dirty :
120138 return
121-
139+
122140 model .mixer .get_node ("Tracking" ).set (
123141 model_parameter , value
124142 )
@@ -131,3 +149,6 @@ func _on_reset_button_pressed() -> void:
131149 invert_value = false
132150 if not model_parameter .is_empty ():
133151 clamp_range = Vector2 (input .get_selected_metadata ().min , input .get_selected_metadata ().max )
152+
153+ func _on_manual_value_changed (v : float ) -> void :
154+ value = v
0 commit comments