From 9f32e293a07fa7b69e9da87a06683a3d75986752 Mon Sep 17 00:00:00 2001
From: TotMaxim
Date: Sun, 16 Nov 2025 20:12:44 +0300
Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?=
=?UTF-8?q?=D0=BA=D0=B0=20=D0=BD=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20=D0=B1?=
=?UTF-8?q?=D0=BB=D0=BE=D0=BA=D0=B0=20(=D0=B1=D0=BB=D0=BE=D0=BA-=D0=BA.tsc?=
=?UTF-8?q?n)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
scenes/pribor-prd-k/pribor-prd-k.gd | 1 -
scenes/pribor-prd-k/pribor-prd-k.tscn | 200 +------------
scenes/pribor-prd-n/pribor-prd-n.gd | 1 -
scenes/pribor-prd-v/pribor-prd-v.gd | 1 -
scenes/контроль/блок-в.tscn | 22 +-
scenes/контроль/блок-к.tscn | 406 ++++++++++++++++++++++++++
6 files changed, 427 insertions(+), 204 deletions(-)
create mode 100644 scenes/контроль/блок-к.tscn
diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd
index 15b3f48c..c4ef34c0 100644
--- a/scenes/pribor-prd-k/pribor-prd-k.gd
+++ b/scenes/pribor-prd-k/pribor-prd-k.gd
@@ -65,7 +65,6 @@ func _exit_tree() -> void:
static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dictionary)->void:
for i_node_temperature in temperature_arr_node:
var temperature_meta: String = i_node_temperature.get_meta('um')
- var status = STATE_VAL.GOOD if temperature_dic else STATE_VAL.NONE
if not temperature_dic.has(temperature_meta): return
i_node_temperature.value1 = temperature_dic[temperature_meta]
diff --git a/scenes/pribor-prd-k/pribor-prd-k.tscn b/scenes/pribor-prd-k/pribor-prd-k.tscn
index 55af1377..404443e0 100644
--- a/scenes/pribor-prd-k/pribor-prd-k.tscn
+++ b/scenes/pribor-prd-k/pribor-prd-k.tscn
@@ -1,59 +1,20 @@
-[gd_scene load_steps=25 format=3 uid="uid://m5s87q7m66lj"]
+[gd_scene load_steps=16 format=3 uid="uid://m5s87q7m66lj"]
[ext_resource type="PackedScene" uid="uid://d3iqb5e4g81m5" path="res://scenes/контроль/элемент-г.tscn" id="1_8dmgr"]
[ext_resource type="Script" uid="uid://cwvikiygf8b1m" path="res://scenes/pribor-prd-k/pribor-prd-k.gd" id="1_tpdyp"]
[ext_resource type="Texture2D" uid="uid://c4mdrmk7h638f" path="res://data/nine-patch-round.png" id="2_14h25"]
[ext_resource type="PackedScene" uid="uid://cm5jd4gjrrpba" path="res://scenes/контроль/кассета-у-5-к.tscn" id="2_tb85r"]
[ext_resource type="PackedScene" uid="uid://bcyxqni7gxvtq" path="res://scenes/контроль/блок-в.tscn" id="5_c7lv8"]
-[ext_resource type="Texture2D" uid="uid://c6nve6f8sfyj2" path="res://data/состояние-исправности-0.png" id="6_l0j7c"]
+[ext_resource type="PackedScene" uid="uid://ffi1njkjceb5" path="res://scenes/контроль/блок-к.tscn" id="6_wd1vi"]
[ext_resource type="PackedScene" uid="uid://bmagw8nd0ulhj" path="res://scenes/pribor-prd-k/kasseta-fs-kd.tscn" id="7_ia27q"]
[ext_resource type="Script" uid="uid://crpedygm3gohi" path="res://scenes/контроль/кассета.gd" id="7_xpa2n"]
[ext_resource type="PackedScene" uid="uid://dq31j24gv5vi4" path="res://scenes/контроль/кассета-п-2.tscn" id="8_6fdp7"]
[ext_resource type="PackedScene" uid="uid://p2suppildvq0" path="res://scenes/контроль/элемент-в.tscn" id="8_la5yt"]
-[ext_resource type="Texture2D" uid="uid://00871pb6moln" path="res://data/прогресс-фон-1.png" id="9_0ba6e"]
-[ext_resource type="Texture2D" uid="uid://c1k856fxhrjnh" path="res://data/прогресс-заполнение-1.png" id="10_b3870"]
[ext_resource type="Texture2D" uid="uid://belwchvdktrw0" path="res://data/эмс-бланк.png" id="10_c7lv8"]
[ext_resource type="Texture2D" uid="uid://bwddxs24es81u" path="res://data/эмс-бланк-пост.png" id="11_wd1vi"]
[ext_resource type="Texture2D" uid="uid://pfoscstbm025" path="res://data/эмс-бланк-перем.png" id="12_bjebg"]
[ext_resource type="Texture2D" uid="uid://dvl3sq036gn75" path="res://data/эмс-бланк-замыкание.png" id="13_kc77u"]
-[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3nd2u"]
-
-[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_rceim"]
-
-[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8yvwo"]
-
-[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_6qu57"]
-
-[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_mlxje"]
-
-[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3dspb"]
-
-[sub_resource type="GDScript" id="GDScript_45hqb"]
-script/source = "@tool
-
-extends MarginContainer
-
-
-func _enter_tree() -> void:
- margins = [8, 8, 8, 8]
-
-
-@export var margins: Array:
- set(vals):
- add_theme_constant_override('margin_top', vals[0])
- add_theme_constant_override('margin_left', vals[1])
- add_theme_constant_override('margin_bottom', vals[2])
- add_theme_constant_override('margin_right', vals[3])
- get:
- var vals = [0, 0, 0, 0]
- vals[0] = get_theme_constant('margin_top')
- vals[1] = get_theme_constant('margin_left')
- vals[2] = get_theme_constant('margin_bottom')
- vals[3] = get_theme_constant('margin_right')
- return vals
-"
-
[sub_resource type="SpriteFrames" id="SpriteFrames_di0aa"]
animations = [{
"frames": [{
@@ -225,150 +186,15 @@ value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
metadata/um = "um_6"
-[node name="utm80_A9" type="PanelContainer" parent="."]
-editor_description = "Элемент замены из ЗИП"
+[node name="блок-к" parent="." groups=["power_amplifier"] instance=ExtResource("6_wd1vi")]
layout_mode = 0
offset_left = 485.0
offset_top = 812.0
offset_right = 652.0
offset_bottom = 907.0
-theme_override_styles/panel = SubResource("StyleBoxEmpty_3nd2u")
-metadata/um = "um_7"
-
-[node name="button" type="Button" parent="utm80_A9"]
-layout_mode = 2
-theme_override_styles/focus = SubResource("StyleBoxEmpty_rceim")
-theme_override_styles/disabled = SubResource("StyleBoxEmpty_8yvwo")
-theme_override_styles/hover = SubResource("StyleBoxEmpty_6qu57")
-theme_override_styles/pressed = SubResource("StyleBoxEmpty_mlxje")
-theme_override_styles/normal = SubResource("StyleBoxEmpty_3dspb")
-
-[node name="rect" type="NinePatchRect" parent="utm80_A9"]
-layout_mode = 2
-texture = ExtResource("2_14h25")
-draw_center = false
-region_rect = Rect2(0, 0, 63, 63)
-patch_margin_left = 17
-patch_margin_top = 17
-patch_margin_right = 17
-patch_margin_bottom = 15
-
-[node name="margin" type="MarginContainer" parent="utm80_A9"]
-layout_mode = 2
-theme_override_constants/margin_left = 8
-theme_override_constants/margin_top = 8
-theme_override_constants/margin_right = 8
-theme_override_constants/margin_bottom = 8
-script = SubResource("GDScript_45hqb")
-margins = [8, 8, 8, 8]
-
-[node name="vbox" type="VBoxContainer" parent="utm80_A9/margin"]
-layout_mode = 2
-
-[node name="grid0" type="GridContainer" parent="utm80_A9/margin/vbox"]
-layout_mode = 2
-columns = 3
-
-[node name="state" type="TextureRect" parent="utm80_A9/margin/vbox/grid0"]
-custom_minimum_size = Vector2(24, 24)
-layout_mode = 2
-size_flags_horizontal = 2
-size_flags_vertical = 6
-texture = ExtResource("6_l0j7c")
-expand_mode = 1
-
-[node name="fname" type="Label" parent="utm80_A9/margin/vbox/grid0"]
-self_modulate = Color(1, 1, 1, 0.627451)
-custom_minimum_size = Vector2(0, 20)
-layout_mode = 2
-size_flags_horizontal = 3
-size_flags_vertical = 3
-theme_override_font_sizes/font_size = 17
-text = "УТМ80"
-horizontal_alignment = 1
-vertical_alignment = 1
-
-[node name="rname" type="Label" parent="utm80_A9/margin/vbox/grid0"]
-layout_mode = 2
-size_flags_horizontal = 3
-size_flags_vertical = 6
-theme_override_font_sizes/font_size = 18
-text = "A9"
-horizontal_alignment = 2
-vertical_alignment = 1
-
-[node name="grid1" type="GridContainer" parent="utm80_A9/margin/vbox"]
-custom_minimum_size = Vector2(80, 0)
-layout_mode = 2
-size_flags_horizontal = 4
-size_flags_vertical = 3
-columns = 2
-
-[node name="level1" type="TextureProgressBar" parent="utm80_A9/margin/vbox/grid1" groups=["уровни"]]
-layout_mode = 2
-size_flags_horizontal = 3
-size_flags_vertical = 3
-tooltip_text = "Мощность, Вт
-Текущее: 0.00
-Диапазон: 0.00…1400.00"
-mouse_filter = 0
-max_value = 1400.0
-fill_mode = 3
-nine_patch_stretch = true
-stretch_margin_left = 8
-stretch_margin_top = 8
-stretch_margin_right = 8
-stretch_margin_bottom = 8
-texture_under = ExtResource("9_0ba6e")
-texture_progress = ExtResource("10_b3870")
-tint_under = Color(1, 1, 1, 0.419608)
-tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
-
-[node name="level7" type="TextureProgressBar" parent="utm80_A9/margin/vbox/grid1"]
-layout_mode = 2
-size_flags_horizontal = 3
-size_flags_vertical = 3
-tooltip_text = "Температура,°C
-Текущее: 56.00
-Диапазон: -50.00…120.00"
-mouse_filter = 0
-min_value = -50.0
-max_value = 120.0
-value = 56.0
-fill_mode = 3
-nine_patch_stretch = true
-stretch_margin_left = 8
-stretch_margin_top = 8
-stretch_margin_right = 8
-stretch_margin_bottom = 8
-texture_under = ExtResource("9_0ba6e")
-texture_progress = ExtResource("10_b3870")
-tint_under = Color(0.890196, 0.486275, 0.196078, 1)
-tint_over = Color(0.890196, 0.486275, 0.196078, 1)
-
-[node name="grid2" type="GridContainer" parent="utm80_A9/margin/vbox"]
-clip_contents = true
-custom_minimum_size = Vector2(80, 0)
-layout_mode = 2
-size_flags_horizontal = 4
-size_flags_vertical = 4
-columns = 2
-
-[node name="lbl6" type="Label" parent="utm80_A9/margin/vbox/grid2" groups=["названия"]]
-clip_contents = true
-layout_mode = 2
-size_flags_horizontal = 3
-theme_override_font_sizes/font_size = 8
-text = "P,%"
-horizontal_alignment = 1
-
-[node name="lbl7" type="Label" parent="utm80_A9/margin/vbox/grid2"]
-clip_contents = true
-layout_mode = 2
-size_flags_horizontal = 3
-theme_override_font_sizes/font_size = 8
-text = "°C"
-horizontal_alignment = 1
+fname = "УТМ80"
+rname = "A9"
+metadata/um = "um_8"
[node name="rm1620m_A16" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
layout_mode = 0
@@ -380,7 +206,7 @@ fname = "РМ16-20М"
rname = "A16"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_8"
+metadata/um = "um_9"
[node name="rm1620m_A17" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
layout_mode = 0
@@ -392,7 +218,7 @@ fname = "РМ16-20М"
rname = "A17"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_9"
+metadata/um = "um_10"
[node name="rm1620m_A18" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
layout_mode = 0
@@ -404,7 +230,7 @@ fname = "РМ16-20М"
rname = "A18"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_10"
+metadata/um = "um_11"
[node name="rm1620m_A19" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
layout_mode = 0
@@ -416,7 +242,7 @@ fname = "РМ16-20М"
rname = "A19"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_11"
+metadata/um = "um_12"
[node name="rm1620m_A20" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
layout_mode = 0
@@ -428,7 +254,7 @@ fname = "РМ16-20М"
rname = "A20"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_12"
+metadata/um = "um_13"
[node name="rm1620m_A21" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
layout_mode = 0
@@ -440,7 +266,7 @@ fname = "РМ16-20М"
rname = "A21"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_13"
+metadata/um = "um_14"
[node name="kasseta_fs_kd" parent="." instance=ExtResource("7_ia27q")]
layout_mode = 0
@@ -558,5 +384,3 @@ sprite_frames = SubResource("SpriteFrames_di0aa")
[node name="output_2" type="AnimatedSprite2D" parent="."]
position = Vector2(383, 177)
sprite_frames = SubResource("SpriteFrames_di0aa")
-
-[connection signal="pressed" from="utm80_A9/button" to="utm80_A9" method="_on_button_pressed"]
diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd
index 6b58662d..8f7ad06c 100644
--- a/scenes/pribor-prd-n/pribor-prd-n.gd
+++ b/scenes/pribor-prd-n/pribor-prd-n.gd
@@ -65,7 +65,6 @@ func _exit_tree() -> void:
static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dictionary)->void:
for i_node_temperature in temperature_arr_node:
var temperature_meta: String = i_node_temperature.get_meta('um')
- var status = STATE_VAL.GOOD if temperature_dic else STATE_VAL.NONE
if not temperature_dic.has(temperature_meta): return
i_node_temperature.value1 = temperature_dic[temperature_meta]
diff --git a/scenes/pribor-prd-v/pribor-prd-v.gd b/scenes/pribor-prd-v/pribor-prd-v.gd
index 1993ed14..b932aa20 100644
--- a/scenes/pribor-prd-v/pribor-prd-v.gd
+++ b/scenes/pribor-prd-v/pribor-prd-v.gd
@@ -62,7 +62,6 @@ func _exit_tree() -> void:
static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dictionary)->void:
for i_node_temperature in temperature_arr_node:
var temperature_meta: String = i_node_temperature.get_meta('um')
- var status = STATE_VAL.GOOD if temperature_dic else STATE_VAL.NONE
if not temperature_dic.has(temperature_meta): return
i_node_temperature.value1 = temperature_dic[temperature_meta]
diff --git a/scenes/контроль/блок-в.tscn b/scenes/контроль/блок-в.tscn
index b55f585c..669b072e 100644
--- a/scenes/контроль/блок-в.tscn
+++ b/scenes/контроль/блок-в.tscn
@@ -145,10 +145,10 @@ func _enter_tree() -> void: call_deferred('_enter_tree_defered')
func _ready():
- #var items: Array = get_level_nodes()
- #for item in items:
- #item.connect('value_changed', on_level_changed.bind(item, value0_info))
- #on_level_changed(item.value, item, value0_info)
+ var items: Array = get_level_nodes()
+ for item in items:
+ item.connect('value_changed', on_level_changed.bind(item, value0_info))
+ on_level_changed(item.value, item, value0_info)
var level7: = $margin/vbox/grid1/level7
level7.connect('value_changed', on_level_changed.bind(level7, value1_info))
on_level_changed(level7.value, level7, value1_info)
@@ -273,10 +273,8 @@ theme_override_styles/panel = SubResource("StyleBoxEmpty_3nd2u")
script = SubResource("GDScript_oj3k3")
textures = [ExtResource("1_n1aqt"), ExtResource("2_rim3u"), ExtResource("3_3w8fg")]
value0 = [20.0, 30.0, 40.0, 50.0, 60.0, 70.0]
-value1 = 56.0
-min_value1 = -50.0
-max_value0 = 100.0
-max_value1 = 120.0
+max_value0 = 1400.0
+max_value1 = 70.0
step0 = 1.0
step1 = 1.0
value_name0 = "P,%"
@@ -476,12 +474,10 @@ layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
tooltip_text = "
-Текущее: 56.00
-Диапазон: -40.00…70.00"
+Текущее: 0.00
+Диапазон: 0.00…70.00"
mouse_filter = 0
-min_value = -50.0
-max_value = 120.0
-value = 56.0
+max_value = 70.0
fill_mode = 3
nine_patch_stretch = true
stretch_margin_left = 8
diff --git a/scenes/контроль/блок-к.tscn b/scenes/контроль/блок-к.tscn
new file mode 100644
index 00000000..9156160d
--- /dev/null
+++ b/scenes/контроль/блок-к.tscn
@@ -0,0 +1,406 @@
+[gd_scene load_steps=15 format=3 uid="uid://ffi1njkjceb5"]
+
+[ext_resource type="Texture2D" uid="uid://c6nve6f8sfyj2" path="res://data/состояние-исправности-0.png" id="1_uojqc"]
+[ext_resource type="Texture2D" uid="uid://dnreyfh3cd1k2" path="res://data/состояние-исправности-1.png" id="2_a8ar3"]
+[ext_resource type="Texture2D" uid="uid://c6booa8753u5t" path="res://data/состояние-исправности-2.png" id="3_xwd13"]
+[ext_resource type="Texture2D" uid="uid://c4mdrmk7h638f" path="res://data/nine-patch-round.png" id="4_eobkx"]
+[ext_resource type="Texture2D" uid="uid://00871pb6moln" path="res://data/прогресс-фон-1.png" id="5_mg57e"]
+[ext_resource type="Texture2D" uid="uid://c1k856fxhrjnh" path="res://data/прогресс-заполнение-1.png" id="6_of7rd"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3nd2u"]
+
+[sub_resource type="GDScript" id="GDScript_oj3k3"]
+script/source = "@tool
+class_name blok_v extends PanelContainer
+
+@export var textures: Array
+@export var animation_duration: float = 1.5
+signal pressed(control: PanelContainer)
+
+
+## Значения уровней
+@export var value0: Array:
+ set(v):
+ value0.assign(v)
+ var items: Array = get_level_nodes()
+ var count: int = min(items.size(), v.size())
+ for i in count:
+ set_value0_animated(items[i], v[i])
+
+
+## Значение уровня
+@export var value1: float:
+ set(v):
+ value1 = v
+ if not is_inside_tree():
+ return
+ $margin/vbox/grid1/level7.value = v
+ $margin/vbox/grid1/level7.tint_progress = Color.RED if v >= 70 else Color.GOLD if v >= 60 else Color.WHITE
+
+
+@export var min_value0: float:
+ set(v):
+ min_value0 = v
+ var items: = get_level_nodes()
+ set_group_param(items, 'min_value', v)
+
+
+@export var min_value1: float:
+ set(v):
+ min_value1 = v
+ if not is_inside_tree():
+ return
+ $margin/vbox/grid1/level7.min_value = v
+
+
+@export var max_value0: float:
+ set(v):
+ max_value0 = v
+ var items: = get_level_nodes()
+ set_group_param(items, 'max_value', v)
+
+
+@export var max_value1: float:
+ set(v):
+ max_value1 = v
+ if not is_inside_tree():
+ return
+ $margin/vbox/grid1/level7.max_value = v
+
+
+@export var step0: float:
+ set(v):
+ step0 = v
+ var items: = get_level_nodes()
+ set_group_param(items, 'step', v)
+
+
+@export var step1: float:
+ set(v):
+ step1 = v
+ if not is_inside_tree():
+ return
+ $margin/vbox/grid1/level7.step = v
+
+
+@export var value_name0: String:
+ set(v):
+ value_name0 = v
+ var items: Array = get_name_nodes()
+ set_group_param(items, 'text', v)
+
+
+@export var value_name1: String:
+ set(v):
+ value_name1 = v
+ if not is_inside_tree():
+ return
+ $margin/vbox/grid2/lbl7.text = v
+
+
+@export var fname: String:
+ set(v):
+ fname = v
+ if not is_inside_tree():
+ return
+ $margin/vbox/grid0/fname.text = v
+
+
+@export var rname: String:
+ set(v):
+ rname = v
+ if not is_inside_tree():
+ return
+ $margin/vbox/grid0/rname.text = v
+
+
+@export var state: int:
+ set(v):
+ state = tools.clip_value(v, 0, textures.size() - 1)
+ if not is_inside_tree():
+ return
+ $margin/vbox/grid0/state.texture = textures[state]
+
+
+@export var alignment: int:
+ set(v):
+ alignment = v
+ if is_inside_tree():
+ $margin/vbox.alignment = v
+
+
+@export var value0_info: String:
+ set(v):
+ value0_info = v
+
+
+@export var value1_info: String:
+ set(v):
+ value1_info = v
+
+
+func _on_button_pressed(): emit_signal('pressed', self)
+func set_value0(value: Array): value0.assign(value)
+func _enter_tree() -> void: call_deferred('_enter_tree_defered')
+
+
+func _ready():
+ var items: Array = get_level_nodes()
+ for item in items:
+ item.connect('value_changed', on_level_changed.bind(item, value0_info))
+ on_level_changed(item.value, item, value0_info)
+ var level7: = $margin/vbox/grid1/level7
+ level7.connect('value_changed', on_level_changed.bind(level7, value1_info))
+ on_level_changed(level7.value, level7, value1_info)
+
+
+func on_level_changed(_val: float, item: TextureProgressBar, info: String):
+ item.tooltip_text = '%s\\nТекущее: %0.2f\\nДиапазон: %0.2f…%0.2f' % [info, item.value, item.min_value, item.max_value]
+
+
+func set_group_param(items: Array, param: StringName, v) -> void:
+ if not is_inside_tree():
+ return
+ if not get_tree():
+ return
+ for i in items.size():
+ items[i].set(param, v)
+
+
+func set_value0_by_index(index: int, value: float) -> void:
+ var items: Array = get_level_nodes()
+ items[index].value = value
+
+
+func _enter_tree_defered():
+ var items: Array = get_level_nodes()
+ var count: int = min(items.size(), value0.size())
+ for i in count:
+ items[i].min_value = min_value0
+ items[i].max_value = 1400 # max_value0: TODO для отладки
+ items[i].step = step0
+ items = get_name_nodes()
+ set_group_param(items, 'text', value_name0)
+ if is_inside_tree():
+ $margin/vbox/grid1/level7.value = value1
+ $margin/vbox/grid1/level7.min_value = min_value1
+ $margin/vbox/grid1/level7.max_value = max_value1
+ $margin/vbox/grid1/level7.step = step1
+ $margin/vbox/grid2/lbl7.text = value_name1
+ $margin/vbox.alignment = alignment
+ $margin/vbox/grid0/rname.text = rname
+ $margin/vbox/grid0/fname.text = fname
+ $margin/vbox/grid0/state.texture = textures[state]
+
+
+func get_level_nodes() -> Array:
+ if not is_inside_tree():
+ return []
+ if not get_tree():
+ return []
+ return [$margin/vbox/grid1/level1]
+
+
+func get_name_nodes() -> Array:
+ if not is_inside_tree():
+ return []
+ if not get_tree():
+ return []
+ return [$margin/vbox/grid2/lbl1]
+
+
+func set_value0_animated(target_node, target_value: float) -> void:
+ var tween: Tween = create_tween()
+ tween.set_ease(Tween.EASE_OUT)
+ tween.set_trans(Tween.TRANS_QUINT)
+ tween.tween_property(target_node, 'value', target_value, animation_duration)
+"
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_rceim"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8yvwo"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_6qu57"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_mlxje"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3dspb"]
+
+[sub_resource type="GDScript" id="GDScript_45hqb"]
+script/source = "@tool
+
+extends MarginContainer
+
+
+func _enter_tree() -> void:
+ margins = [8, 8, 8, 8]
+
+
+@export var margins: Array:
+ set(vals):
+ add_theme_constant_override('margin_top', vals[0])
+ add_theme_constant_override('margin_left', vals[1])
+ add_theme_constant_override('margin_bottom', vals[2])
+ add_theme_constant_override('margin_right', vals[3])
+ get:
+ var vals = [0, 0, 0, 0]
+ vals[0] = get_theme_constant('margin_top')
+ vals[1] = get_theme_constant('margin_left')
+ vals[2] = get_theme_constant('margin_bottom')
+ vals[3] = get_theme_constant('margin_right')
+ return vals
+"
+
+[node name="блок-к" type="PanelContainer"]
+editor_description = "Элемент замены из ЗИП"
+offset_right = 160.0
+offset_bottom = 88.0
+theme_override_styles/panel = SubResource("StyleBoxEmpty_3nd2u")
+script = SubResource("GDScript_oj3k3")
+textures = [ExtResource("1_uojqc"), ExtResource("2_a8ar3"), ExtResource("3_xwd13")]
+value0 = [20.0, 30.0, 40.0, 50.0, 60.0, 70.0]
+max_value0 = 1400.0
+max_value1 = 70.0
+step0 = 1.0
+step1 = 1.0
+value_name0 = "P,%"
+value_name1 = "°C"
+fname = "Блок В"
+rname = "A1"
+
+[node name="button" type="Button" parent="."]
+layout_mode = 2
+theme_override_styles/focus = SubResource("StyleBoxEmpty_rceim")
+theme_override_styles/disabled = SubResource("StyleBoxEmpty_8yvwo")
+theme_override_styles/hover = SubResource("StyleBoxEmpty_6qu57")
+theme_override_styles/pressed = SubResource("StyleBoxEmpty_mlxje")
+theme_override_styles/normal = SubResource("StyleBoxEmpty_3dspb")
+
+[node name="rect" type="NinePatchRect" parent="."]
+layout_mode = 2
+texture = ExtResource("4_eobkx")
+draw_center = false
+region_rect = Rect2(0, 0, 63, 63)
+patch_margin_left = 17
+patch_margin_top = 17
+patch_margin_right = 17
+patch_margin_bottom = 15
+
+[node name="margin" type="MarginContainer" parent="."]
+layout_mode = 2
+theme_override_constants/margin_left = 8
+theme_override_constants/margin_top = 8
+theme_override_constants/margin_right = 8
+theme_override_constants/margin_bottom = 8
+script = SubResource("GDScript_45hqb")
+margins = [8, 8, 8, 8]
+
+[node name="vbox" type="VBoxContainer" parent="margin"]
+layout_mode = 2
+
+[node name="grid0" type="GridContainer" parent="margin/vbox"]
+layout_mode = 2
+columns = 3
+
+[node name="state" type="TextureRect" parent="margin/vbox/grid0"]
+custom_minimum_size = Vector2(24, 24)
+layout_mode = 2
+size_flags_horizontal = 2
+size_flags_vertical = 6
+texture = ExtResource("1_uojqc")
+expand_mode = 1
+
+[node name="fname" type="Label" parent="margin/vbox/grid0"]
+self_modulate = Color(1, 1, 1, 0.627451)
+custom_minimum_size = Vector2(0, 20)
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+theme_override_font_sizes/font_size = 17
+text = "Блок В"
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="rname" type="Label" parent="margin/vbox/grid0"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 6
+theme_override_font_sizes/font_size = 18
+text = "A1"
+horizontal_alignment = 2
+vertical_alignment = 1
+
+[node name="grid1" type="GridContainer" parent="margin/vbox"]
+layout_mode = 2
+size_flags_horizontal = 4
+size_flags_vertical = 3
+columns = 7
+
+[node name="level1" type="TextureProgressBar" parent="margin/vbox/grid1" groups=["уровни"]]
+custom_minimum_size = Vector2(30, 0)
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+tooltip_text = "
+Текущее: 0.00
+Диапазон: 0.00…1400.00"
+mouse_filter = 0
+max_value = 1400.0
+fill_mode = 3
+nine_patch_stretch = true
+stretch_margin_left = 8
+stretch_margin_top = 8
+stretch_margin_right = 8
+stretch_margin_bottom = 8
+texture_under = ExtResource("5_mg57e")
+texture_progress = ExtResource("6_of7rd")
+tint_under = Color(1, 1, 1, 0.419608)
+tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
+
+[node name="level7" type="TextureProgressBar" parent="margin/vbox/grid1"]
+custom_minimum_size = Vector2(30, 0)
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+tooltip_text = "
+Текущее: 0.00
+Диапазон: 0.00…70.00"
+mouse_filter = 0
+max_value = 70.0
+fill_mode = 3
+nine_patch_stretch = true
+stretch_margin_left = 8
+stretch_margin_top = 8
+stretch_margin_right = 8
+stretch_margin_bottom = 8
+texture_under = ExtResource("5_mg57e")
+texture_progress = ExtResource("6_of7rd")
+tint_under = Color(0.890196, 0.486275, 0.196078, 1)
+tint_over = Color(0.890196, 0.486275, 0.196078, 1)
+
+[node name="grid2" type="GridContainer" parent="margin/vbox"]
+clip_contents = true
+layout_mode = 2
+size_flags_horizontal = 4
+size_flags_vertical = 4
+columns = 7
+
+[node name="lbl1" type="Label" parent="margin/vbox/grid2" groups=["названия"]]
+clip_contents = true
+custom_minimum_size = Vector2(30, 0)
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_font_sizes/font_size = 8
+text = "P,%"
+horizontal_alignment = 1
+
+[node name="lbl7" type="Label" parent="margin/vbox/grid2"]
+clip_contents = true
+custom_minimum_size = Vector2(30, 0)
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_font_sizes/font_size = 8
+text = "°C"
+horizontal_alignment = 1
+
+[connection signal="pressed" from="button" to="." method="_on_button_pressed"]