From f407578a4477bbb746eb3530c1dc23040df4ae82 Mon Sep 17 00:00:00 2001
From: TotMaxim
Date: Sun, 5 Apr 2026 16:36:43 +0300
Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?=
=?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B0=D0=BD=D0=B8=D0=BC=D0=B0=D1=86=D0=B8?=
=?UTF-8?q?=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80?=
=?UTF-8?q?=D0=B5=D1=81=D1=81=20=D0=B1=D0=B0=D1=80=D0=BE=D0=B2=20=D0=B2=20?=
=?UTF-8?q?=D0=90=D0=A4=D0=A1=D0=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
scenes/pribor-afsp/pribor-afsp.gd | 26 +++++++--------
scenes/контроль/node-maper.gd | 53 +++++++++++++++++++++++++++++--
2 files changed, 64 insertions(+), 15 deletions(-)
diff --git a/scenes/pribor-afsp/pribor-afsp.gd b/scenes/pribor-afsp/pribor-afsp.gd
index ae0e565a..7fca921d 100644
--- a/scenes/pribor-afsp/pribor-afsp.gd
+++ b/scenes/pribor-afsp/pribor-afsp.gd
@@ -68,28 +68,28 @@ func _on_response_received(response: String, success: bool) -> void:
func _update_ui(json_data: Dictionary) -> void:
# Конвертер
for child in $bort.get_node('konverter/grid').get_children():
- node_maper.map_value_to_item(json_data, child, 'value0')
- node_maper.map_value_to_item(json_data, child, 'value1')
- node_maper.map_value_to_item(json_data, child, 'value2')
- node_maper.map_error_codes_to_item(json_data, child, 'state', 0)
+ node_maper.map_value_to_item_animated(json_data, child, 'value0')
+ node_maper.map_value_to_item_animated(json_data, child, 'value1')
+ node_maper.map_value_to_item_animated(json_data, child, 'value2')
+ node_maper.map_error_codes_to_item_animated(json_data, child, 'state', 0)
# Антенна 1
for child in $bort.get_node('antenna1/grid').get_children():
- node_maper.map_value_to_item(json_data, child, 'value0')
- node_maper.map_value_to_item(json_data, child, 'value1')
- node_maper.map_error_codes_to_item(json_data, child, 'state', 0)
+ node_maper.map_value_to_item_animated(json_data, child, 'value0')
+ node_maper.map_value_to_item_animated(json_data, child, 'value1')
+ node_maper.map_error_codes_to_item_animated(json_data, child, 'state', 0)
# Антенна 2
for child in $bort.get_node('antenna2/grid').get_children():
- node_maper.map_value_to_item(json_data, child, 'value0')
- node_maper.map_value_to_item(json_data, child, 'value1')
- node_maper.map_error_codes_to_item(json_data, child, 'state', 0)
+ node_maper.map_value_to_item_animated(json_data, child, 'value0')
+ node_maper.map_value_to_item_animated(json_data, child, 'value1')
+ node_maper.map_error_codes_to_item_animated(json_data, child, 'state', 0)
# Остальные элементы
for child in $bort.get_children():
- node_maper.map_value_to_item(json_data, child, 'value0')
- node_maper.map_value_to_item(json_data, child, 'value1')
- node_maper.map_error_codes_to_item(json_data, child, 'state', 0)
+ node_maper.map_value_to_item_animated(json_data, child, 'value0')
+ node_maper.map_value_to_item_animated(json_data, child, 'value1')
+ node_maper.map_error_codes_to_item_animated(json_data, child, 'state', 0)
# Сброс всех UI элементов в 0 (при отсутствии данных)
diff --git a/scenes/контроль/node-maper.gd b/scenes/контроль/node-maper.gd
index b42f1890..5394f24b 100644
--- a/scenes/контроль/node-maper.gd
+++ b/scenes/контроль/node-maper.gd
@@ -1,6 +1,5 @@
extends Node
-
static func map_value_to_item(data, item, value_name: StringName):
var meta = item.get_meta(value_name, '')
if meta == '':
@@ -17,7 +16,6 @@ static func map_value_to_item(data, item, value_name: StringName):
else:
push_error('не найден путь %s (%s) для $%s.%s (%s)' % [paths_copy, ret_val[2], item.name, value_name, item.tooltip_text])
-
static func map_error_codes_to_item(data, item, value_name: StringName, value_init: int):
var metas = item.get_meta(value_name, '')
if not (metas is Array):
@@ -38,3 +36,54 @@ static func map_error_codes_to_item(data, item, value_name: StringName, value_in
item.set(value_name, test_res)
else:
item.set(value_name, value_init)
+
+# Плавное обновление с анимацией
+static func map_value_to_item_animated(data, item, value_name: StringName):
+ var meta = item.get_meta(value_name, '')
+ if meta == '' or not (meta is String):
+ return
+
+ var paths: = Array()
+ tools.map_solid_to_array(meta, paths)
+ var ret_val: = [null, false, 0]
+ tools.get_value_by_path(data, paths, ret_val)
+
+ if ret_val[1]:
+ _animate_property(item, value_name, ret_val[0])
+ else:
+ push_error('не найден путь для $%s.%s' % [item.name, value_name])
+
+static func map_error_codes_to_item_animated(data, item, value_name: StringName, value_init: int):
+ var metas = item.get_meta(value_name, '')
+ if not (metas is Array):
+ return
+
+ var paths: = Array()
+ var values: = Array()
+ for meta in metas:
+ tools.map_solid_to_array(meta, paths)
+ var ret_val: = [null, false, 0]
+ tools.get_value_by_path(data, paths, ret_val)
+ if ret_val[1]:
+ values.append(ret_val[0])
+ else:
+ push_error('не найден путь для $%s.%s' % [item.name, value_name])
+
+ var target_value: int
+ if values.size() == metas.size():
+ target_value = 1 if values.count(true) == values.size() else 2
+ else:
+ target_value = value_init
+
+ _animate_property(item, value_name, target_value)
+
+static func _animate_property(item, property: StringName, target_value):
+ var current = item.get(property)
+ if current == target_value:
+ return
+
+ # Исправление: преобразуем StringName в String для NodePath
+ var tween = item.create_tween()
+ tween.set_trans(Tween.TRANS_QUINT)
+ tween.set_ease(Tween.EASE_OUT)
+ tween.tween_property(item, NodePath(String(property)), target_value, 0.3)