From 720cba0ae526b9dd6f7326c6169d9feb556c4d74 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 10 Mar 2026 12:55:19 +0300 Subject: [PATCH 01/52] =?UTF-8?q?=D0=A7=D0=B8=D1=81=D1=82=D0=BA=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project.godot | 1 + scenes/эмс2/эмс-тг.tscn | 96 ----------------------------------------- 2 files changed, 1 insertion(+), 96 deletions(-) delete mode 100644 scenes/эмс2/эмс-тг.tscn diff --git a/project.godot b/project.godot index 5ff17ff5..c9ee8f15 100644 --- a/project.godot +++ b/project.godot @@ -179,6 +179,7 @@ folder_colors={ "res://scenes/frame/": "blue", "res://scenes/grid-buttons-ecm/": "blue", "res://scenes/grid-side-panel/": "blue", +"res://scenes/hranges/": "blue", "res://scenes/pribor-afsp/": "purple", "res://scenes/pribor-externals/": "purple", "res://scenes/pribor-prd-k/": "purple", diff --git a/scenes/эмс2/эмс-тг.tscn b/scenes/эмс2/эмс-тг.tscn deleted file mode 100644 index dad69978..00000000 --- a/scenes/эмс2/эмс-тг.tscn +++ /dev/null @@ -1,96 +0,0 @@ -[gd_scene load_steps=11 format=3 uid="uid://0uv7tfkx2tec"] - -[ext_resource type="Texture2D" uid="uid://hkcvl2waf63s" path="res://data/вид сверху.png" id="1_4em3i"] -[ext_resource type="Texture2D" uid="uid://0w6q4vfst0ry" path="res://data/OP-63.png" id="3_eq8fj"] -[ext_resource type="Texture2D" uid="uid://073el51yholj" path="res://data/454.png" id="4_528aa"] -[ext_resource type="Texture2D" uid="uid://cckk3jk5r32bh" path="res://data/ГО.png" id="5_qxr47"] -[ext_resource type="Texture2D" uid="uid://kyrnn1mqpc08" path="res://data/РЛС1.png" id="6_8sxps"] -[ext_resource type="Texture2D" uid="uid://cx0f3wcx76u1k" path="res://data/РЛС2.png" id="7_0bfmy"] -[ext_resource type="Texture2D" uid="uid://csxruavk0s40l" path="res://data/Окно частот0.png" id="8_4em3i"] -[ext_resource type="Texture2D" uid="uid://duu8q7sv0jwfh" path="res://data/ННВС.png" id="8_aiy4x"] - -[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_5u4bk"] - -[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_pd85g"] - -[node name="Control" type="Panel"] - -[node name="Sprite2D" type="Sprite2D" parent="."] -modulate = Color(1, 0.596078, 0.4, 1) -position = Vector2(801, 131) -rotation = 1.5708 -scale = Vector2(0.353264, 0.353264) -texture = ExtResource("1_4em3i") - -[node name="частоты" type="TextureRect" parent="."] -visible = false -layout_mode = 0 -offset_left = 72.0 -offset_top = 264.0 -offset_right = 1621.0 -offset_bottom = 870.0 -scale = Vector2(0.95, 0.95) -texture = SubResource("CompressedTexture2D_5u4bk") - -[node name="Op-63" type="TextureRect" parent="."] -layout_mode = 0 -offset_left = 128.0 -offset_top = 91.0 -offset_right = 341.0 -offset_bottom = 383.0 -scale = Vector2(0.312207, 0.312207) -texture = ExtResource("3_eq8fj") - -[node name="454" type="TextureRect" parent="."] -layout_mode = 0 -offset_left = 288.0 -offset_top = 91.0 -offset_right = 501.0 -offset_bottom = 383.0 -scale = Vector2(0.312, 0.312) -texture = ExtResource("4_528aa") - -[node name="Го" type="TextureRect" parent="."] -layout_mode = 0 -offset_left = 464.0 -offset_top = 91.0 -offset_right = 677.0 -offset_bottom = 383.0 -scale = Vector2(0.312, 0.312) -texture = ExtResource("5_qxr47") - -[node name="Рлс1" type="TextureRect" parent="."] -layout_mode = 0 -offset_left = 728.0 -offset_top = 91.0 -offset_right = 941.0 -offset_bottom = 383.0 -scale = Vector2(0.312, 0.312) -texture = ExtResource("6_8sxps") - -[node name="Рлс2" type="TextureRect" parent="."] -layout_mode = 0 -offset_left = 920.0 -offset_top = 91.0 -offset_right = 1133.0 -offset_bottom = 383.0 -scale = Vector2(0.312, 0.312) -texture = ExtResource("7_0bfmy") - -[node name="Ннвс" type="TextureRect" parent="."] -layout_mode = 0 -offset_left = 1280.0 -offset_top = 91.0 -offset_right = 1493.0 -offset_bottom = 383.0 -scale = Vector2(0.312, 0.312) -texture = ExtResource("8_aiy4x") - -[node name="ТаблицаОбмена" type="Sprite2D" parent="."] -position = Vector2(568, 1024) -scale = Vector2(0.911215, 0.911215) -texture = SubResource("CompressedTexture2D_pd85g") - -[node name="ТаблицаЧастот" type="Sprite2D" parent="."] -position = Vector2(794, 569) -texture = ExtResource("8_4em3i") From d14d1724afd134d58c6e9bbf0dacc8a2ef0372dd Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 10 Mar 2026 12:56:15 +0300 Subject: [PATCH 02/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=B8=D0=BD=D0=B4=D0=B8=D0=BA=D0=B0=D1=82=D0=BE?= =?UTF-8?q?=D1=80=20=D0=B4=D0=B8=D0=B0=D0=BF=D0=B0=D0=B7=D0=BE=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/hranges/panel.gd | 76 +++++++++++++++++++++++++++++++++++++ scenes/hranges/panel.gd.uid | 1 + scenes/hranges/panel.tscn | 14 +++++++ 3 files changed, 91 insertions(+) create mode 100644 scenes/hranges/panel.gd create mode 100644 scenes/hranges/panel.gd.uid create mode 100644 scenes/hranges/panel.tscn diff --git a/scenes/hranges/panel.gd b/scenes/hranges/panel.gd new file mode 100644 index 00000000..c7a4f94e --- /dev/null +++ b/scenes/hranges/panel.gd @@ -0,0 +1,76 @@ +@tool + +extends PanelContainer + +@export_range(0.0, 1.0) var gap_top: float = 0.05 ## Зазор сверху +@export_range(0.0, 1.0) var gap_bottom: float = 0.05 ## Зазор снизу +@export var ranges_group_name: StringName = 'ranges' ## Имя группы для диапазонов +@export var ranges_save: Dictionary[StringName, Array] ## <имя диапазона>: [диапазон(x - начало, y - конец), цвет] + + +## Добавляет новый диапазон. +func set_range(nm: StringName, x0: float, x1: float, col: Color) -> void: + ranges_save[nm] = [Vector2(x0, x1), col] + _on_resized() + + +func set_range_color(nm: StringName, col: Color): + if not ranges_save.has(nm): + push_error('нет такого диапазона: \"%s\"' % nm) + return false + ranges_save[nm][1] = col + var rng: = get_node_or_null(NodePath(nm)) + if not rng: + push_error('нет такого элемента: \"%s\"' % nm) + return false + rng.color = col + return true + + +func clear_ranges(): + var l0 = ranges_save.size() + ranges_save.clear() + var l1 = ranges_save.size() + _on_resized() + return l1 < l0 + + +func del_range(nm: StringName) -> bool: + var rc = ranges_save.erase(nm) + _on_resized() + return rc + + +func _add_range_view(nm: StringName, x0: float, x1: float, col: Color): + var rng = Polygon2D.new() + var point0 = size * Vector2(x0, gap_bottom) ## лево низ + var point1 = size * Vector2(x0, 1.0 - gap_top) ## лево верх + var point2 = size * Vector2(x1, 1.0 - gap_top) ## право верх + var point3 = size * Vector2(x1, gap_bottom) ## право низ + rng.polygon = [point0, point1, point2, point3] + rng.name = nm + rng.color = col + add_child(rng) + rng.add_to_group(ranges_group_name) + + +## Удаляет заданный диапазон. +func _del_range_view(nm: StringName) -> void: + var rng: = get_node(NodePath(nm)) + remove_child(rng) + rng.queue_free() + + +func _clear_ranges_view(): + var range_views = get_tree().get_nodes_in_group(ranges_group_name) + for rng in range_views: + remove_child(rng) + rng.queue_free() + + +func _on_resized() -> void: + _clear_ranges_view() + for nm in ranges_save: + var rng = ranges_save[nm][0] + var col = ranges_save[nm][1] + _add_range_view(nm, rng.x, rng.y, col) diff --git a/scenes/hranges/panel.gd.uid b/scenes/hranges/panel.gd.uid new file mode 100644 index 00000000..02a54a9d --- /dev/null +++ b/scenes/hranges/panel.gd.uid @@ -0,0 +1 @@ +uid://jtio1scc72bl diff --git a/scenes/hranges/panel.tscn b/scenes/hranges/panel.tscn new file mode 100644 index 00000000..c6720139 --- /dev/null +++ b/scenes/hranges/panel.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=3 format=3 uid="uid://hr55mkcneaer"] + +[ext_resource type="Script" uid="uid://jtio1scc72bl" path="res://scenes/hranges/panel.gd" id="1_pg3d7"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ajqhv"] + +[node name="panel" type="PanelContainer"] +offset_right = 690.0 +offset_bottom = 75.0 +theme_override_styles/panel = SubResource("StyleBoxFlat_ajqhv") +script = ExtResource("1_pg3d7") +lines_count = null + +[connection signal="resized" from="." to="." method="_on_resized"] From 398ff23291a37b253ba11152c586c2cb72c018e1 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 11 Mar 2026 08:22:30 +0300 Subject: [PATCH 03/52] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5.=20=D0=9C=D0=BE=D0=B6=D0=B5?= =?UTF-8?q?=D1=82=20=D0=B2=D1=8B=D0=B7=D0=B2=D0=B0=D1=82=D1=8C=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=20?= =?UTF-8?q?=D0=BD=D0=B5=D1=81=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2=D1=83?= =?UTF-8?q?=D1=8E=D1=89=D0=B5=D0=BC=D1=83=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- table/table.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/table/table.gd b/table/table.gd index 972acd64..535fe6eb 100644 --- a/table/table.gd +++ b/table/table.gd @@ -333,7 +333,7 @@ func _set_row_selected(i_row: int, selected: bool = true) -> void: push_warning('обращение к удалённому элементу \"%s\"' % selector_key) elif (not nodes.has(selector_key)) and selected: var selector = ScnSelector.instantiate() - call_deferred('_set_selector_size', selector, i_row) + _set_selector_size(selector, i_row) selector.modulate = selector_color_proc.call(i_row) selector.z_index = z_index + 1 nodes[selector_key] = selector From 2f9ad52a9c121b2c7fce369e149f27b9cc1f7b58 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 11 Mar 2026 14:07:39 +0300 Subject: [PATCH 04/52] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80.=20=D0=A3=D0=BC=D0=B5=D0=BD=D1=8C=D1=88=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BA=D0=BE=D0=BB=D0=B8=D1=87=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B2=D0=BE=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- table/lable.gd | 24 ------------------- table/lable.gd.uid | 1 - table/lable.tscn | 31 +++++++++++++++++++++--- table/node.gd | 28 ---------------------- table/node.gd.uid | 1 - table/node.tscn | 32 +++++++++++++++++++++++-- table/set-toggle.gd | 33 -------------------------- table/set-toggle.gd.uid | 1 - table/set-toggle.tscn | 39 ++++++++++++++++++++++++++++-- table/settings-toggle.gd | 33 -------------------------- table/settings-toggle.gd.uid | 1 - table/settings-toggle.tscn | 45 +++++++++++++++++++++++++++++++++-- table/ячейка-2.gd | 39 ------------------------------ table/ячейка-2.gd.uid | 1 - table/ячейка-2.tscn | 46 +++++++++++++++++++++++++++++++++--- table/ячейка-цвет.gd | 24 ------------------- table/ячейка-цвет.gd.uid | 1 - table/ячейка-цвет.tscn | 8 ++++--- 18 files changed, 186 insertions(+), 202 deletions(-) delete mode 100644 table/lable.gd delete mode 100644 table/lable.gd.uid delete mode 100644 table/node.gd delete mode 100644 table/node.gd.uid delete mode 100644 table/set-toggle.gd delete mode 100644 table/set-toggle.gd.uid delete mode 100644 table/settings-toggle.gd delete mode 100644 table/settings-toggle.gd.uid delete mode 100644 table/ячейка-2.gd delete mode 100644 table/ячейка-2.gd.uid delete mode 100644 table/ячейка-цвет.gd delete mode 100644 table/ячейка-цвет.gd.uid diff --git a/table/lable.gd b/table/lable.gd deleted file mode 100644 index ccf4a45e..00000000 --- a/table/lable.gd +++ /dev/null @@ -1,24 +0,0 @@ -extends Label - -static var styles: = [null, null] -static var init_done: = false - - -func _init() -> void: - if init_done: - init_done = true - var style_light: = get_theme_stylebox('normal') - style_light.bg_color = Color.GRAY - styles[1] = style_light - var style_dark: = style_light.duplicate(true) - style_dark.bg_color = Color(0.12, 0.12, 0.12) - styles[0] = style_dark - ProjectSettings.connect('settings_changed', apply_colors) - apply_colors() - - -func apply_colors(): - if ProjectSettings.get_setting('application/config/%s' % 'Цвет темы программы', false): - add_theme_stylebox_override('normal', styles[1]) - else: - add_theme_stylebox_override('normal', styles[0]) diff --git a/table/lable.gd.uid b/table/lable.gd.uid deleted file mode 100644 index 2b9e2c3f..00000000 --- a/table/lable.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bjw0gwcqxx30d diff --git a/table/lable.tscn b/table/lable.tscn index 25c38ded..17064cc1 100644 --- a/table/lable.tscn +++ b/table/lable.tscn @@ -1,7 +1,5 @@ [gd_scene load_steps=3 format=3 uid="uid://dwphmxstaxn4v"] -[ext_resource type="Script" uid="uid://bjw0gwcqxx30d" path="res://table/lable.gd" id="1_xk0u2"] - [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_yign5"] bg_color = Color(0.117647, 0.117647, 0.117647, 0.85098) border_width_bottom = 2 @@ -11,9 +9,36 @@ corner_radius_top_right = 3 corner_radius_bottom_right = 3 corner_radius_bottom_left = 5 +[sub_resource type="GDScript" id="GDScript_dhnrx"] +script/source = "extends Label + +static var styles: = [null, null] +static var init_done: = false + + +func _init() -> void: + if init_done: + init_done = true + var style_light: = get_theme_stylebox('normal') + style_light.bg_color = Color.GRAY + styles[1] = style_light + var style_dark: = style_light.duplicate(true) + style_dark.bg_color = Color(0.12, 0.12, 0.12) + styles[0] = style_dark + ProjectSettings.connect('settings_changed', apply_colors) + apply_colors() + + +func apply_colors(): + if ProjectSettings.get_setting('application/config/%s' % 'Цвет темы программы', false): + add_theme_stylebox_override('normal', styles[1]) + else: + add_theme_stylebox_override('normal', styles[0]) +" + [node name="Lable" type="Label"] offset_right = 104.0 offset_bottom = 27.0 theme_override_colors/font_color = Color(1, 0.596078, 0.4, 1) theme_override_styles/normal = SubResource("StyleBoxFlat_yign5") -script = ExtResource("1_xk0u2") +script = SubResource("GDScript_dhnrx") diff --git a/table/node.gd b/table/node.gd deleted file mode 100644 index 2e2d23b9..00000000 --- a/table/node.gd +++ /dev/null @@ -1,28 +0,0 @@ -extends LineEdit - - -static var styles: = [null, null] -static var init_done: = false - -func _init() -> void: - if not init_done: - init_done = true - var style_light: = get_theme_stylebox('read_only') - style_light.bg_color = Color.GRAY - styles[1] = style_light - var style_dark: = style_light.duplicate(true) - style_dark.bg_color = Color(0.12, 0.12, 0.12) - styles[0] = style_dark - ProjectSettings.connect('settings_changed', apply_colors) - apply_colors() - - -func apply_colors(): - if ProjectSettings.get_setting('application/config/%s' % 'Цвет темы программы', false): - add_theme_color_override('font_color_readonly', Color.BLACK) - add_theme_color_override('font_color_placeholder', Color(0, 0, 0, 0.5)) - add_theme_stylebox_override('read_only', styles[1]) - else: - add_theme_color_override('font_color_readonly', Color('#D8731A')) # тёмно-оранжевый - add_theme_color_override('font_color_placeholder', Color(1, 1, 1, 0.5)) - add_theme_stylebox_override('read_only', styles[0]) diff --git a/table/node.gd.uid b/table/node.gd.uid deleted file mode 100644 index 7df355ca..00000000 --- a/table/node.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://c71233c2tqc2u diff --git a/table/node.tscn b/table/node.tscn index 5178856f..1cbba263 100644 --- a/table/node.tscn +++ b/table/node.tscn @@ -1,6 +1,34 @@ [gd_scene load_steps=2 format=3 uid="uid://c1i4rwaajq7d5"] -[ext_resource type="Script" uid="uid://c71233c2tqc2u" path="res://table/node.gd" id="1_oh3pj"] +[sub_resource type="GDScript" id="GDScript_eegm3"] +script/source = "extends LineEdit + +static var styles: = [null, null] +static var init_done: = false + +func _init() -> void: + if not init_done: + init_done = true + var style_light: = get_theme_stylebox('read_only') + style_light.bg_color = Color.GRAY + styles[1] = style_light + var style_dark: = style_light.duplicate(true) + style_dark.bg_color = Color(0.12, 0.12, 0.12) + styles[0] = style_dark + ProjectSettings.connect('settings_changed', apply_colors) + apply_colors() + + +func apply_colors(): + if ProjectSettings.get_setting('application/config/%s' % 'Цвет темы программы', false): + add_theme_color_override('font_color_readonly', Color.BLACK) + add_theme_color_override('font_color_placeholder', Color(0, 0, 0, 0.5)) + add_theme_stylebox_override('read_only', styles[1]) + else: + add_theme_color_override('font_color_readonly', Color('#D8731A')) # тёмно-оранжевый + add_theme_color_override('font_color_placeholder', Color(1, 1, 1, 0.5)) + add_theme_stylebox_override('read_only', styles[0]) +" [node name="Label" type="LineEdit"] offset_right = 121.0 @@ -10,4 +38,4 @@ editable = false context_menu_enabled = false caret_blink = true caret_blink_interval = 0.1 -script = ExtResource("1_oh3pj") +script = SubResource("GDScript_eegm3") diff --git a/table/set-toggle.gd b/table/set-toggle.gd deleted file mode 100644 index 7484d2c6..00000000 --- a/table/set-toggle.gd +++ /dev/null @@ -1,33 +0,0 @@ -extends LineEdit - -static var styles: = [null, null] -static var init_done: = false - -var checkbutton_material: Material - - -func _init() -> void: - if not init_done: - init_done = true - var style_light: = get_theme_stylebox('read_only') - style_light.bg_color = Color.GRAY - styles[1] = style_light - var style_dark: = style_light.duplicate(true) - style_dark.bg_color = Color(0.12, 0.12, 0.12) - styles[0] = style_dark - ProjectSettings.connect('settings_changed', on_setting_changed) - call_deferred('on_setting_changed') - - -func on_setting_changed(): - checkbutton_material = $CheckButton.material - apply_colors() - - -func apply_colors(): - if ProjectSettings.get_setting('application/config/%s' % 'Цвет темы программы', false): - add_theme_stylebox_override('read_only', styles[1]) - $CheckButton.material = null - else: - add_theme_stylebox_override('read_only', styles[0]) - $CheckButton.material = checkbutton_material diff --git a/table/set-toggle.gd.uid b/table/set-toggle.gd.uid deleted file mode 100644 index 35ebd964..00000000 --- a/table/set-toggle.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://btvrqnnjjum20 diff --git a/table/set-toggle.tscn b/table/set-toggle.tscn index ab5acf4f..0d3d8329 100644 --- a/table/set-toggle.tscn +++ b/table/set-toggle.tscn @@ -1,10 +1,45 @@ [gd_scene load_steps=8 format=3 uid="uid://dgidt8lifm7xe"] -[ext_resource type="Script" uid="uid://btvrqnnjjum20" path="res://table/set-toggle.gd" id="1_kvru5"] [ext_resource type="Shader" uid="uid://bw5mmbgeycwua" path="res://shaders/color-invers.gdshader" id="2_wrw87"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_f4oye"] +[sub_resource type="GDScript" id="GDScript_kvru5"] +script/source = "extends LineEdit + +static var styles: = [null, null] +static var init_done: = false + +var checkbutton_material: Material + + +func _init() -> void: + if not init_done: + init_done = true + var style_light: = get_theme_stylebox('read_only') + style_light.bg_color = Color.GRAY + styles[1] = style_light + var style_dark: = style_light.duplicate(true) + style_dark.bg_color = Color(0.12, 0.12, 0.12) + styles[0] = style_dark + ProjectSettings.connect('settings_changed', on_setting_changed) + call_deferred('on_setting_changed') + + +func on_setting_changed(): + checkbutton_material = $CheckButton.material + apply_colors() + + +func apply_colors(): + if ProjectSettings.get_setting('application/config/%s' % 'Цвет темы программы', false): + add_theme_stylebox_override('read_only', styles[1]) + $CheckButton.material = null + else: + add_theme_stylebox_override('read_only', styles[0]) + $CheckButton.material = checkbutton_material +" + [sub_resource type="ShaderMaterial" id="ShaderMaterial_wrw87"] shader = ExtResource("2_wrw87") @@ -20,7 +55,7 @@ offset_right = 85.0 offset_bottom = 27.0 theme_override_styles/focus = SubResource("StyleBoxEmpty_f4oye") editable = false -script = ExtResource("1_kvru5") +script = SubResource("GDScript_kvru5") [node name="CheckButton" type="CheckButton" parent="."] material = SubResource("ShaderMaterial_wrw87") diff --git a/table/settings-toggle.gd b/table/settings-toggle.gd deleted file mode 100644 index 03a02293..00000000 --- a/table/settings-toggle.gd +++ /dev/null @@ -1,33 +0,0 @@ -extends LineEdit - -static var styles: = [null, null] -static var init_done: = false - -var checkbutton_material: Material - - -func _init() -> void: - ProjectSettings.connect('settings_changed', on_setting_changed) - if not init_done: - init_done = true - var style_light: = get_theme_stylebox('read_only') - style_light.bg_color = Color.GRAY - styles[1] = style_light - var style_dark: = style_light.duplicate(true) - style_dark.bg_color = Color(0.12, 0.12, 0.12) - styles[0] = style_dark - - -func on_setting_changed(): - checkbutton_material = $CheckButton.material - apply_colors() - - -func apply_colors(): - var is_light: bool = ProjectSettings.get_setting('application/config/%s' % 'Цвет темы программы', false) - if is_light: - add_theme_stylebox_override('read_only', styles[1]) - $CheckButton.material = null - else: - add_theme_stylebox_override('read_only', styles[0]) - $CheckButton.material = checkbutton_material diff --git a/table/settings-toggle.gd.uid b/table/settings-toggle.gd.uid deleted file mode 100644 index 729538f3..00000000 --- a/table/settings-toggle.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bh7mb1aeu1uk6 diff --git a/table/settings-toggle.tscn b/table/settings-toggle.tscn index 3dac0144..eafa4929 100644 --- a/table/settings-toggle.tscn +++ b/table/settings-toggle.tscn @@ -1,10 +1,51 @@ [gd_scene load_steps=6 format=3 uid="uid://5rw652cmnybi"] -[ext_resource type="Script" uid="uid://bh7mb1aeu1uk6" path="res://table/settings-toggle.gd" id="1_8lkgc"] [ext_resource type="Shader" uid="uid://bw5mmbgeycwua" path="res://shaders/color-invers.gdshader" id="1_anyuq"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_il5wc"] +[sub_resource type="GDScript" id="GDScript_vuu0m"] +script/source = "extends LineEdit + +static var styles = [[null, null], [null, null]] +static var init_done: = false + + +func _init() -> void: + if not init_done: + init_done = true + var style_0_light = get_theme_stylebox('normal') + var style_1_light = get_theme_stylebox('read_only') + + style_0_light.bg_color = Color(0.12, 0.12, 0.12) + style_1_light.bg_color = Color(0.12, 0.12, 0.12) + styles[1][0] = style_0_light + styles[1][1] = style_1_light + + var style_0_dark = style_0_light.duplicate(true) + var style_1_dark = style_1_light.duplicate(true) + + style_0_light.bg_color = Color.GRAY + style_1_light.bg_color = Color.GRAY + styles[0][0] = style_0_dark + styles[0][1] = style_1_dark + ProjectSettings.connect('settings_changed', apply_colors) + apply_colors() + + +func apply_colors(): + if ProjectSettings.get_setting('application/config/%s' % 'Цвет темы программы', false): + add_theme_color_override('font_color', Color.BLACK) + add_theme_color_override('font_uneditable_color', Color.BLACK) + add_theme_stylebox_override('normal', styles[1][0]) + add_theme_stylebox_override('read_only', styles[1][1]) + else: + add_theme_color_override('font_color', Color(1.0, 0.596, 0.4)) + add_theme_color_override('font_uneditable_color', Color(1.0, 0.596, 0.4)) + add_theme_stylebox_override('normal', styles[0][0]) + add_theme_stylebox_override('read_only', styles[0][1]) +" + [sub_resource type="ShaderMaterial" id="ShaderMaterial_8lkgc"] shader = ExtResource("1_anyuq") @@ -22,7 +63,7 @@ shortcut_keys_enabled = false middle_mouse_paste_enabled = false selecting_enabled = false deselect_on_focus_loss_enabled = false -script = ExtResource("1_8lkgc") +script = SubResource("GDScript_vuu0m") [node name="CheckButton" type="CheckButton" parent="."] material = SubResource("ShaderMaterial_8lkgc") diff --git a/table/ячейка-2.gd b/table/ячейка-2.gd deleted file mode 100644 index 42adbafc..00000000 --- a/table/ячейка-2.gd +++ /dev/null @@ -1,39 +0,0 @@ -extends LineEdit - -static var styles = [[null, null], [null, null]] -static var init_done: = false - - -func _init() -> void: - if not init_done: - init_done = true - var style_0_light = get_theme_stylebox('normal') - var style_1_light = get_theme_stylebox('read_only') - - style_0_light.bg_color = Color(0.12, 0.12, 0.12) - style_1_light.bg_color = Color(0.12, 0.12, 0.12) - styles[1][0] = style_0_light - styles[1][1] = style_1_light - - var style_0_dark = style_0_light.duplicate(true) - var style_1_dark = style_1_light.duplicate(true) - - style_0_light.bg_color = Color.GRAY - style_1_light.bg_color = Color.GRAY - styles[0][0] = style_0_dark - styles[0][1] = style_1_dark - ProjectSettings.connect('settings_changed', apply_colors) - apply_colors() - - -func apply_colors(): - if ProjectSettings.get_setting('application/config/%s' % 'Цвет темы программы', false): - add_theme_color_override('font_color', Color.BLACK) - add_theme_color_override('font_uneditable_color', Color.BLACK) - add_theme_stylebox_override('normal', styles[1][0]) - add_theme_stylebox_override('read_only', styles[1][1]) - else: - add_theme_color_override('font_color', Color(1.0, 0.596, 0.4)) - add_theme_color_override('font_uneditable_color', Color(1.0, 0.596, 0.4)) - add_theme_stylebox_override('normal', styles[0][0]) - add_theme_stylebox_override('read_only', styles[0][1]) diff --git a/table/ячейка-2.gd.uid b/table/ячейка-2.gd.uid deleted file mode 100644 index 4917e9d0..00000000 --- a/table/ячейка-2.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://dqexdg24cp6rq diff --git a/table/ячейка-2.tscn b/table/ячейка-2.tscn index 0c3566e4..55848ef7 100644 --- a/table/ячейка-2.tscn +++ b/table/ячейка-2.tscn @@ -1,9 +1,49 @@ [gd_scene load_steps=3 format=3 uid="uid://dspa16ufrpanp"] -[ext_resource type="Script" uid="uid://dqexdg24cp6rq" path="res://table/ячейка-2.gd" id="1_0fmuf"] - [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_mla3y"] +[sub_resource type="GDScript" id="GDScript_kmv1d"] +script/source = "extends LineEdit + +static var styles = [[null, null], [null, null]] +static var init_done: = false + + +func _init() -> void: + if not init_done: + init_done = true + var style_0_light = get_theme_stylebox('normal') + var style_1_light = get_theme_stylebox('read_only') + + style_0_light.bg_color = Color(0.12, 0.12, 0.12) + style_1_light.bg_color = Color(0.12, 0.12, 0.12) + styles[1][0] = style_0_light + styles[1][1] = style_1_light + + var style_0_dark = style_0_light.duplicate(true) + var style_1_dark = style_1_light.duplicate(true) + + style_0_light.bg_color = Color.GRAY + style_1_light.bg_color = Color.GRAY + styles[0][0] = style_0_dark + styles[0][1] = style_1_dark + ProjectSettings.connect('settings_changed', apply_colors) + apply_colors() + + +func apply_colors(): + if ProjectSettings.get_setting('application/config/%s' % 'Цвет темы программы', false): + add_theme_color_override('font_color', Color.BLACK) + add_theme_color_override('font_uneditable_color', Color.BLACK) + add_theme_stylebox_override('normal', styles[1][0]) + add_theme_stylebox_override('read_only', styles[1][1]) + else: + add_theme_color_override('font_color', Color(1.0, 0.596, 0.4)) + add_theme_color_override('font_uneditable_color', Color(1.0, 0.596, 0.4)) + add_theme_stylebox_override('normal', styles[0][0]) + add_theme_stylebox_override('read_only', styles[0][1]) +" + [node name="LineEdit" type="LineEdit"] offset_right = 58.0 offset_bottom = 33.0 @@ -18,4 +58,4 @@ selecting_enabled = false deselect_on_focus_loss_enabled = false caret_blink = true caret_blink_interval = 0.1 -script = ExtResource("1_0fmuf") +script = SubResource("GDScript_kmv1d") diff --git a/table/ячейка-цвет.gd b/table/ячейка-цвет.gd deleted file mode 100644 index 5635b9c1..00000000 --- a/table/ячейка-цвет.gd +++ /dev/null @@ -1,24 +0,0 @@ -extends ColorPickerButton - -static var styles = [null, null] -static var init_done: = false - - -func _init() -> void: - if not init_done: - init_done = true - var style_light: = get_theme_stylebox('normal') - style_light.bg_color = Color.GRAY - styles[1] = style_light - var style_dark: = style_light.duplicate(true) - style_dark.bg_color = Color(0.12, 0.12, 0.12) - styles[0] = style_dark - ProjectSettings.connect('settings_changed', apply_colors) - apply_colors() - - -func apply_colors(): - if ProjectSettings.get_setting('application/config/%s' % 'Цвет темы программы', false): - add_theme_stylebox_override('normal', styles[1]) - else: - add_theme_stylebox_override('normal', styles[0]) diff --git a/table/ячейка-цвет.gd.uid b/table/ячейка-цвет.gd.uid deleted file mode 100644 index 31e07acc..00000000 --- a/table/ячейка-цвет.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://b36c83manfems diff --git a/table/ячейка-цвет.tscn b/table/ячейка-цвет.tscn index 8171867e..0b143b65 100644 --- a/table/ячейка-цвет.tscn +++ b/table/ячейка-цвет.tscn @@ -1,9 +1,11 @@ [gd_scene load_steps=3 format=3 uid="uid://cug5xjbfdm7x7"] -[ext_resource type="Script" uid="uid://b36c83manfems" path="res://table/ячейка-цвет.gd" id="1_ce8lu"] - [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ce8lu"] +[sub_resource type="GDScript" id="GDScript_dds53"] +script/source = "extends ColorPickerButton +" + [node name="ячейка-цвет" type="ColorPickerButton"] anchors_preset = 15 anchor_right = 1.0 @@ -11,4 +13,4 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 theme_override_styles/focus = SubResource("StyleBoxEmpty_ce8lu") -script = ExtResource("1_ce8lu") +script = SubResource("GDScript_dds53") From f3be1e39db564275d670cbd1c5de8bfc3836bcf7 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 11 Mar 2026 14:08:56 +0300 Subject: [PATCH 05/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=B8=D1=82=20=D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=80=20?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=BE=D1=82=20url,=20?= =?UTF-8?q?=D0=B5=D1=81=D0=BB=D0=B8=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=B2=D0=BE=D0=B7=D0=BD=D0=B8=D0=BA=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/tilemap/tilemap.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scenes/tilemap/tilemap.gd b/scenes/tilemap/tilemap.gd index 7b32060c..aff9aad6 100644 --- a/scenes/tilemap/tilemap.gd +++ b/scenes/tilemap/tilemap.gd @@ -403,7 +403,7 @@ func _response(result, code, _headers: Array, body: PackedByteArray, req, tile: return if Error.OK != image_load_proc.call(body): - push_error('не удалось получить изображение (неверный формат?) из \"%s\"' % tile.url) + push_error('не удалось получить изображение (неверный формат?) из \"%s\" (%d байт)' % [tile.url, body.size()]) return tile.texture = ImageTexture.create_from_image(image) From eabc48b95f1bf92277736222736921220746527c Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 11 Mar 2026 14:09:33 +0300 Subject: [PATCH 06/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D0=AD=D0=9C=D0=A1-?= =?UTF-8?q?=D0=A2=D0=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project.godot | 1 + scenes/button-six-state/six-state.tscn | 52 +++ scenes/hranges/panel.tscn | 1 - scenes/эмс2/эмс2.tscn | 453 +++++++++++++++++-------- 4 files changed, 363 insertions(+), 144 deletions(-) create mode 100644 scenes/button-six-state/six-state.tscn diff --git a/project.godot b/project.godot index c9ee8f15..27470bc2 100644 --- a/project.godot +++ b/project.godot @@ -168,6 +168,7 @@ folder_colors={ "res://scenes/bip/": "blue", "res://scenes/button-flat/": "blue", "res://scenes/button-scale/": "blue", +"res://scenes/button-six-state/": "blue", "res://scenes/cell/": "blue", "res://scenes/count-all/": "blue", "res://scenes/count-danger/": "blue", diff --git a/scenes/button-six-state/six-state.tscn b/scenes/button-six-state/six-state.tscn new file mode 100644 index 00000000..c3a2d826 --- /dev/null +++ b/scenes/button-six-state/six-state.tscn @@ -0,0 +1,52 @@ +[gd_scene load_steps=3 format=3 uid="uid://cixwl6xi22buo"] + +[ext_resource type="Texture2D" uid="uid://c6nve6f8sfyj2" path="res://data/состояние-исправности-0.png" id="1_ufod8"] + +[sub_resource type="GDScript" id="GDScript_ufod8"] +script/source = "@tool +extends GridContainer + +@export_file var image_states: Array[String] +var txr_states: Array[CompressedTexture2D] + +@export var state: int = 0: + set(val): + state = val % image_states.size() + if is_inside_tree(): + val %= txr_states.size() + state = val + $done.texture = txr_states[val] + + +func _enter_tree() -> void: + for fn in image_states: + txr_states.append(load(fn)) + $done.texture = txr_states[state] +" + +[node name="six-state" type="GridContainer"] +offset_right = 156.0 +offset_bottom = 24.0 +grow_horizontal = 2 +grow_vertical = 2 +columns = 3 +script = SubResource("GDScript_ufod8") +image_states = Array[String](["uid://c6nve6f8sfyj2", "uid://dnreyfh3cd1k2", "uid://c6booa8753u5t"]) + +[node name="done" type="TextureRect" parent="."] +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 3 +texture = ExtResource("1_ufod8") +expand_mode = 3 + +[node name="text" type="Label" parent="."] +layout_mode = 2 +size_flags_horizontal = 6 +size_flags_vertical = 6 +text = "Запрещено" +horizontal_alignment = 1 + +[node name="check" type="CheckButton" parent="."] +layout_mode = 2 +size_flags_horizontal = 8 diff --git a/scenes/hranges/panel.tscn b/scenes/hranges/panel.tscn index c6720139..b3129a20 100644 --- a/scenes/hranges/panel.tscn +++ b/scenes/hranges/panel.tscn @@ -9,6 +9,5 @@ offset_right = 690.0 offset_bottom = 75.0 theme_override_styles/panel = SubResource("StyleBoxFlat_ajqhv") script = ExtResource("1_pg3d7") -lines_count = null [connection signal="resized" from="." to="." method="_on_resized"] diff --git a/scenes/эмс2/эмс2.tscn b/scenes/эмс2/эмс2.tscn index 23de2d88..20e79ad4 100644 --- a/scenes/эмс2/эмс2.tscn +++ b/scenes/эмс2/эмс2.tscn @@ -3,6 +3,7 @@ [ext_resource type="Texture2D" uid="uid://hkcvl2waf63s" path="res://data/вид сверху.png" id="1_b7vcf"] [ext_resource type="Script" uid="uid://bvlqgv7aapebl" path="res://scenes/эмс2/эмс-тг.gd" id="1_l3ueu"] [ext_resource type="Texture2D" uid="uid://0w6q4vfst0ry" path="res://data/OP-63.png" id="3_8gk36"] +[ext_resource type="PackedScene" uid="uid://hr55mkcneaer" path="res://scenes/hranges/panel.tscn" id="3_b5v2s"] [ext_resource type="Texture2D" uid="uid://b85f1ne2wrwhg" path="res://data/Состояние РЭС 4.png" id="4_b5v2s"] [ext_resource type="Texture2D" uid="uid://073el51yholj" path="res://data/454.png" id="4_nqi0i"] [ext_resource type="Texture2D" uid="uid://cckk3jk5r32bh" path="res://data/ГО.png" id="5_e7tlv"] @@ -33,9 +34,7 @@ [ext_resource type="Texture2D" uid="uid://7ody4v7qy36g" path="res://data/Скруглённый прямоугольник серый.png" id="31_b5v2s"] [ext_resource type="Texture2D" uid="uid://carr8bw5rwiwj" path="res://data/Кнопка подтверждения01.png" id="32_p41nv"] [ext_resource type="Texture2D" uid="uid://3siondd3feev" path="res://data/Скруглённый прямоугольник белый.png" id="33_5ifkb"] -[ext_resource type="Texture2D" uid="uid://csxruavk0s40l" path="res://data/Окно частот0.png" id="34_b5v2s"] - -[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_5u4bk"] +[ext_resource type="PackedScene" uid="uid://ch14g46swx74h" path="res://table/header.tscn" id="35_p41nv"] [node name="Panel" type="Panel"] script = ExtResource("1_l3ueu") @@ -47,15 +46,199 @@ rotation = 1.5708 scale = Vector2(0.325, 0.325) texture = ExtResource("1_b7vcf") -[node name="частоты" type="TextureRect" parent="."] +[node name="приём" type="GridContainer" parent="."] layout_mode = 0 offset_left = 32.0 -offset_top = 240.0 -offset_right = 1649.0 -offset_bottom = 813.0 +offset_top = 262.0 +offset_right = 1635.0 +offset_bottom = 494.0 scale = Vector2(0.95, 0.95) -texture = SubResource("CompressedTexture2D_5u4bk") -expand_mode = 1 +columns = 2 + +[node name="label0" type="Label" parent="приём"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "ОР-63" + +[node name="panel0" parent="приём" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="label1" type="Label" parent="приём"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "454" + +[node name="panel1" parent="приём" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="label2" type="Label" parent="приём"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "ГО" + +[node name="panel2" parent="приём" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="label3" type="Label" parent="приём"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "РЛС1" + +[node name="panel3" parent="приём" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="label4" type="Label" parent="приём"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "РЛС2" + +[node name="panel4" parent="приём" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="label5" type="Label" parent="приём"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "ННВС" + +[node name="panel5" parent="приём" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="label6" type="Label" parent="приём"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "Изделие 7" + +[node name="panel6" parent="приём" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="label7" type="Label" parent="приём"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "Изделие 8" + +[node name="panel7" parent="приём" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="передача" type="GridContainer" parent="."] +layout_mode = 0 +offset_left = 32.0 +offset_top = 534.0 +offset_right = 1635.0 +offset_bottom = 766.0 +scale = Vector2(0.95, 0.95) +columns = 2 + +[node name="label0" type="Label" parent="передача"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "ОР-63" + +[node name="panel0" parent="передача" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="label1" type="Label" parent="передача"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "454" + +[node name="panel1" parent="передача" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="label2" type="Label" parent="передача"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "ГО" + +[node name="panel2" parent="передача" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="label3" type="Label" parent="передача"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "РЛС1" + +[node name="panel3" parent="передача" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="label4" type="Label" parent="передача"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "РЛС2" + +[node name="panel4" parent="передача" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="label5" type="Label" parent="передача"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "ННВС" + +[node name="panel5" parent="передача" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="label6" type="Label" parent="передача"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "Изделие 7" + +[node name="panel6" parent="передача" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="label7" type="Label" parent="передача"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "Изделие 8" + +[node name="panel7" parent="передача" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 [node name="Op-63" type="TextureRect" parent="."] layout_mode = 0 @@ -106,15 +289,6 @@ position = Vector2(275.641, 38.4615) scale = Vector2(3.20513, 3.20513) texture = ExtResource("6_m57px") -[node name="lbl_trassa" type="Label" parent="454"] -layout_mode = 0 -offset_left = -42.0 -offset_top = -135.0 -offset_right = 221.0 -offset_bottom = -36.0 -theme_override_font_sizes/font_size = 100 -text = "Трасса" - [node name="Го" type="TextureRect" parent="."] layout_mode = 0 offset_left = 488.0 @@ -403,12 +577,12 @@ position = Vector2(196, 196) texture = ExtResource("26_2spgl") [node name="СкруглённыйПрямоугСалатный" type="Sprite2D" parent="."] -position = Vector2(101, 828) +position = Vector2(116, 1288) scale = Vector2(1.74359, 1.16667) texture = ExtResource("29_5u4bk") [node name="СкруглённыйПрямоугСалатный12" type="Sprite2D" parent="."] -position = Vector2(220, 828) +position = Vector2(235, 1288) scale = Vector2(1.33333, 1.16667) texture = ExtResource("29_5u4bk") @@ -558,7 +732,7 @@ horizontal_alignment = 1 metadata/_edit_use_anchors_ = true [node name="СкруглённыйПрямоугольникБелый" type="Sprite2D" parent="."] -position = Vector2(102, 871) +position = Vector2(117, 1331) scale = Vector2(1.41304, 1) texture = ExtResource("31_b5v2s") @@ -599,20 +773,10 @@ position = Vector2(0, 261) texture = ExtResource("31_b5v2s") [node name="КнопкаПодтверждения01" type="Sprite2D" parent="."] -position = Vector2(996.247, 871.25) +position = Vector2(1011.25, 1331.25) scale = Vector2(1.37999, 1.28261) texture = ExtResource("32_p41nv") -[node name="Label3" type="Label" parent="КнопкаПодтверждения01"] -offset_left = -681.34 -offset_top = -10.3305 -offset_right = -613.34 -offset_bottom = 8.66949 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "--" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - [node name="СкруглённыйПрямоугольникБелый11" type="Sprite2D" parent="КнопкаПодтверждения01"] position = Vector2(-562.5, -0.194946) scale = Vector2(0.819155, 0.77966) @@ -1205,115 +1369,118 @@ position = Vector2(54.8907, 203.296) scale = Vector2(0.378072, 0.77966) texture = ExtResource("31_b5v2s") -[node name="Label4" type="Label" parent="КнопкаПодтверждения01"] -offset_left = -596.558 -offset_top = -9.55084 -offset_right = -528.558 -offset_bottom = 9.44916 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "--" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="Label5" type="Label" parent="КнопкаПодтверждения01"] -offset_left = -521.195 -offset_top = -10.3305 -offset_right = -453.195 -offset_bottom = 8.66949 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "--" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="Label6" type="Label" parent="КнопкаПодтверждения01"] -offset_left = -445.834 -offset_top = -9.55084 -offset_right = -377.834 -offset_bottom = 9.44916 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "--" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="Label7" type="Label" parent="КнопкаПодтверждения01"] -offset_left = -370.471 -offset_top = -9.55084 -offset_right = -302.471 -offset_bottom = 9.44916 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "--" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="Label8" type="Label" parent="КнопкаПодтверждения01"] -offset_left = -295.109 -offset_top = -9.55084 -offset_right = -227.109 -offset_bottom = 9.44916 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "--" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="Label9" type="Label" parent="КнопкаПодтверждения01"] -offset_left = -219.746 -offset_top = -9.55084 -offset_right = -151.746 -offset_bottom = 9.44916 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "--" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="Label10" type="Label" parent="КнопкаПодтверждения01"] -offset_left = -144.384 -offset_top = -9.55084 -offset_right = -76.384 -offset_bottom = 9.44916 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "--" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="Label11" type="Label" parent="КнопкаПодтверждения01"] -offset_left = -61.0507 -offset_top = -10.3305 -offset_right = -49.0507 -offset_bottom = 8.66949 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "--" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="Label12" type="Label" parent="КнопкаПодтверждения01"] -offset_left = 49.0936 -offset_top = -10.3305 -offset_right = 61.0936 -offset_bottom = 8.66949 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "--" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="ТаблицаЧастот" type="Sprite2D" parent="."] -position = Vector2(800, 502.25) -scale = Vector2(0.987573, 0.885314) -texture = ExtResource("34_b5v2s") - -[node name="Label" type="Label" parent="ТаблицаЧастот"] -offset_left = -6.0755 -offset_top = -293.757 -offset_right = 66.9245 -offset_bottom = -274.757 -theme_override_colors/font_color = Color(0, 0, 0, 1) -theme_override_font_sizes/font_size = 16 -text = "Излучение" - -[node name="Label2" type="Label" parent="ТаблицаЧастот"] -offset_left = 8.10067 -offset_top = -7.05967 -offset_right = 65.1007 -offset_bottom = 11.9403 -theme_override_colors/font_color = Color(0, 0, 0, 1) -theme_override_font_sizes/font_size = 16 +[node name="label_rx" type="Label" parent="."] +layout_mode = 0 +offset_left = 32.0 +offset_top = 240.0 +offset_right = 1555.0 +offset_bottom = 259.0 +text = "Приём" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="label_tx" type="Label" parent="."] +layout_mode = 0 +offset_left = 33.0 +offset_top = 510.0 +offset_right = 1555.0 +offset_bottom = 529.0 +text = "Передача" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="label8" type="Label" parent="."] +layout_mode = 0 +offset_left = 161.0 +offset_top = 60.0 +offset_right = 203.0 +offset_bottom = 79.0 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "ОР-63" + +[node name="label9" type="Label" parent="."] +layout_mode = 2 +offset_left = 510.0 +offset_top = 64.0 +offset_right = 527.0 +offset_bottom = 83.0 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "ГО" + +[node name="label10" type="Label" parent="."] +layout_mode = 2 +offset_left = 320.0 +offset_top = 60.0 +offset_right = 349.0 +offset_bottom = 79.0 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "454" + +[node name="label11" type="Label" parent="."] +layout_mode = 2 +offset_left = 940.0 +offset_top = 60.0 +offset_right = 976.0 +offset_bottom = 79.0 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "РЛС2" + +[node name="label12" type="Label" parent="."] +layout_mode = 2 +offset_left = 745.0 +offset_top = 60.0 +offset_right = 781.0 +offset_bottom = 79.0 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "РЛС1" + +[node name="label13" type="Label" parent="."] +layout_mode = 2 +offset_left = 1250.0 +offset_top = 65.0 +offset_right = 1290.0 +offset_bottom = 84.0 +size_flags_horizontal = 4 +size_flags_vertical = 6 +text = "ННВС" + +[node name="GridContainer" type="GridContainer" parent="."] +layout_mode = 0 +offset_left = 52.0 +offset_top = 800.0 +offset_right = 1199.0 +offset_bottom = 1140.0 +columns = 7 + +[node name="header0" parent="GridContainer" instance=ExtResource("35_p41nv")] +layout_mode = 2 +text = "Изделие" + +[node name="header1" parent="GridContainer" instance=ExtResource("35_p41nv")] +layout_mode = 2 +text = "Кластер" + +[node name="header2" parent="GridContainer" instance=ExtResource("35_p41nv")] +layout_mode = 2 +text = "Азимут" + +[node name="header3" parent="GridContainer" instance=ExtResource("35_p41nv")] +layout_mode = 2 +text = "Угол места" + +[node name="header4" parent="GridContainer" instance=ExtResource("35_p41nv")] +layout_mode = 2 +text = "Диапазон" + +[node name="header5" parent="GridContainer" instance=ExtResource("35_p41nv")] +layout_mode = 2 +text = "Передача" + +[node name="header6" parent="GridContainer" instance=ExtResource("35_p41nv")] +layout_mode = 2 text = "Приём" From b27afc854efd9f8f16c65aa70dc2f0a5fe84c158 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 11 Mar 2026 14:43:19 +0300 Subject: [PATCH 07/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D0=AD=D0=9C?= =?UTF-8?q?=D0=A1-=D0=A2=D0=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/button-six-state/six-state.tscn | 8 ++++++++ table/header-image.tscn | 14 ++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 table/header-image.tscn diff --git a/scenes/button-six-state/six-state.tscn b/scenes/button-six-state/six-state.tscn index c3a2d826..7773e8e3 100644 --- a/scenes/button-six-state/six-state.tscn +++ b/scenes/button-six-state/six-state.tscn @@ -22,6 +22,14 @@ func _enter_tree() -> void: for fn in image_states: txr_states.append(load(fn)) $done.texture = txr_states[state] + + +func connect_check(signal_name: StringName, callable: Callable): + $check.connect(signal_name, callable) + + +func disconnect_check(signal_name: StringName, callable: Callable): + $check.disconnect(signal_name, callable) " [node name="six-state" type="GridContainer"] diff --git a/table/header-image.tscn b/table/header-image.tscn new file mode 100644 index 00000000..9fd8876a --- /dev/null +++ b/table/header-image.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=2 format=3 uid="uid://cymcld4mjmlhj"] + +[sub_resource type="GDScript" id="GDScript_63652"] +script/source = "extends GridContainer +" + +[node name="header-image" type="GridContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +columns = 2 +script = SubResource("GDScript_63652") From e52f465654205cd9e5f94fb25219a93c4f0e46b5 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 16 Mar 2026 15:40:56 +0300 Subject: [PATCH 08/52] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5.=20=D0=9B=D0=B8=D1=88=D0=BD?= =?UTF-8?q?=D0=B5=D0=B5=20=D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- table/table.gd | 1 - 1 file changed, 1 deletion(-) diff --git a/table/table.gd b/table/table.gd index 535fe6eb..de9c3aca 100644 --- a/table/table.gd +++ b/table/table.gd @@ -430,7 +430,6 @@ func set_header(header_types: Array): else: var childrens = header.get_children() for node in childrens: - childrens.erase(node.name) childrens.remove_child(node) node.queue_free() for i_col in columns: From 282a3a5218f45df89e34f4f13f211923f7dfe03a Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 16 Mar 2026 15:41:39 +0300 Subject: [PATCH 09/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D0=AD=D0=9C?= =?UTF-8?q?=D0=A1-=D0=A2=D0=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/button-six-state/six-state.tscn | 12 +- scenes/hranges/panel.gd | 10 + scenes/hranges/panel.tscn | 13 +- scenes/эмс2/эмс2.tscn | 2137 ++++++++++-------------- scripts/tools.gd | 3 +- table/header-image.tscn | 45 +- 6 files changed, 993 insertions(+), 1227 deletions(-) diff --git a/scenes/button-six-state/six-state.tscn b/scenes/button-six-state/six-state.tscn index 7773e8e3..e97965a4 100644 --- a/scenes/button-six-state/six-state.tscn +++ b/scenes/button-six-state/six-state.tscn @@ -6,9 +6,11 @@ script/source = "@tool extends GridContainer +@export var text_check: Array[String] @export_file var image_states: Array[String] var txr_states: Array[CompressedTexture2D] + @export var state: int = 0: set(val): state = val % image_states.size() @@ -19,6 +21,7 @@ var txr_states: Array[CompressedTexture2D] func _enter_tree() -> void: + txr_states.clear() for fn in image_states: txr_states.append(load(fn)) $done.texture = txr_states[state] @@ -30,15 +33,18 @@ func connect_check(signal_name: StringName, callable: Callable): func disconnect_check(signal_name: StringName, callable: Callable): $check.disconnect(signal_name, callable) + + +func _on_check_toggled(toggled_on: bool) -> void: + $text.text = text_check[int(toggled_on)] " [node name="six-state" type="GridContainer"] offset_right = 156.0 offset_bottom = 24.0 -grow_horizontal = 2 -grow_vertical = 2 columns = 3 script = SubResource("GDScript_ufod8") +text_check = Array[String](["Запрещено", "Разрешено"]) image_states = Array[String](["uid://c6nve6f8sfyj2", "uid://dnreyfh3cd1k2", "uid://c6booa8753u5t"]) [node name="done" type="TextureRect" parent="."] @@ -58,3 +64,5 @@ horizontal_alignment = 1 [node name="check" type="CheckButton" parent="."] layout_mode = 2 size_flags_horizontal = 8 + +[connection signal="toggled" from="check" to="." method="_on_check_toggled"] diff --git a/scenes/hranges/panel.gd b/scenes/hranges/panel.gd index c7a4f94e..42f55e05 100644 --- a/scenes/hranges/panel.gd +++ b/scenes/hranges/panel.gd @@ -6,6 +6,16 @@ extends PanelContainer @export_range(0.0, 1.0) var gap_bottom: float = 0.05 ## Зазор снизу @export var ranges_group_name: StringName = 'ranges' ## Имя группы для диапазонов @export var ranges_save: Dictionary[StringName, Array] ## <имя диапазона>: [диапазон(x - начало, y - конец), цвет] +@export_file var image_file: String: + set(val): + image_file = val + if is_inside_tree(): + _enter_tree() + + +func _enter_tree() -> void: + if ResourceLoader.exists(image_file): + $image.texture = load(image_file) ## Добавляет новый диапазон. diff --git a/scenes/hranges/panel.tscn b/scenes/hranges/panel.tscn index b3129a20..e94c68da 100644 --- a/scenes/hranges/panel.tscn +++ b/scenes/hranges/panel.tscn @@ -1,13 +1,20 @@ -[gd_scene load_steps=3 format=3 uid="uid://hr55mkcneaer"] +[gd_scene load_steps=4 format=3 uid="uid://hr55mkcneaer"] [ext_resource type="Script" uid="uid://jtio1scc72bl" path="res://scenes/hranges/panel.gd" id="1_pg3d7"] +[ext_resource type="Texture2D" uid="uid://c73tjrn8gr00o" path="res://data/Передатчик.png" id="2_ajqhv"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ajqhv"] [node name="panel" type="PanelContainer"] -offset_right = 690.0 -offset_bottom = 75.0 +offset_right = 340.0 +offset_bottom = 40.0 theme_override_styles/panel = SubResource("StyleBoxFlat_ajqhv") script = ExtResource("1_pg3d7") +[node name="image" type="TextureRect" parent="."] +layout_mode = 2 +size_flags_horizontal = 0 +texture = ExtResource("2_ajqhv") +expand_mode = 2 + [connection signal="resized" from="." to="." method="_on_resized"] diff --git a/scenes/эмс2/эмс2.tscn b/scenes/эмс2/эмс2.tscn index 20e79ad4..5d718a22 100644 --- a/scenes/эмс2/эмс2.tscn +++ b/scenes/эмс2/эмс2.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=36 format=3 uid="uid://musb21x2u0xs"] +[gd_scene load_steps=33 format=3 uid="uid://musb21x2u0xs"] [ext_resource type="Texture2D" uid="uid://hkcvl2waf63s" path="res://data/вид сверху.png" id="1_b7vcf"] [ext_resource type="Script" uid="uid://bvlqgv7aapebl" path="res://scenes/эмс2/эмс-тг.gd" id="1_l3ueu"] @@ -28,1459 +28,1166 @@ [ext_resource type="Texture2D" uid="uid://dneqjcul4ipub" path="res://data/Квадрат салатный РЛС2.png" id="26_w5eif"] [ext_resource type="Texture2D" uid="uid://cyb60nh23ys6k" path="res://data/Квадрат салатный ГО.png" id="27_2ft3r"] [ext_resource type="Texture2D" uid="uid://cw8sd7v5f31ww" path="res://data/Квадрат салатный с трубкой.png" id="28_rra4y"] -[ext_resource type="Texture2D" uid="uid://busl8rb38lis" path="res://data/Скруглённый прямоуг салатный.png" id="29_5u4bk"] -[ext_resource type="Texture2D" uid="uid://c6etralq2tvxg" path="res://data/Приёмник.png" id="29_vyjnq"] -[ext_resource type="Texture2D" uid="uid://c73tjrn8gr00o" path="res://data/Передатчик.png" id="30_68srw"] -[ext_resource type="Texture2D" uid="uid://7ody4v7qy36g" path="res://data/Скруглённый прямоугольник серый.png" id="31_b5v2s"] -[ext_resource type="Texture2D" uid="uid://carr8bw5rwiwj" path="res://data/Кнопка подтверждения01.png" id="32_p41nv"] -[ext_resource type="Texture2D" uid="uid://3siondd3feev" path="res://data/Скруглённый прямоугольник белый.png" id="33_5ifkb"] [ext_resource type="PackedScene" uid="uid://ch14g46swx74h" path="res://table/header.tscn" id="35_p41nv"] +[ext_resource type="PackedScene" uid="uid://cymcld4mjmlhj" path="res://table/header-image.tscn" id="36_68srw"] +[ext_resource type="PackedScene" uid="uid://dwphmxstaxn4v" path="res://table/lable.tscn" id="36_vyjnq"] +[ext_resource type="PackedScene" uid="uid://cixwl6xi22buo" path="res://scenes/button-six-state/six-state.tscn" id="37_68srw"] [node name="Panel" type="Panel"] +offset_top = 35.0 +offset_bottom = 35.0 script = ExtResource("1_l3ueu") -[node name="Sprite2D" type="Sprite2D" parent="."] +[node name="кораблик" type="TextureRect" parent="."] modulate = Color(1, 0.596078, 0.4, 1) -position = Vector2(792, 120) +layout_mode = 0 +offset_left = 1450.0 +offset_top = -8.0 +offset_right = 2169.0 +offset_bottom = 4282.0 rotation = 1.5708 scale = Vector2(0.325, 0.325) texture = ExtResource("1_b7vcf") +expand_mode = 1 [node name="приём" type="GridContainer" parent="."] layout_mode = 0 offset_left = 32.0 offset_top = 262.0 -offset_right = 1635.0 -offset_bottom = 494.0 +offset_right = 1647.0 +offset_bottom = 770.0 scale = Vector2(0.95, 0.95) columns = 2 -[node name="label0" type="Label" parent="приём"] +[node name="label0" type="Button" parent="приём"] layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 6 +size_flags_vertical = 7 text = "ОР-63" +metadata/unit_name = &"ОР-63" -[node name="panel0" parent="приём" instance=ExtResource("3_b5v2s")] +[node name="sub0" type="GridContainer" parent="приём"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="label1" type="Label" parent="приём"] +[node name="panel_rx" parent="приём/sub0" instance=ExtResource("3_b5v2s")] +self_modulate = Color(0.830335, 0.830335, 0.830335, 1) layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 6 +size_flags_horizontal = 3 +size_flags_vertical = 3 +image_file = "uid://c73tjrn8gr00o" + +[node name="panel_tx" parent="приём/sub0" instance=ExtResource("3_b5v2s")] +self_modulate = Color(0.830335, 0.830335, 0.830335, 1) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +image_file = "uid://c6etralq2tvxg" + +[node name="label1" type="Button" parent="приём"] +layout_mode = 2 +size_flags_horizontal = 5 +size_flags_vertical = 7 text = "454" +metadata/unit_name = &"454" -[node name="panel1" parent="приём" instance=ExtResource("3_b5v2s")] +[node name="sub1" type="GridContainer" parent="приём"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="label2" type="Label" parent="приём"] +[node name="panel_rx" parent="приём/sub1" instance=ExtResource("3_b5v2s")] layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 6 +size_flags_horizontal = 3 +size_flags_vertical = 3 +image_file = "uid://c73tjrn8gr00o" + +[node name="panel_tx" parent="приём/sub1" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +image_file = "uid://c6etralq2tvxg" + +[node name="label2" type="Button" parent="приём"] +layout_mode = 2 +size_flags_horizontal = 5 +size_flags_vertical = 7 text = "ГО" +metadata/unit_name = &"ГО" -[node name="panel2" parent="приём" instance=ExtResource("3_b5v2s")] +[node name="sub2" type="GridContainer" parent="приём"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="label3" type="Label" parent="приём"] +[node name="panel_rx" parent="приём/sub2" instance=ExtResource("3_b5v2s")] +self_modulate = Color(0.830335, 0.830335, 0.830335, 1) layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 6 +size_flags_horizontal = 3 +size_flags_vertical = 3 +image_file = "uid://c73tjrn8gr00o" + +[node name="panel_tx" parent="приём/sub2" instance=ExtResource("3_b5v2s")] +self_modulate = Color(0.830335, 0.830335, 0.830335, 1) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +image_file = "uid://c6etralq2tvxg" + +[node name="label3" type="Button" parent="приём"] +layout_mode = 2 +size_flags_horizontal = 5 +size_flags_vertical = 7 text = "РЛС1" +metadata/unit_name = &"РЛС1" -[node name="panel3" parent="приём" instance=ExtResource("3_b5v2s")] +[node name="sub3" type="GridContainer" parent="приём"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="label4" type="Label" parent="приём"] +[node name="panel_rx" parent="приём/sub3" instance=ExtResource("3_b5v2s")] layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 6 +size_flags_horizontal = 3 +size_flags_vertical = 3 +image_file = "uid://c73tjrn8gr00o" + +[node name="panel_tx" parent="приём/sub3" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +image_file = "uid://c6etralq2tvxg" + +[node name="label4" type="Button" parent="приём"] +layout_mode = 2 +size_flags_horizontal = 5 +size_flags_vertical = 7 text = "РЛС2" +metadata/unit_name = &"РЛС2" -[node name="panel4" parent="приём" instance=ExtResource("3_b5v2s")] +[node name="sub4" type="GridContainer" parent="приём"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="label5" type="Label" parent="приём"] +[node name="panel_rx" parent="приём/sub4" instance=ExtResource("3_b5v2s")] +self_modulate = Color(0.830335, 0.830335, 0.830335, 1) layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 6 +size_flags_horizontal = 3 +size_flags_vertical = 3 +image_file = "uid://c73tjrn8gr00o" + +[node name="panel_tx" parent="приём/sub4" instance=ExtResource("3_b5v2s")] +self_modulate = Color(0.830335, 0.830335, 0.830335, 1) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +image_file = "uid://c6etralq2tvxg" + +[node name="label5" type="Button" parent="приём"] +layout_mode = 2 +size_flags_horizontal = 5 +size_flags_vertical = 7 text = "ННВС" +metadata/unit_name = &"ННВС" -[node name="panel5" parent="приём" instance=ExtResource("3_b5v2s")] +[node name="sub5" type="GridContainer" parent="приём"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="label6" type="Label" parent="приём"] +[node name="panel_rx" parent="приём/sub5" instance=ExtResource("3_b5v2s")] layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 6 +size_flags_horizontal = 3 +size_flags_vertical = 3 +image_file = "uid://c73tjrn8gr00o" + +[node name="panel_tx" parent="приём/sub5" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +image_file = "uid://c6etralq2tvxg" + +[node name="label6" type="Button" parent="приём"] +layout_mode = 2 +size_flags_horizontal = 5 +size_flags_vertical = 7 text = "Изделие 7" +metadata/unit_name = &"Изделие 7" -[node name="panel6" parent="приём" instance=ExtResource("3_b5v2s")] +[node name="sub6" type="GridContainer" parent="приём"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="label7" type="Label" parent="приём"] +[node name="panel_rx" parent="приём/sub6" instance=ExtResource("3_b5v2s")] +self_modulate = Color(0.830335, 0.830335, 0.830335, 1) layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 6 +size_flags_horizontal = 3 +size_flags_vertical = 3 +image_file = "uid://c73tjrn8gr00o" + +[node name="panel_tx" parent="приём/sub6" instance=ExtResource("3_b5v2s")] +self_modulate = Color(0.830335, 0.830335, 0.830335, 1) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +image_file = "uid://c6etralq2tvxg" + +[node name="label7" type="Button" parent="приём"] +layout_mode = 2 +size_flags_horizontal = 5 +size_flags_vertical = 7 text = "Изделие 8" +metadata/unit_name = &"Изделие 8" -[node name="panel7" parent="приём" instance=ExtResource("3_b5v2s")] +[node name="sub7" type="GridContainer" parent="приём"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="передача" type="GridContainer" parent="."] +[node name="panel_rx" parent="приём/sub7" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +image_file = "uid://c73tjrn8gr00o" + +[node name="panel_tx" parent="приём/sub7" instance=ExtResource("3_b5v2s")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +image_file = "uid://c6etralq2tvxg" + +[node name="матрица" type="GridContainer" parent="."] layout_mode = 0 -offset_left = 32.0 -offset_top = 534.0 -offset_right = 1635.0 -offset_bottom = 766.0 -scale = Vector2(0.95, 0.95) -columns = 2 +offset_left = 1210.0 +offset_top = 785.0 +offset_right = 1570.0 +offset_bottom = 1145.0 +columns = 7 -[node name="label0" type="Label" parent="передача"] +[node name="УгловойКвадрат2" type="TextureRect" parent="матрица"] layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 6 -text = "ОР-63" +texture = ExtResource("13_5ifkb") -[node name="panel0" parent="передача" instance=ExtResource("3_b5v2s")] +[node name="КвадратМарс454" type="TextureRect" parent="матрица"] layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 +texture = ExtResource("17_p41nv") -[node name="label1" type="Label" parent="передача"] +[node name="КвадратМарсОр-63" type="TextureRect" parent="матрица"] layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 6 -text = "454" +texture = ExtResource("18_5ifkb") -[node name="panel1" parent="передача" instance=ExtResource("3_b5v2s")] +[node name="КвадратМарсРлс1" type="TextureRect" parent="матрица"] layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 +texture = ExtResource("19_vyjnq") -[node name="label2" type="Label" parent="передача"] +[node name="КвадратМарсРлс2" type="TextureRect" parent="матрица"] layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 6 -text = "ГО" +texture = ExtResource("20_68srw") -[node name="panel2" parent="передача" instance=ExtResource("3_b5v2s")] +[node name="КвадратМарсГо" type="TextureRect" parent="матрица"] layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 +texture = ExtResource("21_v6otu") -[node name="label3" type="Label" parent="передача"] +[node name="КвадратМарсСТрубкой" type="TextureRect" parent="матрица"] layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 6 -text = "РЛС1" +texture = ExtResource("22_ufy3d") -[node name="panel3" parent="передача" instance=ExtResource("3_b5v2s")] +[node name="КвадратСалатный454" type="TextureRect" parent="матрица"] layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 +texture = ExtResource("23_h11e0") -[node name="label4" type="Label" parent="передача"] +[node name="СкруглённыйКвадратБелый" type="TextureRect" parent="матрица"] layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 6 -text = "РЛС2" +texture = ExtResource("26_2spgl") -[node name="panel4" parent="передача" instance=ExtResource("3_b5v2s")] +[node name="СкруглённыйКвадратБелый2" type="TextureRect" parent="матрица"] layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 +texture = ExtResource("15_2spgl") -[node name="label5" type="Label" parent="передача"] +[node name="СкруглённыйКвадратБелый3" type="TextureRect" parent="матрица"] layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 6 -text = "ННВС" +texture = ExtResource("15_2spgl") -[node name="panel5" parent="передача" instance=ExtResource("3_b5v2s")] +[node name="СкруглённыйКвадратБелый4" type="TextureRect" parent="матрица"] layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 +texture = ExtResource("15_2spgl") -[node name="label6" type="Label" parent="передача"] +[node name="СкруглённыйКвадратБелый5" type="TextureRect" parent="матрица"] layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 6 -text = "Изделие 7" +texture = ExtResource("15_2spgl") -[node name="panel6" parent="передача" instance=ExtResource("3_b5v2s")] +[node name="СкруглённыйКвадратБелый6" type="TextureRect" parent="матрица"] layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 +texture = ExtResource("15_2spgl") -[node name="label7" type="Label" parent="передача"] +[node name="КвадратСалатныйГо" type="TextureRect" parent="матрица"] layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 6 -text = "Изделие 8" +texture = ExtResource("27_2ft3r") -[node name="panel7" parent="передача" instance=ExtResource("3_b5v2s")] +[node name="СкруглённыйКвадратБелый7" type="TextureRect" parent="матрица"] layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратБелый8" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("26_2spgl") + +[node name="СкруглённыйКвадратБелый9" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратБелый10" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратБелый11" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратБелый12" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="КвадратСалатныйРлс1" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("25_wmu4u") + +[node name="СкруглённыйКвадратБелый13" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратБелый14" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратБелый15" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("26_2spgl") + +[node name="СкруглённыйКвадратБелый16" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратБелый17" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратБелый18" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="КвадратСалатныйРлс2" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("26_w5eif") + +[node name="СкруглённыйКвадратБелый19" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратБелый20" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратБелый21" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратБелый22" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("26_2spgl") + +[node name="СкруглённыйКвадратБелый23" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратБелый24" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="КвадратСалатныйСТрубкой" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("28_rra4y") + +[node name="СкруглённыйКвадратБелый25" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратБелый26" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратБелый27" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратБелый28" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратБелый29" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("26_2spgl") + +[node name="СкруглённыйКвадратБелый30" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="КвадратСалатныйОр-63" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("24_2pcsf") + +[node name="СкруглённыйКвадратСерый2" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратСерый3" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратСерый4" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратСерый5" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадратСерый6" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="СкруглённыйКвадрат" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("26_2spgl") [node name="Op-63" type="TextureRect" parent="."] layout_mode = 0 -offset_left = 152.0 -offset_top = 84.0 -offset_right = 365.0 -offset_bottom = 376.0 +offset_left = 125.0 +offset_top = 79.0 +offset_right = 338.0 +offset_bottom = 371.0 scale = Vector2(0.312207, 0.312207) texture = ExtResource("3_8gk36") -[node name="СостояниеРэс44" type="Sprite2D" parent="Op-63"] -position = Vector2(277.772, 259.444) +[node name="СостояниеРэс44" type="TextureRect" parent="Op-63"] +layout_mode = 0 +offset_left = 237.022 +offset_top = 227.414 +offset_right = 290.022 +offset_bottom = 263.414 scale = Vector2(1.77945, 1.77945) texture = ExtResource("4_b5v2s") -[node name="СостояниеРэс24" type="Sprite2D" parent="Op-63"] -position = Vector2(277.772, 192.18) +[node name="СостояниеРэс24" type="TextureRect" parent="Op-63"] +layout_mode = 0 +offset_left = 241.114 +offset_top = 147.338 +offset_right = 294.114 +offset_bottom = 183.338 scale = Vector2(1.77945, 1.77945) texture = ExtResource("5_p41nv") -[node name="СостояниеРэс2" type="Sprite2D" parent="Op-63"] -visible = false -position = Vector2(281.865, 35.2331) +[node name="СостояниеРэс2" type="TextureRect" parent="Op-63"] +layout_mode = 0 +offset_left = 241.115 +offset_top = 3.203 +offset_right = 269.115 +offset_bottom = 23.203 scale = Vector2(3.20301, 3.20301) texture = ExtResource("6_m57px") [node name="454" type="TextureRect" parent="."] layout_mode = 0 -offset_left = 304.0 -offset_top = 84.0 -offset_right = 517.0 -offset_bottom = 376.0 +offset_left = 277.0 +offset_top = 79.0 +offset_right = 490.0 +offset_bottom = 371.0 scale = Vector2(0.312, 0.312) texture = ExtResource("4_nqi0i") -[node name="СостояниеРэс45" type="Sprite2D" parent="454"] -position = Vector2(277.956, 259.615) +[node name="СостояниеРэс45" type="TextureRect" parent="454"] +layout_mode = 0 +offset_left = 233.084 +offset_top = 208.333 +offset_right = 286.084 +offset_bottom = 244.333 scale = Vector2(1.78063, 1.78063) texture = ExtResource("4_b5v2s") -[node name="СостояниеРэс25" type="Sprite2D" parent="454"] -position = Vector2(277.956, 192.308) +[node name="СостояниеРэс25" type="TextureRect" parent="454"] +layout_mode = 0 +offset_left = 230.769 +offset_top = 128.205 +offset_right = 283.769 +offset_bottom = 164.205 scale = Vector2(1.78063, 1.78063) texture = ExtResource("5_p41nv") -[node name="СостояниеРэс3" type="Sprite2D" parent="454"] -position = Vector2(275.641, 38.4615) +[node name="СостояниеРэс3" type="TextureRect" parent="454"] +layout_mode = 0 +offset_left = 230.769 +offset_right = 258.769 +offset_bottom = 20.0 scale = Vector2(3.20513, 3.20513) texture = ExtResource("6_m57px") [node name="Го" type="TextureRect" parent="."] layout_mode = 0 -offset_left = 488.0 -offset_top = 85.0 -offset_right = 701.0 -offset_bottom = 377.0 +offset_left = 460.0 +offset_top = 80.0 +offset_right = 673.0 +offset_bottom = 372.0 scale = Vector2(0.312, 0.312) texture = ExtResource("5_e7tlv") -[node name="СостояниеРэс40" type="Sprite2D" parent="Го"] -position = Vector2(278.045, 253.205) +[node name="СостояниеРэс40" type="TextureRect" parent="Го"] +layout_mode = 0 +offset_left = 233.974 +offset_top = 230.769 +offset_right = 286.974 +offset_bottom = 266.769 scale = Vector2(1.78063, 1.78063) texture = ExtResource("4_b5v2s") -[node name="СостояниеРэс20" type="Sprite2D" parent="Го"] -position = Vector2(278.045, 185.897) +[node name="СостояниеРэс20" type="TextureRect" parent="Го"] +layout_mode = 0 +offset_left = 233.974 +offset_top = 163.461 +offset_right = 286.974 +offset_bottom = 199.461 scale = Vector2(1.78063, 1.78063) texture = ExtResource("5_p41nv") -[node name="СостояниеЭмсСлабыйСигнал" type="Sprite2D" parent="Го"] -position = Vector2(278.045, 118.59) +[node name="СостояниеЭмсСлабыйСигнал" type="TextureRect" parent="Го"] +layout_mode = 0 +offset_left = 233.974 +offset_top = 96.1539 +offset_right = 261.974 +offset_bottom = 116.154 scale = Vector2(3.37683, 3.20513) texture = ExtResource("9_5u4bk") [node name="Рлс1" type="TextureRect" parent="."] layout_mode = 0 -offset_left = 728.0 -offset_top = 83.0 -offset_right = 941.0 -offset_bottom = 375.0 +offset_left = 639.0 +offset_top = 78.0 +offset_right = 852.0 +offset_bottom = 370.0 scale = Vector2(0.312, 0.312) texture = ExtResource("6_y58bl") -[node name="СостояниеРэс41" type="Sprite2D" parent="Рлс1"] -position = Vector2(278.045, 259.615) +[node name="СостояниеРэс41" type="TextureRect" parent="Рлс1"] +layout_mode = 0 +offset_left = 233.974 +offset_top = 217.948 +offset_right = 286.974 +offset_bottom = 253.948 scale = Vector2(1.78063, 1.78063) texture = ExtResource("4_b5v2s") -[node name="СостояниеРэс21" type="Sprite2D" parent="Рлс1"] -position = Vector2(278.045, 192.308) +[node name="СостояниеРэс21" type="TextureRect" parent="Рлс1"] +layout_mode = 0 +offset_left = 233.974 +offset_top = 150.641 +offset_right = 286.974 +offset_bottom = 186.641 scale = Vector2(1.78063, 1.78063) texture = ExtResource("5_p41nv") -[node name="СостояниеЭмсСлабыйСигнал2" type="Sprite2D" parent="Рлс1"] -position = Vector2(278.045, 125) +[node name="СостояниеЭмсСлабыйСигнал2" type="TextureRect" parent="Рлс1"] +layout_mode = 0 +offset_left = 233.974 +offset_top = 83.3333 +offset_right = 261.974 +offset_bottom = 103.333 scale = Vector2(3.37683, 3.20513) texture = ExtResource("9_5u4bk") [node name="Рлс2" type="TextureRect" parent="."] layout_mode = 0 -offset_left = 920.0 -offset_top = 83.0 -offset_right = 1133.0 -offset_bottom = 375.0 +offset_left = 831.0 +offset_top = 78.0 +offset_right = 1044.0 +offset_bottom = 370.0 scale = Vector2(0.312, 0.312) texture = ExtResource("7_mxw8g") -[node name="СостояниеРэс42" type="Sprite2D" parent="Рлс2"] -position = Vector2(278.045, 259.615) +[node name="СостояниеРэс42" type="TextureRect" parent="Рлс2"] +layout_mode = 0 +offset_left = 227.564 +offset_top = 217.948 +offset_right = 280.564 +offset_bottom = 253.948 scale = Vector2(1.78063, 1.78063) texture = ExtResource("4_b5v2s") -[node name="СостояниеРэс22" type="Sprite2D" parent="Рлс2"] -position = Vector2(278.045, 192.308) +[node name="СостояниеРэс22" type="TextureRect" parent="Рлс2"] +layout_mode = 0 +offset_left = 227.564 +offset_top = 150.641 +offset_right = 280.564 +offset_bottom = 186.641 scale = Vector2(1.78063, 1.78063) texture = ExtResource("5_p41nv") -[node name="СостояниеЭмсСлабыйСигнал3" type="Sprite2D" parent="Рлс2"] -position = Vector2(278.045, 125) +[node name="СостояниеЭмсСлабыйСигнал3" type="TextureRect" parent="Рлс2"] +layout_mode = 0 +offset_left = 227.564 +offset_top = 83.3333 +offset_right = 255.564 +offset_bottom = 103.333 scale = Vector2(3.37683, 3.20513) texture = ExtResource("9_5u4bk") [node name="Ннвс" type="TextureRect" parent="."] layout_mode = 0 -offset_left = 1240.0 -offset_top = 88.0 -offset_right = 1453.0 -offset_bottom = 380.0 +offset_left = 1120.0 +offset_top = 82.0 +offset_right = 1333.0 +offset_bottom = 374.0 scale = Vector2(0.312, 0.312) texture = ExtResource("8_q16jd") -[node name="СостояниеРэс43" type="Sprite2D" parent="Ннвс"] -position = Vector2(277.956, 253.205) +[node name="СостояниеРэс43" type="TextureRect" parent="Ннвс"] +layout_mode = 0 +offset_left = 243.59 +offset_top = 214.744 +offset_right = 296.59 +offset_bottom = 250.744 scale = Vector2(1.78063, 1.78063) texture = ExtResource("4_b5v2s") -[node name="СостояниеРэс23" type="Sprite2D" parent="Ннвс"] -position = Vector2(277.956, 185.897) +[node name="СостояниеРэс23" type="TextureRect" parent="Ннвс"] +layout_mode = 0 +offset_left = 243.59 +offset_top = 147.436 +offset_right = 296.59 +offset_bottom = 183.436 scale = Vector2(1.78063, 1.78063) texture = ExtResource("5_p41nv") -[node name="УгловойКвадрат2" type="Sprite2D" parent="."] -position = Vector2(1250, 824) -texture = ExtResource("13_5ifkb") - -[node name="КвадратМарс454" type="Sprite2D" parent="УгловойКвадрат2"] -position = Vector2(0, 49) -texture = ExtResource("17_p41nv") - -[node name="КвадратМарсОр-63" type="Sprite2D" parent="УгловойКвадрат2"] -position = Vector2(0, 98) -texture = ExtResource("18_5ifkb") - -[node name="КвадратМарсРлс1" type="Sprite2D" parent="УгловойКвадрат2"] -position = Vector2(0, 147) -texture = ExtResource("19_vyjnq") - -[node name="КвадратМарсРлс2" type="Sprite2D" parent="УгловойКвадрат2"] -position = Vector2(0, 196) -texture = ExtResource("20_68srw") - -[node name="КвадратМарсГо" type="Sprite2D" parent="УгловойКвадрат2"] -position = Vector2(0, 245) -texture = ExtResource("21_v6otu") - -[node name="КвадратМарсСТрубкой" type="Sprite2D" parent="УгловойКвадрат2"] -position = Vector2(0, 294) -texture = ExtResource("22_ufy3d") - -[node name="КвадратСалатный454" type="Sprite2D" parent="УгловойКвадрат2"] -position = Vector2(49, 0) -texture = ExtResource("23_h11e0") - -[node name="КвадратСалатныйОр-63" type="Sprite2D" parent="УгловойКвадрат2"] -position = Vector2(98, 0) -texture = ExtResource("24_2pcsf") - -[node name="КвадратСалатныйРлс1" type="Sprite2D" parent="УгловойКвадрат2"] -position = Vector2(147, 0) -texture = ExtResource("25_wmu4u") - -[node name="КвадратСалатныйРлс2" type="Sprite2D" parent="УгловойКвадрат2"] -position = Vector2(196, 0) -texture = ExtResource("26_w5eif") - -[node name="КвадратСалатныйГо" type="Sprite2D" parent="УгловойКвадрат2"] -position = Vector2(245, 0) -texture = ExtResource("27_2ft3r") - -[node name="КвадратСалатныйСТрубкой" type="Sprite2D" parent="УгловойКвадрат2"] -position = Vector2(294, 0) -texture = ExtResource("28_rra4y") - -[node name="СкруглённыйКвадрат" type="Sprite2D" parent="."] -position = Vector2(1299, 873) -texture = ExtResource("26_2spgl") - -[node name="СкруглённыйКвадратБелый" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(0, 49) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый2" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(98, 0) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый3" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(49, 0) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый4" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(0, 98) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый5" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(49, 98) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый6" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(98, 49) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый7" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(147, 0) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый8" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(196, 0) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый9" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(245, 0) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый10" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(147, 49) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый11" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(196, 49) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый12" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(245, 49) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый13" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(147, 98) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый14" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(196, 98) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый15" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(245, 98) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый16" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(245, 147) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый17" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(0, 147) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый18" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(49, 147) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый19" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(98, 147) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый20" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(196, 147) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый21" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(0, 196) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый22" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(49, 196) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый23" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(98, 196) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый24" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(147, 196) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый25" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(0, 245) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый26" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(49, 245) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый27" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(98, 245) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый28" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(147, 245) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый29" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(196, 245) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый30" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(245, 196) -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратСерый2" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(49, 49) -texture = ExtResource("26_2spgl") - -[node name="СкруглённыйКвадратСерый3" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(98, 98) -texture = ExtResource("26_2spgl") - -[node name="СкруглённыйКвадратСерый4" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(147, 147) -texture = ExtResource("26_2spgl") - -[node name="СкруглённыйКвадратСерый5" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(245, 245) -texture = ExtResource("26_2spgl") - -[node name="СкруглённыйКвадратСерый6" type="Sprite2D" parent="СкруглённыйКвадрат"] -position = Vector2(196, 196) -texture = ExtResource("26_2spgl") - -[node name="СкруглённыйПрямоугСалатный" type="Sprite2D" parent="."] -position = Vector2(116, 1288) -scale = Vector2(1.74359, 1.16667) -texture = ExtResource("29_5u4bk") - -[node name="СкруглённыйПрямоугСалатный12" type="Sprite2D" parent="."] -position = Vector2(235, 1288) -scale = Vector2(1.33333, 1.16667) -texture = ExtResource("29_5u4bk") - -[node name="СкруглённыйПрямоугСалатный4" type="Sprite2D" parent="СкруглённыйПрямоугСалатный12"] -position = Vector2(582, 0) -texture = ExtResource("29_5u4bk") - -[node name="СкруглённыйПрямоугСалатный5" type="Sprite2D" parent="СкруглённыйПрямоугСалатный12"] -position = Vector2(696, 0) -texture = ExtResource("29_5u4bk") - -[node name="СкруглённыйПрямоугСалатный6" type="Sprite2D" parent="СкруглённыйПрямоугСалатный12"] -position = Vector2(468, 0) -texture = ExtResource("29_5u4bk") - -[node name="СкруглённыйПрямоугСалатный7" type="Sprite2D" parent="СкруглённыйПрямоугСалатный12"] -position = Vector2(390, 0) -texture = ExtResource("29_5u4bk") - -[node name="СкруглённыйПрямоугСалатный8" type="Sprite2D" parent="СкруглённыйПрямоугСалатный12"] -position = Vector2(312, 0) -texture = ExtResource("29_5u4bk") - -[node name="СкруглённыйПрямоугСалатный9" type="Sprite2D" parent="СкруглённыйПрямоугСалатный12"] -position = Vector2(234, 0) -texture = ExtResource("29_5u4bk") - -[node name="СкруглённыйПрямоугСалатный10" type="Sprite2D" parent="СкруглённыйПрямоугСалатный12"] -position = Vector2(156, 0) -texture = ExtResource("29_5u4bk") - -[node name="СкруглённыйПрямоугСалатный11" type="Sprite2D" parent="СкруглённыйПрямоугСалатный12"] -position = Vector2(78, 0) -texture = ExtResource("29_5u4bk") - -[node name="Приём" type="Sprite2D" parent="СкруглённыйПрямоугСалатный12"] -position = Vector2(639, 0) -scale = Vector2(0.75, 1) -texture = ExtResource("29_vyjnq") - -[node name="Излучение" type="Sprite2D" parent="СкруглённыйПрямоугСалатный12"] -position = Vector2(525, 0) -scale = Vector2(0.75, 1) -texture = ExtResource("30_68srw") - -[node name="Label2" type="Label" parent="СкруглённыйПрямоугСалатный12"] -offset_left = -29.25 -offset_top = -10.2857 -offset_right = 30.75 -offset_bottom = 8.71429 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Изделие" -metadata/_edit_use_anchors_ = true - -[node name="Label3" type="Label" parent="СкруглённыйПрямоугСалатный12"] -offset_left = 55.0 -offset_top = -10.0 -offset_right = 102.0 -offset_bottom = 9.0 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Режим" -metadata/_edit_use_anchors_ = true - -[node name="Label4" type="Label" parent="СкруглённыйПрямоугСалатный12"] -offset_left = 131.25 -offset_top = -10.2857 -offset_right = 180.25 -offset_bottom = 8.71429 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Азимут" -metadata/_edit_use_anchors_ = true - -[node name="Label5" type="Label" parent="СкруглённыйПрямоугСалатный12"] -offset_left = 549.0 -offset_top = -20.5714 -offset_right = 615.0 -offset_bottom = 20.4286 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Запрет -передачи" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="Label6" type="Label" parent="СкруглённыйПрямоугСалатный12"] -offset_left = 438.75 -offset_top = -19.7144 -offset_right = 496.75 -offset_bottom = 21.2856 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Верхняя -частота" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="Label7" type="Label" parent="СкруглённыйПрямоугСалатный12"] -offset_left = 363.0 -offset_top = -19.7143 -offset_right = 417.0 -offset_bottom = 21.2857 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Нижняя -частота" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="Label8" type="Label" parent="СкруглённыйПрямоугСалатный12"] -offset_left = 284.25 -offset_top = -10.2857 -offset_right = 340.25 -offset_bottom = 8.71429 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Кластер" -metadata/_edit_use_anchors_ = true - -[node name="Label9" type="Label" parent="СкруглённыйПрямоугСалатный12"] -offset_left = 197.25 -offset_top = -20.5714 -offset_right = 271.25 -offset_bottom = 20.4286 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Угол -места" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="Label" type="Label" parent="СкруглённыйПрямоугСалатный12"] -offset_left = -133.5 -offset_top = -22.2857 -offset_right = -44.5001 -offset_bottom = 18.7143 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Источник -информации" -horizontal_alignment = 1 -vertical_alignment = 3 -metadata/_edit_use_anchors_ = true - -[node name="Label10" type="Label" parent="СкруглённыйПрямоугСалатный12"] -offset_left = 669.0 -offset_top = -20.5714 -offset_right = 723.0 -offset_bottom = 20.4286 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Запрет -приёма" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="СкруглённыйПрямоугольникБелый" type="Sprite2D" parent="."] -position = Vector2(117, 1331) -scale = Vector2(1.41304, 1) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый2" type="Sprite2D" parent="СкруглённыйПрямоугольникБелый"] -position = Vector2(0, 29) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый3" type="Sprite2D" parent="СкруглённыйПрямоугольникБелый"] -position = Vector2(0, 58) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый4" type="Sprite2D" parent="СкруглённыйПрямоугольникБелый"] -position = Vector2(0, 87) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый5" type="Sprite2D" parent="СкруглённыйПрямоугольникБелый"] -position = Vector2(0, 116) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый6" type="Sprite2D" parent="СкруглённыйПрямоугольникБелый"] -position = Vector2(0, 145) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый7" type="Sprite2D" parent="СкруглённыйПрямоугольникБелый"] -position = Vector2(0, 174) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый8" type="Sprite2D" parent="СкруглённыйПрямоугольникБелый"] -position = Vector2(0, 203) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый9" type="Sprite2D" parent="СкруглённыйПрямоугольникБелый"] -position = Vector2(0, 232) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый10" type="Sprite2D" parent="СкруглённыйПрямоугольникБелый"] -position = Vector2(0, 261) -texture = ExtResource("31_b5v2s") - -[node name="КнопкаПодтверждения01" type="Sprite2D" parent="."] -position = Vector2(1011.25, 1331.25) -scale = Vector2(1.37999, 1.28261) -texture = ExtResource("32_p41nv") - -[node name="СкруглённыйПрямоугольникБелый11" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-562.5, -0.194946) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый12" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-562.5, 22.4152) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый13" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-562.5, 45.0254) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый14" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-562.5, 67.6355) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый15" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-562.5, 90.2457) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый16" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-562.5, 112.856) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый17" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-562.5, 135.466) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый18" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-562.5, 158.076) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый19" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-562.5, 180.686) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый20" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-562.5, 203.296) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый21" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-487.138, -0.194946) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый22" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-487.138, 22.4152) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый23" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-487.138, 45.0254) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый24" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-487.138, 67.6355) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый25" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-487.138, 90.2457) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый26" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-487.138, 112.856) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый27" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-487.138, 135.466) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый28" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-487.138, 158.076) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый29" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-487.138, 180.686) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый30" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-487.138, 203.296) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый31" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-411.775, -0.194946) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый32" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-411.775, 22.4152) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый33" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-411.775, 45.0254) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый34" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-411.775, 67.6355) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый35" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-411.775, 90.2457) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый36" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-411.775, 112.856) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый37" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-411.775, 135.466) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый38" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-411.775, 158.076) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый39" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-411.775, 180.686) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый40" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-411.775, 203.296) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый41" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-336.413, -0.194946) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый42" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-336.413, 22.4152) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый43" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-336.413, 45.0254) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый44" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-336.413, 67.6355) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый45" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-336.413, 90.2457) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый46" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-336.413, 112.856) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый47" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-336.413, 135.466) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый48" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-336.413, 158.076) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый49" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-336.413, 180.686) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый50" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-336.413, 203.296) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый51" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-261.051, -0.194946) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый52" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-261.051, 22.4152) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый53" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-261.051, 45.0254) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый54" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-261.051, 67.6355) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый55" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-261.051, 90.2457) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый56" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-261.051, 112.856) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый57" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-261.051, 135.466) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый58" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-261.051, 158.076) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый59" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-261.051, 180.686) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый60" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-261.051, 203.296) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый61" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-185.689, -0.194946) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый62" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-185.689, 22.4152) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый63" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-185.689, 45.0254) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый64" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-185.689, 67.6355) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый65" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-185.689, 90.2457) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый66" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-185.689, 112.856) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый67" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-185.689, 135.466) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый68" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-185.689, 158.076) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый69" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-185.689, 180.686) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый70" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-185.689, 203.296) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый71" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-110.326, -0.194946) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый72" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-110.326, 22.4152) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый73" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-110.326, 45.0254) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый74" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-110.326, 67.6355) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый75" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-110.326, 90.2457) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый76" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-110.326, 112.856) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый77" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-110.326, 135.466) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый78" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-110.326, 158.076) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый79" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-110.326, 180.686) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый80" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-110.326, 203.296) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый81" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 22.4152) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый82" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 45.0254) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый83" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 67.6355) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый84" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 90.2457) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый85" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 112.856) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый86" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 135.466) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый87" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 158.076) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый88" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 180.686) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый89" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 203.296) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="КнопкаПодтверждения02" type="Sprite2D" parent="КнопкаПодтверждения01"] -texture = ExtResource("32_p41nv") - -[node name="СкруглённыйПрямоугольникБелый90" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 22.4152) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый91" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 45.0254) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый92" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 67.6355) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый93" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 90.2457) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый94" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 112.856) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый95" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 135.466) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый96" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 158.076) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый97" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 180.686) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый98" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-0.181946, 203.296) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="КнопкаПодтверждения03" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(110.144, 0) -texture = ExtResource("32_p41nv") - -[node name="СкруглённыйПрямоугольникБелый99" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(109.963, 22.4152) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый100" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(109.963, 45.0254) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый101" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(109.963, 67.6355) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый102" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(109.963, 90.2457) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый103" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(109.963, 112.856) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый104" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(109.963, 135.466) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый105" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(109.963, 158.076) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый106" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(109.963, 180.686) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый107" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(109.963, 203.296) -scale = Vector2(0.819155, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый108" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-55.2537, -0.194946) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый109" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-55.2537, 22.4152) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый110" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-55.2537, 45.0254) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый111" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-55.2537, 67.6355) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый112" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-55.2537, 90.2457) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый113" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-55.2537, 112.856) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый114" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-55.2537, 135.466) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый115" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-55.2537, 158.076) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый116" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-55.2537, 180.686) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый117" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(-55.2537, 203.296) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый118" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(54.8907, -0.194946) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый119" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(54.8907, 22.4152) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый120" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(54.8907, 45.0254) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый121" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(54.8907, 67.6355) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый122" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(54.8907, 90.2457) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый123" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(54.8907, 112.856) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый124" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(54.8907, 135.466) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый125" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(54.8907, 158.076) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="СкруглённыйПрямоугольникБелый126" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(54.8907, 180.686) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("33_5ifkb") - -[node name="СкруглённыйПрямоугольникБелый127" type="Sprite2D" parent="КнопкаПодтверждения01"] -position = Vector2(54.8907, 203.296) -scale = Vector2(0.378072, 0.77966) -texture = ExtResource("31_b5v2s") - -[node name="label_rx" type="Label" parent="."] -layout_mode = 0 -offset_left = 32.0 -offset_top = 240.0 -offset_right = 1555.0 -offset_bottom = 259.0 -text = "Приём" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="label_tx" type="Label" parent="."] -layout_mode = 0 -offset_left = 33.0 -offset_top = 510.0 -offset_right = 1555.0 -offset_bottom = 529.0 -text = "Передача" -horizontal_alignment = 1 -vertical_alignment = 1 - [node name="label8" type="Label" parent="."] layout_mode = 0 -offset_left = 161.0 -offset_top = 60.0 -offset_right = 203.0 -offset_bottom = 79.0 +offset_left = 134.0 +offset_top = 55.0 +offset_right = 176.0 +offset_bottom = 74.0 size_flags_horizontal = 4 size_flags_vertical = 6 text = "ОР-63" [node name="label9" type="Label" parent="."] layout_mode = 2 -offset_left = 510.0 -offset_top = 64.0 -offset_right = 527.0 -offset_bottom = 83.0 +offset_left = 482.0 +offset_top = 59.0 +offset_right = 499.0 +offset_bottom = 78.0 size_flags_horizontal = 4 size_flags_vertical = 6 text = "ГО" [node name="label10" type="Label" parent="."] layout_mode = 2 -offset_left = 320.0 -offset_top = 60.0 -offset_right = 349.0 -offset_bottom = 79.0 +offset_left = 293.0 +offset_top = 55.0 +offset_right = 322.0 +offset_bottom = 74.0 size_flags_horizontal = 4 size_flags_vertical = 6 text = "454" [node name="label11" type="Label" parent="."] layout_mode = 2 -offset_left = 940.0 -offset_top = 60.0 -offset_right = 976.0 -offset_bottom = 79.0 +offset_left = 851.0 +offset_top = 55.0 +offset_right = 887.0 +offset_bottom = 74.0 size_flags_horizontal = 4 size_flags_vertical = 6 text = "РЛС2" [node name="label12" type="Label" parent="."] layout_mode = 2 -offset_left = 745.0 -offset_top = 60.0 -offset_right = 781.0 -offset_bottom = 79.0 +offset_left = 656.0 +offset_top = 55.0 +offset_right = 692.0 +offset_bottom = 74.0 size_flags_horizontal = 4 size_flags_vertical = 6 text = "РЛС1" [node name="label13" type="Label" parent="."] layout_mode = 2 -offset_left = 1250.0 -offset_top = 65.0 -offset_right = 1290.0 -offset_bottom = 84.0 +offset_left = 1130.0 +offset_top = 59.0 +offset_right = 1170.0 +offset_bottom = 78.0 size_flags_horizontal = 4 size_flags_vertical = 6 text = "ННВС" -[node name="GridContainer" type="GridContainer" parent="."] +[node name="таблица" type="GridContainer" parent="."] layout_mode = 0 -offset_left = 52.0 -offset_top = 800.0 +offset_left = 35.0 +offset_top = 785.0 offset_right = 1199.0 -offset_bottom = 1140.0 -columns = 7 +offset_bottom = 1145.0 +columns = 8 -[node name="header0" parent="GridContainer" instance=ExtResource("35_p41nv")] -layout_mode = 2 -text = "Изделие" - -[node name="header1" parent="GridContainer" instance=ExtResource("35_p41nv")] +[node name="header0" parent="таблица" instance=ExtResource("35_p41nv")] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 7 text = "Кластер" -[node name="header2" parent="GridContainer" instance=ExtResource("35_p41nv")] +[node name="header7" parent="таблица" instance=ExtResource("35_p41nv")] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 7 +text = "Состояние" + +[node name="header1" parent="таблица" instance=ExtResource("35_p41nv")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 7 +text = "Время" + +[node name="header2" parent="таблица" instance=ExtResource("35_p41nv")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 7 text = "Азимут" -[node name="header3" parent="GridContainer" instance=ExtResource("35_p41nv")] +[node name="header3" parent="таблица" instance=ExtResource("35_p41nv")] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 7 text = "Угол места" -[node name="header4" parent="GridContainer" instance=ExtResource("35_p41nv")] +[node name="header4" parent="таблица" instance=ExtResource("35_p41nv")] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 7 text = "Диапазон" -[node name="header5" parent="GridContainer" instance=ExtResource("35_p41nv")] +[node name="header5" parent="таблица" instance=ExtResource("36_68srw")] layout_mode = 2 -text = "Передача" +size_flags_vertical = 7 +header_text = "Передача" +image_file = "uid://c73tjrn8gr00o" -[node name="header6" parent="GridContainer" instance=ExtResource("35_p41nv")] +[node name="header6" parent="таблица" instance=ExtResource("36_68srw")] layout_mode = 2 -text = "Приём" +size_flags_vertical = 7 +header_text = "Приём" +image_file = "uid://c6etralq2tvxg" + +[node name="cell_0_1" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "1" +horizontal_alignment = 1 +vertical_alignment = 1 +metadata/unit_name = &"ОР-63" + +[node name="cell_1_1" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "Активен" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_2_1" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "00:02" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_3_1" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "0-360" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_4_1" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "19" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_5_1" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2300-2705" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_6_1" parent="таблица" instance=ExtResource("37_68srw")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_7_1" parent="таблица" instance=ExtResource("37_68srw")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_0_2" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2" +horizontal_alignment = 1 +vertical_alignment = 1 +metadata/unit_name = &"484" + +[node name="cell_1_2" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "Активен" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_2_2" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "00:02" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_3_2" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "0-360" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_4_2" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "19" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_5_2" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2300-2705" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_6_2" parent="таблица" instance=ExtResource("37_68srw")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_7_2" parent="таблица" instance=ExtResource("37_68srw")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_0_3" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "3" +horizontal_alignment = 1 +vertical_alignment = 1 +metadata/unit_name = &"ГО" + +[node name="cell_1_3" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "Удалён" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_2_3" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "00:02" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_3_3" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "0-360" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_4_3" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "19" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_5_3" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2300-2705" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_6_3" parent="таблица" instance=ExtResource("37_68srw")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_7_3" parent="таблица" instance=ExtResource("37_68srw")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_0_4" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "4" +horizontal_alignment = 1 +vertical_alignment = 1 +metadata/unit_name = &"РЛС1" + +[node name="cell_1_4" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "Удалён" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_2_4" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "00:02" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_3_4" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "20-60" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_4_4" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "19" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_5_4" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2300-2705" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_6_4" parent="таблица" instance=ExtResource("37_68srw")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_7_4" parent="таблица" instance=ExtResource("37_68srw")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_0_5" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "5" +horizontal_alignment = 1 +vertical_alignment = 1 +metadata/unit_name = &"РЛС2" + +[node name="cell_1_5" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "Удалён" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_2_5" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "00:02" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_3_5" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "0-360" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_4_5" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "19" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_5_5" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2300-2705" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_6_5" parent="таблица" instance=ExtResource("37_68srw")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_7_5" parent="таблица" instance=ExtResource("37_68srw")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_0_6" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "6" +horizontal_alignment = 1 +vertical_alignment = 1 +metadata/unit_name = &"ННВС" + +[node name="cell_1_6" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "Активен" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_2_6" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "00:02" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_3_6" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "0-360" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_4_6" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "19" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_5_6" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2300-2705" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_6_6" parent="таблица" instance=ExtResource("37_68srw")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_7_6" parent="таблица" instance=ExtResource("37_68srw")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_0_7" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "7" +horizontal_alignment = 1 +vertical_alignment = 1 +metadata/unit_name = &"Изделие 7" + +[node name="cell_1_7" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "Активен" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_2_7" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "00:02" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_3_7" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "0-360" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_4_7" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "19" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_5_7" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2300-2705" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_6_7" parent="таблица" instance=ExtResource("37_68srw")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_7_7" parent="таблица" instance=ExtResource("37_68srw")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_0_8" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "8" +horizontal_alignment = 1 +vertical_alignment = 1 +metadata/unit_name = &"Изделие 8" + +[node name="cell_1_8" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "Удалён" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_2_8" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "00:02" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_3_8" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "0-360" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_4_8" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "19" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_5_8" parent="таблица" instance=ExtResource("36_vyjnq")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2300-2705" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_6_8" parent="таблица" instance=ExtResource("37_68srw")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_7_8" parent="таблица" instance=ExtResource("37_68srw")] +layout_mode = 2 +size_flags_vertical = 7 diff --git a/scripts/tools.gd b/scripts/tools.gd index f7b5caa2..495056b9 100644 --- a/scripts/tools.gd +++ b/scripts/tools.gd @@ -156,7 +156,8 @@ func map_dec_to_rad(pos0: Vector2, pos: Vector2) -> Vector2: ## [param p] - Координаты вершин полигона.[br] func is_point_in_polygon(pos: Vector2, p: PackedVector2Array) -> bool: var sz: = p.size() - assert(sz) + if not sz: + return false var j: int = sz - 1 var odd_nodes: int = 0 for i in sz: diff --git a/table/header-image.tscn b/table/header-image.tscn index 9fd8876a..f7e5d33f 100644 --- a/table/header-image.tscn +++ b/table/header-image.tscn @@ -1,14 +1,47 @@ -[gd_scene load_steps=2 format=3 uid="uid://cymcld4mjmlhj"] +[gd_scene load_steps=3 format=3 uid="uid://cymcld4mjmlhj"] + +[ext_resource type="Texture2D" uid="uid://c73tjrn8gr00o" path="res://data/Передатчик.png" id="1_nbmfn"] [sub_resource type="GDScript" id="GDScript_63652"] script/source = "extends GridContainer + +@export var header_text: String: + set(val): + header_text = val + if is_inside_tree(): + $label.text = val + get: + return header_text + + +@export_file var image_file: String: + set(val): + image_file = val + if is_inside_tree(): + $image.texture = load(val) + get: + return image_file + + +func _enter_tree() -> void: + $image.texture = load(image_file) + $label.text = header_text " [node name="header-image" type="GridContainer"] -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 +offset_right = 91.0 +offset_bottom = 19.0 columns = 2 script = SubResource("GDScript_63652") + +[node name="image" type="TextureRect" parent="."] +layout_mode = 2 +size_flags_vertical = 3 +texture = ExtResource("1_nbmfn") +expand_mode = 3 + +[node name="label" type="Label" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +horizontal_alignment = 1 +vertical_alignment = 1 From de92de2994165e3ea4b68fc9eebea94e40e6e6a8 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 16 Mar 2026 16:24:07 +0300 Subject: [PATCH 10/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=B2=D0=B0=D0=B6=D0=BD=D0=BE=D0=B5=20?= =?UTF-8?q?=D1=83=D1=82=D0=BE=D1=87=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1ae13f24..471b59ca 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,12 @@ - В среде **Windows** запуск скрипта [`git-hooks-config.sh`](git-hooks-config.sh) производить из оболочки `git bash` - При необходимости обновить [`settings.json`](settings.json) - Использовать выражения вида `ProjectSettings.set_setting('application/config/%s' % key_name` -и `ProjectSettings.get_setting('application/config/%s % key_name)` для доступа к настройкам. + и `ProjectSettings.get_setting('application/config/%s % key_name)` для доступа к настройкам. - `key_name` брать из таблицы `res://scenes/настройки/настройки.gd/SETTING_TABLE` - Следовать [общим правилам](http://gitea.srez.local:3000/sasha80/dev-manual). +- **Windows**: убедиться, что исполняемый файл не заблокирован в брандмауэре. + Обычно блокировка происходит автоматически, а отмена блокировки требует + вмешательства пользователя. # Ссылки на составные части From e48e8767e51e7fd3684f5dec34b10aea4b8a0aa1 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 17 Mar 2026 09:08:21 +0300 Subject: [PATCH 11/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D0=AD=D0=9C?= =?UTF-8?q?=D0=A1-=D0=A2=D0=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс2/эмс2.tscn | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/scenes/эмс2/эмс2.tscn b/scenes/эмс2/эмс2.tscn index 5d718a22..a262c3be 100644 --- a/scenes/эмс2/эмс2.tscn +++ b/scenes/эмс2/эмс2.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=33 format=3 uid="uid://musb21x2u0xs"] +[gd_scene load_steps=32 format=3 uid="uid://musb21x2u0xs"] [ext_resource type="Texture2D" uid="uid://hkcvl2waf63s" path="res://data/вид сверху.png" id="1_b7vcf"] [ext_resource type="Script" uid="uid://bvlqgv7aapebl" path="res://scenes/эмс2/эмс-тг.gd" id="1_l3ueu"] @@ -24,7 +24,6 @@ [ext_resource type="Texture2D" uid="uid://b1kuhj03yigih" path="res://data/Квадрат салатный 454.png" id="23_h11e0"] [ext_resource type="Texture2D" uid="uid://d3v1r4r62na8" path="res://data/Квадрат салатный ОР-63.png" id="24_2pcsf"] [ext_resource type="Texture2D" uid="uid://ddm55bo28sxcs" path="res://data/Квадрат салатный РЛС1.png" id="25_wmu4u"] -[ext_resource type="Texture2D" uid="uid://fuhhvsa5um4m" path="res://data/Скруглённый квадрат серый.png" id="26_2spgl"] [ext_resource type="Texture2D" uid="uid://dneqjcul4ipub" path="res://data/Квадрат салатный РЛС2.png" id="26_w5eif"] [ext_resource type="Texture2D" uid="uid://cyb60nh23ys6k" path="res://data/Квадрат салатный ГО.png" id="27_2ft3r"] [ext_resource type="Texture2D" uid="uid://cw8sd7v5f31ww" path="res://data/Квадрат салатный с трубкой.png" id="28_rra4y"] @@ -300,7 +299,7 @@ texture = ExtResource("23_h11e0") [node name="СкруглённыйКвадратБелый" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("26_2spgl") +texture = ExtResource("15_2spgl") [node name="СкруглённыйКвадратБелый2" type="TextureRect" parent="матрица"] layout_mode = 2 @@ -332,7 +331,7 @@ texture = ExtResource("15_2spgl") [node name="СкруглённыйКвадратБелый8" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("26_2spgl") +texture = ExtResource("15_2spgl") [node name="СкруглённыйКвадратБелый9" type="TextureRect" parent="матрица"] layout_mode = 2 @@ -364,7 +363,7 @@ texture = ExtResource("15_2spgl") [node name="СкруглённыйКвадратБелый15" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("26_2spgl") +texture = ExtResource("15_2spgl") [node name="СкруглённыйКвадратБелый16" type="TextureRect" parent="матрица"] layout_mode = 2 @@ -396,7 +395,7 @@ texture = ExtResource("15_2spgl") [node name="СкруглённыйКвадратБелый22" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("26_2spgl") +texture = ExtResource("15_2spgl") [node name="СкруглённыйКвадратБелый23" type="TextureRect" parent="матрица"] layout_mode = 2 @@ -428,7 +427,7 @@ texture = ExtResource("15_2spgl") [node name="СкруглённыйКвадратБелый29" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("26_2spgl") +texture = ExtResource("15_2spgl") [node name="СкруглённыйКвадратБелый30" type="TextureRect" parent="матрица"] layout_mode = 2 @@ -460,7 +459,7 @@ texture = ExtResource("15_2spgl") [node name="СкруглённыйКвадрат" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("26_2spgl") +texture = ExtResource("15_2spgl") [node name="Op-63" type="TextureRect" parent="."] layout_mode = 0 From c5bae21436c57e0363b28db99232c12d00c9fdce Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 17 Mar 2026 12:44:27 +0300 Subject: [PATCH 12/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D0=AD=D0=9C?= =?UTF-8?q?=D0=A1-=D0=A2=D0=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/Окно частот0.png | Bin 18616 -> 0 bytes data/Окно.png | Bin 16534 -> 0 bytes data/Передатчик.png | Bin 5064 -> 2032 bytes data/Скруглённый квадрат белый.png.import | 34 -- data/Скруглённый квадрат серый.png | Bin 2288 -> 0 bytes data/Скруглённый квадрат серый.png.import | 34 -- data/Скруглённый прямоуг салатный.png | Bin 3199 -> 0 bytes data/Скруглённый прямоуг салатный.png.import | 34 -- data/Скруглённый прямоугольник белый.png | Bin 2642 -> 0 bytes ...Скруглённый прямоугольник белый.png.import | 34 -- data/Скруглённый прямоугольник серый.png | Bin 2287 -> 0 bytes ...Скруглённый прямоугольник серый.png.import | 34 -- data/Угловой квадрат3.png | Bin 6300 -> 3429 bytes data/матрица-конфликт.png | Bin 0 -> 683 bytes ...о.png.import => матрица-конфликт.png.import} | 8 +- ...лённый квадрат белый.png => матрица-чисто.png} | Bin ...астот0.png.import => матрица-чисто.png.import} | 8 +- scenes/эмс2/эмс-тг.gd | 8 +- scenes/эмс2/эмс2.tscn | 402 +++++++++--------- scripts/settings.gd | 11 +- 20 files changed, 226 insertions(+), 381 deletions(-) delete mode 100644 data/Окно частот0.png delete mode 100644 data/Окно.png delete mode 100644 data/Скруглённый квадрат белый.png.import delete mode 100644 data/Скруглённый квадрат серый.png delete mode 100644 data/Скруглённый квадрат серый.png.import delete mode 100644 data/Скруглённый прямоуг салатный.png delete mode 100644 data/Скруглённый прямоуг салатный.png.import delete mode 100644 data/Скруглённый прямоугольник белый.png delete mode 100644 data/Скруглённый прямоугольник белый.png.import delete mode 100644 data/Скруглённый прямоугольник серый.png delete mode 100644 data/Скруглённый прямоугольник серый.png.import create mode 100644 data/матрица-конфликт.png rename data/{Окно.png.import => матрица-конфликт.png.import} (63%) rename data/{Скруглённый квадрат белый.png => матрица-чисто.png} (100%) rename data/{Окно частот0.png.import => матрица-чисто.png.import} (65%) diff --git a/data/Окно частот0.png b/data/Окно частот0.png deleted file mode 100644 index 37c9874ac62aff1c6bc8dc889e4b8a235aa4dafc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18616 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 diff --git a/data/Окно.png b/data/Окно.png deleted file mode 100644 index 18d7d2800386695a8bbcb63f013bfb3659f59168..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16534 zcmeHucU+X&mTlQ8Mnv00P@r1`2@(VZBvhj!7Fj?L$r1`A6p|5&QfZ(O6eVXw1SBib zA|r~D6(mTMoO7m%s@Y$Gciz0Yf6RSv=J$K^<_c|FUsZkKoPG9Qd#!c+)Kui@_cQND zp-}Xg>sQrLC^~u+>KB8(ba2GCOHLJq+Tm?^<%$~S$`y7ydz`tYwHXR^?m7Os^z|yW zW8SJ7`RY7}oYn4qR*U8P>-fD8o)eXqEqU`Mj24>N5-?YS1_sW(J8_DvlX2;t_~gV7 zp1qII>{({0WJ#YSM_e&8wAG;`XFCz4;_gai= z_X|2dHX?s9xtciirb4*t+C^#kQ=BIhPxHA5^0M&EAG>$;hG^|cdw$-SLh0<%<+QSO|FBx4ct8Z<@R8dr6yQKWhRyx5&%>B|#xu*{(Ha`Z6 zGHcu`h7Sp@y;AfUy6(x7aBEj@(^&LEMaB8UdQPKlmp+Z}e3qnhz6Z6(x8jyxPP}l<`&{p|#&MVzx;u*US5Z{t=S68sFdW%ucU{K;h5FSI`EN(BIh!jS z+~bH*mfJJBpYFh}!#x#bb2!B0D0j>83eLvH%+?Wg#oo-=(aeDoEfL$L04F-B9czX~{AXwfU8yraA*&3kxhN7&KBTxQ4O{n@`Cwz}Z- z&wxVJOPxP|-tz9!y0?(k1)xq;Q3!$Y)WFDAMX|Q#oa_ ze1wfU&$gHwzd5zLu>6OTS7F(5=K2?3nGmzOFbu=ihyOs6zBk#ErVB?Cd|7M1CdyC7 z$E!1E=;U&W^?5j);JY=Kc4{b2+C9f%wDFX<-H*J3Z!P3%FD2;YU5pUz}Po$Dt4L5IIyLK(;n}XNw11E;sbaBe=?xb{k zH3sP=HCERj52fZRc4mJr7n72TQBMuIoG=%}N{wvt;B;S^s_{jWjsJFQ@znMBMPd`4 zze#FQX@nDFWo4CBG?At~{a|ILC%Uj?_&l6OR7501Ir^g6=EicWR=R*C+eri0eoOa# zXSeR@X<_NKjoap=VLS(yg4c0gEmI14J-c(qX$gCdhK7a|a^LrSD{Yze8ddX8Pfrt< z+jLu6TSNW)_MQ2KHb6R7y(MmLU0uCl9F__y8Cbhy78aJeCt|%3@@#k!ID<~HvrSs- z-J+tR96ZT6ar;}73v~jjLG?Cw@74}{^lw_@(&IakdvCDXV* zZp*8*`xLaw&&xBNANUwaifS+6JaB?f+$4UiqvO`*Y_u4zF<4b5QgY^9B850JGh_Wd z=cC!J!bXy#;?kN(bE~!#O+S=MUFgP48?7VK6(_|Y=TCyHLc6p+eIQUf3 zzV3Ws$=y#IKd9rMxymR5g{A$;#S0%N`7hq4g{yedNL;F__2NhaCg|bAhuyA&Pnb@h zRt^#o6H6&96cg)pHQ6i^>$ba6MjjSmfiw+&>Mh(?XYe|K=rf954bftwKPtVxm$*47 zB&pk$t&doD=B0X)ikv1dT(}VQ{P}Z^)Oc?@d(zEipJ@B`ia+S$R{Qz3mK3wl#fxDS z3MHJp#-z_25D;K$XE(PSJ!J?3?BnY@Ie9EYw~+tn(WA(OZOY6NsHDZvY>(k~TiW+4 zlv>)_!m{zxR>Z|dNyFwrtf{3SoH0GCh$meuvvy;7GWTw4nx0eZ&1Jbj?QDZsQLDCB zDJdzGh$k#!=96ui%hUN*?IRS@Y&K4tCv>W}wCgY0Y#LQZp$VR~!}c>}q?vBV7Ul1` z*rq&I^q_**-TbIfUTt#=i*u^zO-BfWIM0pogY@)f!?mFhjhG-+kAb7>4!iJ|}k~+R;>&YWhAAh_PWZD!bO&m{-Ztm)e-XyJxEp;SEu9%`J^MUP6 z=hkkTn3#-@k0Uc1^a>`_)m1!QJ6pxU!2!N|O){N_0W>W`qK*w(N*GufExmD#>{$=MR&!NI}zDAbP-(s~m? z#*74ySqDozJV`Npq;wXK<1bxm<})mlS{!X6RGMJ*Eaw_xmA2CLu=F+|wyWnQZsgw*o;suB(WnEoePmCa=d+ z-DK7(88|U8H^M?fH_DHFh1CoZf+r0X3GSeLitG~5S{@S$(Z(10m>aQZhs;H<~VEsKPEG*0tU1pgqGY`XIKHZrw za9@`|Aar(hO`d%ZsmZo@y1--By)V6Q6jnr2e!GEgU)gG}dy4h;YFqrKp_)`!SeTG| zz(A=bk`ZnMgA8E9BS=(dU^%55W?NcY^If@eWm)(LCnsl)ReKgUmb0W;3vbQ7lTG*q zE#tV3cXoCfv<)_WZhoQ311A)lY|n10e!`LqH*4KjR_aOOLa*02y12BTlb#RzJY{EWq`}k!H)$cszdjvJouGGiT0>Pfca?6{e(c_4M>y z+ZyrQ+bwTRKH0-43NO@zDkM#HyiF{VzH})H%82rM_b8gWuE`S`QfHP(yUYWfNl0m2 z{Hl4lzOs_R)3dH$C7%QaVm&;_A*`QMdkI0B>8*}VPQxo*xa@2jwM?zWVF7}~&Ye43 zdi!7`tE;QcyHA!TB@Lg=jG(2=ipXqk46El_|0xN3)7rbWq?PG9lR)XP(KvU0{}bmg zCGDA4h#CLV-5ql|;aPuwe@NZ1l9G~Xl@Gm!!k^=eY-~+|1o9x$>Ta~_oKc+n3{mgi z$KyH$){(PFkfKl%Q9-7rrW}2w-qq&b-nc8ihs{nxw_ho8zjBjV@)v;Rg4|d7Tf#^Vr6@4)|$MW|0Dtoh_iR zuTNa*w92*ZDbiV&Gc0kv*E|2zWoS8@fJcylp6B{7k-Sic7o(lO-rgZdDXx1h7fs6b zAP=%N>0o1*AG3aFB2X5Q0hjDsZ&WPO{K9K_=g#j0@+U&fDx@po#zZ=nj1u=GyE;#G zJm<}NH;~uFik$F)1{TIJ(%pU#s&kXC%u<4OiQsjW7|Xd-RXh)`R>tQT2?v$QKp1tG zvc*{JRpVzIPzvjc`!;9Dq;jhJQ#SNW@m5VZVWkkXzBoEs#YVB?FIyYXp8f*@c_DVz z}%rt3M=}Q`dM=0tSNv?w~g@>?}zQo0W2!K z*=`M1_G4cXP60?|bj|D!(RpJe8+6p_`vrGBkNJ<>$M%=6tR%_@n%mo7_!P)S__~^a z-1J<36<3=`#~b4-Ma9KQm+H<#Hc^$Dzna#XCTMXTY6>hSA0MATWvg!M>S|8^}Y)qd~GkOLr@c|Tki9I1-Yf>%MN zj*gm)B2$?-yjAZ~vRJHm%MTd)@V!hB#L3FhCHsUj#a;l?aCCIs>*ce&yll2Q(=$Fh zdyyHlbKieBAhKo}?N?XMBcN~Jr)sv@aFHpHvdPit8g7RzL`v2=2P$-Z; zm=L7xM4|q8vi;8Wmm;(SsJlPk`88?lENY3{?*yIOLP8Iix8Heo)pF}Q-+sQsp|F*E zUR>LLhvVl3MYrE!|9|LKFwGplsN8;MXMEANJ7Q(U+4##dSQGFI`0jw0PiWmRQhy-f zGb;JFGbfX7JA5|_XA)CVOx09?k_ahU(89GoMB!|YU8)v9a7Lh0cv(3cFc$ki!J5&Mw@j2+MA_ODU zxE!boORKAJ6Ur(o=8Z8Dk6swZ#>QIWa8Lxp1uZ%%D*m{C|2`6@2btAVHJf{SVxK-e zWNai8ur8Pq8jNKWZ+S3|gbB1>G23$y^Wy*4iTuxvsVE5yXQ53OlF%&c?MLGYo~#7& zyk`1Mh>wwx5hzmtefN3!h z+)lXKowpIay}e6IOOP~r?oVdAt@ZonTD9{V3uaO|+%k>xKIZr73;~B6Pf2V-dLqXpqTXjiNvIT%pRu(_ZGgKQ093&_iMP8|=zA7%3Jbn7~ z`wH6p@j|y9x4_i;(Tm$l%TfO<4loS=fjXrey!SPOPjWJXS5;K@d-)vm|A+uT z_0+vymQSMF+O!6JEQQS@o&ra4%wG;(06+oy408Cey@dDWN-O%2st5*$PRRPOx-JqZ zWR98`j$l~$in_Ydn&wDnF8~~wYX0rxbo5ATM$~Kk^5vPJ#Vz25pt%C9{byw!#Y^NL z!6_04LqyIOalKN*sumxhl?}SpvIPmk~%jed1z|hzvvgz;0Y~h z+rk2|!HZ0TKI7t$V}bz_jJnMbNB^WviQs`)^7`Dri94un&~TU;8T|n{Lz4&o!LAs_ zcZ809a&oe6rl+{2uTS70^F;}XNC}6Ly^nmH{yk`|`SIfgfNKCvE-o%eAZ?>$l{n)c zN;{KHAmNOUjoBq{VN1J5|AXP@KZ08RP0@%2#>9<0{|Qxh~XbtF2L_|0aGPgn7 z1!UdZw?a?>6q14}D`jQBya5;ip!WImBXAIa!Pl=h7LA#;&K*N)ij)-J!FpdIwvjw| z6~wWXA$Ya3>Y)p+7V&!&9EV@|ZrxRI9*7@?KV`1~4R_z&y``n)%t2=7$;`r$eqXl6 zEd6369|aHP`;6ZL9#bph*7Nha1xTe@SwT2QPn1#>G+ThP$E5eu5YRL3Xu^Jg60un2y1C-`T@`e02C6dQ|0cHi~zy&Z;P^- zcV?BY+%}=xI-w@daY(h2_m?bwwc74-{$4Uy6B8184#c;tV5SfZ;O@#iKz7-pN?jct z5r^kkz3+Ls(N{x){*mvaUGcB0L&Tg263LJNbwNN_LV_EHy1RQyd9MlGAp9VI2QUS& z1hAOD!;@B$5)-SC+-maa>Ar`Siz8k_UiaV!{@z)Auo}*eJ@jAGK{a%9z^FajMO)uM zD+HSYIQ?}9`ryczm}9iV6?~#%7*Ajs6d#?Ea#h=^{J9<79Dw_3`m21CgzBdI$_=-V z-_i)0>M0frlv=pnOCAwZG!0`0Szuwf&H)(qy|iBM$3gq0v9G6OJj9{%ZW3;i3ijH= zFaqto#?0b0jv$FJ#t^+qLFhFv^yiahbKZP<@6;aU*3S=qa#-zg!2*Y@lV|b#586$e zC(yH8j1g~P$54h1DQAJ=Lbzgs{GIogzRE8`e?6IZ$mZkY;|TlF^!nl44=;w1_Xh+t z8Mhx{+hsK(=Ox;D`Lr2h*LG;4kcpv-2h%mJP`j7~k z+|SU`-A&F}6$5%rJ=L-H>FVYzfdC{@=xWKRwD8ISG*I+=SY6pcwK49U^ATH9q1|xA zaI#+97@{2kUwQlXZTqisCx?NDv5j*Zi7cTkXE)7KW@h7>cQP?E*UnNYvsA79UQM1W zxy0#$E`&j!%r2*doSMxst6S)q^%NV8b?FTty<~&g05(xIhyx@6d(7{&YXM#M3YwG5 z%uGrRC|0i$6VLb_I$cZIBrW`OmCzl}cNxsg`cxXK5ZNe&EA4`7lCfj|xU^n|9WyrBq5 zNm+ByzA2avBjX0_=C|hN3xkI|fk|VzXnj3F?Yg0%VbH7md{GuL+j@k8?e-*1V^s9A z#?sQWYM0yLZ8779C{eeG)Rg9L-!%K$p*Qo&D=1(-PCIe^Z3pattTs@ij*dehldo<`S2SY91QwSd-_HUD;a%ye9Uz| zkP7o#f1O6a{|JeGo+K+TFK=7Exsst@e6g_GUJ;@*7c|a|X&{7v9ZJQOQ#WUuq*uE& z`V7iF@h8sT*6fqDpWiqXYc}z@r+Tq^i5wSx5WwUR@hc3EkcAz_fb{~7spizmq5e; z_0s`65ln4WJO&)i#=xfYh=i&l8$FHQVvlB<0hvAM3h0 zMf+2D+^V10P;zlu#HfJP8<=G7-TP3e+%C~}y?Uv%zshMF!P-AxQwwZDV6Y9C*wNmj-Qc{`NwMqLdivxjS9q`p!Cd()=g3_?&WpZ!xS%l`OWk`i3R^C#gQg9z$o? zgqnAtjC^htIa)%YK8IZ92vE;1IUop}^e6+K7aB-N2j%l8Td>xaZ$Rh(89up8T3j61 zvz3h%gxu%NF3Bm|TpJ8jC2sn0#YNECx-qP|iXg%;mWalPT&xK%a zlGOdBu>hjf7SCA{5p1<-;Lsq76b)wn11eF^laO=Qq&CJ9mq~q~GH57xXL~NEuY<;-(`RdGS%a|i+RGA|8y$bp z$(XCrYVTY#WF6D-<|F|tHeu)Ah7cJRSmh>2p3tdH#`on}YRD``HYpJuZzQO_HjFxl zLDGZ(Q_zqoaOxplTa_-^jp!|_&P%VtA21hM&NGg9DtT0c z?}P)QyP?}#T7=DHhd4A&D0!xWTZE-{+VQPX-$=v}K8 z8-dd3a)MvaRe`}27MDgFyDK-KQAGPgRz8?nAdP|OH;Wt2cyuz?V|_u-rN>El#@};o zu79ep9F5=~&yAM&5fFqOMw;Shw;;lUqe+!6<)j{jw1KpQ$h-^CS924VPAPt%+zi)iYi*(|JbEJ$nP6B7zhtRSgyOY~Ox zGQ=M#k1Yoeg`V?wvvps>+8!&KID~peY9MwGeFpFh|2YJ&g` z1OVvk+!AfjNFY=J4Qlk$2|K2mrzk8&aJEn49N9|Y)9M`>8Jf)7dBN3qO^2)N%%#}+1%I25FK0nu!b2za2A#*G0T=d3J$ z(b!8w7DAd~T5Lqf0lk@HKU@p*wLTgza3lww1(r(un{yZFC5dxu|5>~{=mx6mN15?~ z8>M}u(xc&AJSY5r{SDF9x`__k6rbYyJ|Ws&{dZSS{*m_e|3p&~@p~}pUZ>j|bTeIR z-y+J(&HY^Ya8=72&K1N3$Dd}Phh-QJpwfbd<>-NAw;YYI^qw>1W9SR%FYU&h=u z?$b3&mFS|8F3hRlM{3_ z9{4u!z?dLlW#D`OJ5-zR=Ln)XdC=ge$%Wy>gUe#D%z2Vj!bjI9RI%nlaG(UN5X$ zTU%4p(hwIdy;n|aTN?s=;A4UZYt?Vw426^hJWhw;8@6iCh$BhK$($HK3KonZnJ-`d z4n!~}^v0Zms?546IFM`)hnOu4)ez^aSr+rN@eP9Ky0Acqkip}!oa_7u>fw~3 z+6IvvFL$Jn00Ks2>J~EZG6SNZ&MaH*e=KWNM!pq5KkT79b0QisKXWirDMLQTw(Di?5z{qg4(N|GUhrZjUq}2{@ zyBy%UwBY;a0opJ;_}h5AzJ4LkdAc(%FE65+u^mV#@Ii3{$PwPcVM0S|^Mf?6HBaJ? z(6Y^G+^9zUMu@Ch7<5{|`kGICOZAcc4%z_XT7c%5kUbgP!P*Z8QV#Ro6|!;g8hkSwF46A1*ssY{NZVRe7-JL)j-!4K3dNDNL+PGEr%+*_-q zuOFM1mUc?|{x`vMx=@1Y_UwU=?Sm9|^XARe)Kr9~rr$|2p7Le7arf@sAPz4tF9;|w zQ-%xR#}y4ME5?DMV>1O64W17O>lO&3RE-p7I~3z&rZL>Of183#~(5em)c3N>vAg@XL(b`4f48YBRI1 zKZtJUibob(b&BK2KM%l2JotCxaak@X0m#SXq@<4`)$hR6GSyWm08k1B7^d(7BylM) zO2aJnF2=16fe{sG3`hVMf#!nj4pk&QJG%*CXTV*~L}wN)WO5B0ok&%Kuz=8UYcK8% z1qy+AdyYh)EyTd~2`k2sY4T!IQ;$pEbm*2*MX>D&8(IdVZg#Asc_)JuVyR%Hl@%rM zbir&xWpr|MMEnv~Z5cvv4+O5?ty=x*W1Ga$;}{>r4-^)5qJ?n~ zL^=m(fri?V6_+Lsu-}KeuG=n0NI&DMHwWQm6ai3Z)s)qvv$HMUuR`CI<@PE zBhHLs=jmE`nT6*{G2-)t&0S!JW*ddaaso0d0#Tg+40-gB4jnv*s5uas>tpihC~*2C zDZH#MyZ_@!LnX*}uvN(0W9$l>f|FBz!d5WcOUbgd11=8>SrQWj!;KwnjFq60k$!fm z{8xrUY%(zj5$7;cUjq-*`mMEMeD50BP2= zGtbh8Hphrh*x)H0d`hR>bJJ2R3>@e{r8S|c9+1$f@~TrHOCmdH5G4)_OpEkvSm>~! z@HYXg>~s3`wRG4>G+eUSs0iMAPNfJVcG{hDxPA0~25@gVjU^q5l+(mFrPxc$gr!$N z;GPgLi1B5;e-080)-eP6ZR?IVH2P(_urCfGCcY>W=-SQA&GE@eMGXy&yH-{ZOLm=j z+L?{`QWY+|K*+}N5dxm!2>X0;!Gb4m{pwXp)L`5SGj@FBUH;DDc0Pfa3zjd~|DK9Ip zzk%x=Jai~IKYuyn6b=j@%F4=2r%u(syEljw>tHU`WEkct6T}INC}#5VzIL>)SG*Rx z^Rg1QUtPfUmgL%JR904sh>9XU?$iu2L3JKB+#$M-uTuun(*n8j`hWc%*kJ9KTeagu zO&a3SX!)n7Y9vNu95#Y8GwNZhjSs#A@H%;j3tap zsJRV2m$zS=Gv?iceBi+i?A5DYut^VyM0DDLlwOkA}&BUcw7n0 zhTihamoMou1Zew8AXXbeVr!~(V+9w%Rz)-V#&qNBi-d&Va?KlRL8w~yVI@FH7#gYx zPQlv(*b3%UuB~D~duTP@gFu6dpoGVlw$hSm#cOqmW)%zY{f|#iH>eUeT8z;v2=C9s z!=tk4246;YSs;xgG!eP>o`B8VU?t*)X^$p2q51Sfa1rckL`Y&tP9C>#H}jCaMdJ5< z7bsm)SBaB~!~}B=f0bub2IfsivJk|U;bujF{Ga2_6O7m-&dhwUEnRK{e0q+JGUp5O z%*{3vBnWEGhC^jb0%HxhtgxbtV9p+`;fk+^RF&~_s?#_m?0!`IB}GKkb;vWI|JD8Y zVFVtPPRMVLB|@ay@$##O6 zTq>|5I7SA4A9ly$hDV}tjo?T?Cg&Bj<)WgZh&F(f#K(^x^XV4wK{^1@t}Ivp1bajW zYn*UH(jX$=+Yg6o-q|Lgx2C$TuGP1 zzJs9^oXVpE{sN7VG<=pjKxm_Fpn+w#0HTS8AnkdKG;bH$>I3^0i}W8$*(|oi;jkmr zi*mTDpo$=yel)eUN5N^)0K!B|N5@*!Y7bcKU?jrO@Wz6T&P(ES1n|Dklyg}HLx(`rv(qeJa@7iOg`H3I0$yaRmoFWbRDDt z1E(&lYhD}(uLC~6FvNNQlnHa|4%+HRUCV`}6&Du=Mqfy1tQZ;&${tt*t?o;UD%$4G g*6Q$qAQ>)4^M|#{~t789)u2sY%Mf0G^0249egD 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 SszJ5q_R}R8H2W9-sp#L6hh^sg diff --git a/data/Скруглённый квадрат серый.png.import b/data/Скруглённый квадрат серый.png.import deleted file mode 100644 index 9d16be2e..00000000 --- a/data/Скруглённый квадрат серый.png.import +++ /dev/null @@ -1,34 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://fuhhvsa5um4m" -path="res://.godot/imported/Скруглённый квадрат серый.png-2111d7338e52a03a41f05d6ffbbc3eb6.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://data/Скруглённый квадрат серый.png" -dest_files=["res://.godot/imported/Скруглённый квадрат серый.png-2111d7338e52a03a41f05d6ffbbc3eb6.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/data/Скруглённый прямоуг салатный.png b/data/Скруглённый прямоуг салатный.png deleted file mode 100644 index 38f308c3700cde27765265f83d90c9e1cca02230..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3199 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 IT6R(Y13C5$G5`Po diff --git a/data/Скруглённый прямоуг салатный.png.import b/data/Скруглённый прямоуг салатный.png.import deleted file mode 100644 index 582915bb..00000000 --- a/data/Скруглённый прямоуг салатный.png.import +++ /dev/null @@ -1,34 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://busl8rb38lis" -path="res://.godot/imported/Скруглённый прямоуг салатный.png-e10b4e8820d45ab6e79c4fba522af854.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://data/Скруглённый прямоуг салатный.png" -dest_files=["res://.godot/imported/Скруглённый прямоуг салатный.png-e10b4e8820d45ab6e79c4fba522af854.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/data/Скруглённый прямоугольник белый.png b/data/Скруглённый прямоугольник белый.png deleted file mode 100644 index c17d762d02bcc57b90643cd9352dd43f02a1cb8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2642 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 eCl@2)+F#-9Y&q0joI%~E7 diff --git a/data/Скруглённый прямоугольник серый.png.import b/data/Скруглённый прямоугольник серый.png.import deleted file mode 100644 index 6c47408a..00000000 --- a/data/Скруглённый прямоугольник серый.png.import +++ /dev/null @@ -1,34 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://7ody4v7qy36g" -path="res://.godot/imported/Скруглённый прямоугольник серый.png-318eedc8abeb0fd535304028648863b7.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://data/Скруглённый прямоугольник серый.png" -dest_files=["res://.godot/imported/Скруглённый прямоугольник серый.png-318eedc8abeb0fd535304028648863b7.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/data/Угловой квадрат3.png b/data/Угловой квадрат3.png index d84d853e4225a452668569ed4506bb06546a579c..0fd8215a736f4fc1d154d6d3fa09ab3406cc8ee5 100644 GIT binary patch delta 3427 zcmV-p4V?0vG36SNBYzDnNklqid>7Jf5+O|ui-9QL9f-8t3OMrxs z1QIILnyOUQx6U7s2tsA0-+!u3)xGb1pSwKobKfgeS65s2?SI>+avH38$zt=nzcsFG z62|K9izgQj_H9_U#ynLU;dBR{uqAKq&N$BuCOc=Dx~b{9p<$Yars=9_n1-(Ds;1~F zrVfe*hK4ALf{AIGrXUD{2?C}lijpWvmL7M>7Js4q-po?_L7)%Njt3*0uD}&{W}{zJ z<{*idRMc(D)qlsGp8_BmaSeXQG%=5TVjMTof&iw8q3Y3iIMyDh2>vs$1BeZPI4uAi z-b6f;@cQ^Wo5K+aA5iQossrL5fk?x$HKsV;;O)L-WHiBB^OE4{8`GGXOnzXJtS$%U z0nTx)K=YEtrs+*@5E9PwN7~1hmtyUXFkg3TOwHGsUVrAtWf!rCV6zAW+;-9td00P^ zbhty#_nr^5OXHb+k4q_2(zX%%=rhuM*yHA*XI>(tdZAznQ6WHg#=)-cG}}7+>6L7F zTq&G}J*OX6o*-}OHnx{~#cwR**^|kL%Q~9&k|^MDTB)h2!Q*z*{K30OHYa7%>X|lu z2AXcLZhzf6-g)mo`NuPBbB`N!Sp(?q+|U@oOz?^<8eq>j0~TD{yCME zl@u2TdF_SADRCKW(KIBR6T98P8Rgz#efb5g5@5^#MjJeU5_3`Ri4i{1%ht~}b4L9f zuKnp_Y<~5ZG?p8<>=FV3N-Quu8Hkb%(8tU|Vt-y{&zPuC)Uk*H@xvYb<++D&xm{dx z$K$-V6QW54CFUB|hs&SD)N~!t#tcBy^k>J?&u!H(vPrzf6Pf1Au;KTQkd23U>UVGO zaeozGM>>b~Aso$hCcu~gG_GtCd`|HV8$F$)?K`p1$Cj;Im{BtW6Ol`5WY)g)AbNct>Y?wbL1mjiysN-H#<3r7&1ZIBP)^ z1g@Do0e9=0Jihd2TyVt=1kb;Nx4({I%S+{AzX1S4uR!yX#X|Fv#nL6yN@~ujDh)O- zS$w=Y)Mw8QF3rYMM@F@Uw0u&rBkXTKfPX63(T{1LGbVbOY1zYn{rmmQnAO1LcR$6t zHXX$lM$SJOh-i_lfO*PHTsN`Ick?83ncwd(ayp%UKvWbZrK)ODQIz!8hZ5^=TzKB< z#+6Oxs-Io>{d&K;A>HpEaaRAZtDW{f8#M(6=T_(8JT4a=jHLOnQ)0nQzn~!B&wnR> zUQUrEL3yE@OvL?dR;Q=SUg)blY0&%XoIjs3x$?}}=S{fnyZ^;{Y~%$M4z{Xa_Vn~@ zahFuwJ8iO&d3~q!n=2=#ZcnHEBLZOer^u>0vfY9x3Mc59NK&CaoMBU!$ns}av47{6 zY;S&@vx+jPQRlZl#LyvIz%%KDEr0ZIy=Q5GKd<;y!2{$46#&Yrto2n@RX;9th_RQ~ zhwdsdQ}@2wCO_+xqay;4jk+M|#V}2*7Lkmq6G7R)u4Cy_zr`Z^>FR@B zZ5>F$ckeSt1^6KNtE#;77uQd|tFEEw`qAv^PzQ7-lqC+ECO19WVz0*lafYXoHW1oa7ay36$wV9o|O` z%&csvzdn++^%nY*ze+~kIa#i^FN=S6J?C9?DNj81D9M)f)D}xLmU+-!lc68jmhc)i}jkp|uyaluhZ7Lk7W-&LZGUicq)rk8X=h-y@d)Az_pWI*L{D%v?U`2urul=Q&Epx zRF1PhM5*g2Ps?6YD6n|y_w^);Er?Hd_Orj-*S|>9oG1BkB2y(>Xj=UzlGY+_x$7SG zb|+|U*+F>_jI3>FIe($X!&aaCA0mL;C67v3W;LC&X3u6?T|HK(om9j|D&iPqs&mhD z-lS()UMV|YZtf6nl-;qMD{gYWIGw|5`+*q-@Yt**VqwaIg{U_FDKFM} zL4|o|xvma4Y|ES~|Ff|}_<_?AQFG;mI$tRj%1(a&BO-vg0&=7G09ZQuOn9^pQx z9L?lvJHb}OnVt}Te)?XDOG@dp7GVg|DHzBklTqRW0FWdpXB3Ab0-L>;u|=H8zP_WG zHdvTIGP1-H32+9G^E0^P0x@BspHx&DCL4S74kzKJ!uJ#2&0pBaj^6b4o zWP-k*67R{^ZbQ*%RXraKt48}H4w`nvx#i+nTz=ynv1-JuAj0oP#L zp+Erq2JDpK8r&h}3aeYHR7uV*IjhDRHl8(+piTBsG zi_bY6k=!KH=Q);zPddPAB%$oRs?NS^Uh;K?T*rM9}9+i(35H8s=O_SFs?Hsd539m?ia7vENB zv)^`UrL=r^MxG_9U9GY^K5V_wDMzDw6~{wBOT)4?+F)5lRn@`K6%)E_B^Z*8fFqBP z*MCISG%Ds_z@*wa)J7w;wY9Nm(dGF4e!9X5dVE;PC;t6Gs#UtbuevNeNXEyr|`HdxIL1?SI;}lmvrZcm4Hz`2K1V2evb_!ZIolhrf#c zy05qN>c*8#Dsa~qPcF2*xW$}5yU?5((7P{?B+(YJ`@gI*#P|IHc`p!cShnVb?QS`? zg$4oaOBy)#Y(ooo&>4ynipH2)R*aSi}&COhT&5zi$?tfjP zE$f*-ZRDc1prBy(=1)Jn4_I;Ro~;0Dzj$)t2avZ45GJCV4a+{rDMf_lC5wfYmX=iw z^CsR2(7fAEGJnTX8nHC4Y%*6Znm*XMar(f(-|CQ}T$!^h%LKA~ zwC_`1_)Ql}moDWEr7Gb2;ORJ9#JUrss$`lC$7__tWi*#$4h&c0C^VE9IOiD(5)j{PN+Y%zvmX=A5g4 z!vAU2Y-`Wb9~)ZR`z?CaxBw)x+7V8J&7Pt&*PZ6I=buJPhPmO6dkI%u%(ifDijN$! zkkLsUUo;!l82|`n**Q@28L!Q#GH`XNeDmJRw6yFd6OVFXm7R3Njx#@dic({GYlmX{ zY^;Y^1jsKbeld>rb4!3?%kvEf+$Rwqc{u|B? zw4^uf-rM?m?Tngx9{TG>ZM>5q(FYa{>w002ovPDHLk FV1oLq#Ek#| literal 6300 zcmV;N7-Q#&P)StO&>uS)ve<0AYj>5AR{$W90N^4L=L-RlQUJ&DC0@ZjPh;=*jPLSYvv5M~MFBAl0-BNIsH z15C~g000{K(ZT*WKal6<?_01!^k@7iDG<<3=fuAC~28EsPoqkpK{9G%|Vj005J}`Hw&=0RYXHq~ibpyyzHQsFW8>#s~laM4*8xut5h5 z!4#~(4xGUqyucR%VFpA%3?#rj5JCpzfE)^;7?wd9RKPme1hudO8lVxH;SjXJF*pt9 z;1XPc>u?taU>Kgl7`%oF1VP9M6Ja4bh!J9r*dopd7nzO(B4J20l7OTj>4+3jBE`sZ zqynizYLQ(?Bl0bB6giDtK>Co|$RIL`{EECsF_eL_Q3KQhbwIhO9~z3rpmWi5G!I>X zmZEFX8nhlgfVQHi(M#xcbO3#dj$?q)F%D*o*1Pf{>6$SWH+$s3q(pv=X`qR|$iJF~TPzlc-O$C3+J1 z#CT#lv5;6stS0Uu9wDA3UMCI{Uz12A4#|?_P6{CkNG+sOq(0IRX`DyT~9-sA|ffUF>wk++Z!kWZ5P$;0Hg6gtI-;!FvmBvPc55=u2?Kjj3apE5$3psG>L zsh-pbs)#zDT1jo7c2F-(3)vyY4>O^>2$gY-Gd%Qm(Z8e zYv>2*=jns=cMJ`N4THx>VkjAF8G9M07`GWOnM|ey)0dgZR4~^v8<}UA514ONSSt1^ zd=-((5|uiYR+WC0=c-gyb5%dpd8!Lkt5pxHURHgkMpd&=fR^vEcAI*_=wwAG2sV%zY%w@v@XU~7=xdm1xY6*0;iwVIXu6TaXrs|dqbIl~ z?uTdNHFy_3W~^@g_pF#!K2~{F^;XxcN!DEJEbDF7 zS8PxlSDOr*I-AS3sI8l=#CDr)-xT5$k15hA^;2%zG3@;83hbKf2JJcaVfH2VZT8O{ z%p4LO);n}Nd~$Sk%yw*Wyz8XlG{dRHsl(}4XB%gsbDi@w7p6;)%MzD%mlsoQr;4X; zpL)xc%+^yMd)ZNTI#eJ*$O)i@o$z8)e??LqN_gLa_%;TM>o2SC_ zkmoO6c3xRt`@J4dvz#WL)-Y|z+r(Soy~}%GIzByR`p)SCKE^%*pL(B%zNWq+-#xw~ ze%5}Oeh2)X`#bu}{g3#+;d$~F@lFL`0l@*~0lk45fwKc^10MvL1f>Tx1&sx}1}_Xg z6+#RN4Ot&@lW)Km@*DYMGu&q^n$Z=?2%QyL8~QNJCQKgI5srq>2;UHXZ>IT7>CCnW zh~P(Th`1kV8JQRPeH1AwGO8}>QM6NZadh`A)~w`N`)9q5@sFvDxjWlxwsLl7tZHmh zY-8-3xPZ8-xPf?w_(k!T5_A(J3GIpG#Ms0=iQ{tu=WLoYoaCBRmULsT<=mpV7v|~C z%bs^USv6UZd^m-e5|^?+<%1wXP%juy<)>~<9TW0|n}ttBzM_qyQL(qUN<5P0omQ3h zINdvaL;7fjPeygdGYL;pD|wL_lDQ-EO;$wK-mK5raoH_7l$?~Dqf!lNmb5F^Ft;eT zPi8AClMUo~=55LwlZVRpxOiFd;3B_8yA~shQx|tGF!j;$toK>JuS&gYLDkTP@C~gS@r~shUu{a>bfJ1` z^^VQ7&C1OKHDNXFTgC{M|V%fo{xK_dk6MK@9S!GZ*1JJzrV5xZBjOk z9!NTH<(q(S+MDf~ceQX@Dh|Ry<-sT4rhI$jQ0Sq~!`#Eo-%($2E^vo}is5J@NVEf|KK?WT&2;PCq@=ncR8z zO#GQ^T~S@VXG71PKNocFOt)Y6$@AXlk6rM*aP%VgV%sIRORYVwJx6|U{ozQjTW{-S z_si{9Jg#)~P3t?+@6&(!YQWWV*Z9{iU7vZq@5byKw{9lg9JnRA_4s!7?H6|n?o8ZW zdXIRo{Jz@#>IeD{>VLHUv1Pz*;P_y`V9&!@5AO~Mho1hF|I>%z(nrik)gwkDjgOrl z9~%uCz4Bzvli{bbrxVZ0epdf^>vOB;-~HnIOV3#R*zgPai_gEVd8zYq@2jb=I>#f& zAH2?aJ@Kaet+tY1FEVhjisB!{{s0RiaV zivfSf12JHnk&ZD|=7)eECz<+3;0~B81Za(GIqk95jziJ%;-3J!fR4V^ z#+bQ36-B@bD{ZZcW*H%bN1i^RM-VY+;h=fL+><^}Bri~yV#!1BMTJ8)7+HfmAQ;Y z#X#C}d3#qIpEuf^o#!yEEJC(VVo2~Bf@si(p@t`A_Ar5B$Z7^yp`_Q3ECQtVkWzY=H)UolB7H`G;98xV96&( zoh9?jRQ;F*=smy+xJfAK8OvHF1tGtO>gsAj!5~}Segoz8Q#Q4Rsne!oJ1(0xZQ}Je z|D7K!ojfERVMtFj*?a{QJ~LhmWI39PN3ixFgt8Qdo8se-Kc=Fhf})~go`3RwO0r$H z+cwJU$LGsp)`Xl9X+?xx0pmXdQoxwB58(4iCWI_nPqeV(qixKpS-{mlT+6oSe#r$B zT(W%%fxzbp3`Q36?=y(=pNe4p;V#km0hsSZ5cSC!p ziEnTu9t7>WXxniBd%OZTw(UHkUG0o@VbEjaraQ?gn#j~}ig$i@59wGl5B~N={@h*3 z*4h&z(hxnlPD4*79S?NaFJClUjUj5R?#hjY3oO$z#SEXZJ zC$u~Ig0m#zr>o-x2M-;_5E0*4H2l;ssKKT6_3XM1u3W9jl z$$9CPSc9)1Tro(1*EhcP<0+FX=1!S1Wu?|9HLJBoYmJnWL?W@Xsi|puu%!I9sgvE* z3%k|hS4`}>*$8HhN&wS#Nm~v9pMjL(6tlKEMDNK6)>oj@xgGP3AmEumnhE)|txmApv{p zj-bTpZrW3T_sjI?OIwyKuc@3{US58!)*2y(_XwpFN-23^RpF!canmz9%f7d++qb3C zuwGTZk#n4qg657CpVXz;+pefO_Y!Wr?@A1hkIs%0{PC$LpskJxVa-KTv+!Q;E*Lw6s+S^hfoqrXE${6Le*0dzjMCR47=%Pz`VC}th)^27-k>Y}~5P?Z0 zBkrx;o&+QT)^B)kX--Z~!Duy~(vrPKF@Lu6`79xEdxe-?5?=r!&T zfm}#Qske(g@4i6Yf&JWd_dP@_YlwBF2f0dS?tz}CP@z^Vnnu_0`fFGTw` z;`_I8KOfSj3!AY~GBH({!%Mo$ClT2r}gn;iXo=DrfPw?a;>$v=ym7KNYCN}Pl6YCzP zS)w&)-S0vo5D1K1fDb^xBWOI@KqwgC@UaF!;yNcyFQsHsH2dbS>SODZvDAjG4dU=Jqm>E81z6rl#s^}h6mur#Ulq;r-sQLW?{|-gzqS*}jB527l7*9VDK~fXyIC8ppOxdb<+R=ktYzVqQqiQP-v+8AJ675yGUgB}P$UA<`H= zc+DsYuWpN_R=@J$p=~ei75`{=r7~taDFxMKA?Ajf`Taw;QB+b&!c&MV)S$WA)ud8p ztWN-xQbTeP7iqTTe3R{RHv1Fp2q2(Ml$)j_9tVFE+wBoF6O>XctjPb_1DDNN*3#VZ zvir>NJ-A%r0AM92dvQhFhVt|l;-7KF;*;_!{yiC z!hz@#8tgc2b_&By(b(KZX*3(OMh+AGR8JB1^xw{}xZsJ`8)Ms!iaYJj)R0jlKjh=u z`FSjxk&D+DOxU&T<4vC6EA&~wb={1<>AHd&W<=Ti>$NoO*}(0wG3l7taPYYWeT zclgBv_cEhu0yp3E9jdFR@#$x~$nv_Ugi!!7sCqmp#Nw)=l?7hk%1bNMny*rUIo*w| z2b`pt7}kthyLNZFeV>{2Q=pcfE_F{^#j>pa$Y5${@Rr~zFVW&$n!7cYZBxGFLMF{v zz>M}b>gwva?6S*=L?Se_#%T(t$u|P0?639ECQ(Xp@$}Mlhnt*dW=`e{h@Sn)w!=@% zC=dRnC!8IX9u*NDMPCbBJ8mi#H}^)Ofm>%}vxA;Cdyk^F+`e4w-@pGim6eq%g%BK1 z3+zSLGkf+-iVE_PN|8*a=;&z2v29YRBti%dA3jV;aWRRM#d{lHWoq&ZCT9nMQJ)8z znwnlKEiJt&RM4LvyuaSAm&_~BXGfj*g-S_pn=i7nGS}J|^2vQbJ8+7-i!HY=7qzvu zPfnRK|4c9L`@i@$Xvxdo+c z-Sh@o2RAb>KL?@3uomdIwrL*wWap=kFS~r!y3=ln0hb1bY<=_{^M0NAaIg;SBpeTt z3wRBawj)Of8lZ%rPznM8fy&mzOpDqLPvca~=ZdSZ<;}P9*u4E^E-3aPF-Ek6$KxrT zHNE<85-t9J3Kb*=&K~%RYFJ2mA9wpoiTP23^9sG>3X`xf@hd0`NWxx8&?5+W=zqKm zdnNNjHi5bidGhf`x#p_n+WUAfl*8+r{)h7;9fX9x*PV1mw~|t3z474}mtDGW)*r^TKY#}73}iq6 zXNL{W%Zl;KpRHngMG@y+^#lITu3}#zhBO@X5Q#!-?Tr{t<#_j&0G(<3#8{q#GZGRo zCD+TsV3OybcnG_*mFsS~jn?vIeA=2AGS4}VL&~9xQNHCl9R@&in%%DJ_SGzBgb6u5 zvV9g`zWEHbwO^5nwR3JxE=s!C8JgkAWOBz5)B6$Qe4i`<@=7MW-rnB6<;++=i9DZT zVc0_L`+y5M2#}F^*L8`<<8?PKp8nBz_mTjMCWe!T>W^+UO|xaZgieP~3C_(|7(<6} zlF8)W1NDs`F-)8v3H@rBUo+?a=H}*i+%dMxhl6LB8r!yQ>g(&@S@N|751q*#1MO-y zIDsFvw6wfoSyua*5FH7oX*M4@a^$I3Te5y~rnJBO?y21uk%F|> z>z&jWUi+H6T5DX_?H`|hukU{YquRiE?d|PbzuI@;g&EVUZ~c0C?%3aWpN65nl@Ry8 zxhsD`cKn*saQ0-6$Kz8$9` diff --git a/data/матрица-конфликт.png b/data/матрица-конфликт.png new file mode 100644 index 0000000000000000000000000000000000000000..94496defb627fde595ecf671db7da87b8168da4a GIT binary patch literal 683 zcmV;c0#yBpP)XcwhR*N$!;4qY75OpXO_vWsIVE-!&VS4ZoR zP4qHE#0mwYU=}5Cla%&A?a-d2dXWEHv$OI-Pht{&BM4 zo?P`@F8As0YRe1MDU#RgZOgL!PS^FjdcA&Ynn0mY_{{VC`vq@%noK5>jYi`K0C4x) zhUa;nfw`3xMNy0k4gf--(9;F$`I#bwkVGQ!W(*LCM53&iH&O_P!><9r0|25ZidH@O zuvWw2@v&*`=JXV|M@N?Yjwp&R#t9HYcB}#zdOVM+Jyr$)aROjq7l4(TnSk5P0Kg2B zOaKh#F#}E|Fj%$FyjzI%1lVXHj$7UqS`D!y2|Un3qupJMTrNfuSX-OEzqe=0do^dr zLx%?k(+O;EvjZ^NnSMJTZf!A?fXQkPH#Zpq*w~o9XEGNn0NVi8*BJ*e+eU3Va09%gMuVXPF7K0Pwz_?Zb^Oof^@Vr{Zvy&6k+P8}f-0knL5?DR}UDtJ{0lM98 zmvw+1YsNKA)5g0{sZ=TjgFy-lzS6WM3GK^EyZuvDRjP}A%6etNy$k void: var unit_trassa = network.get_unit_instance('уарэп-трасса') - unit_trassa.connect('line_changed', Callable(self, 'on_trassa_line_changed')) - signaller.connect('sector_klaster', Callable(self, 'on_sector_klaster').bind(unit_trassa)) + unit_trassa.connect('line_changed', Callable(self, 'on_trassa_line_changed')) + signaller.connect('sector_klaster', Callable(self, 'on_sector_klaster').bind(unit_trassa)) func on_trassa_line_changed(_unit_trassa): diff --git a/scenes/эмс2/эмс2.tscn b/scenes/эмс2/эмс2.tscn index a262c3be..8fbfdb2e 100644 --- a/scenes/эмс2/эмс2.tscn +++ b/scenes/эмс2/эмс2.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=32 format=3 uid="uid://musb21x2u0xs"] +[gd_scene load_steps=33 format=3 uid="uid://musb21x2u0xs"] [ext_resource type="Texture2D" uid="uid://hkcvl2waf63s" path="res://data/вид сверху.png" id="1_b7vcf"] [ext_resource type="Script" uid="uid://bvlqgv7aapebl" path="res://scenes/эмс2/эмс-тг.gd" id="1_l3ueu"] [ext_resource type="Texture2D" uid="uid://0w6q4vfst0ry" path="res://data/OP-63.png" id="3_8gk36"] [ext_resource type="PackedScene" uid="uid://hr55mkcneaer" path="res://scenes/hranges/panel.tscn" id="3_b5v2s"] +[ext_resource type="Texture2D" uid="uid://busl8rb38lis" path="res://data/матрица-конфликт.png" id="3_l3ueu"] [ext_resource type="Texture2D" uid="uid://b85f1ne2wrwhg" path="res://data/Состояние РЭС 4.png" id="4_b5v2s"] [ext_resource type="Texture2D" uid="uid://073el51yholj" path="res://data/454.png" id="4_nqi0i"] [ext_resource type="Texture2D" uid="uid://cckk3jk5r32bh" path="res://data/ГО.png" id="5_e7tlv"] @@ -14,7 +15,7 @@ [ext_resource type="Texture2D" uid="uid://duu8q7sv0jwfh" path="res://data/ННВС.png" id="8_q16jd"] [ext_resource type="Texture2D" uid="uid://c1nld5t17kws3" path="res://data/Состояние ЭМС слабый сигнал.png" id="9_5u4bk"] [ext_resource type="Texture2D" uid="uid://docnrxrm2f022" path="res://data/Угловой квадрат3.png" id="13_5ifkb"] -[ext_resource type="Texture2D" uid="uid://djv8fkddcjucs" path="res://data/Скруглённый квадрат белый.png" id="15_2spgl"] +[ext_resource type="Texture2D" uid="uid://djv8fkddcjucs" path="res://data/матрица-чисто.png" id="15_2spgl"] [ext_resource type="Texture2D" uid="uid://d3qui21aom1ac" path="res://data/Квадрат марс 454.png" id="17_p41nv"] [ext_resource type="Texture2D" uid="uid://cxrggrvx6l22q" path="res://data/Квадрат марс ОР-63.png" id="18_5ifkb"] [ext_resource type="Texture2D" uid="uid://by6a12oahbg82" path="res://data/Квадрат марс РЛС1.png" id="19_vyjnq"] @@ -36,6 +37,7 @@ offset_top = 35.0 offset_bottom = 35.0 script = ExtResource("1_l3ueu") +matrix_conf = Array[Texture]([ExtResource("15_2spgl"), ExtResource("3_l3ueu")]) [node name="кораблик" type="TextureRect" parent="."] modulate = Color(1, 0.596078, 0.4, 1) @@ -62,7 +64,7 @@ columns = 2 layout_mode = 2 size_flags_vertical = 7 text = "ОР-63" -metadata/unit_name = &"ОР-63" +metadata/unit_name = &"ор-63" [node name="sub0" type="GridContainer" parent="приём"] layout_mode = 2 @@ -112,7 +114,7 @@ layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 text = "ГО" -metadata/unit_name = &"ГО" +metadata/unit_name = &"го" [node name="sub2" type="GridContainer" parent="приём"] layout_mode = 2 @@ -138,7 +140,7 @@ layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 text = "РЛС1" -metadata/unit_name = &"РЛС1" +metadata/unit_name = &"рлс1" [node name="sub3" type="GridContainer" parent="приём"] layout_mode = 2 @@ -162,7 +164,7 @@ layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 text = "РЛС2" -metadata/unit_name = &"РЛС2" +metadata/unit_name = &"рлс2" [node name="sub4" type="GridContainer" parent="приём"] layout_mode = 2 @@ -188,7 +190,7 @@ layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 text = "ННВС" -metadata/unit_name = &"ННВС" +metadata/unit_name = &"ннвс" [node name="sub5" type="GridContainer" parent="приём"] layout_mode = 2 @@ -212,7 +214,7 @@ layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 text = "Изделие 7" -metadata/unit_name = &"Изделие 7" +metadata/unit_name = &"изделие7" [node name="sub6" type="GridContainer" parent="приём"] layout_mode = 2 @@ -238,7 +240,7 @@ layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 text = "Изделие 8" -metadata/unit_name = &"Изделие 8" +metadata/unit_name = &"изделие8" [node name="sub7" type="GridContainer" parent="приём"] layout_mode = 2 @@ -265,208 +267,208 @@ offset_right = 1570.0 offset_bottom = 1145.0 columns = 7 -[node name="УгловойКвадрат2" type="TextureRect" parent="матрица"] +[node name="прм-прд" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("13_5ifkb") -[node name="КвадратМарс454" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("17_p41nv") - -[node name="КвадратМарсОр-63" type="TextureRect" parent="матрица"] +[node name="прд-0" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("18_5ifkb") -[node name="КвадратМарсРлс1" type="TextureRect" parent="матрица"] +[node name="прд-1" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("19_vyjnq") +texture = ExtResource("17_p41nv") -[node name="КвадратМарсРлс2" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("20_68srw") - -[node name="КвадратМарсГо" type="TextureRect" parent="матрица"] +[node name="прд-2" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("21_v6otu") -[node name="КвадратМарсСТрубкой" type="TextureRect" parent="матрица"] +[node name="прд-3" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("19_vyjnq") + +[node name="прд-4" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("20_68srw") + +[node name="прд-5" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("22_ufy3d") -[node name="КвадратСалатный454" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("23_h11e0") - -[node name="СкруглённыйКвадратБелый" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый2" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый3" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый4" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый5" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый6" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="КвадратСалатныйГо" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("27_2ft3r") - -[node name="СкруглённыйКвадратБелый7" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый8" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый9" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый10" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый11" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый12" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="КвадратСалатныйРлс1" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("25_wmu4u") - -[node name="СкруглённыйКвадратБелый13" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый14" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый15" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый16" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый17" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый18" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="КвадратСалатныйРлс2" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("26_w5eif") - -[node name="СкруглённыйКвадратБелый19" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый20" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый21" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый22" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый23" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый24" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="КвадратСалатныйСТрубкой" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("28_rra4y") - -[node name="СкруглённыйКвадратБелый25" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый26" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый27" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый28" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый29" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="СкруглённыйКвадратБелый30" type="TextureRect" parent="матрица"] -layout_mode = 2 -texture = ExtResource("15_2spgl") - -[node name="КвадратСалатныйОр-63" type="TextureRect" parent="матрица"] +[node name="прм-0" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("24_2pcsf") -[node name="СкруглённыйКвадратСерый2" type="TextureRect" parent="матрица"] +[node name="матрица-0-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 texture = ExtResource("15_2spgl") -[node name="СкруглённыйКвадратСерый3" type="TextureRect" parent="матрица"] +[node name="матрица-0-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 texture = ExtResource("15_2spgl") -[node name="СкруглённыйКвадратСерый4" type="TextureRect" parent="матрица"] +[node name="матрица-0-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 texture = ExtResource("15_2spgl") -[node name="СкруглённыйКвадратСерый5" type="TextureRect" parent="матрица"] +[node name="матрица-0-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 texture = ExtResource("15_2spgl") -[node name="СкруглённыйКвадратСерый6" type="TextureRect" parent="матрица"] +[node name="матрица-0-4" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 texture = ExtResource("15_2spgl") -[node name="СкруглённыйКвадрат" type="TextureRect" parent="матрица"] +[node name="матрица-0-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="прм-1" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("23_h11e0") + +[node name="матрица-1-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-1-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-1-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-1-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-1-4" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-1-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="прм-2" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("27_2ft3r") + +[node name="матрица-2-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-2-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-2-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-2-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-2-4" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-2-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="прм-3" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("25_wmu4u") + +[node name="матрица-3-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-3-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-3-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-3-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-3-4" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-3-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="прм-4" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("26_w5eif") + +[node name="матрица-4-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-4-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-4-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-4-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-4-4" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-4-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="прм-5" type="TextureRect" parent="матрица"] +layout_mode = 2 +texture = ExtResource("28_rra4y") + +[node name="матрица-5-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-5-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-5-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-5-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-5-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] +layout_mode = 2 +texture = ExtResource("15_2spgl") + +[node name="матрица-5-6" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("15_2spgl") [node name="Op-63" type="TextureRect" parent="."] layout_mode = 0 offset_left = 125.0 -offset_top = 79.0 +offset_top = 66.0 offset_right = 338.0 -offset_bottom = 371.0 +offset_bottom = 358.0 scale = Vector2(0.312207, 0.312207) texture = ExtResource("3_8gk36") @@ -500,9 +502,9 @@ texture = ExtResource("6_m57px") [node name="454" type="TextureRect" parent="."] layout_mode = 0 offset_left = 277.0 -offset_top = 79.0 +offset_top = 66.0 offset_right = 490.0 -offset_bottom = 371.0 +offset_bottom = 358.0 scale = Vector2(0.312, 0.312) texture = ExtResource("4_nqi0i") @@ -535,45 +537,45 @@ texture = ExtResource("6_m57px") [node name="Го" type="TextureRect" parent="."] layout_mode = 0 offset_left = 460.0 -offset_top = 80.0 +offset_top = 67.0 offset_right = 673.0 -offset_bottom = 372.0 +offset_bottom = 359.0 scale = Vector2(0.312, 0.312) texture = ExtResource("5_e7tlv") [node name="СостояниеРэс40" type="TextureRect" parent="Го"] layout_mode = 0 offset_left = 233.974 -offset_top = 230.769 +offset_top = 217.949 offset_right = 286.974 -offset_bottom = 266.769 +offset_bottom = 253.949 scale = Vector2(1.78063, 1.78063) texture = ExtResource("4_b5v2s") [node name="СостояниеРэс20" type="TextureRect" parent="Го"] layout_mode = 0 offset_left = 233.974 -offset_top = 163.461 +offset_top = 150.641 offset_right = 286.974 -offset_bottom = 199.461 +offset_bottom = 186.641 scale = Vector2(1.78063, 1.78063) texture = ExtResource("5_p41nv") [node name="СостояниеЭмсСлабыйСигнал" type="TextureRect" parent="Го"] layout_mode = 0 offset_left = 233.974 -offset_top = 96.1539 +offset_top = 83.3334 offset_right = 261.974 -offset_bottom = 116.154 +offset_bottom = 103.334 scale = Vector2(3.37683, 3.20513) texture = ExtResource("9_5u4bk") [node name="Рлс1" type="TextureRect" parent="."] layout_mode = 0 offset_left = 639.0 -offset_top = 78.0 +offset_top = 65.0 offset_right = 852.0 -offset_bottom = 370.0 +offset_bottom = 357.0 scale = Vector2(0.312, 0.312) texture = ExtResource("6_y58bl") @@ -607,9 +609,9 @@ texture = ExtResource("9_5u4bk") [node name="Рлс2" type="TextureRect" parent="."] layout_mode = 0 offset_left = 831.0 -offset_top = 78.0 +offset_top = 65.0 offset_right = 1044.0 -offset_bottom = 370.0 +offset_bottom = 357.0 scale = Vector2(0.312, 0.312) texture = ExtResource("7_mxw8g") @@ -643,9 +645,9 @@ texture = ExtResource("9_5u4bk") [node name="Ннвс" type="TextureRect" parent="."] layout_mode = 0 offset_left = 1120.0 -offset_top = 82.0 +offset_top = 69.0 offset_right = 1333.0 -offset_bottom = 374.0 +offset_bottom = 361.0 scale = Vector2(0.312, 0.312) texture = ExtResource("8_q16jd") @@ -670,9 +672,9 @@ texture = ExtResource("5_p41nv") [node name="label8" type="Label" parent="."] layout_mode = 0 offset_left = 134.0 -offset_top = 55.0 +offset_top = 42.0 offset_right = 176.0 -offset_bottom = 74.0 +offset_bottom = 61.0 size_flags_horizontal = 4 size_flags_vertical = 6 text = "ОР-63" @@ -680,9 +682,9 @@ text = "ОР-63" [node name="label9" type="Label" parent="."] layout_mode = 2 offset_left = 482.0 -offset_top = 59.0 +offset_top = 46.0 offset_right = 499.0 -offset_bottom = 78.0 +offset_bottom = 65.0 size_flags_horizontal = 4 size_flags_vertical = 6 text = "ГО" @@ -690,9 +692,9 @@ text = "ГО" [node name="label10" type="Label" parent="."] layout_mode = 2 offset_left = 293.0 -offset_top = 55.0 +offset_top = 42.0 offset_right = 322.0 -offset_bottom = 74.0 +offset_bottom = 61.0 size_flags_horizontal = 4 size_flags_vertical = 6 text = "454" @@ -700,9 +702,9 @@ text = "454" [node name="label11" type="Label" parent="."] layout_mode = 2 offset_left = 851.0 -offset_top = 55.0 +offset_top = 42.0 offset_right = 887.0 -offset_bottom = 74.0 +offset_bottom = 61.0 size_flags_horizontal = 4 size_flags_vertical = 6 text = "РЛС2" @@ -710,9 +712,9 @@ text = "РЛС2" [node name="label12" type="Label" parent="."] layout_mode = 2 offset_left = 656.0 -offset_top = 55.0 +offset_top = 42.0 offset_right = 692.0 -offset_bottom = 74.0 +offset_bottom = 61.0 size_flags_horizontal = 4 size_flags_vertical = 6 text = "РЛС1" @@ -720,9 +722,9 @@ text = "РЛС1" [node name="label13" type="Label" parent="."] layout_mode = 2 offset_left = 1130.0 -offset_top = 59.0 +offset_top = 46.0 offset_right = 1170.0 -offset_bottom = 78.0 +offset_bottom = 65.0 size_flags_horizontal = 4 size_flags_vertical = 6 text = "ННВС" diff --git a/scripts/settings.gd b/scripts/settings.gd index 15d0ddc8..1072da31 100644 --- a/scripts/settings.gd +++ b/scripts/settings.gd @@ -6,7 +6,8 @@ class_name uarep_settings extends Node var settings_program: Dictionary var UnitProfiles: Dictionary[StringName, Array] = { \ - # < Название: Протокол, Адрес, <Порт>|[, Порт], Широковещательное, Привязывать, Комментарий > + # < Название: [Протокол, [Параметры], Комментарий] > + # < Название: Протокол, [Адрес, <Порт>|[, Порт], Широковещательное, Привязывать], Комментарий > 'уарэп-яу07-частный': ['yau07rx', ['10.1.1.2', 50002, false, true], 'IP-адрес для приёма частных сообщений от ЯУ-07'], 'уарэп-яу07-общий': ['yau07rx', ['*', 50000, true, true], 'IP-адрес для приёма широковещательных сообщений от ЯУ-07'], 'уарэп-капсрпб': ['capsrpb', ['127.0.0.1', '127.0.0.1', 42023, 42022, false, true], 'IP-адрес для обмена сообщениями со службой \"МП550\" (СТЦ)'], @@ -25,6 +26,14 @@ var UnitProfiles: Dictionary[StringName, Array] = { \ 'уарэп-яу07-3н': ['yau07tx', ['10.1.1.31', 50031, false, false], 'IP-адрес прибора ПРД-Н3'], 'уарэп-яу07-3к': ['yau07tx', ['10.1.1.33', 50033, false, false], 'IP-адрес прибора ПРД-К3'], 'навигация': ['navi', ['*', 60000, true, true ], 'IP-адрес на котором принимают сообщения от навигации'], + 'ор-63': ['iyems-rx', [ '192.168.10.1', 60001 ], 'IP-адрес для приёма докладов от информационному ЭМС устройств'], + '454': ['iyems-tx', ['192.168.10.2', 60002 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'го': ['iyems-tx', ['192.168.10.3', 60003 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'рлс1': ['iyems-tx', ['192.168.10.4', 60004 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'рлс2': ['iyems-tx', ['192.168.10.5', 60005 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'ннвс': ['iyems-tx', ['192.168.10.6', 60006 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'изделие7': ['iyems-tx', ['192.168.10.7', 60007 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'изделие8': ['iyems-tx', ['192.168.10.8', 60008 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], # < Название: Протокол, < Адрес, Порт получения >, Комментарий > 'уарэп-5п28': ['5p28', ['127.0.0.1', 50000], 'IP-адрес комплекса 5П-28'], From 190f06b72cbaf8b1392f161d32213b05ce65eedd Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 18 Mar 2026 09:40:12 +0300 Subject: [PATCH 13/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D0=AD=D0=9C?= =?UTF-8?q?=D0=A1-=D0=A2=D0=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/матрица-конфликт.png | Bin 683 -> 707 bytes project.godot | 3 +- scenes/button-six-state/six-state.tscn | 8 + scenes/tabs-switch/tab-switch.tscn | 2 +- scenes/{эмс2 => эмс-тг}/эмс-тг.gd | 8 + scenes/{эмс2 => эмс-тг}/эмс-тг.gd.uid | 0 scenes/{эмс2/эмс2.tscn => эмс-тг/эмс-тг.tscn} | 1293 +++++++++-------- scripts/network.gd | 1 + scripts/settings.gd | 4 +- scripts/yems-info.gd | 25 + scripts/yems-info.gd.uid | 1 + table/header-image.tscn | 14 +- table/lable.tscn | 9 - table/table.gd | 1 + 14 files changed, 726 insertions(+), 643 deletions(-) rename scenes/{эмс2 => эмс-тг}/эмс-тг.gd (64%) rename scenes/{эмс2 => эмс-тг}/эмс-тг.gd.uid (100%) rename scenes/{эмс2/эмс2.tscn => эмс-тг/эмс-тг.tscn} (58%) create mode 100644 scripts/yems-info.gd create mode 100644 scripts/yems-info.gd.uid diff --git a/data/матрица-конфликт.png b/data/матрица-конфликт.png index 94496defb627fde595ecf671db7da87b8168da4a..a0d45a45267b9056bca88bc18ba4d3aeceabd1e6 100644 GIT binary patch delta 683 zcmV;c0#yC01;Yi9B!7xYL_t(&-tC$(Yui8+fIrKLS}3eUiA%q|d z!)H;LoM4mNilWzfhdoL!e*oln=rFE! RcI*HE002ovPDHLkV1n=+KD+<` delta 659 zcmV;E0&M-m1*-*+B!6;AL_t(&-tC${Xc|!*$G@KT@{b^SLsAmBru2rmwCA8`7o|(r zj&2?fT^!O(js!E_*?EHv$OI-Pht{&BM4o?P`@F8As0YRe1MDU#RgZOgL!PS^FjdcA&Y znn0mY_{{VC`vq@%noK5>jYi`K0C4x)hUa;nfw`3xMNy0k4gf--(9;F$`I#bwkVGQ! zW(*LCM53&iH-AzHhr_P{zykoHD2i4+`LI^Q;qkF)?dJ3pw?{{o{EjG!FUAQFLUybI z7AUunwfyx%>cj*lS}{%<}m|KB`{dE(7aoS^#s^xA&y(#7FrFl zBMCgvLZjVXj9e~85?EWCzQ4C;%X>9v$3uq)2h#~`Z-27`Fxr`ZJ0EUsF_eJGY7aLz z83NeYn7(H+7b^hU0M^$T2Qb@4Z8~zY2f)Pa$R+?=j@GYZF(4L$6XL+QRsi#s#T}0H6$br@fGVZ*?7n$m#-BY>sZ=Z&3 void: txr_states.clear() for fn in image_states: txr_states.append(load(fn)) $done.texture = txr_states[state] + $check.button_pressed = pressed func connect_check(signal_name: StringName, callable: Callable): diff --git a/scenes/tabs-switch/tab-switch.tscn b/scenes/tabs-switch/tab-switch.tscn index 1f9ac378..6f797b06 100644 --- a/scenes/tabs-switch/tab-switch.tscn +++ b/scenes/tabs-switch/tab-switch.tscn @@ -5,7 +5,7 @@ [ext_resource type="PackedScene" uid="uid://lwmw4egynmd1" path="res://scenes/контроль/контроль.tscn" id="3_txp0s"] [ext_resource type="PackedScene" uid="uid://trt0q8th3bn2" path="res://scenes/журнал/журнал.tscn" id="4_cu5k8"] [ext_resource type="PackedScene" uid="uid://dab6loryocc73" path="res://scenes/эмс/эмс.tscn" id="5_u71bh"] -[ext_resource type="PackedScene" uid="uid://musb21x2u0xs" path="res://scenes/эмс2/эмс2.tscn" id="6_41d34"] +[ext_resource type="PackedScene" uid="uid://musb21x2u0xs" path="res://scenes/эмс-тг/эмс-тг.tscn" id="6_41d34"] [ext_resource type="PackedScene" uid="uid://bnptm4rlp60dq" path="res://scenes/настройки/настройки.tscn" id="6_i8iv3"] [ext_resource type="Script" uid="uid://b5ykwyk5vpi6" path="res://scenes/tabs-switch/lbl-ready.gd" id="8_tidwt"] [ext_resource type="Script" uid="uid://roajn6c6wvc1" path="res://scenes/tabs-switch/тренаж-режим.gd" id="9_41d34"] diff --git a/scenes/эмс2/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd similarity index 64% rename from scenes/эмс2/эмс-тг.gd rename to scenes/эмс-тг/эмс-тг.gd index f1a6ecea..3609c2a2 100644 --- a/scenes/эмс2/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -1,14 +1,22 @@ +@tool extends Panel @export var matrix_conf: Array[Texture] ## [0] - чисто, нет конфликта, [1] - есть наложение частот @export var unit_names: Array[StringName] ## Имена устройств +@export_file('*.tscn') var table_headers: Array[String] +@export_file('*.tscn') var table_cells: Array[String] func _ready() -> void: var unit_trassa = network.get_unit_instance('уарэп-трасса') unit_trassa.connect('line_changed', Callable(self, 'on_trassa_line_changed')) signaller.connect('sector_klaster', Callable(self, 'on_sector_klaster').bind(unit_trassa)) + var header_rows = [] + for cell_scn in table_headers: + header_rows.append(load(cell_scn)) + $'таблица/сетка'.set_header(header_rows) + $'таблица/сетка'.pin_header($'таблица', self) func on_trassa_line_changed(_unit_trassa): diff --git a/scenes/эмс2/эмс-тг.gd.uid b/scenes/эмс-тг/эмс-тг.gd.uid similarity index 100% rename from scenes/эмс2/эмс-тг.gd.uid rename to scenes/эмс-тг/эмс-тг.gd.uid diff --git a/scenes/эмс2/эмс2.tscn b/scenes/эмс-тг/эмс-тг.tscn similarity index 58% rename from scenes/эмс2/эмс2.tscn rename to scenes/эмс-тг/эмс-тг.tscn index 8fbfdb2e..6d8151e3 100644 --- a/scenes/эмс2/эмс2.tscn +++ b/scenes/эмс-тг/эмс-тг.tscn @@ -1,43 +1,521 @@ -[gd_scene load_steps=33 format=3 uid="uid://musb21x2u0xs"] +[gd_scene load_steps=35 format=3 uid="uid://musb21x2u0xs"] -[ext_resource type="Texture2D" uid="uid://hkcvl2waf63s" path="res://data/вид сверху.png" id="1_b7vcf"] -[ext_resource type="Script" uid="uid://bvlqgv7aapebl" path="res://scenes/эмс2/эмс-тг.gd" id="1_l3ueu"] -[ext_resource type="Texture2D" uid="uid://0w6q4vfst0ry" path="res://data/OP-63.png" id="3_8gk36"] -[ext_resource type="PackedScene" uid="uid://hr55mkcneaer" path="res://scenes/hranges/panel.tscn" id="3_b5v2s"] -[ext_resource type="Texture2D" uid="uid://busl8rb38lis" path="res://data/матрица-конфликт.png" id="3_l3ueu"] -[ext_resource type="Texture2D" uid="uid://b85f1ne2wrwhg" path="res://data/Состояние РЭС 4.png" id="4_b5v2s"] -[ext_resource type="Texture2D" uid="uid://073el51yholj" path="res://data/454.png" id="4_nqi0i"] -[ext_resource type="Texture2D" uid="uid://cckk3jk5r32bh" path="res://data/ГО.png" id="5_e7tlv"] -[ext_resource type="Texture2D" uid="uid://6ar7sux3vcv1" path="res://data/Состояние РЭС 2.png" id="5_p41nv"] -[ext_resource type="Texture2D" uid="uid://di30dfvbbdnms" path="res://data/Состояние РЭС 1.png" id="6_m57px"] -[ext_resource type="Texture2D" uid="uid://kyrnn1mqpc08" path="res://data/РЛС1.png" id="6_y58bl"] -[ext_resource type="Texture2D" uid="uid://cx0f3wcx76u1k" path="res://data/РЛС2.png" id="7_mxw8g"] -[ext_resource type="Texture2D" uid="uid://duu8q7sv0jwfh" path="res://data/ННВС.png" id="8_q16jd"] -[ext_resource type="Texture2D" uid="uid://c1nld5t17kws3" path="res://data/Состояние ЭМС слабый сигнал.png" id="9_5u4bk"] -[ext_resource type="Texture2D" uid="uid://docnrxrm2f022" path="res://data/Угловой квадрат3.png" id="13_5ifkb"] -[ext_resource type="Texture2D" uid="uid://djv8fkddcjucs" path="res://data/матрица-чисто.png" id="15_2spgl"] -[ext_resource type="Texture2D" uid="uid://d3qui21aom1ac" path="res://data/Квадрат марс 454.png" id="17_p41nv"] -[ext_resource type="Texture2D" uid="uid://cxrggrvx6l22q" path="res://data/Квадрат марс ОР-63.png" id="18_5ifkb"] -[ext_resource type="Texture2D" uid="uid://by6a12oahbg82" path="res://data/Квадрат марс РЛС1.png" id="19_vyjnq"] -[ext_resource type="Texture2D" uid="uid://dwgqofj6yae1v" path="res://data/Квадрат марс РЛС2.png" id="20_68srw"] -[ext_resource type="Texture2D" uid="uid://36xjgea2n22q" path="res://data/Квадрат марс ГО.png" id="21_v6otu"] -[ext_resource type="Texture2D" uid="uid://dsuiytxdnole7" path="res://data/Квадрат марс с трубкой.png" id="22_ufy3d"] -[ext_resource type="Texture2D" uid="uid://b1kuhj03yigih" path="res://data/Квадрат салатный 454.png" id="23_h11e0"] -[ext_resource type="Texture2D" uid="uid://d3v1r4r62na8" path="res://data/Квадрат салатный ОР-63.png" id="24_2pcsf"] -[ext_resource type="Texture2D" uid="uid://ddm55bo28sxcs" path="res://data/Квадрат салатный РЛС1.png" id="25_wmu4u"] -[ext_resource type="Texture2D" uid="uid://dneqjcul4ipub" path="res://data/Квадрат салатный РЛС2.png" id="26_w5eif"] -[ext_resource type="Texture2D" uid="uid://cyb60nh23ys6k" path="res://data/Квадрат салатный ГО.png" id="27_2ft3r"] -[ext_resource type="Texture2D" uid="uid://cw8sd7v5f31ww" path="res://data/Квадрат салатный с трубкой.png" id="28_rra4y"] -[ext_resource type="PackedScene" uid="uid://ch14g46swx74h" path="res://table/header.tscn" id="35_p41nv"] -[ext_resource type="PackedScene" uid="uid://cymcld4mjmlhj" path="res://table/header-image.tscn" id="36_68srw"] -[ext_resource type="PackedScene" uid="uid://dwphmxstaxn4v" path="res://table/lable.tscn" id="36_vyjnq"] -[ext_resource type="PackedScene" uid="uid://cixwl6xi22buo" path="res://scenes/button-six-state/six-state.tscn" id="37_68srw"] +[ext_resource type="Script" uid="uid://bvlqgv7aapebl" path="res://scenes/эмс-тг/эмс-тг.gd" id="1_b7tfl"] +[ext_resource type="Texture2D" uid="uid://djv8fkddcjucs" path="res://data/матрица-чисто.png" id="2_s28jr"] +[ext_resource type="Texture2D" uid="uid://busl8rb38lis" path="res://data/матрица-конфликт.png" id="3_its7t"] +[ext_resource type="Texture2D" uid="uid://hkcvl2waf63s" path="res://data/вид сверху.png" id="4_2hpfp"] +[ext_resource type="Script" uid="uid://c5pq0hbrij34d" path="res://table/table.gd" id="4_bhff3"] +[ext_resource type="PackedScene" uid="uid://hr55mkcneaer" path="res://scenes/hranges/panel.tscn" id="5_6hay3"] +[ext_resource type="Texture2D" uid="uid://docnrxrm2f022" path="res://data/Угловой квадрат3.png" id="6_a0vpj"] +[ext_resource type="Texture2D" uid="uid://cxrggrvx6l22q" path="res://data/Квадрат марс ОР-63.png" id="7_xr3ub"] +[ext_resource type="Texture2D" uid="uid://d3qui21aom1ac" path="res://data/Квадрат марс 454.png" id="8_saoyo"] +[ext_resource type="Texture2D" uid="uid://36xjgea2n22q" path="res://data/Квадрат марс ГО.png" id="9_bqil1"] +[ext_resource type="Texture2D" uid="uid://by6a12oahbg82" path="res://data/Квадрат марс РЛС1.png" id="10_ggqgc"] +[ext_resource type="Texture2D" uid="uid://dwgqofj6yae1v" path="res://data/Квадрат марс РЛС2.png" id="11_xothm"] +[ext_resource type="Texture2D" uid="uid://dsuiytxdnole7" path="res://data/Квадрат марс с трубкой.png" id="12_4rjt3"] +[ext_resource type="Texture2D" uid="uid://d3v1r4r62na8" path="res://data/Квадрат салатный ОР-63.png" id="13_g0j2q"] +[ext_resource type="Texture2D" uid="uid://b1kuhj03yigih" path="res://data/Квадрат салатный 454.png" id="14_crrpm"] +[ext_resource type="Texture2D" uid="uid://cyb60nh23ys6k" path="res://data/Квадрат салатный ГО.png" id="15_0dspi"] +[ext_resource type="Texture2D" uid="uid://ddm55bo28sxcs" path="res://data/Квадрат салатный РЛС1.png" id="16_6042y"] +[ext_resource type="Texture2D" uid="uid://dneqjcul4ipub" path="res://data/Квадрат салатный РЛС2.png" id="17_gvsi1"] +[ext_resource type="Texture2D" uid="uid://cw8sd7v5f31ww" path="res://data/Квадрат салатный с трубкой.png" id="18_p3gp1"] +[ext_resource type="Texture2D" uid="uid://0w6q4vfst0ry" path="res://data/OP-63.png" id="19_o84s0"] +[ext_resource type="Texture2D" uid="uid://b85f1ne2wrwhg" path="res://data/Состояние РЭС 4.png" id="20_nwrva"] +[ext_resource type="Texture2D" uid="uid://6ar7sux3vcv1" path="res://data/Состояние РЭС 2.png" id="21_kcvtj"] +[ext_resource type="Texture2D" uid="uid://di30dfvbbdnms" path="res://data/Состояние РЭС 1.png" id="22_vx0p2"] +[ext_resource type="Texture2D" uid="uid://073el51yholj" path="res://data/454.png" id="23_txey4"] +[ext_resource type="Texture2D" uid="uid://cckk3jk5r32bh" path="res://data/ГО.png" id="24_8mkn8"] +[ext_resource type="Texture2D" uid="uid://c1nld5t17kws3" path="res://data/Состояние ЭМС слабый сигнал.png" id="25_ehxfq"] +[ext_resource type="Texture2D" uid="uid://kyrnn1mqpc08" path="res://data/РЛС1.png" id="26_3yebi"] +[ext_resource type="Texture2D" uid="uid://cx0f3wcx76u1k" path="res://data/РЛС2.png" id="27_3x2eg"] +[ext_resource type="Texture2D" uid="uid://duu8q7sv0jwfh" path="res://data/ННВС.png" id="28_wh3ue"] +[ext_resource type="PackedScene" uid="uid://ch14g46swx74h" path="res://table/header.tscn" id="29_qeixd"] +[ext_resource type="PackedScene" uid="uid://cymcld4mjmlhj" path="res://table/header-image.tscn" id="30_b16f7"] +[ext_resource type="PackedScene" uid="uid://dwphmxstaxn4v" path="res://table/lable.tscn" id="31_2v53x"] +[ext_resource type="PackedScene" uid="uid://cixwl6xi22buo" path="res://scenes/button-six-state/six-state.tscn" id="32_op45j"] -[node name="Panel" type="Panel"] +[sub_resource type="ButtonGroup" id="ButtonGroup_vwsbs"] +allow_unpress = true + +[node name="эмс-тг" type="Panel"] offset_top = 35.0 offset_bottom = 35.0 -script = ExtResource("1_l3ueu") -matrix_conf = Array[Texture]([ExtResource("15_2spgl"), ExtResource("3_l3ueu")]) +script = ExtResource("1_b7tfl") +matrix_conf = Array[Texture]([ExtResource("2_s28jr"), ExtResource("3_its7t")]) +table_headers = Array[String](["uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://cymcld4mjmlhj", "uid://cymcld4mjmlhj"]) +table_cells = Array[String](["uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://cixwl6xi22buo", "uid://cixwl6xi22buo"]) + +[node name="таблица" type="ScrollContainer" parent="."] +layout_mode = 0 +offset_left = 20.0 +offset_top = 780.0 +offset_right = 1180.0 +offset_bottom = 1150.0 +draw_focus_border = true +vertical_scroll_mode = 2 + +[node name="сетка" type="GridContainer" parent="таблица"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +columns = 8 +script = ExtResource("4_bhff3") + +[node name="header0" parent="таблица/сетка" instance=ExtResource("29_qeixd")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 7 +text = "Кластер" + +[node name="header7" parent="таблица/сетка" instance=ExtResource("29_qeixd")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 7 +text = "Состояние" + +[node name="header1" parent="таблица/сетка" instance=ExtResource("29_qeixd")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 7 +text = "Время" + +[node name="header2" parent="таблица/сетка" instance=ExtResource("29_qeixd")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 7 +text = "Азимут" + +[node name="header3" parent="таблица/сетка" instance=ExtResource("29_qeixd")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 7 +text = "Угол места" + +[node name="header4" parent="таблица/сетка" instance=ExtResource("29_qeixd")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 7 +text = "Диапазон" + +[node name="header5" parent="таблица/сетка" instance=ExtResource("30_b16f7")] +layout_mode = 2 +size_flags_vertical = 7 +header_text = "Передача" +image_file = "uid://c73tjrn8gr00o" + +[node name="header6" parent="таблица/сетка" instance=ExtResource("30_b16f7")] +layout_mode = 2 +size_flags_vertical = 7 +header_text = "Приём" +image_file = "uid://c6etralq2tvxg" + +[node name="cell_0_1" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "1" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_1_1" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "Активен" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_2_1" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "00:02" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_3_1" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "0-360" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_4_1" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "19" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_5_1" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2300-2705" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_6_1" parent="таблица/сетка" instance=ExtResource("32_op45j")] +layout_mode = 2 +size_flags_vertical = 7 +state = 1 + +[node name="cell_7_1" parent="таблица/сетка" instance=ExtResource("32_op45j")] +layout_mode = 2 +size_flags_vertical = 7 +state = 1 + +[node name="cell_0_2" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_1_2" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "Активен" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_2_2" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "00:02" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_3_2" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "0-360" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_4_2" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "19" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_5_2" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2300-2705" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_6_2" parent="таблица/сетка" instance=ExtResource("32_op45j")] +layout_mode = 2 +size_flags_vertical = 7 +state = 2 + +[node name="cell_7_2" parent="таблица/сетка" instance=ExtResource("32_op45j")] +layout_mode = 2 +size_flags_vertical = 7 +state = 1 + +[node name="cell_0_3" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "3" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_1_3" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "Удалён" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_2_3" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "00:02" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_3_3" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "0-360" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_4_3" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "19" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_5_3" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2300-2705" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_6_3" parent="таблица/сетка" instance=ExtResource("32_op45j")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_7_3" parent="таблица/сетка" instance=ExtResource("32_op45j")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_0_4" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "4" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_1_4" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "Удалён" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_2_4" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "00:02" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_3_4" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "20-60" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_4_4" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "19" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_5_4" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2300-2705" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_6_4" parent="таблица/сетка" instance=ExtResource("32_op45j")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_7_4" parent="таблица/сетка" instance=ExtResource("32_op45j")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_0_5" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "5" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_1_5" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "Удалён" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_2_5" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "00:02" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_3_5" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "0-360" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_4_5" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "19" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_5_5" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2300-2705" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_6_5" parent="таблица/сетка" instance=ExtResource("32_op45j")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_7_5" parent="таблица/сетка" instance=ExtResource("32_op45j")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_0_6" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "6" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_1_6" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "Активен" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_2_6" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "00:02" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_3_6" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "0-360" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_4_6" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "19" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_5_6" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2300-2705" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_6_6" parent="таблица/сетка" instance=ExtResource("32_op45j")] +layout_mode = 2 +size_flags_vertical = 7 +state = 1 + +[node name="cell_7_6" parent="таблица/сетка" instance=ExtResource("32_op45j")] +layout_mode = 2 +size_flags_vertical = 7 +state = 2 + +[node name="cell_0_7" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "7" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_1_7" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "Активен" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_2_7" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "00:02" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_3_7" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "0-360" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_4_7" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "19" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_5_7" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2300-2705" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_6_7" parent="таблица/сетка" instance=ExtResource("32_op45j")] +layout_mode = 2 +size_flags_vertical = 7 +state = 1 + +[node name="cell_7_7" parent="таблица/сетка" instance=ExtResource("32_op45j")] +layout_mode = 2 +size_flags_vertical = 7 +state = 1 + +[node name="cell_0_8" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "8" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_1_8" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "Удалён" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_2_8" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "00:02" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_3_8" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "0-360" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_4_8" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "19" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_5_8" parent="таблица/сетка" instance=ExtResource("31_2v53x")] +layout_mode = 2 +size_flags_vertical = 7 +text = "2300-2705" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="cell_6_8" parent="таблица/сетка" instance=ExtResource("32_op45j")] +layout_mode = 2 +size_flags_vertical = 7 + +[node name="cell_7_8" parent="таблица/сетка" instance=ExtResource("32_op45j")] +layout_mode = 2 +size_flags_vertical = 7 [node name="кораблик" type="TextureRect" parent="."] modulate = Color(1, 0.596078, 0.4, 1) @@ -48,456 +526,477 @@ offset_right = 2169.0 offset_bottom = 4282.0 rotation = 1.5708 scale = Vector2(0.325, 0.325) -texture = ExtResource("1_b7vcf") +texture = ExtResource("4_2hpfp") expand_mode = 1 -[node name="приём" type="GridContainer" parent="."] +[node name="шкала" type="GridContainer" parent="."] layout_mode = 0 -offset_left = 32.0 +offset_left = 20.0 offset_top = 262.0 -offset_right = 1647.0 +offset_right = 1668.0 offset_bottom = 770.0 scale = Vector2(0.95, 0.95) columns = 2 -[node name="label0" type="Button" parent="приём"] +[node name="label0" type="Button" parent="шкала"] layout_mode = 2 size_flags_vertical = 7 +toggle_mode = true +button_group = SubResource("ButtonGroup_vwsbs") text = "ОР-63" metadata/unit_name = &"ор-63" -[node name="sub0" type="GridContainer" parent="приём"] +[node name="sub0" type="GridContainer" parent="шкала"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="panel_rx" parent="приём/sub0" instance=ExtResource("3_b5v2s")] +[node name="panel_rx" parent="шкала/sub0" instance=ExtResource("5_6hay3")] self_modulate = Color(0.830335, 0.830335, 0.830335, 1) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c73tjrn8gr00o" -[node name="panel_tx" parent="приём/sub0" instance=ExtResource("3_b5v2s")] +[node name="panel_tx" parent="шкала/sub0" instance=ExtResource("5_6hay3")] self_modulate = Color(0.830335, 0.830335, 0.830335, 1) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label1" type="Button" parent="приём"] +[node name="label1" type="Button" parent="шкала"] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 +toggle_mode = true +button_group = SubResource("ButtonGroup_vwsbs") text = "454" metadata/unit_name = &"454" -[node name="sub1" type="GridContainer" parent="приём"] +[node name="sub1" type="GridContainer" parent="шкала"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="panel_rx" parent="приём/sub1" instance=ExtResource("3_b5v2s")] +[node name="panel_rx" parent="шкала/sub1" instance=ExtResource("5_6hay3")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c73tjrn8gr00o" -[node name="panel_tx" parent="приём/sub1" instance=ExtResource("3_b5v2s")] +[node name="panel_tx" parent="шкала/sub1" instance=ExtResource("5_6hay3")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label2" type="Button" parent="приём"] +[node name="label2" type="Button" parent="шкала"] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 +toggle_mode = true +button_group = SubResource("ButtonGroup_vwsbs") text = "ГО" metadata/unit_name = &"го" -[node name="sub2" type="GridContainer" parent="приём"] +[node name="sub2" type="GridContainer" parent="шкала"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="panel_rx" parent="приём/sub2" instance=ExtResource("3_b5v2s")] +[node name="panel_rx" parent="шкала/sub2" instance=ExtResource("5_6hay3")] self_modulate = Color(0.830335, 0.830335, 0.830335, 1) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c73tjrn8gr00o" -[node name="panel_tx" parent="приём/sub2" instance=ExtResource("3_b5v2s")] +[node name="panel_tx" parent="шкала/sub2" instance=ExtResource("5_6hay3")] self_modulate = Color(0.830335, 0.830335, 0.830335, 1) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label3" type="Button" parent="приём"] +[node name="label3" type="Button" parent="шкала"] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 +toggle_mode = true +button_group = SubResource("ButtonGroup_vwsbs") text = "РЛС1" metadata/unit_name = &"рлс1" -[node name="sub3" type="GridContainer" parent="приём"] +[node name="sub3" type="GridContainer" parent="шкала"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="panel_rx" parent="приём/sub3" instance=ExtResource("3_b5v2s")] +[node name="panel_rx" parent="шкала/sub3" instance=ExtResource("5_6hay3")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c73tjrn8gr00o" -[node name="panel_tx" parent="приём/sub3" instance=ExtResource("3_b5v2s")] +[node name="panel_tx" parent="шкала/sub3" instance=ExtResource("5_6hay3")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label4" type="Button" parent="приём"] +[node name="label4" type="Button" parent="шкала"] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 +toggle_mode = true +button_group = SubResource("ButtonGroup_vwsbs") text = "РЛС2" metadata/unit_name = &"рлс2" -[node name="sub4" type="GridContainer" parent="приём"] +[node name="sub4" type="GridContainer" parent="шкала"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="panel_rx" parent="приём/sub4" instance=ExtResource("3_b5v2s")] +[node name="panel_rx" parent="шкала/sub4" instance=ExtResource("5_6hay3")] self_modulate = Color(0.830335, 0.830335, 0.830335, 1) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c73tjrn8gr00o" -[node name="panel_tx" parent="приём/sub4" instance=ExtResource("3_b5v2s")] +[node name="panel_tx" parent="шкала/sub4" instance=ExtResource("5_6hay3")] self_modulate = Color(0.830335, 0.830335, 0.830335, 1) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label5" type="Button" parent="приём"] +[node name="label5" type="Button" parent="шкала"] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 +toggle_mode = true +button_group = SubResource("ButtonGroup_vwsbs") text = "ННВС" metadata/unit_name = &"ннвс" -[node name="sub5" type="GridContainer" parent="приём"] +[node name="sub5" type="GridContainer" parent="шкала"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="panel_rx" parent="приём/sub5" instance=ExtResource("3_b5v2s")] +[node name="panel_rx" parent="шкала/sub5" instance=ExtResource("5_6hay3")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c73tjrn8gr00o" -[node name="panel_tx" parent="приём/sub5" instance=ExtResource("3_b5v2s")] +[node name="panel_tx" parent="шкала/sub5" instance=ExtResource("5_6hay3")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label6" type="Button" parent="приём"] +[node name="label6" type="Button" parent="шкала"] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 +toggle_mode = true +button_group = SubResource("ButtonGroup_vwsbs") text = "Изделие 7" metadata/unit_name = &"изделие7" -[node name="sub6" type="GridContainer" parent="приём"] +[node name="sub6" type="GridContainer" parent="шкала"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="panel_rx" parent="приём/sub6" instance=ExtResource("3_b5v2s")] +[node name="panel_rx" parent="шкала/sub6" instance=ExtResource("5_6hay3")] self_modulate = Color(0.830335, 0.830335, 0.830335, 1) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c73tjrn8gr00o" -[node name="panel_tx" parent="приём/sub6" instance=ExtResource("3_b5v2s")] +[node name="panel_tx" parent="шкала/sub6" instance=ExtResource("5_6hay3")] self_modulate = Color(0.830335, 0.830335, 0.830335, 1) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label7" type="Button" parent="приём"] +[node name="label7" type="Button" parent="шкала"] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 +toggle_mode = true +button_group = SubResource("ButtonGroup_vwsbs") text = "Изделие 8" metadata/unit_name = &"изделие8" -[node name="sub7" type="GridContainer" parent="приём"] +[node name="sub7" type="GridContainer" parent="шкала"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="panel_rx" parent="приём/sub7" instance=ExtResource("3_b5v2s")] +[node name="panel_rx" parent="шкала/sub7" instance=ExtResource("5_6hay3")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c73tjrn8gr00o" -[node name="panel_tx" parent="приём/sub7" instance=ExtResource("3_b5v2s")] +[node name="panel_tx" parent="шкала/sub7" instance=ExtResource("5_6hay3")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" +[node name="фон-матрицы" type="Polygon2D" parent="."] +self_modulate = Color(0.498039, 0.498039, 0.498039, 0.498039) +position = Vector2(400, 0) +polygon = PackedVector2Array(800, 765, 1200, 765, 1200, 1165, 800, 1165) + [node name="матрица" type="GridContainer" parent="."] layout_mode = 0 -offset_left = 1210.0 +offset_left = 1225.0 offset_top = 785.0 -offset_right = 1570.0 +offset_right = 1585.0 offset_bottom = 1145.0 columns = 7 [node name="прм-прд" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("13_5ifkb") +texture = ExtResource("6_a0vpj") [node name="прд-0" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("18_5ifkb") +texture = ExtResource("7_xr3ub") [node name="прд-1" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("17_p41nv") +texture = ExtResource("8_saoyo") [node name="прд-2" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("21_v6otu") +texture = ExtResource("9_bqil1") [node name="прд-3" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("19_vyjnq") +texture = ExtResource("10_ggqgc") [node name="прд-4" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("20_68srw") +texture = ExtResource("11_xothm") [node name="прд-5" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("22_ufy3d") +texture = ExtResource("12_4rjt3") [node name="прм-0" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("24_2pcsf") +texture = ExtResource("13_g0j2q") [node name="матрица-0-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-0-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-0-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("3_its7t") [node name="матрица-0-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-0-4" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-0-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="прм-1" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("23_h11e0") +texture = ExtResource("14_crrpm") [node name="матрица-1-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-1-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-1-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-1-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-1-4" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-1-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="прм-2" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("27_2ft3r") +texture = ExtResource("15_0dspi") [node name="матрица-2-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-2-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-2-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-2-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-2-4" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-2-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="прм-3" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("25_wmu4u") +texture = ExtResource("16_6042y") [node name="матрица-3-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-3-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-3-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-3-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-3-4" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-3-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="прм-4" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("26_w5eif") +texture = ExtResource("17_gvsi1") [node name="матрица-4-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-4-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-4-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-4-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-4-4" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-4-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="прм-5" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("28_rra4y") +texture = ExtResource("18_p3gp1") [node name="матрица-5-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-5-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-5-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-5-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-5-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") [node name="матрица-5-6" type="TextureRect" parent="матрица"] layout_mode = 2 -texture = ExtResource("15_2spgl") +texture = ExtResource("2_s28jr") -[node name="Op-63" type="TextureRect" parent="."] +[node name="ор-63" type="TextureRect" parent="."] layout_mode = 0 offset_left = 125.0 offset_top = 66.0 offset_right = 338.0 offset_bottom = 358.0 scale = Vector2(0.312207, 0.312207) -texture = ExtResource("3_8gk36") +texture = ExtResource("19_o84s0") -[node name="СостояниеРэс44" type="TextureRect" parent="Op-63"] +[node name="приём" type="TextureRect" parent="ор-63"] layout_mode = 0 offset_left = 237.022 offset_top = 227.414 offset_right = 290.022 offset_bottom = 263.414 scale = Vector2(1.77945, 1.77945) -texture = ExtResource("4_b5v2s") +texture = ExtResource("20_nwrva") -[node name="СостояниеРэс24" type="TextureRect" parent="Op-63"] +[node name="передача" type="TextureRect" parent="ор-63"] layout_mode = 0 offset_left = 241.114 offset_top = 147.338 offset_right = 294.114 offset_bottom = 183.338 scale = Vector2(1.77945, 1.77945) -texture = ExtResource("5_p41nv") +texture = ExtResource("21_kcvtj") -[node name="СостояниеРэс2" type="TextureRect" parent="Op-63"] +[node name="насвязи" type="TextureRect" parent="ор-63"] layout_mode = 0 offset_left = 241.115 offset_top = 3.203 offset_right = 269.115 offset_bottom = 23.203 scale = Vector2(3.20301, 3.20301) -texture = ExtResource("6_m57px") +texture = ExtResource("22_vx0p2") [node name="454" type="TextureRect" parent="."] layout_mode = 0 @@ -506,33 +1005,33 @@ offset_top = 66.0 offset_right = 490.0 offset_bottom = 358.0 scale = Vector2(0.312, 0.312) -texture = ExtResource("4_nqi0i") +texture = ExtResource("23_txey4") -[node name="СостояниеРэс45" type="TextureRect" parent="454"] +[node name="приём" type="TextureRect" parent="454"] layout_mode = 0 offset_left = 233.084 offset_top = 208.333 offset_right = 286.084 offset_bottom = 244.333 scale = Vector2(1.78063, 1.78063) -texture = ExtResource("4_b5v2s") +texture = ExtResource("20_nwrva") -[node name="СостояниеРэс25" type="TextureRect" parent="454"] +[node name="передача" type="TextureRect" parent="454"] layout_mode = 0 offset_left = 230.769 offset_top = 128.205 offset_right = 283.769 offset_bottom = 164.205 scale = Vector2(1.78063, 1.78063) -texture = ExtResource("5_p41nv") +texture = ExtResource("21_kcvtj") -[node name="СостояниеРэс3" type="TextureRect" parent="454"] +[node name="насвязи" type="TextureRect" parent="454"] layout_mode = 0 offset_left = 230.769 offset_right = 258.769 offset_bottom = 20.0 scale = Vector2(3.20513, 3.20513) -texture = ExtResource("6_m57px") +texture = ExtResource("22_vx0p2") [node name="Го" type="TextureRect" parent="."] layout_mode = 0 @@ -541,70 +1040,70 @@ offset_top = 67.0 offset_right = 673.0 offset_bottom = 359.0 scale = Vector2(0.312, 0.312) -texture = ExtResource("5_e7tlv") +texture = ExtResource("24_8mkn8") -[node name="СостояниеРэс40" type="TextureRect" parent="Го"] +[node name="приём" type="TextureRect" parent="Го"] layout_mode = 0 offset_left = 233.974 offset_top = 217.949 offset_right = 286.974 offset_bottom = 253.949 scale = Vector2(1.78063, 1.78063) -texture = ExtResource("4_b5v2s") +texture = ExtResource("20_nwrva") -[node name="СостояниеРэс20" type="TextureRect" parent="Го"] +[node name="передача" type="TextureRect" parent="Го"] layout_mode = 0 offset_left = 233.974 offset_top = 150.641 offset_right = 286.974 offset_bottom = 186.641 scale = Vector2(1.78063, 1.78063) -texture = ExtResource("5_p41nv") +texture = ExtResource("21_kcvtj") -[node name="СостояниеЭмсСлабыйСигнал" type="TextureRect" parent="Го"] +[node name="сигнал" type="TextureRect" parent="Го"] layout_mode = 0 offset_left = 233.974 offset_top = 83.3334 offset_right = 261.974 offset_bottom = 103.334 scale = Vector2(3.37683, 3.20513) -texture = ExtResource("9_5u4bk") +texture = ExtResource("25_ehxfq") -[node name="Рлс1" type="TextureRect" parent="."] +[node name="лс1" type="TextureRect" parent="."] layout_mode = 0 offset_left = 639.0 offset_top = 65.0 offset_right = 852.0 offset_bottom = 357.0 scale = Vector2(0.312, 0.312) -texture = ExtResource("6_y58bl") +texture = ExtResource("26_3yebi") -[node name="СостояниеРэс41" type="TextureRect" parent="Рлс1"] +[node name="приём" type="TextureRect" parent="лс1"] layout_mode = 0 offset_left = 233.974 offset_top = 217.948 offset_right = 286.974 offset_bottom = 253.948 scale = Vector2(1.78063, 1.78063) -texture = ExtResource("4_b5v2s") +texture = ExtResource("20_nwrva") -[node name="СостояниеРэс21" type="TextureRect" parent="Рлс1"] +[node name="передача" type="TextureRect" parent="лс1"] layout_mode = 0 offset_left = 233.974 offset_top = 150.641 offset_right = 286.974 offset_bottom = 186.641 scale = Vector2(1.78063, 1.78063) -texture = ExtResource("5_p41nv") +texture = ExtResource("21_kcvtj") -[node name="СостояниеЭмсСлабыйСигнал2" type="TextureRect" parent="Рлс1"] +[node name="сигнал" type="TextureRect" parent="лс1"] layout_mode = 0 offset_left = 233.974 offset_top = 83.3333 offset_right = 261.974 offset_bottom = 103.333 scale = Vector2(3.37683, 3.20513) -texture = ExtResource("9_5u4bk") +texture = ExtResource("25_ehxfq") [node name="Рлс2" type="TextureRect" parent="."] layout_mode = 0 @@ -613,34 +1112,34 @@ offset_top = 65.0 offset_right = 1044.0 offset_bottom = 357.0 scale = Vector2(0.312, 0.312) -texture = ExtResource("7_mxw8g") +texture = ExtResource("27_3x2eg") -[node name="СостояниеРэс42" type="TextureRect" parent="Рлс2"] +[node name="приём" type="TextureRect" parent="Рлс2"] layout_mode = 0 offset_left = 227.564 offset_top = 217.948 offset_right = 280.564 offset_bottom = 253.948 scale = Vector2(1.78063, 1.78063) -texture = ExtResource("4_b5v2s") +texture = ExtResource("20_nwrva") -[node name="СостояниеРэс22" type="TextureRect" parent="Рлс2"] +[node name="передача" type="TextureRect" parent="Рлс2"] layout_mode = 0 offset_left = 227.564 offset_top = 150.641 offset_right = 280.564 offset_bottom = 186.641 scale = Vector2(1.78063, 1.78063) -texture = ExtResource("5_p41nv") +texture = ExtResource("21_kcvtj") -[node name="СостояниеЭмсСлабыйСигнал3" type="TextureRect" parent="Рлс2"] +[node name="сигнал" type="TextureRect" parent="Рлс2"] layout_mode = 0 offset_left = 227.564 offset_top = 83.3333 offset_right = 255.564 offset_bottom = 103.333 scale = Vector2(3.37683, 3.20513) -texture = ExtResource("9_5u4bk") +texture = ExtResource("25_ehxfq") [node name="Ннвс" type="TextureRect" parent="."] layout_mode = 0 @@ -649,25 +1148,25 @@ offset_top = 69.0 offset_right = 1333.0 offset_bottom = 361.0 scale = Vector2(0.312, 0.312) -texture = ExtResource("8_q16jd") +texture = ExtResource("28_wh3ue") -[node name="СостояниеРэс43" type="TextureRect" parent="Ннвс"] +[node name="приём" type="TextureRect" parent="Ннвс"] layout_mode = 0 offset_left = 243.59 offset_top = 214.744 offset_right = 296.59 offset_bottom = 250.744 scale = Vector2(1.78063, 1.78063) -texture = ExtResource("4_b5v2s") +texture = ExtResource("20_nwrva") -[node name="СостояниеРэс23" type="TextureRect" parent="Ннвс"] +[node name="передача" type="TextureRect" parent="Ннвс"] layout_mode = 0 offset_left = 243.59 offset_top = 147.436 offset_right = 296.59 offset_bottom = 183.436 scale = Vector2(1.78063, 1.78063) -texture = ExtResource("5_p41nv") +texture = ExtResource("21_kcvtj") [node name="label8" type="Label" parent="."] layout_mode = 0 @@ -728,467 +1227,3 @@ offset_bottom = 65.0 size_flags_horizontal = 4 size_flags_vertical = 6 text = "ННВС" - -[node name="таблица" type="GridContainer" parent="."] -layout_mode = 0 -offset_left = 35.0 -offset_top = 785.0 -offset_right = 1199.0 -offset_bottom = 1145.0 -columns = 8 - -[node name="header0" parent="таблица" instance=ExtResource("35_p41nv")] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 7 -text = "Кластер" - -[node name="header7" parent="таблица" instance=ExtResource("35_p41nv")] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 7 -text = "Состояние" - -[node name="header1" parent="таблица" instance=ExtResource("35_p41nv")] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 7 -text = "Время" - -[node name="header2" parent="таблица" instance=ExtResource("35_p41nv")] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 7 -text = "Азимут" - -[node name="header3" parent="таблица" instance=ExtResource("35_p41nv")] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 7 -text = "Угол места" - -[node name="header4" parent="таблица" instance=ExtResource("35_p41nv")] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 7 -text = "Диапазон" - -[node name="header5" parent="таблица" instance=ExtResource("36_68srw")] -layout_mode = 2 -size_flags_vertical = 7 -header_text = "Передача" -image_file = "uid://c73tjrn8gr00o" - -[node name="header6" parent="таблица" instance=ExtResource("36_68srw")] -layout_mode = 2 -size_flags_vertical = 7 -header_text = "Приём" -image_file = "uid://c6etralq2tvxg" - -[node name="cell_0_1" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "1" -horizontal_alignment = 1 -vertical_alignment = 1 -metadata/unit_name = &"ОР-63" - -[node name="cell_1_1" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "Активен" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_2_1" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "00:02" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_3_1" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "0-360" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_4_1" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "19" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_5_1" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2300-2705" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_6_1" parent="таблица" instance=ExtResource("37_68srw")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_7_1" parent="таблица" instance=ExtResource("37_68srw")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_0_2" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2" -horizontal_alignment = 1 -vertical_alignment = 1 -metadata/unit_name = &"484" - -[node name="cell_1_2" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "Активен" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_2_2" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "00:02" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_3_2" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "0-360" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_4_2" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "19" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_5_2" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2300-2705" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_6_2" parent="таблица" instance=ExtResource("37_68srw")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_7_2" parent="таблица" instance=ExtResource("37_68srw")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_0_3" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "3" -horizontal_alignment = 1 -vertical_alignment = 1 -metadata/unit_name = &"ГО" - -[node name="cell_1_3" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "Удалён" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_2_3" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "00:02" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_3_3" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "0-360" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_4_3" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "19" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_5_3" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2300-2705" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_6_3" parent="таблица" instance=ExtResource("37_68srw")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_7_3" parent="таблица" instance=ExtResource("37_68srw")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_0_4" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "4" -horizontal_alignment = 1 -vertical_alignment = 1 -metadata/unit_name = &"РЛС1" - -[node name="cell_1_4" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "Удалён" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_2_4" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "00:02" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_3_4" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "20-60" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_4_4" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "19" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_5_4" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2300-2705" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_6_4" parent="таблица" instance=ExtResource("37_68srw")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_7_4" parent="таблица" instance=ExtResource("37_68srw")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_0_5" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "5" -horizontal_alignment = 1 -vertical_alignment = 1 -metadata/unit_name = &"РЛС2" - -[node name="cell_1_5" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "Удалён" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_2_5" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "00:02" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_3_5" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "0-360" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_4_5" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "19" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_5_5" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2300-2705" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_6_5" parent="таблица" instance=ExtResource("37_68srw")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_7_5" parent="таблица" instance=ExtResource("37_68srw")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_0_6" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "6" -horizontal_alignment = 1 -vertical_alignment = 1 -metadata/unit_name = &"ННВС" - -[node name="cell_1_6" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "Активен" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_2_6" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "00:02" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_3_6" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "0-360" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_4_6" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "19" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_5_6" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2300-2705" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_6_6" parent="таблица" instance=ExtResource("37_68srw")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_7_6" parent="таблица" instance=ExtResource("37_68srw")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_0_7" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "7" -horizontal_alignment = 1 -vertical_alignment = 1 -metadata/unit_name = &"Изделие 7" - -[node name="cell_1_7" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "Активен" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_2_7" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "00:02" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_3_7" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "0-360" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_4_7" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "19" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_5_7" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2300-2705" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_6_7" parent="таблица" instance=ExtResource("37_68srw")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_7_7" parent="таблица" instance=ExtResource("37_68srw")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_0_8" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "8" -horizontal_alignment = 1 -vertical_alignment = 1 -metadata/unit_name = &"Изделие 8" - -[node name="cell_1_8" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "Удалён" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_2_8" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "00:02" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_3_8" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "0-360" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_4_8" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "19" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_5_8" parent="таблица" instance=ExtResource("36_vyjnq")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2300-2705" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_6_8" parent="таблица" instance=ExtResource("37_68srw")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_7_8" parent="таблица" instance=ExtResource("37_68srw")] -layout_mode = 2 -size_flags_vertical = 7 diff --git a/scripts/network.gd b/scripts/network.gd index 7ea36cc9..2cbcf401 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -2,6 +2,7 @@ class_name Network extends Node const YAU07_PROTO: = {'yau07tx': yau07.YaU07} +const IYEMS_PROTO: = {'iyems-tx': yems_info.YeMSInfo} const UDP_PROTO: = {'capsrpb': capsrpb.CapsRpb, 'trassa': trassa.Trassa} const TCP_PROTO: = {'5p28': tcp5p28.TCP5P28} const SERIAL_PROTO: = {'spt25': spt25.SPT25} diff --git a/scripts/settings.gd b/scripts/settings.gd index 1072da31..0aa2cacd 100644 --- a/scripts/settings.gd +++ b/scripts/settings.gd @@ -26,7 +26,9 @@ var UnitProfiles: Dictionary[StringName, Array] = { \ 'уарэп-яу07-3н': ['yau07tx', ['10.1.1.31', 50031, false, false], 'IP-адрес прибора ПРД-Н3'], 'уарэп-яу07-3к': ['yau07tx', ['10.1.1.33', 50033, false, false], 'IP-адрес прибора ПРД-К3'], 'навигация': ['navi', ['*', 60000, true, true ], 'IP-адрес на котором принимают сообщения от навигации'], - 'ор-63': ['iyems-rx', [ '192.168.10.1', 60001 ], 'IP-адрес для приёма докладов от информационному ЭМС устройств'], + + # <Название: > + 'ор-63': ['iyems-tx', [ '192.168.10.1', 60001 ], 'IP-адрес для приёма докладов от информационному ЭМС устройств'], '454': ['iyems-tx', ['192.168.10.2', 60002 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'го': ['iyems-tx', ['192.168.10.3', 60003 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'рлс1': ['iyems-tx', ['192.168.10.4', 60004 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], diff --git a/scripts/yems-info.gd b/scripts/yems-info.gd new file mode 100644 index 00000000..040ca23c --- /dev/null +++ b/scripts/yems-info.gd @@ -0,0 +1,25 @@ +extends Node + + +class YeMSInfo extends unit.Unit: + static var json_conv: = JSON.new() + var online_timeout: float = 5000 ## Должен быть равен наибольшему времени дотоверности из всех кластеров + var info: = Dictionary() + func parse(data: PackedByteArray, now_tick: int): + self.rx_tick = now_tick + if not online: + online = true + emit_signal('line_changed', self) + var utf8_data: = data.get_string_from_utf8() + if Error.OK == json_conv.parse(utf8_data): + info.merge(json_conv.get_data(), true) + emit_signal('data_received', self) + else: + var msg = json_conv.get_error_message() + emit_signal('parse_error', self, msg) + + func process(now_tick: int): + if online and ((now_tick - rx_tick) > online_timeout): + online = false + emit_signal('line_changed', self) + return Error.ERR_BUSY diff --git a/scripts/yems-info.gd.uid b/scripts/yems-info.gd.uid new file mode 100644 index 00000000..ee7b1505 --- /dev/null +++ b/scripts/yems-info.gd.uid @@ -0,0 +1 @@ +uid://bst5wk3otwwai diff --git a/table/header-image.tscn b/table/header-image.tscn index f7e5d33f..7bfbaabb 100644 --- a/table/header-image.tscn +++ b/table/header-image.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=3 format=3 uid="uid://cymcld4mjmlhj"] +[gd_scene load_steps=4 format=3 uid="uid://cymcld4mjmlhj"] [ext_resource type="Texture2D" uid="uid://c73tjrn8gr00o" path="res://data/Передатчик.png" id="1_nbmfn"] @@ -28,9 +28,16 @@ func _enter_tree() -> void: $label.text = header_text " +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_nbmfn"] +bg_color = Color(0.741395, 0.468103, 0.328942, 1) +corner_radius_top_left = 4 +corner_radius_top_right = 4 +corner_radius_bottom_right = 4 +corner_radius_bottom_left = 4 + [node name="header-image" type="GridContainer"] offset_right = 91.0 -offset_bottom = 19.0 +offset_bottom = 25.0 columns = 2 script = SubResource("GDScript_63652") @@ -43,5 +50,8 @@ expand_mode = 3 [node name="label" type="Label" parent="."] layout_mode = 2 size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_styles/normal = SubResource("StyleBoxFlat_nbmfn") horizontal_alignment = 1 vertical_alignment = 1 diff --git a/table/lable.tscn b/table/lable.tscn index 17064cc1..43d2ec80 100644 --- a/table/lable.tscn +++ b/table/lable.tscn @@ -25,15 +25,6 @@ func _init() -> void: var style_dark: = style_light.duplicate(true) style_dark.bg_color = Color(0.12, 0.12, 0.12) styles[0] = style_dark - ProjectSettings.connect('settings_changed', apply_colors) - apply_colors() - - -func apply_colors(): - if ProjectSettings.get_setting('application/config/%s' % 'Цвет темы программы', false): - add_theme_stylebox_override('normal', styles[1]) - else: - add_theme_stylebox_override('normal', styles[0]) " [node name="Lable" type="Label"] diff --git a/table/table.gd b/table/table.gd index de9c3aca..66f782a5 100644 --- a/table/table.gd +++ b/table/table.gd @@ -414,6 +414,7 @@ func _on_focus_entered(node): ## func set_header(header_types: Array): + _assert(header_types.size() > 0, 'количество колонок в заголовке: %d' % [header_types.size()]) _assert(header_types.size() < MAX_INDEX, 'количество колонок в заголовке: %d больше допустимого: %d' % [header_types.size(), MAX_INDEX + 1]) if columns == 1: set_columns(header_types.size()) From dac79875854c3ff763de67df8b913cb931597cc6 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 19 Mar 2026 09:18:32 +0300 Subject: [PATCH 14/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D0=AD=D0=9C?= =?UTF-8?q?=D0=A1-=D0=A2=D0=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 46 ++-- scenes/эмс-тг/эмс-тг.tscn | 506 ++------------------------------------ scripts/network.gd | 29 ++- scripts/settings.gd | 19 +- table/header-image.tscn | 17 +- table/table.gd | 56 ++++- 6 files changed, 153 insertions(+), 520 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 3609c2a2..26c4c5b7 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -3,25 +3,43 @@ extends Panel @export var matrix_conf: Array[Texture] ## [0] - чисто, нет конфликта, [1] - есть наложение частот -@export var unit_names: Array[StringName] ## Имена устройств +@export var index_to_unit_names: Array[StringName] ## Имена устройств (Индекс -> Имя устройства) @export_file('*.tscn') var table_headers: Array[String] @export_file('*.tscn') var table_cells: Array[String] +@export_file('*.png') var image_file_rx: String +@export_file('*.png') var image_file_tx: String +@export var table_column_widths: Array[int] +@export var table_header_widths: Array[int] +@export var table_header_text: Array[String] +var table_cell_row: Array +var name_to_index: Dictionary[StringName, int] ## Имена устройств (Имя устройства -> Индекс) func _ready() -> void: - var unit_trassa = network.get_unit_instance('уарэп-трасса') - unit_trassa.connect('line_changed', Callable(self, 'on_trassa_line_changed')) - signaller.connect('sector_klaster', Callable(self, 'on_sector_klaster').bind(unit_trassa)) - var header_rows = [] + for i in index_to_unit_names.size(): + var nm: = index_to_unit_names[i] + name_to_index[nm] = i + var header_row: = [] for cell_scn in table_headers: - header_rows.append(load(cell_scn)) - $'таблица/сетка'.set_header(header_rows) - $'таблица/сетка'.pin_header($'таблица', self) + header_row.append(load(cell_scn)) + for cell_scn in table_cells: + table_cell_row.append(load(cell_scn)) + + $'таблица/сетка'.set_header(header_row) + $'таблица/сетка'.set_header_text(table_header_text) + $'таблица/сетка'.set_header_property(6, 'image_file', image_file_rx) + $'таблица/сетка'.set_header_property(7, 'image_file', image_file_tx) + + $'таблица/сетка'.set_headers_min_size(table_header_widths) + $'таблица/сетка'.set_columns_min_size(table_column_widths) + $'таблица/сетка'.set_rows_min_hight(32) + $'таблица/сетка'.set_header_min_hight(32) + $'таблица/сетка'.pin_header2() + + for nm in index_to_unit_names: + var yems_unit = network.get_unit_instance(nm) + yems_unit.connect('data_received', on_data_received.bind(nm)) -func on_trassa_line_changed(_unit_trassa): - pass - - -func on_sector_klaster(_data, _unit_trassa): - pass +func on_data_received(data, nm): + print_debug('%s: %d' % [nm, len(data)]) diff --git a/scenes/эмс-тг/эмс-тг.tscn b/scenes/эмс-тг/эмс-тг.tscn index 6d8151e3..2ecf61bb 100644 --- a/scenes/эмс-тг/эмс-тг.tscn +++ b/scenes/эмс-тг/эмс-тг.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=35 format=3 uid="uid://musb21x2u0xs"] +[gd_scene load_steps=31 format=3 uid="uid://musb21x2u0xs"] [ext_resource type="Script" uid="uid://bvlqgv7aapebl" path="res://scenes/эмс-тг/эмс-тг.gd" id="1_b7tfl"] [ext_resource type="Texture2D" uid="uid://djv8fkddcjucs" path="res://data/матрица-чисто.png" id="2_s28jr"] @@ -29,10 +29,6 @@ [ext_resource type="Texture2D" uid="uid://kyrnn1mqpc08" path="res://data/РЛС1.png" id="26_3yebi"] [ext_resource type="Texture2D" uid="uid://cx0f3wcx76u1k" path="res://data/РЛС2.png" id="27_3x2eg"] [ext_resource type="Texture2D" uid="uid://duu8q7sv0jwfh" path="res://data/ННВС.png" id="28_wh3ue"] -[ext_resource type="PackedScene" uid="uid://ch14g46swx74h" path="res://table/header.tscn" id="29_qeixd"] -[ext_resource type="PackedScene" uid="uid://cymcld4mjmlhj" path="res://table/header-image.tscn" id="30_b16f7"] -[ext_resource type="PackedScene" uid="uid://dwphmxstaxn4v" path="res://table/lable.tscn" id="31_2v53x"] -[ext_resource type="PackedScene" uid="uid://cixwl6xi22buo" path="res://scenes/button-six-state/six-state.tscn" id="32_op45j"] [sub_resource type="ButtonGroup" id="ButtonGroup_vwsbs"] allow_unpress = true @@ -42,14 +38,20 @@ offset_top = 35.0 offset_bottom = 35.0 script = ExtResource("1_b7tfl") matrix_conf = Array[Texture]([ExtResource("2_s28jr"), ExtResource("3_its7t")]) +index_to_unit_names = Array[StringName]([&"эмс-ор63", &"эмс-454", &"эмс-го", &"эмс-рлс1", &"эмс-рлс2", &"эмс-ннвс", &"эмс-изделие7", &"эмс-изделие8"]) table_headers = Array[String](["uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://cymcld4mjmlhj", "uid://cymcld4mjmlhj"]) table_cells = Array[String](["uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://cixwl6xi22buo", "uid://cixwl6xi22buo"]) +image_file_rx = "uid://c6etralq2tvxg" +image_file_tx = "uid://c73tjrn8gr00o" +table_column_widths = Array[int]([134, 134, 134, 134, 134, 134, 134, 134]) +table_header_widths = Array[int]([136, 136, 136, 136, 136, 136, 136, 136]) +table_header_text = Array[String](["Кластер", "Состояние", "Время", "Азимут", "Угол места", "Диапазон", "Приём", "Передача"]) [node name="таблица" type="ScrollContainer" parent="."] layout_mode = 0 offset_left = 20.0 -offset_top = 780.0 -offset_right = 1180.0 +offset_top = 800.0 +offset_right = 1190.0 offset_bottom = 1150.0 draw_focus_border = true vertical_scroll_mode = 2 @@ -61,462 +63,6 @@ size_flags_vertical = 3 columns = 8 script = ExtResource("4_bhff3") -[node name="header0" parent="таблица/сетка" instance=ExtResource("29_qeixd")] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 7 -text = "Кластер" - -[node name="header7" parent="таблица/сетка" instance=ExtResource("29_qeixd")] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 7 -text = "Состояние" - -[node name="header1" parent="таблица/сетка" instance=ExtResource("29_qeixd")] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 7 -text = "Время" - -[node name="header2" parent="таблица/сетка" instance=ExtResource("29_qeixd")] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 7 -text = "Азимут" - -[node name="header3" parent="таблица/сетка" instance=ExtResource("29_qeixd")] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 7 -text = "Угол места" - -[node name="header4" parent="таблица/сетка" instance=ExtResource("29_qeixd")] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 7 -text = "Диапазон" - -[node name="header5" parent="таблица/сетка" instance=ExtResource("30_b16f7")] -layout_mode = 2 -size_flags_vertical = 7 -header_text = "Передача" -image_file = "uid://c73tjrn8gr00o" - -[node name="header6" parent="таблица/сетка" instance=ExtResource("30_b16f7")] -layout_mode = 2 -size_flags_vertical = 7 -header_text = "Приём" -image_file = "uid://c6etralq2tvxg" - -[node name="cell_0_1" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "1" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_1_1" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "Активен" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_2_1" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "00:02" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_3_1" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "0-360" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_4_1" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "19" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_5_1" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2300-2705" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_6_1" parent="таблица/сетка" instance=ExtResource("32_op45j")] -layout_mode = 2 -size_flags_vertical = 7 -state = 1 - -[node name="cell_7_1" parent="таблица/сетка" instance=ExtResource("32_op45j")] -layout_mode = 2 -size_flags_vertical = 7 -state = 1 - -[node name="cell_0_2" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_1_2" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "Активен" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_2_2" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "00:02" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_3_2" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "0-360" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_4_2" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "19" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_5_2" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2300-2705" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_6_2" parent="таблица/сетка" instance=ExtResource("32_op45j")] -layout_mode = 2 -size_flags_vertical = 7 -state = 2 - -[node name="cell_7_2" parent="таблица/сетка" instance=ExtResource("32_op45j")] -layout_mode = 2 -size_flags_vertical = 7 -state = 1 - -[node name="cell_0_3" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "3" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_1_3" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "Удалён" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_2_3" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "00:02" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_3_3" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "0-360" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_4_3" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "19" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_5_3" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2300-2705" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_6_3" parent="таблица/сетка" instance=ExtResource("32_op45j")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_7_3" parent="таблица/сетка" instance=ExtResource("32_op45j")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_0_4" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "4" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_1_4" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "Удалён" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_2_4" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "00:02" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_3_4" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "20-60" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_4_4" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "19" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_5_4" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2300-2705" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_6_4" parent="таблица/сетка" instance=ExtResource("32_op45j")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_7_4" parent="таблица/сетка" instance=ExtResource("32_op45j")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_0_5" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "5" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_1_5" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "Удалён" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_2_5" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "00:02" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_3_5" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "0-360" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_4_5" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "19" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_5_5" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2300-2705" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_6_5" parent="таблица/сетка" instance=ExtResource("32_op45j")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_7_5" parent="таблица/сетка" instance=ExtResource("32_op45j")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_0_6" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "6" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_1_6" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "Активен" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_2_6" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "00:02" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_3_6" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "0-360" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_4_6" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "19" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_5_6" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2300-2705" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_6_6" parent="таблица/сетка" instance=ExtResource("32_op45j")] -layout_mode = 2 -size_flags_vertical = 7 -state = 1 - -[node name="cell_7_6" parent="таблица/сетка" instance=ExtResource("32_op45j")] -layout_mode = 2 -size_flags_vertical = 7 -state = 2 - -[node name="cell_0_7" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "7" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_1_7" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "Активен" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_2_7" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "00:02" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_3_7" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "0-360" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_4_7" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "19" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_5_7" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2300-2705" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_6_7" parent="таблица/сетка" instance=ExtResource("32_op45j")] -layout_mode = 2 -size_flags_vertical = 7 -state = 1 - -[node name="cell_7_7" parent="таблица/сетка" instance=ExtResource("32_op45j")] -layout_mode = 2 -size_flags_vertical = 7 -state = 1 - -[node name="cell_0_8" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "8" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_1_8" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "Удалён" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_2_8" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "00:02" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_3_8" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "0-360" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_4_8" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "19" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_5_8" parent="таблица/сетка" instance=ExtResource("31_2v53x")] -layout_mode = 2 -size_flags_vertical = 7 -text = "2300-2705" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="cell_6_8" parent="таблица/сетка" instance=ExtResource("32_op45j")] -layout_mode = 2 -size_flags_vertical = 7 - -[node name="cell_7_8" parent="таблица/сетка" instance=ExtResource("32_op45j")] -layout_mode = 2 -size_flags_vertical = 7 - [node name="кораблик" type="TextureRect" parent="."] modulate = Color(1, 0.596078, 0.4, 1) layout_mode = 0 @@ -532,19 +78,19 @@ expand_mode = 1 [node name="шкала" type="GridContainer" parent="."] layout_mode = 0 offset_left = 20.0 -offset_top = 262.0 +offset_top = 240.0 offset_right = 1668.0 -offset_bottom = 770.0 +offset_bottom = 771.0 scale = Vector2(0.95, 0.95) columns = 2 -[node name="label0" type="Button" parent="шкала"] +[node name="label0" type="Button" parent="шкала" groups=["ряд-шкалы"]] layout_mode = 2 size_flags_vertical = 7 toggle_mode = true button_group = SubResource("ButtonGroup_vwsbs") text = "ОР-63" -metadata/unit_name = &"ор-63" +metadata/unit_name = &"эмс-ор63" [node name="sub0" type="GridContainer" parent="шкала"] layout_mode = 2 @@ -565,19 +111,19 @@ size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label1" type="Button" parent="шкала"] +[node name="label1" type="Button" parent="шкала" groups=["ряд-шкалы"]] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 toggle_mode = true button_group = SubResource("ButtonGroup_vwsbs") text = "454" -metadata/unit_name = &"454" [node name="sub1" type="GridContainer" parent="шкала"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 +metadata/unit_name = &"эмс-454" [node name="panel_rx" parent="шкала/sub1" instance=ExtResource("5_6hay3")] layout_mode = 2 @@ -591,19 +137,20 @@ size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label2" type="Button" parent="шкала"] +[node name="label2" type="Button" parent="шкала" groups=["ряд-шкалы"]] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 toggle_mode = true button_group = SubResource("ButtonGroup_vwsbs") text = "ГО" -metadata/unit_name = &"го" +metadata/unit_name = &"эмс-го" [node name="sub2" type="GridContainer" parent="шкала"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 +metadata/unit_name = &"" [node name="panel_rx" parent="шкала/sub2" instance=ExtResource("5_6hay3")] self_modulate = Color(0.830335, 0.830335, 0.830335, 1) @@ -619,14 +166,14 @@ size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label3" type="Button" parent="шкала"] +[node name="label3" type="Button" parent="шкала" groups=["ряд-шкалы"]] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 toggle_mode = true button_group = SubResource("ButtonGroup_vwsbs") text = "РЛС1" -metadata/unit_name = &"рлс1" +metadata/unit_name = &"эмс-рлс1" [node name="sub3" type="GridContainer" parent="шкала"] layout_mode = 2 @@ -645,14 +192,14 @@ size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label4" type="Button" parent="шкала"] +[node name="label4" type="Button" parent="шкала" groups=["ряд-шкалы"]] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 toggle_mode = true button_group = SubResource("ButtonGroup_vwsbs") text = "РЛС2" -metadata/unit_name = &"рлс2" +metadata/unit_name = &"эмс-рлс2" [node name="sub4" type="GridContainer" parent="шкала"] layout_mode = 2 @@ -673,14 +220,13 @@ size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label5" type="Button" parent="шкала"] +[node name="label5" type="Button" parent="шкала" groups=["ряд-шкалы"]] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 toggle_mode = true button_group = SubResource("ButtonGroup_vwsbs") text = "ННВС" -metadata/unit_name = &"ннвс" [node name="sub5" type="GridContainer" parent="шкала"] layout_mode = 2 @@ -699,7 +245,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label6" type="Button" parent="шкала"] +[node name="label6" type="Button" parent="шкала" groups=["ряд-шкалы"]] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 @@ -727,7 +273,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label7" type="Button" parent="шкала"] +[node name="label7" type="Button" parent="шкала" groups=["ряд-шкалы"]] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 @@ -808,7 +354,7 @@ texture = ExtResource("2_s28jr") [node name="матрица-0-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("3_its7t") +texture = ExtResource("2_s28jr") [node name="матрица-0-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] layout_mode = 2 diff --git a/scripts/network.gd b/scripts/network.gd index 2cbcf401..2a20876c 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -1,8 +1,7 @@ @tool class_name Network extends Node -const YAU07_PROTO: = {'yau07tx': yau07.YaU07} -const IYEMS_PROTO: = {'iyems-tx': yems_info.YeMSInfo} +const YAU07_PROTO: = {'yau07tx': yau07.YaU07, 'iyems-tx': yems_info.YeMSInfo} const UDP_PROTO: = {'capsrpb': capsrpb.CapsRpb, 'trassa': trassa.Trassa} const TCP_PROTO: = {'5p28': tcp5p28.TCP5P28} const SERIAL_PROTO: = {'spt25': spt25.SPT25} @@ -147,12 +146,15 @@ func create_socket_udp(unit_name: StringName) -> SocketUDP: var bind = st[3] var sock: = SocketUDP.new() sock.set_broadcast_enabled(broad) - var rc: = sock.bind(port, addr) - if rc == Error.OK: - log.info('\"%s\" привязан к %s:%d' % [unit_name, addr, port]) - else: - var errmsg: = error_string(rc) - log.error('привязка \"%s\" к %s:%d не удалась: \"%s\"' % [unit_name, addr, port, errmsg]) + if broad: + log.info('\"%s\" - установлен широковещательный режим' % unit_name) + if bind: + var rc: = sock.bind(port, addr) + if rc == Error.OK: + log.info('\"%s\" привязан к %s:%d' % [unit_name, addr, port]) + else: + var errmsg: = error_string(rc) + log.error('привязка \"%s\" к %s:%d не удалась: \"%s\"' % [unit_name, addr, port, errmsg]) return sock @@ -198,7 +200,8 @@ func _ready() -> void: var sock_navi: = create_socket_udp('навигация') var sock_caps: = create_socket_caps('уарэп-капсрпб') var sock_trassa: = create_socket_caps('уарэп-трасса') - poll_sockets = [sock_unicast, sock_broadcast, sock_caps, sock_navi, sock_trassa] + var sock_yems: = create_socket_udp('эмс-ведущий') + poll_sockets = [sock_unicast, sock_broadcast, sock_caps, sock_navi, sock_trassa, sock_yems] send_sockets['уарэп-яу07-частный'] = sock_unicast send_sockets['уарэп-яу07-общий'] = sock_broadcast send_sockets['уарэп-капсрпб'] = sock_caps @@ -216,6 +219,14 @@ func _ready() -> void: send_sockets['уарэп-яу07-3в'] = sock_unicast send_sockets['уарэп-яу07-3н'] = sock_unicast send_sockets['уарэп-яу07-3к'] = sock_unicast + send_sockets['эмс-ор63'] = sock_yems + send_sockets['эмс-454'] = sock_yems + send_sockets['эмс-го'] = sock_yems + send_sockets['эмс-рлс1'] = sock_yems + send_sockets['эмс-рлс2'] = sock_yems + send_sockets['эмс-ннвс'] = sock_yems + send_sockets['эмс-изделие7'] = sock_yems + send_sockets['эмс-изделие8'] = sock_yems var bind_serials: = [] var bind_modbuses: = [] diff --git a/scripts/settings.gd b/scripts/settings.gd index 0aa2cacd..57fffc36 100644 --- a/scripts/settings.gd +++ b/scripts/settings.gd @@ -27,15 +27,16 @@ var UnitProfiles: Dictionary[StringName, Array] = { \ 'уарэп-яу07-3к': ['yau07tx', ['10.1.1.33', 50033, false, false], 'IP-адрес прибора ПРД-К3'], 'навигация': ['navi', ['*', 60000, true, true ], 'IP-адрес на котором принимают сообщения от навигации'], - # <Название: > - 'ор-63': ['iyems-tx', [ '192.168.10.1', 60001 ], 'IP-адрес для приёма докладов от информационному ЭМС устройств'], - '454': ['iyems-tx', ['192.168.10.2', 60002 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'го': ['iyems-tx', ['192.168.10.3', 60003 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'рлс1': ['iyems-tx', ['192.168.10.4', 60004 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'рлс2': ['iyems-tx', ['192.168.10.5', 60005 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'ннвс': ['iyems-tx', ['192.168.10.6', 60006 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'изделие7': ['iyems-tx', ['192.168.10.7', 60007 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'изделие8': ['iyems-tx', ['192.168.10.8', 60008 ], 'IP-адрес для передачи команд информационному ЭМС устройству'], + # < Название: [протокол, [адрес, порт, широковещательное, привязывать], комментарий > + 'эмс-ведущий': ['iyems-rx', ['192.168.10.1', 61000, false, true], 'IP-адрес для приёма докладов от информационных ЭМС устройств'], + 'эмс-ор63': ['iyems-tx', ['192.168.10.1', 61001, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-454': ['iyems-tx', ['192.168.10.2', 61002, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-го': ['iyems-tx', ['192.168.10.3', 61003, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-рлс1': ['iyems-tx', ['192.168.10.4', 61004, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-рлс2': ['iyems-tx', ['192.168.10.5', 61005, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-ннвс': ['iyems-tx', ['192.168.10.6', 61006, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-изделие7': ['iyems-tx', ['192.168.10.7', 61007, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-изделие8': ['iyems-tx', ['192.168.10.8', 61008, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], # < Название: Протокол, < Адрес, Порт получения >, Комментарий > 'уарэп-5п28': ['5p28', ['127.0.0.1', 50000], 'IP-адрес комплекса 5П-28'], diff --git a/table/header-image.tscn b/table/header-image.tscn index 7bfbaabb..c57f29c2 100644 --- a/table/header-image.tscn +++ b/table/header-image.tscn @@ -5,13 +5,13 @@ [sub_resource type="GDScript" id="GDScript_63652"] script/source = "extends GridContainer -@export var header_text: String: +@export var text: String: set(val): - header_text = val + text = val if is_inside_tree(): $label.text = val get: - return header_text + return text @export_file var image_file: String: @@ -24,8 +24,9 @@ script/source = "extends GridContainer func _enter_tree() -> void: - $image.texture = load(image_file) - $label.text = header_text + if ResourceLoader.exists(image_file): + $image.texture = load(image_file) + $label.text = text " [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_nbmfn"] @@ -36,8 +37,10 @@ corner_radius_bottom_right = 4 corner_radius_bottom_left = 4 [node name="header-image" type="GridContainer"] -offset_right = 91.0 -offset_bottom = 25.0 +offset_right = 100.0 +offset_bottom = 19.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 columns = 2 script = SubResource("GDScript_63652") diff --git a/table/table.gd b/table/table.gd index 66f782a5..28f1ab26 100644 --- a/table/table.gd +++ b/table/table.gd @@ -59,18 +59,35 @@ func _assert(val: bool, msg: String = '<не указано>'): get_tree().quit(1) +func set_columns_min_size_auto(cc: int): + if cc <= 0: return + var sizes: = Array() + sizes.resize(cc) + sizes.fill(size.x / cc) + set_columns_min_size(sizes) + + ## Закрепляет заголовок таблицы.[br] ## [param scrl] - Прокрутка родитель таблицы.[br] ## [param prnt] - Родитель прокрутки.[br] func pin_header(scrl: ScrollContainer, prnt: Control): scrl.remove_child(header) prnt.add_child(header) - var v_separation = get_theme_constant('v_separation') + var v_separation: = get_theme_constant('v_separation') header.position = scrl.position - Vector2(0, header.size.y + v_separation) scroll = scrl scroll_adj = scrl.position +## Закрепляет заголовок таблицы.[br] +## GridView должен лежать на Scrol. Scrol должен иметь родителя +func pin_header2(): + var scrl = get_parent() + var prnt = scrl.get_parent() + pin_header(scrl, prnt) + header.size.x = scrl.size.x + + ## Перемещает указатель на одну строку вверх func selector_up(): var i_rows: = [] @@ -189,6 +206,17 @@ func set_node_property(i_col: int, i_row: int, pname: String, val) -> void: node.set(pname, val) +## Устанавливает свойство ячейки заголовка[br] +## [param i_col] - Индекс колонки.[br] +## [param pname] - Имя свойства.[br] +## [param val] - Значение свойства.[br] +## [i]Свойство[/i] [param pname] [i]ячейки должно существовать.[/i] +func set_header_property(i_col: int, pname: String, val) -> void: + var key: = get_node_key(HEAD_KEY_FORMAT, i_col, 0) + var node = nodes[key] + node.set(pname, val) + + ## Возвращает значение поля ячейки.[br] ## [param pname] - Имя поля.[br] ## [param i_col] - Индекс колонки.[br] @@ -232,6 +260,13 @@ func set_columns_min_size(sizes: Array) -> void: set_nodes_min_size(0, sizes, HEAD_KEY_FORMAT) +func set_headers_min_size(sizes: Array) -> void: + for i_col in columns: + var key: = get_node_key(HEAD_KEY_FORMAT, i_col, 0) + var node = nodes[key] + node.custom_minimum_size.x = sizes[i_col] + node.set_deferred('size.x', sizes[i_col]) + ## func set_columns_aligment(alignments: Array) -> void: var rows_count: = get_rows_count() @@ -574,6 +609,25 @@ func set_nodes_min_size(i_row: int, sizes: Array, key_format: String = NODE_KEY_ node.set_deferred('size.x', sizes[i_col]) +## [param i_row] - Индекс ряда. +func set_rows_min_hight(hight: int) -> void: + var rows_count = get_rows_count() + for i_row in rows_count: + for i_col in columns: + var key: = get_node_key(NODE_KEY_FORMAT, i_col, i_row) + var node = nodes[key] + node.custom_minimum_size.y = hight + node.set_deferred('size.y', hight) + + +func set_header_min_hight(hight: int): + for i_col in columns: + var key: = get_node_key(HEAD_KEY_FORMAT, i_col, 0) + var node = nodes[key] + node.custom_minimum_size.y = hight + node.set_deferred('size.y', hight) + + ## [param i_col] - Индекс колонки.[br][param i_row] - Индекс ряда. func set_node_text(i_col: int, i_row: int, val: String) -> void: var key: = get_node_key(NODE_KEY_FORMAT, i_col, i_row) From aea48c7d9e583370bc60600dfe9f5f0ff8d64df9 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 19 Mar 2026 10:31:23 +0300 Subject: [PATCH 15/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D0=AD=D0=9C?= =?UTF-8?q?=D0=A1-=D0=A2=D0=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 2 +- scripts/settings.gd | 16 ++++++++-------- scripts/yems-info.gd | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 26c4c5b7..7a40831a 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -42,4 +42,4 @@ func _ready() -> void: func on_data_received(data, nm): - print_debug('%s: %d' % [nm, len(data)]) + print_debug('%s %s' % [nm, data]) diff --git a/scripts/settings.gd b/scripts/settings.gd index 57fffc36..1e1ef401 100644 --- a/scripts/settings.gd +++ b/scripts/settings.gd @@ -29,14 +29,14 @@ var UnitProfiles: Dictionary[StringName, Array] = { \ # < Название: [протокол, [адрес, порт, широковещательное, привязывать], комментарий > 'эмс-ведущий': ['iyems-rx', ['192.168.10.1', 61000, false, true], 'IP-адрес для приёма докладов от информационных ЭМС устройств'], - 'эмс-ор63': ['iyems-tx', ['192.168.10.1', 61001, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'эмс-454': ['iyems-tx', ['192.168.10.2', 61002, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'эмс-го': ['iyems-tx', ['192.168.10.3', 61003, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'эмс-рлс1': ['iyems-tx', ['192.168.10.4', 61004, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'эмс-рлс2': ['iyems-tx', ['192.168.10.5', 61005, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'эмс-ннвс': ['iyems-tx', ['192.168.10.6', 61006, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'эмс-изделие7': ['iyems-tx', ['192.168.10.7', 61007, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'эмс-изделие8': ['iyems-tx', ['192.168.10.8', 61008, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-ор63': ['iyems-tx', ['192.168.10.2', 61001, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-454': ['iyems-tx', ['192.168.10.3', 61002, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-го': ['iyems-tx', ['192.168.10.4', 61003, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-рлс1': ['iyems-tx', ['192.168.10.5', 61004, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-рлс2': ['iyems-tx', ['192.168.10.6', 61005, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-ннвс': ['iyems-tx', ['192.168.10.7', 61006, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-изделие7': ['iyems-tx', ['192.168.10.8', 61007, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-изделие8': ['iyems-tx', ['192.168.10.9', 61008, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], # < Название: Протокол, < Адрес, Порт получения >, Комментарий > 'уарэп-5п28': ['5p28', ['127.0.0.1', 50000], 'IP-адрес комплекса 5П-28'], diff --git a/scripts/yems-info.gd b/scripts/yems-info.gd index 040ca23c..3fd08634 100644 --- a/scripts/yems-info.gd +++ b/scripts/yems-info.gd @@ -13,7 +13,7 @@ class YeMSInfo extends unit.Unit: var utf8_data: = data.get_string_from_utf8() if Error.OK == json_conv.parse(utf8_data): info.merge(json_conv.get_data(), true) - emit_signal('data_received', self) + emit_signal('data_received', utf8_data) else: var msg = json_conv.get_error_message() emit_signal('parse_error', self, msg) From 8c4a9666544bc29a1876b9d9fe15661c2aadcb94 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 19 Mar 2026 13:03:32 +0300 Subject: [PATCH 16/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=9F=D1=80=D0=B8=D1=91=D0=BC=20?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B8=D0=B7=20=D1=81?= =?UTF-8?q?=D0=B5=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 14 +++++++++++++- scripts/settings.gd | 4 ++-- scripts/yems-info.gd | 7 ++++--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 7a40831a..c4b8164d 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -13,12 +13,15 @@ extends Panel @export var table_header_text: Array[String] var table_cell_row: Array var name_to_index: Dictionary[StringName, int] ## Имена устройств (Имя устройства -> Индекс) +var yems_data_info: Dictionary +var yems_data_cmd: Dictionary func _ready() -> void: for i in index_to_unit_names.size(): var nm: = index_to_unit_names[i] name_to_index[nm] = i + yems_data_info[nm] = {} var header_row: = [] for cell_scn in table_headers: header_row.append(load(cell_scn)) @@ -42,4 +45,13 @@ func _ready() -> void: func on_data_received(data, nm): - print_debug('%s %s' % [nm, data]) + yems_data_info[nm].merge(data, true) + map_yems_data() + + +func map_yems_data(): + var yems_scales = get_tree().get_nodes_in_group('ряд-шкалы') + for node in yems_scales: + var unit_name = node.get_meta('unit_name') + var scale_data = yems_data_info.get(unit_name) + print_debug(scale_data) diff --git a/scripts/settings.gd b/scripts/settings.gd index 1e1ef401..7de25e5c 100644 --- a/scripts/settings.gd +++ b/scripts/settings.gd @@ -28,12 +28,12 @@ var UnitProfiles: Dictionary[StringName, Array] = { \ 'навигация': ['navi', ['*', 60000, true, true ], 'IP-адрес на котором принимают сообщения от навигации'], # < Название: [протокол, [адрес, порт, широковещательное, привязывать], комментарий > - 'эмс-ведущий': ['iyems-rx', ['192.168.10.1', 61000, false, true], 'IP-адрес для приёма докладов от информационных ЭМС устройств'], + 'эмс-ведущий': ['iyems-rx', ['127.0.0.1', 61000, false, true], 'IP-адрес для приёма докладов от информационных ЭМС устройств'], 'эмс-ор63': ['iyems-tx', ['192.168.10.2', 61001, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'эмс-454': ['iyems-tx', ['192.168.10.3', 61002, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'эмс-го': ['iyems-tx', ['192.168.10.4', 61003, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'эмс-рлс1': ['iyems-tx', ['192.168.10.5', 61004, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'эмс-рлс2': ['iyems-tx', ['192.168.10.6', 61005, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-рлс2': ['iyems-tx', ['127.0.0.1', 61005, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'эмс-ннвс': ['iyems-tx', ['192.168.10.7', 61006, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'эмс-изделие7': ['iyems-tx', ['192.168.10.8', 61007, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'эмс-изделие8': ['iyems-tx', ['192.168.10.9', 61008, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], diff --git a/scripts/yems-info.gd b/scripts/yems-info.gd index 3fd08634..572539a9 100644 --- a/scripts/yems-info.gd +++ b/scripts/yems-info.gd @@ -4,7 +4,8 @@ extends Node class YeMSInfo extends unit.Unit: static var json_conv: = JSON.new() var online_timeout: float = 5000 ## Должен быть равен наибольшему времени дотоверности из всех кластеров - var info: = Dictionary() + var info: = Dictionary() ## Доклад о состоянии + var cmd: = Dictionary() ## Команда func parse(data: PackedByteArray, now_tick: int): self.rx_tick = now_tick if not online: @@ -13,9 +14,9 @@ class YeMSInfo extends unit.Unit: var utf8_data: = data.get_string_from_utf8() if Error.OK == json_conv.parse(utf8_data): info.merge(json_conv.get_data(), true) - emit_signal('data_received', utf8_data) + emit_signal('data_received', info) else: - var msg = json_conv.get_error_message() + var msg: = json_conv.get_error_message() emit_signal('parse_error', self, msg) func process(now_tick: int): From 26bb36a3338884719f9c1b7718b96be789f50382 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 19 Mar 2026 16:33:29 +0300 Subject: [PATCH 17/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D1=80=D0=B0=20=D0=B2=20=D1=82=D0=B0=D0=B1=D0=BB?= =?UTF-8?q?=D0=B8=D1=86=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 95 ++++++++++++++++++++++++++++----------- scenes/эмс-тг/эмс-тг.tscn | 10 ++++- 2 files changed, 78 insertions(+), 27 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index c4b8164d..6a363daa 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -1,57 +1,102 @@ @tool extends Panel +#region Определяемое использованием +## Индекс -> Имя устройства. Нужен для предсказуемого +## порядка отображения: верх->вниз или лево->право. +## Имя устройства должно быть взято из settings.gd +@export var index_to_unit_names: Array[StringName] +#endregion -@export var matrix_conf: Array[Texture] ## [0] - чисто, нет конфликта, [1] - есть наложение частот -@export var index_to_unit_names: Array[StringName] ## Имена устройств (Индекс -> Имя устройства) +#region Загружаемые ресурсы +@export var matrix_conf: Array[Texture] @export_file('*.tscn') var table_headers: Array[String] @export_file('*.tscn') var table_cells: Array[String] @export_file('*.png') var image_file_rx: String @export_file('*.png') var image_file_tx: String +@export var table_rows_hight: int @export var table_column_widths: Array[int] @export var table_header_widths: Array[int] @export var table_header_text: Array[String] -var table_cell_row: Array -var name_to_index: Dictionary[StringName, int] ## Имена устройств (Имя устройства -> Индекс) -var yems_data_info: Dictionary -var yems_data_cmd: Dictionary +#endregion +#region Заполняется автоматически при запуске +var name_to_index: Dictionary[StringName, int] ## Имя устройства -> Индекс +var name_to_scale: Dictionary[StringName, Control] ## Имя устройства -> Шкала +var table_cell_row: Array +#endregion + +#region Заполняется во время работы +var yems_data_info: Dictionary[StringName, Dictionary] ## Доклады +var yems_data_cmd: Dictionary[StringName, Dictionary] ## Команды +## Порядок следования кластеров в таблице. +## {имя_устройства: { имя_кластера: индекс_в_таблице } } +var cnames_table: Dictionary[StringName, Dictionary] +#endregion func _ready() -> void: + # Инициализировать переменные for i in index_to_unit_names.size(): var nm: = index_to_unit_names[i] name_to_index[nm] = i yems_data_info[nm] = {} + cnames_table[nm] = {} + var yems_scales = get_tree().get_nodes_in_group('ряд-шкалы') + for node in yems_scales: + var nm = node.get_meta('unit_name') + name_to_scale[nm] = node + node.connect('pressed', map_yems_data_to_table.bind(nm)) var header_row: = [] for cell_scn in table_headers: header_row.append(load(cell_scn)) for cell_scn in table_cells: table_cell_row.append(load(cell_scn)) - $'таблица/сетка'.set_header(header_row) - $'таблица/сетка'.set_header_text(table_header_text) - $'таблица/сетка'.set_header_property(6, 'image_file', image_file_rx) - $'таблица/сетка'.set_header_property(7, 'image_file', image_file_tx) + # Настрить таблицу + var ctable: = $'таблица/сетка' + ctable.set_header(header_row) + ctable.set_header_text(table_header_text) + ctable.set_header_property(6, 'image_file', image_file_rx) + ctable.set_header_property(7, 'image_file', image_file_tx) + ctable.set_headers_min_size(table_header_widths) + ctable.set_columns_min_size(table_column_widths) + ctable.set_rows_min_hight(table_rows_hight) + ctable.set_header_min_hight(table_rows_hight) + ctable.pin_header2() - $'таблица/сетка'.set_headers_min_size(table_header_widths) - $'таблица/сетка'.set_columns_min_size(table_column_widths) - $'таблица/сетка'.set_rows_min_hight(32) - $'таблица/сетка'.set_header_min_hight(32) - $'таблица/сетка'.pin_header2() - - for nm in index_to_unit_names: + # Подключить обработчики + for nm in yems_data_info.keys(): var yems_unit = network.get_unit_instance(nm) yems_unit.connect('data_received', on_data_received.bind(nm)) -func on_data_received(data, nm): +func on_data_received(data: Dictionary, nm: StringName): yems_data_info[nm].merge(data, true) - map_yems_data() + map_yems_data_to_table(nm) -func map_yems_data(): - var yems_scales = get_tree().get_nodes_in_group('ряд-шкалы') - for node in yems_scales: - var unit_name = node.get_meta('unit_name') - var scale_data = yems_data_info.get(unit_name) - print_debug(scale_data) +## [param nm] - имя устройства +func map_yems_data_to_table(nm: StringName): + var unit_data = yems_data_info.get(nm) + if not unit_data: return # Данных ещё нет + var ctable: GDTable = $'таблица/сетка' + var indexes: = cnames_table[nm] # Идексы строк таблицы для кластеров заданного устройства + var rows_changed: = false + # Обойти все кластеры устройства + for cls in unit_data.mcls: + # Строка для заполнения + var row_text = [cls.cname, 'Активен', '%.1f' % cls.ttl, '%.1f' % cls.daa, '%.1f' % cls.dap, '%.1f' % cls.cfb] + # Если такой кластер уже есть, обновить его строку в таблице + if cls.cname in indexes: + # Получить индекс строки кластера в таблице + var i_row = indexes[cls.cname] + ctable.set_row_text(0, row_text) + # Если такого кластера нет, создать его строку в таблице + else: + # Создать новый ряд + ctable.add_row(table_cell_row) + rows_changed = true + # Записать индекс строки в таблице для кластера + indexes[cls.cname] = indexes.size() + if rows_changed: + ctable.set_rows_min_hight(table_rows_hight) diff --git a/scenes/эмс-тг/эмс-тг.tscn b/scenes/эмс-тг/эмс-тг.tscn index 2ecf61bb..79e5e991 100644 --- a/scenes/эмс-тг/эмс-тг.tscn +++ b/scenes/эмс-тг/эмс-тг.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=31 format=3 uid="uid://musb21x2u0xs"] +[gd_scene load_steps=32 format=3 uid="uid://musb21x2u0xs"] [ext_resource type="Script" uid="uid://bvlqgv7aapebl" path="res://scenes/эмс-тг/эмс-тг.gd" id="1_b7tfl"] [ext_resource type="Texture2D" uid="uid://djv8fkddcjucs" path="res://data/матрица-чисто.png" id="2_s28jr"] @@ -30,6 +30,8 @@ [ext_resource type="Texture2D" uid="uid://cx0f3wcx76u1k" path="res://data/РЛС2.png" id="27_3x2eg"] [ext_resource type="Texture2D" uid="uid://duu8q7sv0jwfh" path="res://data/ННВС.png" id="28_wh3ue"] +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_niy1n"] + [sub_resource type="ButtonGroup" id="ButtonGroup_vwsbs"] allow_unpress = true @@ -37,12 +39,13 @@ allow_unpress = true offset_top = 35.0 offset_bottom = 35.0 script = ExtResource("1_b7tfl") -matrix_conf = Array[Texture]([ExtResource("2_s28jr"), ExtResource("3_its7t")]) index_to_unit_names = Array[StringName]([&"эмс-ор63", &"эмс-454", &"эмс-го", &"эмс-рлс1", &"эмс-рлс2", &"эмс-ннвс", &"эмс-изделие7", &"эмс-изделие8"]) +matrix_conf = Array[Texture]([ExtResource("2_s28jr"), ExtResource("3_its7t")]) table_headers = Array[String](["uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://cymcld4mjmlhj", "uid://cymcld4mjmlhj"]) table_cells = Array[String](["uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://cixwl6xi22buo", "uid://cixwl6xi22buo"]) image_file_rx = "uid://c6etralq2tvxg" image_file_tx = "uid://c73tjrn8gr00o" +table_rows_hight = 32 table_column_widths = Array[int]([134, 134, 134, 134, 134, 134, 134, 134]) table_header_widths = Array[int]([136, 136, 136, 136, 136, 136, 136, 136]) table_header_text = Array[String](["Кластер", "Состояние", "Время", "Азимут", "Угол места", "Диапазон", "Приём", "Передача"]) @@ -53,6 +56,7 @@ offset_left = 20.0 offset_top = 800.0 offset_right = 1190.0 offset_bottom = 1150.0 +theme_override_styles/focus = SubResource("StyleBoxEmpty_niy1n") draw_focus_border = true vertical_scroll_mode = 2 @@ -118,6 +122,7 @@ size_flags_vertical = 7 toggle_mode = true button_group = SubResource("ButtonGroup_vwsbs") text = "454" +metadata/unit_name = &"эмс-454" [node name="sub1" type="GridContainer" parent="шкала"] layout_mode = 2 @@ -227,6 +232,7 @@ size_flags_vertical = 7 toggle_mode = true button_group = SubResource("ButtonGroup_vwsbs") text = "ННВС" +metadata/unit_name = &"" [node name="sub5" type="GridContainer" parent="шкала"] layout_mode = 2 From 901d160c50e0ab853423b4c4e4f78521940dcd78 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 19 Mar 2026 16:39:15 +0300 Subject: [PATCH 18/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D1=80=D0=B0=20=D0=B2=20=D1=82=D0=B0=D0=B1=D0=BB?= =?UTF-8?q?=D0=B8=D1=86=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 471b59ca..cbeaf623 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ - [ПО 5П28 Пульт П16](http://gitea.srez.local:3000/MaD_CaT/imi-5p28) - [ПО 5П28 АКНГ](http://gitea.srez.local:3000/sasha80/imi-5p28-navi) - [Трасса](http://gitea.srez.local:3000/lepshiy/imi-trassa) +- [Информационный ЭМС](http://gitea.srez.local:3000/MaD_CaT/mp550_imi_emstg) # Автоматизация тестирования From 731ce8b3dd36867ae70b45de57a8d6f83888dccc Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 20 Mar 2026 10:35:51 +0300 Subject: [PATCH 19/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=88=D0=BA=D0=B0=D0=BB=D0=B5=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=B8=D0=BA=D0=BE=D0=BD=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/hranges/panel.gd | 24 ++++++++++++++---------- scenes/hranges/panel.tscn | 30 +++++++++++++++++++++++------- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/scenes/hranges/panel.gd b/scenes/hranges/panel.gd index 42f55e05..d11369a2 100644 --- a/scenes/hranges/panel.gd +++ b/scenes/hranges/panel.gd @@ -2,6 +2,8 @@ extends PanelContainer +## Предназначено для отображения диапазонов на горизонтальной шкале + @export_range(0.0, 1.0) var gap_top: float = 0.05 ## Зазор сверху @export_range(0.0, 1.0) var gap_bottom: float = 0.05 ## Зазор снизу @export var ranges_group_name: StringName = 'ranges' ## Имя группы для диапазонов @@ -15,7 +17,7 @@ extends PanelContainer func _enter_tree() -> void: if ResourceLoader.exists(image_file): - $image.texture = load(image_file) + $grid/image.texture = load(image_file) ## Добавляет новый диапазон. @@ -53,20 +55,21 @@ func del_range(nm: StringName) -> bool: func _add_range_view(nm: StringName, x0: float, x1: float, col: Color): var rng = Polygon2D.new() - var point0 = size * Vector2(x0, gap_bottom) ## лево низ - var point1 = size * Vector2(x0, 1.0 - gap_top) ## лево верх - var point2 = size * Vector2(x1, 1.0 - gap_top) ## право верх - var point3 = size * Vector2(x1, gap_bottom) ## право низ + var canvas_size = $grid/canvas.size + var point0 = canvas_size * Vector2(x0, gap_bottom) ## лево низ + var point1 = canvas_size * Vector2(x0, 1.0 - gap_top) ## лево верх + var point2 = canvas_size * Vector2(x1, 1.0 - gap_top) ## право верх + var point3 = canvas_size * Vector2(x1, gap_bottom) ## право низ rng.polygon = [point0, point1, point2, point3] rng.name = nm rng.color = col - add_child(rng) + $grid/canvas.add_child(rng) rng.add_to_group(ranges_group_name) ## Удаляет заданный диапазон. func _del_range_view(nm: StringName) -> void: - var rng: = get_node(NodePath(nm)) + var rng: = $grid/canvas.get_node(NodePath(nm)) remove_child(rng) rng.queue_free() @@ -74,13 +77,14 @@ func _del_range_view(nm: StringName) -> void: func _clear_ranges_view(): var range_views = get_tree().get_nodes_in_group(ranges_group_name) for rng in range_views: - remove_child(rng) + $grid/canvas.remove_child(rng) rng.queue_free() func _on_resized() -> void: _clear_ranges_view() for nm in ranges_save: - var rng = ranges_save[nm][0] - var col = ranges_save[nm][1] + var range_save = ranges_save[nm] + var rng = range_save[0] + var col = range_save[1] _add_range_view(nm, rng.x, rng.y, col) diff --git a/scenes/hranges/panel.tscn b/scenes/hranges/panel.tscn index e94c68da..9e7dc443 100644 --- a/scenes/hranges/panel.tscn +++ b/scenes/hranges/panel.tscn @@ -1,20 +1,36 @@ -[gd_scene load_steps=4 format=3 uid="uid://hr55mkcneaer"] +[gd_scene load_steps=5 format=3 uid="uid://hr55mkcneaer"] [ext_resource type="Script" uid="uid://jtio1scc72bl" path="res://scenes/hranges/panel.gd" id="1_pg3d7"] [ext_resource type="Texture2D" uid="uid://c73tjrn8gr00o" path="res://data/Передатчик.png" id="2_ajqhv"] -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ajqhv"] +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ajqhv"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_56wj8"] +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 [node name="panel" type="PanelContainer"] -offset_right = 340.0 -offset_bottom = 40.0 -theme_override_styles/panel = SubResource("StyleBoxFlat_ajqhv") +offset_right = 400.0 +offset_bottom = 45.0 +theme_override_styles/panel = SubResource("StyleBoxEmpty_ajqhv") script = ExtResource("1_pg3d7") -[node name="image" type="TextureRect" parent="."] +[node name="grid" type="GridContainer" parent="."] +layout_mode = 2 +columns = 2 + +[node name="image" type="TextureRect" parent="grid"] layout_mode = 2 size_flags_horizontal = 0 +size_flags_vertical = 3 texture = ExtResource("2_ajqhv") -expand_mode = 2 +expand_mode = 3 + +[node name="canvas" type="PanelContainer" parent="grid"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_styles/panel = SubResource("StyleBoxFlat_56wj8") [connection signal="resized" from="." to="." method="_on_resized"] From 959ef1192c2d0bf522ed24cab4480d7b5f339564 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 20 Mar 2026 11:15:51 +0300 Subject: [PATCH 20/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=A8=D0=BA=D0=B0=D0=BB=D0=B0=20?= =?UTF-8?q?=D0=BA=D0=BB=D0=B0=D1=81=D1=82=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 26 +++++++++++++++++++------- scenes/эмс-тг/эмс-тг.tscn | 16 ++++++++-------- table/table.gd | 18 ++++++++++++------ 3 files changed, 39 insertions(+), 21 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 6a363daa..152038bf 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -32,6 +32,9 @@ var yems_data_cmd: Dictionary[StringName, Dictionary] ## Команды ## Порядок следования кластеров в таблице. ## {имя_устройства: { имя_кластера: индекс_в_таблице } } var cnames_table: Dictionary[StringName, Dictionary] +## Порядок следования кластеров на шкале. +## {имя_устройства: { индекс_на_шкале } } +var pnames_scale: Dictionary[StringName, Dictionary] #endregion func _ready() -> void: @@ -41,8 +44,8 @@ func _ready() -> void: name_to_index[nm] = i yems_data_info[nm] = {} cnames_table[nm] = {} - var yems_scales = get_tree().get_nodes_in_group('ряд-шкалы') - for node in yems_scales: + var btns_scales = get_tree().get_nodes_in_group('кнопки-шкалы') + for node in btns_scales: var nm = node.get_meta('unit_name') name_to_scale[nm] = node node.connect('pressed', map_yems_data_to_table.bind(nm)) @@ -81,7 +84,6 @@ func map_yems_data_to_table(nm: StringName): if not unit_data: return # Данных ещё нет var ctable: GDTable = $'таблица/сетка' var indexes: = cnames_table[nm] # Идексы строк таблицы для кластеров заданного устройства - var rows_changed: = false # Обойти все кластеры устройства for cls in unit_data.mcls: # Строка для заполнения @@ -95,8 +97,18 @@ func map_yems_data_to_table(nm: StringName): else: # Создать новый ряд ctable.add_row(table_cell_row) - rows_changed = true # Записать индекс строки в таблице для кластера - indexes[cls.cname] = indexes.size() - if rows_changed: - ctable.set_rows_min_hight(table_rows_hight) + var i_row: = indexes.size() + indexes[cls.cname] = i_row + # Установка высоты строки + ctable.set_row_min_hight(i_row, table_rows_hight) + + +func map_yems_data_to_scale(nm: StringName): + var unit_data = yems_data_info.get(nm) + if not unit_data: return # Данных ещё нет + var ctable: GDTable = $'таблица/сетка' + var indexes: = cnames_table[nm] # Идексы строк таблицы для кластеров заданного устройства + # Обойти все кластеры устройства + for cls in unit_data.mcls: + pass diff --git a/scenes/эмс-тг/эмс-тг.tscn b/scenes/эмс-тг/эмс-тг.tscn index 79e5e991..718e3e2d 100644 --- a/scenes/эмс-тг/эмс-тг.tscn +++ b/scenes/эмс-тг/эмс-тг.tscn @@ -88,7 +88,7 @@ offset_bottom = 771.0 scale = Vector2(0.95, 0.95) columns = 2 -[node name="label0" type="Button" parent="шкала" groups=["ряд-шкалы"]] +[node name="label0" type="Button" parent="шкала" groups=["кнопки-шкалы"]] layout_mode = 2 size_flags_vertical = 7 toggle_mode = true @@ -115,7 +115,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label1" type="Button" parent="шкала" groups=["ряд-шкалы"]] +[node name="label1" type="Button" parent="шкала" groups=["кнопки-шкалы"]] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 @@ -142,7 +142,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label2" type="Button" parent="шкала" groups=["ряд-шкалы"]] +[node name="label2" type="Button" parent="шкала" groups=["кнопки-шкалы"]] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 @@ -171,7 +171,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label3" type="Button" parent="шкала" groups=["ряд-шкалы"]] +[node name="label3" type="Button" parent="шкала" groups=["кнопки-шкалы"]] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 @@ -197,7 +197,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label4" type="Button" parent="шкала" groups=["ряд-шкалы"]] +[node name="label4" type="Button" parent="шкала" groups=["кнопки-шкалы"]] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 @@ -225,7 +225,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label5" type="Button" parent="шкала" groups=["ряд-шкалы"]] +[node name="label5" type="Button" parent="шкала" groups=["кнопки-шкалы"]] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 @@ -251,7 +251,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label6" type="Button" parent="шкала" groups=["ряд-шкалы"]] +[node name="label6" type="Button" parent="шкала" groups=["кнопки-шкалы"]] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 @@ -279,7 +279,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" -[node name="label7" type="Button" parent="шкала" groups=["ряд-шкалы"]] +[node name="label7" type="Button" parent="шкала" groups=["кнопки-шкалы"]] layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 diff --git a/table/table.gd b/table/table.gd index 28f1ab26..f60f9e67 100644 --- a/table/table.gd +++ b/table/table.gd @@ -609,15 +609,21 @@ func set_nodes_min_size(i_row: int, sizes: Array, key_format: String = NODE_KEY_ node.set_deferred('size.x', sizes[i_col]) -## [param i_row] - Индекс ряда. +## [param hight] - Высота ряда. func set_rows_min_hight(hight: int) -> void: var rows_count = get_rows_count() for i_row in rows_count: - for i_col in columns: - var key: = get_node_key(NODE_KEY_FORMAT, i_col, i_row) - var node = nodes[key] - node.custom_minimum_size.y = hight - node.set_deferred('size.y', hight) + set_row_min_hight(i_row, hight) + + +## [param i_row] - Индекс ряда. +## [param hight] - Высота ряда. +func set_row_min_hight(i_row: int, hight: int) -> void: + for i_col in columns: + var key: = get_node_key(NODE_KEY_FORMAT, i_col, i_row) + var node = nodes[key] + node.custom_minimum_size.y = hight + node.set_deferred('size.y', hight) func set_header_min_hight(hight: int): From 59da91d98ca4ce4235d51514838bff8e813f3a89 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 20 Mar 2026 14:57:15 +0300 Subject: [PATCH 21/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=A8=D0=BA=D0=B0=D0=BB=D0=B0=20?= =?UTF-8?q?=D0=BA=D0=BB=D0=B0=D1=81=D1=82=D0=B5=D1=80=D0=B0.=20=D0=A3?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=BD=D0=BE=20=D0=BD=D0=B5=20=D0=BD=D1=83?= =?UTF-8?q?=D0=B6=D0=BD=D0=BE=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/hranges/panel.gd | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/scenes/hranges/panel.gd b/scenes/hranges/panel.gd index d11369a2..94b1d4db 100644 --- a/scenes/hranges/panel.gd +++ b/scenes/hranges/panel.gd @@ -6,14 +6,14 @@ extends PanelContainer @export_range(0.0, 1.0) var gap_top: float = 0.05 ## Зазор сверху @export_range(0.0, 1.0) var gap_bottom: float = 0.05 ## Зазор снизу -@export var ranges_group_name: StringName = 'ranges' ## Имя группы для диапазонов -@export var ranges_save: Dictionary[StringName, Array] ## <имя диапазона>: [диапазон(x - начало, y - конец), цвет] @export_file var image_file: String: set(val): image_file = val if is_inside_tree(): _enter_tree() +var ranges_save: Dictionary[StringName, Array] ## <имя диапазона>: [диапазон(x - начало, y - конец), цвет] + func _enter_tree() -> void: if ResourceLoader.exists(image_file): @@ -55,7 +55,8 @@ func del_range(nm: StringName) -> bool: func _add_range_view(nm: StringName, x0: float, x1: float, col: Color): var rng = Polygon2D.new() - var canvas_size = $grid/canvas.size + var canvas = $grid/canvas + var canvas_size = canvas.size var point0 = canvas_size * Vector2(x0, gap_bottom) ## лево низ var point1 = canvas_size * Vector2(x0, 1.0 - gap_top) ## лево верх var point2 = canvas_size * Vector2(x1, 1.0 - gap_top) ## право верх @@ -63,21 +64,22 @@ func _add_range_view(nm: StringName, x0: float, x1: float, col: Color): rng.polygon = [point0, point1, point2, point3] rng.name = nm rng.color = col - $grid/canvas.add_child(rng) - rng.add_to_group(ranges_group_name) + canvas.add_child(rng) ## Удаляет заданный диапазон. func _del_range_view(nm: StringName) -> void: - var rng: = $grid/canvas.get_node(NodePath(nm)) - remove_child(rng) + var canvas: = $grid/canvas + var rng: = canvas.get_node(NodePath(nm)) + canvas.remove_child(rng) rng.queue_free() func _clear_ranges_view(): - var range_views = get_tree().get_nodes_in_group(ranges_group_name) + var canvas: = $grid/canvas + var range_views: = canvas.get_children() for rng in range_views: - $grid/canvas.remove_child(rng) + canvas.remove_child(rng) rng.queue_free() From 0fc98c5e985703944ad2a07f807bdeec3a4db92d Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 20 Mar 2026 14:58:41 +0300 Subject: [PATCH 22/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D1=80=D0=BE=D0=B2=20=D0=BD=D0=B0=20=D1=88=D0=BA?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 34 +++++++++++++++++++++++++++------- scenes/эмс-тг/эмс-тг.tscn | 32 +++++++++++++++++++++----------- 2 files changed, 48 insertions(+), 18 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 152038bf..8243b830 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -1,11 +1,19 @@ @tool extends Panel -#region Определяемое использованием +#region Определяемое при использовании ## Индекс -> Имя устройства. Нужен для предсказуемого ## порядка отображения: верх->вниз или лево->право. ## Имя устройства должно быть взято из settings.gd @export var index_to_unit_names: Array[StringName] +## Минимальная частота, МГЦ +@export var freq_min: float +## Максимальная частота, МГЦ +@export var freq_max: float +## Цвет диапазона передатчика на шкале +@export var color_tx: Color +## Цвет диапазона приёмника на шкале +@export var color_rx: Color #endregion #region Загружаемые ресурсы @@ -34,7 +42,7 @@ var yems_data_cmd: Dictionary[StringName, Dictionary] ## Команды var cnames_table: Dictionary[StringName, Dictionary] ## Порядок следования кластеров на шкале. ## {имя_устройства: { индекс_на_шкале } } -var pnames_scale: Dictionary[StringName, Dictionary] +var pnames_scale: Dictionary[StringName, int] #endregion func _ready() -> void: @@ -46,9 +54,12 @@ func _ready() -> void: cnames_table[nm] = {} var btns_scales = get_tree().get_nodes_in_group('кнопки-шкалы') for node in btns_scales: - var nm = node.get_meta('unit_name') - name_to_scale[nm] = node + var nm: = node.get_meta('unit_name') as StringName node.connect('pressed', map_yems_data_to_table.bind(nm)) + var claster_scales = get_tree().get_nodes_in_group('шкалы-кластеров') + for node in claster_scales: + var nm: = node.get_meta('unit_name') as StringName + name_to_scale[nm] = node var header_row: = [] for cell_scn in table_headers: header_row.append(load(cell_scn)) @@ -76,6 +87,7 @@ func _ready() -> void: func on_data_received(data: Dictionary, nm: StringName): yems_data_info[nm].merge(data, true) map_yems_data_to_table(nm) + map_yems_data_to_scale(nm) ## [param nm] - имя устройства @@ -107,8 +119,16 @@ func map_yems_data_to_table(nm: StringName): func map_yems_data_to_scale(nm: StringName): var unit_data = yems_data_info.get(nm) if not unit_data: return # Данных ещё нет - var ctable: GDTable = $'таблица/сетка' - var indexes: = cnames_table[nm] # Идексы строк таблицы для кластеров заданного устройства + var claster_scale: = name_to_scale[nm] as GridContainer # Обойти все кластеры устройства for cls in unit_data.mcls: - pass + var c = remap(cls.cfb, freq_min, freq_max, 0.0, 1.0) + var w = remap(cls.wfb, freq_min, freq_max, 0.0, 1.0) * 0.5 + var l = c - w + var h = c + w + if cls.rxe: + var scale_rx: = claster_scale.get_node('panel_rx') + scale_rx.set_range(cls.cname, l, h, color_rx) + if cls.txe: + var scale_tx: = claster_scale.get_node('panel_tx') + scale_tx.set_range(cls.cname, l, h, color_tx) diff --git a/scenes/эмс-тг/эмс-тг.tscn b/scenes/эмс-тг/эмс-тг.tscn index 718e3e2d..8dab9c07 100644 --- a/scenes/эмс-тг/эмс-тг.tscn +++ b/scenes/эмс-тг/эмс-тг.tscn @@ -40,6 +40,10 @@ offset_top = 35.0 offset_bottom = 35.0 script = ExtResource("1_b7tfl") index_to_unit_names = Array[StringName]([&"эмс-ор63", &"эмс-454", &"эмс-го", &"эмс-рлс1", &"эмс-рлс2", &"эмс-ннвс", &"эмс-изделие7", &"эмс-изделие8"]) +freq_min = 300.0 +freq_max = 6000.0 +color_tx = Color(0.898367, 0.460547, 0.239949, 1) +color_rx = Color(0.498039, 0.498039, 1, 1) matrix_conf = Array[Texture]([ExtResource("2_s28jr"), ExtResource("3_its7t")]) table_headers = Array[String](["uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://cymcld4mjmlhj", "uid://cymcld4mjmlhj"]) table_cells = Array[String](["uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://cixwl6xi22buo", "uid://cixwl6xi22buo"]) @@ -96,10 +100,11 @@ button_group = SubResource("ButtonGroup_vwsbs") text = "ОР-63" metadata/unit_name = &"эмс-ор63" -[node name="sub0" type="GridContainer" parent="шкала"] +[node name="sub0" type="GridContainer" parent="шкала" groups=["шкалы-кластеров"]] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 +metadata/unit_name = &"эмс-ор63" [node name="panel_rx" parent="шкала/sub0" instance=ExtResource("5_6hay3")] self_modulate = Color(0.830335, 0.830335, 0.830335, 1) @@ -124,7 +129,7 @@ button_group = SubResource("ButtonGroup_vwsbs") text = "454" metadata/unit_name = &"эмс-454" -[node name="sub1" type="GridContainer" parent="шкала"] +[node name="sub1" type="GridContainer" parent="шкала" groups=["шкалы-кластеров"]] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 @@ -151,11 +156,11 @@ button_group = SubResource("ButtonGroup_vwsbs") text = "ГО" metadata/unit_name = &"эмс-го" -[node name="sub2" type="GridContainer" parent="шкала"] +[node name="sub2" type="GridContainer" parent="шкала" groups=["шкалы-кластеров"]] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -metadata/unit_name = &"" +metadata/unit_name = &"эмс-го" [node name="panel_rx" parent="шкала/sub2" instance=ExtResource("5_6hay3")] self_modulate = Color(0.830335, 0.830335, 0.830335, 1) @@ -180,10 +185,11 @@ button_group = SubResource("ButtonGroup_vwsbs") text = "РЛС1" metadata/unit_name = &"эмс-рлс1" -[node name="sub3" type="GridContainer" parent="шкала"] +[node name="sub3" type="GridContainer" parent="шкала" groups=["шкалы-кластеров"]] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 +metadata/unit_name = &"эмс-рлс1" [node name="panel_rx" parent="шкала/sub3" instance=ExtResource("5_6hay3")] layout_mode = 2 @@ -206,10 +212,11 @@ button_group = SubResource("ButtonGroup_vwsbs") text = "РЛС2" metadata/unit_name = &"эмс-рлс2" -[node name="sub4" type="GridContainer" parent="шкала"] +[node name="sub4" type="GridContainer" parent="шкала" groups=["шкалы-кластеров"]] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 +metadata/unit_name = &"эмс-рлс2" [node name="panel_rx" parent="шкала/sub4" instance=ExtResource("5_6hay3")] self_modulate = Color(0.830335, 0.830335, 0.830335, 1) @@ -232,12 +239,13 @@ size_flags_vertical = 7 toggle_mode = true button_group = SubResource("ButtonGroup_vwsbs") text = "ННВС" -metadata/unit_name = &"" +metadata/unit_name = &"эмс-ннвс" -[node name="sub5" type="GridContainer" parent="шкала"] +[node name="sub5" type="GridContainer" parent="шкала" groups=["шкалы-кластеров"]] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 +metadata/unit_name = &"эмс-ннвс" [node name="panel_rx" parent="шкала/sub5" instance=ExtResource("5_6hay3")] layout_mode = 2 @@ -260,10 +268,11 @@ button_group = SubResource("ButtonGroup_vwsbs") text = "Изделие 7" metadata/unit_name = &"изделие7" -[node name="sub6" type="GridContainer" parent="шкала"] +[node name="sub6" type="GridContainer" parent="шкала" groups=["шкалы-кластеров"]] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 +metadata/unit_name = &"эмс-изделие7" [node name="panel_rx" parent="шкала/sub6" instance=ExtResource("5_6hay3")] self_modulate = Color(0.830335, 0.830335, 0.830335, 1) @@ -286,12 +295,13 @@ size_flags_vertical = 7 toggle_mode = true button_group = SubResource("ButtonGroup_vwsbs") text = "Изделие 8" -metadata/unit_name = &"изделие8" +metadata/unit_name = &"эмс-изделие8" -[node name="sub7" type="GridContainer" parent="шкала"] +[node name="sub7" type="GridContainer" parent="шкала" groups=["шкалы-кластеров"]] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 +metadata/unit_name = &"эмс-изделие8" [node name="panel_rx" parent="шкала/sub7" instance=ExtResource("5_6hay3")] layout_mode = 2 From 07b41211c73cf70099c1e44f4b34a022743ea126 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 20 Mar 2026 16:22:15 +0300 Subject: [PATCH 23/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D1=80=D0=BE=D0=B2=20=D0=BD=D0=B0=20=D1=88=D0=BA?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/hranges/panel.gd | 9 +++++++++ scenes/hranges/panel.tscn | 2 ++ scenes/эмс-тг/эмс-тг.gd | 32 +++++++++++++++++++++-------- scenes/эмс-тг/эмс-тг.tscn | 42 +++++++++++++++++++++++++++++++-------- 4 files changed, 69 insertions(+), 16 deletions(-) diff --git a/scenes/hranges/panel.gd b/scenes/hranges/panel.gd index 94b1d4db..96cfa819 100644 --- a/scenes/hranges/panel.gd +++ b/scenes/hranges/panel.gd @@ -12,12 +12,21 @@ extends PanelContainer if is_inside_tree(): _enter_tree() + +@export var back_color: Color: + set(val): + back_color = val + if is_inside_tree(): + _enter_tree() + + var ranges_save: Dictionary[StringName, Array] ## <имя диапазона>: [диапазон(x - начало, y - конец), цвет] func _enter_tree() -> void: if ResourceLoader.exists(image_file): $grid/image.texture = load(image_file) + $grid/canvas.self_modulate = back_color ## Добавляет новый диапазон. diff --git a/scenes/hranges/panel.tscn b/scenes/hranges/panel.tscn index 9e7dc443..c766aec6 100644 --- a/scenes/hranges/panel.tscn +++ b/scenes/hranges/panel.tscn @@ -16,6 +16,7 @@ offset_right = 400.0 offset_bottom = 45.0 theme_override_styles/panel = SubResource("StyleBoxEmpty_ajqhv") script = ExtResource("1_pg3d7") +back_color = Color(0.601223, 0.601223, 0.601223, 1) [node name="grid" type="GridContainer" parent="."] layout_mode = 2 @@ -29,6 +30,7 @@ texture = ExtResource("2_ajqhv") expand_mode = 3 [node name="canvas" type="PanelContainer" parent="grid"] +self_modulate = Color(0.601223, 0.601223, 0.601223, 1) layout_mode = 2 size_flags_horizontal = 3 theme_override_styles/panel = SubResource("StyleBoxFlat_56wj8") diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 8243b830..bf88752d 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -14,6 +14,10 @@ extends Panel @export var color_tx: Color ## Цвет диапазона приёмника на шкале @export var color_rx: Color +## Цвет нечётных строк шкалы +@export_color_no_alpha var color_odd: Color +## Цвет чётных строк шкалы +@export_color_no_alpha var color_even: Color #endregion #region Загружаемые ресурсы @@ -66,6 +70,14 @@ func _ready() -> void: for cell_scn in table_cells: table_cell_row.append(load(cell_scn)) + # Расскраска чётные-нечётные + for node in get_tree().get_nodes_in_group('нечётные'): + node.get_node('panel_rx').back_color = color_odd + node.get_node('panel_tx').back_color = color_odd + for node in get_tree().get_nodes_in_group('чётные'): + node.get_node('panel_rx').back_color = color_even + node.get_node('panel_tx').back_color = color_even + # Настрить таблицу var ctable: = $'таблица/сетка' ctable.set_header(header_row) @@ -122,13 +134,17 @@ func map_yems_data_to_scale(nm: StringName): var claster_scale: = name_to_scale[nm] as GridContainer # Обойти все кластеры устройства for cls in unit_data.mcls: - var c = remap(cls.cfb, freq_min, freq_max, 0.0, 1.0) - var w = remap(cls.wfb, freq_min, freq_max, 0.0, 1.0) * 0.5 - var l = c - w - var h = c + w - if cls.rxe: - var scale_rx: = claster_scale.get_node('panel_rx') + var c: = remap(cls.cfb, freq_min, freq_max, 0.0, 1.0) + var w: = remap(cls.wfb, freq_min, freq_max, 0.0, 0.5) + var l: = clampf(c - w, 0.0, 1.0) + var h: = clampf(c + w, 0.0, 1.0) + var scale_rx: = claster_scale.get_node('panel_rx') + var scale_tx: = claster_scale.get_node('panel_tx') + if cls.get('rxe', false): scale_rx.set_range(cls.cname, l, h, color_rx) - if cls.txe: - var scale_tx: = claster_scale.get_node('panel_tx') + else: + scale_rx.del_range(cls.cname) + if cls.get('txe', false): scale_tx.set_range(cls.cname, l, h, color_tx) + else: + scale_tx.del_range(cls.cname) diff --git a/scenes/эмс-тг/эмс-тг.tscn b/scenes/эмс-тг/эмс-тг.tscn index 8dab9c07..4c055f76 100644 --- a/scenes/эмс-тг/эмс-тг.tscn +++ b/scenes/эмс-тг/эмс-тг.tscn @@ -44,6 +44,8 @@ freq_min = 300.0 freq_max = 6000.0 color_tx = Color(0.898367, 0.460547, 0.239949, 1) color_rx = Color(0.498039, 0.498039, 1, 1) +color_odd = Color(0.31863, 0.32773, 0.327729, 1) +color_even = Color(0.258824, 0.266667, 0.266667, 1) matrix_conf = Array[Texture]([ExtResource("2_s28jr"), ExtResource("3_its7t")]) table_headers = Array[String](["uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://cymcld4mjmlhj", "uid://cymcld4mjmlhj"]) table_cells = Array[String](["uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://cixwl6xi22buo", "uid://cixwl6xi22buo"]) @@ -100,7 +102,8 @@ button_group = SubResource("ButtonGroup_vwsbs") text = "ОР-63" metadata/unit_name = &"эмс-ор63" -[node name="sub0" type="GridContainer" parent="шкала" groups=["шкалы-кластеров"]] +[node name="sub0" type="GridContainer" parent="шкала" groups=["чётные", "шкалы-кластеров"]] +self_modulate = Color(0.258824, 0.266667, 0.266667, 1) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 @@ -112,6 +115,7 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c73tjrn8gr00o" +back_color = Color(0.258824, 0.266667, 0.266667, 1) [node name="panel_tx" parent="шкала/sub0" instance=ExtResource("5_6hay3")] self_modulate = Color(0.830335, 0.830335, 0.830335, 1) @@ -119,6 +123,7 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" +back_color = Color(0.258824, 0.266667, 0.266667, 1) [node name="label1" type="Button" parent="шкала" groups=["кнопки-шкалы"]] layout_mode = 2 @@ -129,7 +134,8 @@ button_group = SubResource("ButtonGroup_vwsbs") text = "454" metadata/unit_name = &"эмс-454" -[node name="sub1" type="GridContainer" parent="шкала" groups=["шкалы-кластеров"]] +[node name="sub1" type="GridContainer" parent="шкала" groups=["нечётные", "шкалы-кластеров"]] +self_modulate = Color(0.294118, 0.294118, 0.294118, 1) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 @@ -140,12 +146,14 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c73tjrn8gr00o" +back_color = Color(0.31863, 0.32773, 0.327729, 1) [node name="panel_tx" parent="шкала/sub1" instance=ExtResource("5_6hay3")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" +back_color = Color(0.31863, 0.32773, 0.327729, 1) [node name="label2" type="Button" parent="шкала" groups=["кнопки-шкалы"]] layout_mode = 2 @@ -156,7 +164,8 @@ button_group = SubResource("ButtonGroup_vwsbs") text = "ГО" metadata/unit_name = &"эмс-го" -[node name="sub2" type="GridContainer" parent="шкала" groups=["шкалы-кластеров"]] +[node name="sub2" type="GridContainer" parent="шкала" groups=["чётные", "шкалы-кластеров"]] +self_modulate = Color(0.258824, 0.266667, 0.266667, 1) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 @@ -168,6 +177,7 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c73tjrn8gr00o" +back_color = Color(0.258824, 0.266667, 0.266667, 1) [node name="panel_tx" parent="шкала/sub2" instance=ExtResource("5_6hay3")] self_modulate = Color(0.830335, 0.830335, 0.830335, 1) @@ -175,6 +185,7 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" +back_color = Color(0.258824, 0.266667, 0.266667, 1) [node name="label3" type="Button" parent="шкала" groups=["кнопки-шкалы"]] layout_mode = 2 @@ -185,7 +196,8 @@ button_group = SubResource("ButtonGroup_vwsbs") text = "РЛС1" metadata/unit_name = &"эмс-рлс1" -[node name="sub3" type="GridContainer" parent="шкала" groups=["шкалы-кластеров"]] +[node name="sub3" type="GridContainer" parent="шкала" groups=["нечётные", "шкалы-кластеров"]] +self_modulate = Color(0.294118, 0.294118, 0.294118, 1) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 @@ -196,12 +208,14 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c73tjrn8gr00o" +back_color = Color(0.31863, 0.32773, 0.327729, 1) [node name="panel_tx" parent="шкала/sub3" instance=ExtResource("5_6hay3")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" +back_color = Color(0.31863, 0.32773, 0.327729, 1) [node name="label4" type="Button" parent="шкала" groups=["кнопки-шкалы"]] layout_mode = 2 @@ -212,7 +226,8 @@ button_group = SubResource("ButtonGroup_vwsbs") text = "РЛС2" metadata/unit_name = &"эмс-рлс2" -[node name="sub4" type="GridContainer" parent="шкала" groups=["шкалы-кластеров"]] +[node name="sub4" type="GridContainer" parent="шкала" groups=["чётные", "шкалы-кластеров"]] +self_modulate = Color(0.258824, 0.266667, 0.266667, 1) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 @@ -224,6 +239,7 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c73tjrn8gr00o" +back_color = Color(0.258824, 0.266667, 0.266667, 1) [node name="panel_tx" parent="шкала/sub4" instance=ExtResource("5_6hay3")] self_modulate = Color(0.830335, 0.830335, 0.830335, 1) @@ -231,6 +247,7 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" +back_color = Color(0.258824, 0.266667, 0.266667, 1) [node name="label5" type="Button" parent="шкала" groups=["кнопки-шкалы"]] layout_mode = 2 @@ -241,7 +258,8 @@ button_group = SubResource("ButtonGroup_vwsbs") text = "ННВС" metadata/unit_name = &"эмс-ннвс" -[node name="sub5" type="GridContainer" parent="шкала" groups=["шкалы-кластеров"]] +[node name="sub5" type="GridContainer" parent="шкала" groups=["нечётные", "шкалы-кластеров"]] +self_modulate = Color(0.294118, 0.294118, 0.294118, 1) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 @@ -252,12 +270,14 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c73tjrn8gr00o" +back_color = Color(0.31863, 0.32773, 0.327729, 1) [node name="panel_tx" parent="шкала/sub5" instance=ExtResource("5_6hay3")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" +back_color = Color(0.31863, 0.32773, 0.327729, 1) [node name="label6" type="Button" parent="шкала" groups=["кнопки-шкалы"]] layout_mode = 2 @@ -268,7 +288,8 @@ button_group = SubResource("ButtonGroup_vwsbs") text = "Изделие 7" metadata/unit_name = &"изделие7" -[node name="sub6" type="GridContainer" parent="шкала" groups=["шкалы-кластеров"]] +[node name="sub6" type="GridContainer" parent="шкала" groups=["чётные", "шкалы-кластеров"]] +self_modulate = Color(0.258824, 0.266667, 0.266667, 1) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 @@ -280,6 +301,7 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c73tjrn8gr00o" +back_color = Color(0.258824, 0.266667, 0.266667, 1) [node name="panel_tx" parent="шкала/sub6" instance=ExtResource("5_6hay3")] self_modulate = Color(0.830335, 0.830335, 0.830335, 1) @@ -287,6 +309,7 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" +back_color = Color(0.258824, 0.266667, 0.266667, 1) [node name="label7" type="Button" parent="шкала" groups=["кнопки-шкалы"]] layout_mode = 2 @@ -297,7 +320,8 @@ button_group = SubResource("ButtonGroup_vwsbs") text = "Изделие 8" metadata/unit_name = &"эмс-изделие8" -[node name="sub7" type="GridContainer" parent="шкала" groups=["шкалы-кластеров"]] +[node name="sub7" type="GridContainer" parent="шкала" groups=["нечётные", "шкалы-кластеров"]] +self_modulate = Color(0.294118, 0.294118, 0.294118, 1) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 @@ -308,12 +332,14 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c73tjrn8gr00o" +back_color = Color(0.31863, 0.32773, 0.327729, 1) [node name="panel_tx" parent="шкала/sub7" instance=ExtResource("5_6hay3")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" +back_color = Color(0.31863, 0.32773, 0.327729, 1) [node name="фон-матрицы" type="Polygon2D" parent="."] self_modulate = Color(0.498039, 0.498039, 0.498039, 0.498039) From 261a994466e188e21bbf6a0c0043c3ae2be04ba2 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 20 Mar 2026 16:35:17 +0300 Subject: [PATCH 24/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D1=80=D0=BE=D0=B2=20=D0=BD=D0=B0=20=D1=88=D0=BA?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index bf88752d..89d383e9 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -49,6 +49,7 @@ var cnames_table: Dictionary[StringName, Dictionary] var pnames_scale: Dictionary[StringName, int] #endregion + func _ready() -> void: # Инициализировать переменные for i in index_to_unit_names.size(): @@ -70,7 +71,7 @@ func _ready() -> void: for cell_scn in table_cells: table_cell_row.append(load(cell_scn)) - # Расскраска чётные-нечётные + # Расскрасить чётные-нечётные for node in get_tree().get_nodes_in_group('нечётные'): node.get_node('panel_rx').back_color = color_odd node.get_node('panel_tx').back_color = color_odd @@ -78,7 +79,7 @@ func _ready() -> void: node.get_node('panel_rx').back_color = color_even node.get_node('panel_tx').back_color = color_even - # Настрить таблицу + # Настроить таблицу var ctable: = $'таблица/сетка' ctable.set_header(header_row) ctable.set_header_text(table_header_text) @@ -90,18 +91,20 @@ func _ready() -> void: ctable.set_header_min_hight(table_rows_hight) ctable.pin_header2() - # Подключить обработчики - for nm in yems_data_info.keys(): + # Подключить обработчик для приёма данных + for nm in yems_data_info: var yems_unit = network.get_unit_instance(nm) yems_unit.connect('data_received', on_data_received.bind(nm)) +## Обрабатывает событие [b]data_received[/b] func on_data_received(data: Dictionary, nm: StringName): yems_data_info[nm].merge(data, true) map_yems_data_to_table(nm) map_yems_data_to_scale(nm) +## Отображает кластеры в таблицу ## [param nm] - имя устройства func map_yems_data_to_table(nm: StringName): var unit_data = yems_data_info.get(nm) @@ -128,6 +131,8 @@ func map_yems_data_to_table(nm: StringName): ctable.set_row_min_hight(i_row, table_rows_hight) +## Отображает кластеры на шкале +## [param nm] - имя устройства func map_yems_data_to_scale(nm: StringName): var unit_data = yems_data_info.get(nm) if not unit_data: return # Данных ещё нет From 212ce180d16f616d40895860c48cb57fc542a8c6 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 20 Mar 2026 16:36:17 +0300 Subject: [PATCH 25/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D1=80=D0=BE=D0=B2=20=D0=BD=D0=B0=20=D1=88=D0=BA?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 89d383e9..c9029efb 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -113,7 +113,7 @@ func map_yems_data_to_table(nm: StringName): var indexes: = cnames_table[nm] # Идексы строк таблицы для кластеров заданного устройства # Обойти все кластеры устройства for cls in unit_data.mcls: - # Строка для заполнения + # Строки для заполнения ряда var row_text = [cls.cname, 'Активен', '%.1f' % cls.ttl, '%.1f' % cls.daa, '%.1f' % cls.dap, '%.1f' % cls.cfb] # Если такой кластер уже есть, обновить его строку в таблице if cls.cname in indexes: From 528566e9492076d0eab7cb4ba1f3a86f1d99e46c Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 23 Mar 2026 08:24:09 +0300 Subject: [PATCH 26/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D1=80=D0=BE=D0=B2=20=D0=BD=D0=B0=20=D1=88=D0=BA?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5.=20=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index c9029efb..bfd21ca9 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -100,17 +100,18 @@ func _ready() -> void: ## Обрабатывает событие [b]data_received[/b] func on_data_received(data: Dictionary, nm: StringName): yems_data_info[nm].merge(data, true) - map_yems_data_to_table(nm) - map_yems_data_to_scale(nm) + var ctable: GDTable = $'таблица/сетка' + var claster_scale: = name_to_scale[nm] as GridContainer + var unit_data = yems_data_info.get(nm) + if unit_data: + var indexes: = cnames_table[nm] # Идексы строк в таблице + map_yems_data_to_table(ctable, unit_data, indexes) + map_yems_data_to_scale(claster_scale, unit_data) ## Отображает кластеры в таблицу ## [param nm] - имя устройства -func map_yems_data_to_table(nm: StringName): - var unit_data = yems_data_info.get(nm) - if not unit_data: return # Данных ещё нет - var ctable: GDTable = $'таблица/сетка' - var indexes: = cnames_table[nm] # Идексы строк таблицы для кластеров заданного устройства +func map_yems_data_to_table(ctable: GDTable, unit_data: Dictionary, indexes: Dictionary): # Обойти все кластеры устройства for cls in unit_data.mcls: # Строки для заполнения ряда @@ -133,10 +134,7 @@ func map_yems_data_to_table(nm: StringName): ## Отображает кластеры на шкале ## [param nm] - имя устройства -func map_yems_data_to_scale(nm: StringName): - var unit_data = yems_data_info.get(nm) - if not unit_data: return # Данных ещё нет - var claster_scale: = name_to_scale[nm] as GridContainer +func map_yems_data_to_scale(claster_scale: GridContainer, unit_data: Dictionary): # Обойти все кластеры устройства for cls in unit_data.mcls: var c: = remap(cls.cfb, freq_min, freq_max, 0.0, 1.0) From c5da181fb75c2475f464562cdd64ec9da9e655b6 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 23 Mar 2026 14:20:06 +0300 Subject: [PATCH 27/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=84?= =?UTF-8?q?=D0=BB=D0=B8=D0=BA=D1=82=D0=BE=D0=B2=20=D0=BD=D0=B0=20=D0=BC?= =?UTF-8?q?=D0=B0=D1=82=D1=80=D0=B8=D1=86=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 88 +++++++++++---- scenes/эмс-тг/эмс-тг.tscn | 232 ++++++++++++++++++++++++++------------ scripts/settings.gd | 14 +-- 3 files changed, 233 insertions(+), 101 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index bfd21ca9..20c93aef 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -33,8 +33,8 @@ extends Panel #endregion #region Заполняется автоматически при запуске -var name_to_index: Dictionary[StringName, int] ## Имя устройства -> Индекс -var name_to_scale: Dictionary[StringName, Control] ## Имя устройства -> Шкала +var name_to_index: Dictionary[StringName, int] ## Имя устройства -> Индекс +var name_to_scale: Dictionary[StringName, GridContainer] ## Имя устройства -> Шкала var table_cell_row: Array #endregion @@ -65,11 +65,6 @@ func _ready() -> void: for node in claster_scales: var nm: = node.get_meta('unit_name') as StringName name_to_scale[nm] = node - var header_row: = [] - for cell_scn in table_headers: - header_row.append(load(cell_scn)) - for cell_scn in table_cells: - table_cell_row.append(load(cell_scn)) # Расскрасить чётные-нечётные for node in get_tree().get_nodes_in_group('нечётные'): @@ -79,7 +74,17 @@ func _ready() -> void: node.get_node('panel_rx').back_color = color_even node.get_node('panel_tx').back_color = color_even + # Подключить обработчик для приёма данных + for nm in yems_data_info: + var yems_unit = network.get_unit_instance(nm) + yems_unit.connect('data_received', on_data_received.bind(nm)) + # Настроить таблицу + var header_row: = [] + for cell_scn in table_headers: + header_row.append(load(cell_scn)) + for cell_scn in table_cells: + table_cell_row.append(load(cell_scn)) var ctable: = $'таблица/сетка' ctable.set_header(header_row) ctable.set_header_text(table_header_text) @@ -91,27 +96,37 @@ func _ready() -> void: ctable.set_header_min_hight(table_rows_hight) ctable.pin_header2() - # Подключить обработчик для приёма данных - for nm in yems_data_info: - var yems_unit = network.get_unit_instance(nm) - yems_unit.connect('data_received', on_data_received.bind(nm)) - ## Обрабатывает событие [b]data_received[/b] func on_data_received(data: Dictionary, nm: StringName): - yems_data_info[nm].merge(data, true) + var unit_data: = yems_data_info[nm] + unit_data.merge(data, true) + if not unit_data: + return var ctable: GDTable = $'таблица/сетка' var claster_scale: = name_to_scale[nm] as GridContainer - var unit_data = yems_data_info.get(nm) - if unit_data: - var indexes: = cnames_table[nm] # Идексы строк в таблице - map_yems_data_to_table(ctable, unit_data, indexes) - map_yems_data_to_scale(claster_scale, unit_data) + var indexes: = cnames_table[nm] # Идексы строк в таблице + map_yems_data_to_table(unit_data, ctable, indexes) + map_yems_data_to_scale(unit_data, claster_scale) + var inters: = find_inters(yems_data_info) + map_inters_to_matrix(inters, $'матрица') + + +func map_inters_to_matrix(inters: Array, matrix: GridContainer) -> void: + var nodes = matrix.get_children() + for item in inters: + var tx_unit_name = item[0] + var rx_unit_name = item[1] + var i_col = 1 + name_to_index[tx_unit_name] # (1 +) - одна колонка для значков приёмников + var i_row = 1 + name_to_index[rx_unit_name] # (1 +) - один ряд для значков передатчиков + var idx = i_col + i_row * matrix.columns # последовательный индекс в GridContainer + var node = nodes[idx] # Искомый элемент + node.button_pressed = true ## Отображает кластеры в таблицу ## [param nm] - имя устройства -func map_yems_data_to_table(ctable: GDTable, unit_data: Dictionary, indexes: Dictionary): +func map_yems_data_to_table(unit_data: Dictionary, ctable: GDTable, indexes: Dictionary): # Обойти все кластеры устройства for cls in unit_data.mcls: # Строки для заполнения ряда @@ -120,7 +135,7 @@ func map_yems_data_to_table(ctable: GDTable, unit_data: Dictionary, indexes: Dic if cls.cname in indexes: # Получить индекс строки кластера в таблице var i_row = indexes[cls.cname] - ctable.set_row_text(0, row_text) + ctable.set_row_text(i_row, row_text) # Если такого кластера нет, создать его строку в таблице else: # Создать новый ряд @@ -132,9 +147,40 @@ func map_yems_data_to_table(ctable: GDTable, unit_data: Dictionary, indexes: Dic ctable.set_row_min_hight(i_row, table_rows_hight) +func find_inters(info: Dictionary) -> Array: + # info - словарь, его структура + # { + # "устройство": # имя устройства ("эмс-ор63") + # [ + # { + # cname, # имя кластера ("Кластер-0") + # wfb, # ширина диапазона, МГЦ (800.0) + # cfb, # центр диапазона, МГЦ (2000.0) + # txe, # передатчик включен + # rxe # передатчик выключен + # }, + # { + # cname, # имя кластера ("Кластер-1") + # wfb, # ширина диапазона, МГЦ (200.0) + # cfb, # центр диапазона, МГЦ (1000.0) + # txe, # передатчик включен + # rxe # передатчик выключен + # }, + # ] + # } + for nm in info: + # nm - имя устройства + var unit_data = info[nm] + if not unit_data: continue + for cls in unit_data.mcls: + # cls - один кластер + print_debug([cls.cname, cls.wfb, cls.cfb, cls.txe, cls.rxe]) + return [['эмс-ор63', 'эмс-ор63', 'Кластер-0', 'Кластер-0', 1500.0, 2500.0]] + + ## Отображает кластеры на шкале ## [param nm] - имя устройства -func map_yems_data_to_scale(claster_scale: GridContainer, unit_data: Dictionary): +func map_yems_data_to_scale(unit_data: Dictionary, claster_scale: GridContainer): # Обойти все кластеры устройства for cls in unit_data.mcls: var c: = remap(cls.cfb, freq_min, freq_max, 0.0, 1.0) diff --git a/scenes/эмс-тг/эмс-тг.tscn b/scenes/эмс-тг/эмс-тг.tscn index 4c055f76..96f9a9bc 100644 --- a/scenes/эмс-тг/эмс-тг.tscn +++ b/scenes/эмс-тг/эмс-тг.tscn @@ -343,8 +343,10 @@ back_color = Color(0.31863, 0.32773, 0.327729, 1) [node name="фон-матрицы" type="Polygon2D" parent="."] self_modulate = Color(0.498039, 0.498039, 0.498039, 0.498039) -position = Vector2(400, 0) +position = Vector2(1830, 1020) +offset = Vector2(-1430, -1020) polygon = PackedVector2Array(800, 765, 1200, 765, 1200, 1165, 800, 1165) +uv = PackedVector2Array(800, 765, 1200, 765, 1200, 1165, 800, 1165) [node name="матрица" type="GridContainer" parent="."] layout_mode = 0 @@ -361,194 +363,278 @@ texture = ExtResource("6_a0vpj") [node name="прд-0" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("7_xr3ub") +metadata/unit_name = &"" [node name="прд-1" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("8_saoyo") +metadata/unit_name = &"" [node name="прд-2" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("9_bqil1") +metadata/unit_name = &"" [node name="прд-3" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("10_ggqgc") +metadata/unit_name = &"" [node name="прд-4" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("11_xothm") +metadata/unit_name = &"" [node name="прд-5" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("12_4rjt3") +metadata/unit_name = &"" [node name="прм-0" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("13_g0j2q") +metadata/unit_name = &"эмс-ор63" -[node name="матрица-0-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-0-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-0-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-0-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-0-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-0-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-0-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-0-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-0-4" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-0-4" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-0-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-0-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") [node name="прм-1" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("14_crrpm") +metadata/unit_name = &"" -[node name="матрица-1-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-1-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-1-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-1-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-1-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-1-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-1-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-1-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-1-4" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-1-4" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-1-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-1-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") [node name="прм-2" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("15_0dspi") +metadata/unit_name = &"" -[node name="матрица-2-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-2-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-2-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-2-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-2-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-2-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-2-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-2-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-2-4" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-2-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-2-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-2-4" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") [node name="прм-3" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("16_6042y") +metadata/unit_name = &"" -[node name="матрица-3-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-3-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-3-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-3-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-3-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-3-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-3-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-3-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-3-4" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-3-4" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-3-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-3-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") [node name="прм-4" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("17_gvsi1") +metadata/unit_name = &"" -[node name="матрица-4-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-4-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-4-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-4-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-4-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-4-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-4-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-4-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-4-4" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-4-4" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-4-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-4-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") [node name="прм-5" type="TextureRect" parent="матрица"] layout_mode = 2 texture = ExtResource("18_p3gp1") +metadata/unit_name = &"" -[node name="матрица-5-0" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-5-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-5-1" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-5-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-5-2" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-5-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-5-3" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-5-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-5-5" type="TextureRect" parent="матрица" groups=["матрица-к"]] +[node name="матрица-5-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") -[node name="матрица-5-6" type="TextureRect" parent="матрица"] +[node name="матрица-5-6" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 -texture = ExtResource("2_s28jr") +toggle_mode = true +texture_normal = ExtResource("2_s28jr") +texture_pressed = ExtResource("3_its7t") [node name="ор-63" type="TextureRect" parent="."] layout_mode = 0 diff --git a/scripts/settings.gd b/scripts/settings.gd index 7de25e5c..00a72ff5 100644 --- a/scripts/settings.gd +++ b/scripts/settings.gd @@ -29,14 +29,14 @@ var UnitProfiles: Dictionary[StringName, Array] = { \ # < Название: [протокол, [адрес, порт, широковещательное, привязывать], комментарий > 'эмс-ведущий': ['iyems-rx', ['127.0.0.1', 61000, false, true], 'IP-адрес для приёма докладов от информационных ЭМС устройств'], - 'эмс-ор63': ['iyems-tx', ['192.168.10.2', 61001, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'эмс-454': ['iyems-tx', ['192.168.10.3', 61002, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'эмс-го': ['iyems-tx', ['192.168.10.4', 61003, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'эмс-рлс1': ['iyems-tx', ['192.168.10.5', 61004, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-ор63': ['iyems-tx', ['127.0.0.1', 61001, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-454': ['iyems-tx', ['127.0.0.1', 61002, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-го': ['iyems-tx', ['127.0.0.1', 61003, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-рлс1': ['iyems-tx', ['127.0.0.1', 61004, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'эмс-рлс2': ['iyems-tx', ['127.0.0.1', 61005, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'эмс-ннвс': ['iyems-tx', ['192.168.10.7', 61006, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'эмс-изделие7': ['iyems-tx', ['192.168.10.8', 61007, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], - 'эмс-изделие8': ['iyems-tx', ['192.168.10.9', 61008, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-ннвс': ['iyems-tx', ['127.0.0.1', 61006, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-изделие7': ['iyems-tx', ['127.0.0.1', 61007, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], + 'эмс-изделие8': ['iyems-tx', ['127.0.0.1', 61008, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], # < Название: Протокол, < Адрес, Порт получения >, Комментарий > 'уарэп-5п28': ['5p28', ['127.0.0.1', 50000], 'IP-адрес комплекса 5П-28'], From cf3b02cec2c7ca93745ff0068c96c1af2ca490bd Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 23 Mar 2026 14:21:08 +0300 Subject: [PATCH 28/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=84?= =?UTF-8?q?=D0=BB=D0=B8=D0=BA=D1=82=D0=BE=D0=B2=20=D0=BD=D0=B0=20=D0=BC?= =?UTF-8?q?=D0=B0=D1=82=D1=80=D0=B8=D1=86=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 20c93aef..64814eb3 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -175,7 +175,7 @@ func find_inters(info: Dictionary) -> Array: for cls in unit_data.mcls: # cls - один кластер print_debug([cls.cname, cls.wfb, cls.cfb, cls.txe, cls.rxe]) - return [['эмс-ор63', 'эмс-ор63', 'Кластер-0', 'Кластер-0', 1500.0, 2500.0]] + return [['эмс-ор63', 'эмс-ор63', 'Кластер-0', 'Кластер-0', 1600.0, 2400.0]] ## Отображает кластеры на шкале From 1cb3985c700f916ca52c8be68eeb5e38824dac5f Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 23 Mar 2026 14:33:49 +0300 Subject: [PATCH 29/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=84?= =?UTF-8?q?=D0=BB=D0=B8=D0=BA=D1=82=D0=BE=D0=B2=20=D0=BD=D0=B0=20=D0=BC?= =?UTF-8?q?=D0=B0=D1=82=D1=80=D0=B8=D1=86=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 1 + 1 file changed, 1 insertion(+) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 64814eb3..bcd24f6c 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -175,6 +175,7 @@ func find_inters(info: Dictionary) -> Array: for cls in unit_data.mcls: # cls - один кластер print_debug([cls.cname, cls.wfb, cls.cfb, cls.txe, cls.rxe]) + # заглушка для возвращаемых данных return [['эмс-ор63', 'эмс-ор63', 'Кластер-0', 'Кластер-0', 1600.0, 2400.0]] From 68ab1b325dcc9dc5fdc701246b9da509a131b8a4 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 23 Mar 2026 16:31:12 +0300 Subject: [PATCH 30/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=9E=D1=82=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=B0=20=D0=B8=D1=81=D1=82=D0=B5=D0=BA=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=20=D0=BA=D0=BB=D0=B0=D1=81=D1=82=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project.godot | 2 +- scenes/эмс-тг/эмс-тг.gd | 49 ++++++++++++++++++--- scripts/network.gd | 2 +- scripts/{yems-info.gd => yemstg.gd} | 2 +- scripts/{yems-info.gd.uid => yemstg.gd.uid} | 0 5 files changed, 45 insertions(+), 10 deletions(-) rename scripts/{yems-info.gd => yemstg.gd} (96%) rename scripts/{yems-info.gd.uid => yemstg.gd.uid} (100%) diff --git a/project.godot b/project.godot index dd994222..1bc7aa1a 100644 --- a/project.godot +++ b/project.godot @@ -122,7 +122,7 @@ astrakb="*res://scripts/astra-kb.gd" prd="*res://scripts/prd.gd" navi="*res://scripts/navigation.gd" trassa="*res://scripts/trassa.gd" -yems_info="*res://scripts/yems-info.gd" +yemstg="*res://scripts/yemstg.gd" [debug] diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index bcd24f6c..8a160cc9 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -39,8 +39,8 @@ var table_cell_row: Array #endregion #region Заполняется во время работы -var yems_data_info: Dictionary[StringName, Dictionary] ## Доклады -var yems_data_cmd: Dictionary[StringName, Dictionary] ## Команды +var yems_info: Dictionary[StringName, Dictionary] ## Доклады +var yems_cmd: Dictionary[StringName, Dictionary] ## Команды ## Порядок следования кластеров в таблице. ## {имя_устройства: { имя_кластера: индекс_в_таблице } } var cnames_table: Dictionary[StringName, Dictionary] @@ -50,12 +50,18 @@ var pnames_scale: Dictionary[StringName, int] #endregion +enum CalsterStatus { + CLASTER_DELETED, + CLASTER_RUNNING +} + + func _ready() -> void: # Инициализировать переменные for i in index_to_unit_names.size(): var nm: = index_to_unit_names[i] name_to_index[nm] = i - yems_data_info[nm] = {} + yems_info[nm] = {} cnames_table[nm] = {} var btns_scales = get_tree().get_nodes_in_group('кнопки-шкалы') for node in btns_scales: @@ -75,7 +81,7 @@ func _ready() -> void: node.get_node('panel_tx').back_color = color_even # Подключить обработчик для приёма данных - for nm in yems_data_info: + for nm in yems_info: var yems_unit = network.get_unit_instance(nm) yems_unit.connect('data_received', on_data_received.bind(nm)) @@ -99,7 +105,7 @@ func _ready() -> void: ## Обрабатывает событие [b]data_received[/b] func on_data_received(data: Dictionary, nm: StringName): - var unit_data: = yems_data_info[nm] + var unit_data: = yems_info[nm] unit_data.merge(data, true) if not unit_data: return @@ -108,8 +114,36 @@ func on_data_received(data: Dictionary, nm: StringName): var indexes: = cnames_table[nm] # Идексы строк в таблице map_yems_data_to_table(unit_data, ctable, indexes) map_yems_data_to_scale(unit_data, claster_scale) - var inters: = find_inters(yems_data_info) + var inters: = find_inters(yems_info) map_inters_to_matrix(inters, $'матрица') + set_timeouts(yems_info) + + +func set_timeouts(info: Dictionary): + for nm in info: # nm - имя устройства + var unit_data = info[nm] + if not unit_data: continue + for cls in unit_data.mcls: # cls - один кластер + var timer_name = NodePath('%s_%s' % [nm, cls.cname]) + var timer = get_node_or_null(timer_name) + if not timer: + timer = Timer.new() + timer.name = timer_name + timer.one_shot = true + timer.connect('timeout', _on_timeout_ttl.bind(nm, cls.cname)) + add_child(timer) + print_debug('создан: %s' % timer_name) + timer.start(cls.ttl) + print_debug('пуск: %s' % timer_name) + + +func _on_timeout_ttl(nm, cname): + var timer_name = NodePath('%s_%s' % [nm, cname]) + var timer = get_node_or_null(timer_name) + if timer: + remove_child(timer) + timer.queue_free() + print_debug('удалён: %s' % timer_name) func map_inters_to_matrix(inters: Array, matrix: GridContainer) -> void: @@ -174,7 +208,8 @@ func find_inters(info: Dictionary) -> Array: if not unit_data: continue for cls in unit_data.mcls: # cls - один кластер - print_debug([cls.cname, cls.wfb, cls.cfb, cls.txe, cls.rxe]) + #print_debug([cls.cname, cls.wfb, cls.cfb, cls.txe, cls.rxe]) + pass # заглушка для возвращаемых данных return [['эмс-ор63', 'эмс-ор63', 'Кластер-0', 'Кластер-0', 1600.0, 2400.0]] diff --git a/scripts/network.gd b/scripts/network.gd index 2a20876c..e80ccbe0 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -1,7 +1,7 @@ @tool class_name Network extends Node -const YAU07_PROTO: = {'yau07tx': yau07.YaU07, 'iyems-tx': yems_info.YeMSInfo} +const YAU07_PROTO: = {'yau07tx': yau07.YaU07, 'iyems-tx': yemstg.YeMSTG} const UDP_PROTO: = {'capsrpb': capsrpb.CapsRpb, 'trassa': trassa.Trassa} const TCP_PROTO: = {'5p28': tcp5p28.TCP5P28} const SERIAL_PROTO: = {'spt25': spt25.SPT25} diff --git a/scripts/yems-info.gd b/scripts/yemstg.gd similarity index 96% rename from scripts/yems-info.gd rename to scripts/yemstg.gd index 572539a9..102a276b 100644 --- a/scripts/yems-info.gd +++ b/scripts/yemstg.gd @@ -1,7 +1,7 @@ extends Node -class YeMSInfo extends unit.Unit: +class YeMSTG extends unit.Unit: static var json_conv: = JSON.new() var online_timeout: float = 5000 ## Должен быть равен наибольшему времени дотоверности из всех кластеров var info: = Dictionary() ## Доклад о состоянии diff --git a/scripts/yems-info.gd.uid b/scripts/yemstg.gd.uid similarity index 100% rename from scripts/yems-info.gd.uid rename to scripts/yemstg.gd.uid From 7b80852017e385aa15fd24dc7ee7b1026392af4e Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 26 Mar 2026 10:35:27 +0300 Subject: [PATCH 31/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=A3=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=BE=D0=BC.=20=D0=9E=D1=82=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BA=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/button-six-state/six-state.tscn | 1 + scenes/эмс-тг/эмс-тг.gd | 208 ++++++++++++++++++++++--- scenes/эмс-тг/эмс-тг.tscn | 31 +++- scripts/network.gd | 1 + scripts/unit.gd | 2 +- scripts/yemstg.gd | 14 +- table/lable.tscn | 2 + table/table.gd | 2 +- 8 files changed, 232 insertions(+), 29 deletions(-) diff --git a/scenes/button-six-state/six-state.tscn b/scenes/button-six-state/six-state.tscn index 9f9e92de..e8f7701f 100644 --- a/scenes/button-six-state/six-state.tscn +++ b/scenes/button-six-state/six-state.tscn @@ -72,5 +72,6 @@ horizontal_alignment = 1 [node name="check" type="CheckButton" parent="."] layout_mode = 2 size_flags_horizontal = 8 +action_mode = 0 [connection signal="toggled" from="check" to="." method="_on_check_toggled"] diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 8a160cc9..8208dc9e 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -11,17 +11,28 @@ extends Panel ## Максимальная частота, МГЦ @export var freq_max: float ## Цвет диапазона передатчика на шкале -@export var color_tx: Color +@export_color_no_alpha var color_clear: Color ## Цвет диапазона приёмника на шкале -@export var color_rx: Color +@export_color_no_alpha var color_intersec: Color +## Прозрачность диапазон на шкале (диапазоны могут накладываться, что бы было видно наложения) +@export_range(0, 1.0) var color_alpha: float ## Цвет нечётных строк шкалы @export_color_no_alpha var color_odd: Color ## Цвет чётных строк шкалы @export_color_no_alpha var color_even: Color +## Индекс колонки в таблице для разрешения работы приёмника +@export var column_cmd_rx: int +## Индекс колонки в таблице для разрешения работы передатчика +@export var column_cmd_tx: int +## Максимальное количесво кластеров на одно устройство +@export var max_clasters_per_unit: int +## Сообщение пользователю +@export var msg_select_unit: String +## Сообщение пользователю +@export var msg_waiting_data: String #endregion #region Загружаемые ресурсы -@export var matrix_conf: Array[Texture] @export_file('*.tscn') var table_headers: Array[String] @export_file('*.tscn') var table_cells: Array[String] @export_file('*.png') var image_file_rx: String @@ -47,26 +58,49 @@ var cnames_table: Dictionary[StringName, Dictionary] ## Порядок следования кластеров на шкале. ## {имя_устройства: { индекс_на_шкале } } var pnames_scale: Dictionary[StringName, int] +## Текущее выбранное оператором устройство на шкале +var selected_unit: Dictionary[StringName, bool] +## Состояния кластеров в соответствии с докладами и командами +var cmd_vs_info: Dictionary[StringName, Dictionary] #endregion -enum CalsterStatus { - CLASTER_DELETED, - CLASTER_RUNNING +## Состояние кластера +enum ClasterStatus { + DELETED, + RUNNING } +## Режим управления кластером +enum ClasterMode { + MANUAL, ## Ручной, управляется операторром + AUTO, ## Автоматический, управляется программой + IGNORE ## Игнорируемый, не управляется +} + + +## Состояние кластера. Значения должны соответствовать состояниям [b]six-state-button[/b] +enum ClasterState { + WAITING = 0, ## Ожидание даннных + DONE = 1, ## Выполнено + MISSMATCH = 2 ## Несоответствие +} + func _ready() -> void: # Инициализировать переменные for i in index_to_unit_names.size(): var nm: = index_to_unit_names[i] name_to_index[nm] = i yems_info[nm] = {} + yems_cmd[nm] = {} cnames_table[nm] = {} + selected_unit[nm] = false + cmd_vs_info[nm] = {} var btns_scales = get_tree().get_nodes_in_group('кнопки-шкалы') for node in btns_scales: var nm: = node.get_meta('unit_name') as StringName - node.connect('pressed', map_yems_data_to_table.bind(nm)) + node.connect('toggled', _on_scale_selected.bind(nm)) var claster_scales = get_tree().get_nodes_in_group('шкалы-кластеров') for node in claster_scales: var nm: = node.get_meta('unit_name') as StringName @@ -103,6 +137,92 @@ func _ready() -> void: ctable.pin_header2() +## Вызывается при выборе оператором устройства на шкале +## [param nm] - имя выбранного устройства +func _on_scale_selected(val: bool, nm: StringName): + selected_unit[nm] = val + if not val: + $'таблица/сетка'.clear_rows() + cnames_table[nm].clear() + $label_msg.text = msg_select_unit + $label_msg.show() + return + var unit_info = yems_info[nm] + if not unit_info: # проверить, есть ли данные + $label_msg.text = msg_waiting_data + return # данных ещё нет, ничего не далать + $label_msg.hide() + var ctable = $'таблица/сетка' + var indexes = cnames_table[nm] + var unit_cvi = cmd_vs_info[nm] + map_yems_data_to_table(unit_info, ctable, indexes) + connect_cmd_handlers(ctable, nm, indexes) + update_cmd_vs_info(nm) + map_cvi_to_table(unit_cvi, ctable, indexes) + + +func map_cvi_to_table(unit_cvi: Dictionary, ctable: GDTable, indexes: Dictionary): + for cname in indexes: + var i_row = indexes[cname] + var state_rxe: = ClasterState.WAITING + var state_txe: = ClasterState.WAITING + if unit_cvi.has(cname): + state_rxe = unit_cvi[cname]['state_rxe'] + state_txe = unit_cvi[cname]['state_txe'] + ctable.set_node_property(column_cmd_rx, i_row, 'state', int(state_rxe)) + ctable.set_node_property(column_cmd_tx, i_row, 'state', int(state_txe)) + + +func update_cmd_vs_info(nm: StringName): + if yems_info.has(nm): + return + var unit_info = yems_info[nm] + if not unit_info.has('mcls'): + return + if not yems_cmd.has(nm): + return + var unit_cvi = {} + for cls_info in unit_info.mcls: + var claster_cvi = {} + claster_cvi['state_txe'] = ClasterState.WAITING + claster_cvi['state_rxe'] = ClasterState.WAITING + var unit_cmd = yems_cmd[nm] + if not unit_cmd.has(cls_info.cname): + continue + var cls_cmd = unit_cmd[cls_info.cname] + claster_cvi['state_rxe'] = ClasterState.DONE if cls_info.rxe == cls_cmd.rxe else ClasterState.MISSMATCH + claster_cvi['state_txe'] = ClasterState.DONE if cls_info.txe == cls_cmd.txe else ClasterState.MISSMATCH + unit_cvi[cls_info.cname] = claster_cvi + cmd_vs_info[nm] = unit_cvi + + +## Подключает обработчики команд к таблице кластеров +## [param cls_table] - таблица для отображения кластеров +## [param nm] - имя устройства +func connect_cmd_handlers(cls_table: GDTable, nm: StringName, indexes: Dictionary): + var rows_count = cls_table.get_rows_count() + if indexes.size() != rows_count: + push_error('indexes.size() != rows_count') + return + for cname in indexes: + # Имя устройства и имя кластера + var i_row = indexes[cname] + # Подключить обработчки разрешения приёмников + var node = cls_table.get_node2(column_cmd_rx, i_row) + node.connect_check('toggled', _on_user_cmd.bind(nm, cname, 'rxe')) + # Подключить обработчки разрешения приёмников + node = cls_table.get_node2(column_cmd_tx, i_row) + node.connect_check('toggled', _on_user_cmd.bind(nm, cname, 'txe')) + + +func _on_user_cmd(val: bool, nm: StringName, cname: String, param_name: StringName): + var unit_cmd = yems_cmd[nm] + if cname in unit_cmd: + unit_cmd[cname][param_name] = val + else: + unit_cmd[cname] = {param_name: val} + + ## Обрабатывает событие [b]data_received[/b] func on_data_received(data: Dictionary, nm: StringName): var unit_data: = yems_info[nm] @@ -111,12 +231,34 @@ func on_data_received(data: Dictionary, nm: StringName): return var ctable: GDTable = $'таблица/сетка' var claster_scale: = name_to_scale[nm] as GridContainer - var indexes: = cnames_table[nm] # Идексы строк в таблице - map_yems_data_to_table(unit_data, ctable, indexes) + var indexes: = cnames_table[nm] # Индексы строк в таблице + if selected_unit[nm]: + map_yems_data_to_table(unit_data, ctable, indexes) map_yems_data_to_scale(unit_data, claster_scale) var inters: = find_inters(yems_info) + var unit_cvi = cmd_vs_info[nm] map_inters_to_matrix(inters, $'матрица') set_timeouts(yems_info) + cmd_to_unit(nm) + update_cmd_vs_info(nm) + map_cvi_to_table(unit_cvi, ctable, indexes) + + +func cmd_to_unit(nm: StringName): + var unit_yemstg: = network.get_unit_instance(nm) + if unit_yemstg.cmd_state != unit.Unit.CmdState.DONE: + return + # Команда формируется из докладов (данных принятых из сети от устройств) + var cmd = yems_info[nm] + # Переписать новыми значениями из команды заданной оператором + cmd['mtype'] = 'cmd' + var unit_cmd = yems_cmd[nm] + for cls_info in cmd.mcls: + if unit_cmd.has(cls_info.cname): + var cmd_cls = unit_cmd[cls_info.cname] + cls_info.merge(cmd_cls, true) + unit_yemstg.cmd.merge(cmd, true) + unit_yemstg.cmd_state = unit.Unit.CmdState.SEND func set_timeouts(info: Dictionary): @@ -132,20 +274,24 @@ func set_timeouts(info: Dictionary): timer.one_shot = true timer.connect('timeout', _on_timeout_ttl.bind(nm, cls.cname)) add_child(timer) - print_debug('создан: %s' % timer_name) timer.start(cls.ttl) - print_debug('пуск: %s' % timer_name) + cls['status'] = ClasterStatus.RUNNING +## Обработчик истечения времени жизни кластера func _on_timeout_ttl(nm, cname): - var timer_name = NodePath('%s_%s' % [nm, cname]) + var timer_name = NodePath('%s_%s' % [nm, cname]) var timer = get_node_or_null(timer_name) if timer: remove_child(timer) timer.queue_free() - print_debug('удалён: %s' % timer_name) + var unit_data = yems_info[nm] + for cls in unit_data.mcls: + if cname == cls.cname: + cls.status = ClasterStatus.DELETED +## Отображает пересечения на матрице func map_inters_to_matrix(inters: Array, matrix: GridContainer) -> void: var nodes = matrix.get_children() for item in inters: @@ -164,23 +310,30 @@ func map_yems_data_to_table(unit_data: Dictionary, ctable: GDTable, indexes: Dic # Обойти все кластеры устройства for cls in unit_data.mcls: # Строки для заполнения ряда - var row_text = [cls.cname, 'Активен', '%.1f' % cls.ttl, '%.1f' % cls.daa, '%.1f' % cls.dap, '%.1f' % cls.cfb] + var row_text = [cls.cname, 'Активен', '%.1f' % cls.ttl, '%.1f' % cls.daa, '%.1f' % cls.dap, '%.1f-%.1f' % [cls.cfb - cls.wfb / 2.0, cls.cfb + cls.wfb / 2.0]] # Если такой кластер уже есть, обновить его строку в таблице if cls.cname in indexes: # Получить индекс строки кластера в таблице var i_row = indexes[cls.cname] + # Установить новый текст ctable.set_row_text(i_row, row_text) - # Если такого кластера нет, создать его строку в таблице + # Если такого кластера нет, то создать его строку в таблице else: - # Создать новый ряд + # Добавить новый ряд ctable.add_row(table_cell_row) - # Записать индекс строки в таблице для кластера + # Получить индекс нового ряда в таблице var i_row: = indexes.size() + # Записать индекс нового ряда (связать с именем кластера) indexes[cls.cname] = i_row - # Установка высоты строки + # Установить высоту ряда (можно пропустить, если нужная высота будет выставлена по умолчанию) ctable.set_row_min_hight(i_row, table_rows_hight) + # Установить новый текст + ctable.set_row_text(i_row, row_text) + ctable.set_node_property(column_cmd_rx, i_row, 'pressed', cls.rxe) + ctable.set_node_property(column_cmd_tx, i_row, 'pressed', cls.txe) +## Находит пересечения диапазонов func find_inters(info: Dictionary) -> Array: # info - словарь, его структура # { @@ -211,7 +364,7 @@ func find_inters(info: Dictionary) -> Array: #print_debug([cls.cname, cls.wfb, cls.cfb, cls.txe, cls.rxe]) pass # заглушка для возвращаемых данных - return [['эмс-ор63', 'эмс-ор63', 'Кластер-0', 'Кластер-0', 1600.0, 2400.0]] + return [['эмс-ор63', 'эмс-454', 'Кластер-0', 'Кластер-0', 1600.0, 2400.0]] ## Отображает кластеры на шкале @@ -219,17 +372,28 @@ func find_inters(info: Dictionary) -> Array: func map_yems_data_to_scale(unit_data: Dictionary, claster_scale: GridContainer): # Обойти все кластеры устройства for cls in unit_data.mcls: + # Преобразовать диапазоны частот в диапазоны отображения var c: = remap(cls.cfb, freq_min, freq_max, 0.0, 1.0) var w: = remap(cls.wfb, freq_min, freq_max, 0.0, 0.5) + w = clampf(w, 0.005, 1.0) # Чтобы диапазон всегда был виден, даже если он слишком узкий + # Отсечь значения по границам var l: = clampf(c - w, 0.0, 1.0) var h: = clampf(c + w, 0.0, 1.0) + # Получить шкалу приёмника var scale_rx: = claster_scale.get_node('panel_rx') - var scale_tx: = claster_scale.get_node('panel_tx') + # Отобразить диапазон, если приёмник включен if cls.get('rxe', false): - scale_rx.set_range(cls.cname, l, h, color_rx) + color_intersec.a = color_alpha + scale_rx.set_range(cls.cname, l, h, color_intersec) + # Удалить диапазон, если приёмник выключен else: scale_rx.del_range(cls.cname) + # Получить шкалу передатчика + var scale_tx: = claster_scale.get_node('panel_tx') + # Отобразить диапазон, если передатчик включен if cls.get('txe', false): - scale_tx.set_range(cls.cname, l, h, color_tx) + color_intersec.a = color_alpha + scale_tx.set_range(cls.cname, l, h, color_intersec) + # Удалить диапазон, если передатчик выключен else: scale_tx.del_range(cls.cname) diff --git a/scenes/эмс-тг/эмс-тг.tscn b/scenes/эмс-тг/эмс-тг.tscn index 96f9a9bc..531e06a4 100644 --- a/scenes/эмс-тг/эмс-тг.tscn +++ b/scenes/эмс-тг/эмс-тг.tscn @@ -42,11 +42,16 @@ script = ExtResource("1_b7tfl") index_to_unit_names = Array[StringName]([&"эмс-ор63", &"эмс-454", &"эмс-го", &"эмс-рлс1", &"эмс-рлс2", &"эмс-ннвс", &"эмс-изделие7", &"эмс-изделие8"]) freq_min = 300.0 freq_max = 6000.0 -color_tx = Color(0.898367, 0.460547, 0.239949, 1) -color_rx = Color(0.498039, 0.498039, 1, 1) +color_clear = Color(0.898039, 0.458824, 0.239216, 1) +color_intersec = Color(0.898039, 0.458824, 0.239216, 1) +color_alpha = 0.7 color_odd = Color(0.31863, 0.32773, 0.327729, 1) color_even = Color(0.258824, 0.266667, 0.266667, 1) -matrix_conf = Array[Texture]([ExtResource("2_s28jr"), ExtResource("3_its7t")]) +column_cmd_rx = 6 +column_cmd_tx = 7 +max_clasters_per_unit = 32 +msg_select_unit = "Выберите устройство" +msg_waiting_data = "Ожидание данных" table_headers = Array[String](["uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://cymcld4mjmlhj", "uid://cymcld4mjmlhj"]) table_cells = Array[String](["uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://cixwl6xi22buo", "uid://cixwl6xi22buo"]) image_file_rx = "uid://c6etralq2tvxg" @@ -98,6 +103,7 @@ columns = 2 layout_mode = 2 size_flags_vertical = 7 toggle_mode = true +action_mode = 0 button_group = SubResource("ButtonGroup_vwsbs") text = "ОР-63" metadata/unit_name = &"эмс-ор63" @@ -130,6 +136,7 @@ layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 toggle_mode = true +action_mode = 0 button_group = SubResource("ButtonGroup_vwsbs") text = "454" metadata/unit_name = &"эмс-454" @@ -160,6 +167,7 @@ layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 toggle_mode = true +action_mode = 0 button_group = SubResource("ButtonGroup_vwsbs") text = "ГО" metadata/unit_name = &"эмс-го" @@ -192,6 +200,7 @@ layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 toggle_mode = true +action_mode = 0 button_group = SubResource("ButtonGroup_vwsbs") text = "РЛС1" metadata/unit_name = &"эмс-рлс1" @@ -222,6 +231,7 @@ layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 toggle_mode = true +action_mode = 0 button_group = SubResource("ButtonGroup_vwsbs") text = "РЛС2" metadata/unit_name = &"эмс-рлс2" @@ -254,6 +264,7 @@ layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 toggle_mode = true +action_mode = 0 button_group = SubResource("ButtonGroup_vwsbs") text = "ННВС" metadata/unit_name = &"эмс-ннвс" @@ -284,9 +295,10 @@ layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 toggle_mode = true +action_mode = 0 button_group = SubResource("ButtonGroup_vwsbs") text = "Изделие 7" -metadata/unit_name = &"изделие7" +metadata/unit_name = &"эмс-изделие7" [node name="sub6" type="GridContainer" parent="шкала" groups=["чётные", "шкалы-кластеров"]] self_modulate = Color(0.258824, 0.266667, 0.266667, 1) @@ -316,6 +328,7 @@ layout_mode = 2 size_flags_horizontal = 5 size_flags_vertical = 7 toggle_mode = true +action_mode = 0 button_group = SubResource("ButtonGroup_vwsbs") text = "Изделие 8" metadata/unit_name = &"эмс-изделие8" @@ -901,3 +914,13 @@ offset_bottom = 65.0 size_flags_horizontal = 4 size_flags_vertical = 6 text = "ННВС" + +[node name="label_msg" type="Label" parent="."] +layout_mode = 0 +offset_left = 25.0 +offset_top = 765.0 +offset_right = 1180.0 +offset_bottom = 1155.0 +text = "Выберите устройство" +horizontal_alignment = 1 +vertical_alignment = 1 diff --git a/scripts/network.gd b/scripts/network.gd index e80ccbe0..d6b07814 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -355,6 +355,7 @@ func _process(_delta: float) -> void: poll_sockets.any(poll_receive_udp) +## Возвращает экземпляр уже созданного устройства ## [param unit_name] - Уникальное имя устройства[br] func get_unit_instance(unit_name: StringName) -> unit.Unit: return units.get(unit_name, null) diff --git a/scripts/unit.gd b/scripts/unit.gd index bffe7961..5a71604d 100644 --- a/scripts/unit.gd +++ b/scripts/unit.gd @@ -25,6 +25,6 @@ class Unit extends Object: var rx_tick: int = 0 ## Тик-время последнего приёма данных var online: bool = false ## Состояние подключения устройства var name: StringName = '<без имени>' ## Уникальное имя устройства - func _init(nm) -> void: self.name = nm + func _init(nm: StringName) -> void: self.name = nm func _to_string() -> String: return String('Unit(\"%s\", %s)' % [self.name, 'на связи' if online else 'отключен']) diff --git a/scripts/yemstg.gd b/scripts/yemstg.gd index 102a276b..04a90130 100644 --- a/scripts/yemstg.gd +++ b/scripts/yemstg.gd @@ -6,6 +6,12 @@ class YeMSTG extends unit.Unit: var online_timeout: float = 5000 ## Должен быть равен наибольшему времени дотоверности из всех кластеров var info: = Dictionary() ## Доклад о состоянии var cmd: = Dictionary() ## Команда + var cnt: int = 0 ## Счётчик отправленных пакетов + + func _init(unit_name) -> void: + super._init(unit_name) + cmd_state = CmdState.DONE + func parse(data: PackedByteArray, now_tick: int): self.rx_tick = now_tick if not online: @@ -23,4 +29,10 @@ class YeMSTG extends unit.Unit: if online and ((now_tick - rx_tick) > online_timeout): online = false emit_signal('line_changed', self) - return Error.ERR_BUSY + var rc = Error.ERR_BUSY + if cmd_state == CmdState.SEND: + tx_data = JSON.stringify(cmd).to_utf8_buffer() + tx_len = tx_data.size() + cmd_state = CmdState.DONE + rc = Error.OK + return rc diff --git a/table/lable.tscn b/table/lable.tscn index 43d2ec80..c0e03492 100644 --- a/table/lable.tscn +++ b/table/lable.tscn @@ -32,4 +32,6 @@ offset_right = 104.0 offset_bottom = 27.0 theme_override_colors/font_color = Color(1, 0.596078, 0.4, 1) theme_override_styles/normal = SubResource("StyleBoxFlat_yign5") +horizontal_alignment = 1 +vertical_alignment = 1 script = SubResource("GDScript_dhnrx") diff --git a/table/table.gd b/table/table.gd index f60f9e67..39072986 100644 --- a/table/table.gd +++ b/table/table.gd @@ -55,7 +55,7 @@ func defaultselector_color_proc(_i_row: int): return selector_color func _assert(val: bool, msg: String = '<не указано>'): if val: return - push_error('ошибка: %s\n' % msg) + push_error('%s\n' % msg) get_tree().quit(1) From 4079d55aa57133bf9de9482b3ce148ad2ab522d6 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 26 Mar 2026 11:55:23 +0300 Subject: [PATCH 32/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B0=D0=B7=D1=80?= =?UTF-8?q?=D0=B5=D1=88=D1=91=D0=BD=D0=BD=D1=8B=D1=85/=D0=B7=D0=B0=D0=BF?= =?UTF-8?q?=D1=80=D0=B5=D1=89=D1=91=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B4=D0=B8?= =?UTF-8?q?=D0=B0=D0=BF=D0=B0=D0=B7=D0=BE=D0=BD=D0=BE=D0=B2=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=BD=D1=8B=D0=BC=20=D1=86=D0=B2=D0=B5=D1=82=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 35 ++++++++++++++------------------- scenes/эмс-тг/эмс-тг.tscn | 41 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 54 insertions(+), 22 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 8208dc9e..c59480c0 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -10,10 +10,10 @@ extends Panel @export var freq_min: float ## Максимальная частота, МГЦ @export var freq_max: float -## Цвет диапазона передатчика на шкале -@export_color_no_alpha var color_clear: Color -## Цвет диапазона приёмника на шкале -@export_color_no_alpha var color_intersec: Color +## Цвет диапазона если включен (разрешён) +@export_color_no_alpha var color_enabled: Color +## Цвет диапазона если выключен (запрещён) +@export_color_no_alpha var color_disabled: Color ## Прозрачность диапазон на шкале (диапазоны могут накладываться, что бы было видно наложения) @export_range(0, 1.0) var color_alpha: float ## Цвет нечётных строк шкалы @@ -89,6 +89,8 @@ enum ClasterState { func _ready() -> void: # Инициализировать переменные + color_enabled.a = color_alpha + color_disabled.a = color_alpha for i in index_to_unit_names.size(): var nm: = index_to_unit_names[i] name_to_index[nm] = i @@ -364,7 +366,7 @@ func find_inters(info: Dictionary) -> Array: #print_debug([cls.cname, cls.wfb, cls.cfb, cls.txe, cls.rxe]) pass # заглушка для возвращаемых данных - return [['эмс-ор63', 'эмс-454', 'Кластер-0', 'Кластер-0', 1600.0, 2400.0]] + return [['эмс-ор63', 'эмс-ор63', 'Кластер-0', 'Кластер-0', 1600.0, 2400.0]] ## Отображает кластеры на шкале @@ -375,25 +377,18 @@ func map_yems_data_to_scale(unit_data: Dictionary, claster_scale: GridContainer) # Преобразовать диапазоны частот в диапазоны отображения var c: = remap(cls.cfb, freq_min, freq_max, 0.0, 1.0) var w: = remap(cls.wfb, freq_min, freq_max, 0.0, 0.5) - w = clampf(w, 0.005, 1.0) # Чтобы диапазон всегда был виден, даже если он слишком узкий + # Чтобы диапазон всегда был виден, даже если он слишком узкий + w = clampf(w, 0.005, 1.0) # Отсечь значения по границам var l: = clampf(c - w, 0.0, 1.0) var h: = clampf(c + w, 0.0, 1.0) # Получить шкалу приёмника var scale_rx: = claster_scale.get_node('panel_rx') - # Отобразить диапазон, если приёмник включен - if cls.get('rxe', false): - color_intersec.a = color_alpha - scale_rx.set_range(cls.cname, l, h, color_intersec) - # Удалить диапазон, если приёмник выключен - else: - scale_rx.del_range(cls.cname) + # Отобразить диапазон приёмника, в соответствии с разрешением + var color_rxe: = color_enabled if cls.get('rxe', false) else color_disabled + scale_rx.set_range(cls.cname, l, h, color_rxe) # Получить шкалу передатчика var scale_tx: = claster_scale.get_node('panel_tx') - # Отобразить диапазон, если передатчик включен - if cls.get('txe', false): - color_intersec.a = color_alpha - scale_tx.set_range(cls.cname, l, h, color_intersec) - # Удалить диапазон, если передатчик выключен - else: - scale_tx.del_range(cls.cname) + # Отобразить диапазон передатчика, в соответсвии с разрешением + var color_txe: = color_enabled if cls.get('txe', false) else color_disabled + scale_tx.set_range(cls.cname, l, h, color_txe) diff --git a/scenes/эмс-тг/эмс-тг.tscn b/scenes/эмс-тг/эмс-тг.tscn index 531e06a4..2b2d5c4d 100644 --- a/scenes/эмс-тг/эмс-тг.tscn +++ b/scenes/эмс-тг/эмс-тг.tscn @@ -42,8 +42,8 @@ script = ExtResource("1_b7tfl") index_to_unit_names = Array[StringName]([&"эмс-ор63", &"эмс-454", &"эмс-го", &"эмс-рлс1", &"эмс-рлс2", &"эмс-ннвс", &"эмс-изделие7", &"эмс-изделие8"]) freq_min = 300.0 freq_max = 6000.0 -color_clear = Color(0.898039, 0.458824, 0.239216, 1) -color_intersec = Color(0.898039, 0.458824, 0.239216, 1) +color_enabled = Color(0.898039, 0.458824, 0.239216, 1) +color_disabled = Color(0.601223, 0.601223, 0.601223, 1) color_alpha = 0.7 color_odd = Color(0.31863, 0.32773, 0.327729, 1) color_even = Color(0.258824, 0.266667, 0.266667, 1) @@ -411,36 +411,43 @@ metadata/unit_name = &"эмс-ор63" [node name="матрица-0-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +action_mode = 0 +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-0-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-0-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-0-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-0-4" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-0-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") @@ -452,36 +459,42 @@ metadata/unit_name = &"" [node name="матрица-1-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-1-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-1-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-1-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-1-4" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-1-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") @@ -493,36 +506,42 @@ metadata/unit_name = &"" [node name="матрица-2-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-2-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-2-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-2-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-2-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-2-4" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") @@ -534,36 +553,42 @@ metadata/unit_name = &"" [node name="матрица-3-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-3-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-3-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-3-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-3-4" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-3-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") @@ -575,36 +600,42 @@ metadata/unit_name = &"" [node name="матрица-4-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-4-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-4-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-4-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-4-4" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-4-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") @@ -616,36 +647,42 @@ metadata/unit_name = &"" [node name="матрица-5-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-5-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-5-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-5-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-5-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") [node name="матрица-5-6" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 toggle_mode = true +button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") From cd34aa9100d4807bf6e80aa366e2ef0c9c8dbbee Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 26 Mar 2026 11:55:59 +0300 Subject: [PATCH 33/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=A1=D0=B1=D1=80=D0=BE=D1=81=20?= =?UTF-8?q?=D0=BC=D0=B0=D1=82=D1=80=D0=B8=D1=86=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index c59480c0..383b2739 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -239,6 +239,7 @@ func on_data_received(data: Dictionary, nm: StringName): map_yems_data_to_scale(unit_data, claster_scale) var inters: = find_inters(yems_info) var unit_cvi = cmd_vs_info[nm] + reset_matrix() map_inters_to_matrix(inters, $'матрица') set_timeouts(yems_info) cmd_to_unit(nm) @@ -293,6 +294,12 @@ func _on_timeout_ttl(nm, cname): cls.status = ClasterStatus.DELETED +func reset_matrix(): + var nodes = get_tree().get_nodes_in_group('матрица-к') + for node in nodes: + node.button_pressed = false + + ## Отображает пересечения на матрице func map_inters_to_matrix(inters: Array, matrix: GridContainer) -> void: var nodes = matrix.get_children() From fb7853a5be19bf79776040b70d5889beccfda49e Mon Sep 17 00:00:00 2001 From: Vika Date: Thu, 26 Mar 2026 14:57:53 +0300 Subject: [PATCH 34/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=A4=D1=83=D0=BD=D0=BA=D1=86=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B0=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D1=81=D0=B5=D1=87=D0=B5=D0=BD=D0=B8=D0=B9=20=D1=87?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D0=BE=D1=82=20=D0=B4=D0=BB=D1=8F=20=D0=AD?= =?UTF-8?q?=D0=9C=D0=A1.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 73 +++++++++++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 24 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index bcd24f6c..23b0dec4 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -108,6 +108,7 @@ func on_data_received(data: Dictionary, nm: StringName): var indexes: = cnames_table[nm] # Идексы строк в таблице map_yems_data_to_table(unit_data, ctable, indexes) map_yems_data_to_scale(unit_data, claster_scale) + #var yems_data_info1 = {} var inters: = find_inters(yems_data_info) map_inters_to_matrix(inters, $'матрица') @@ -148,35 +149,59 @@ func map_yems_data_to_table(unit_data: Dictionary, ctable: GDTable, indexes: Dic func find_inters(info: Dictionary) -> Array: - # info - словарь, его структура - # { - # "устройство": # имя устройства ("эмс-ор63") - # [ - # { - # cname, # имя кластера ("Кластер-0") - # wfb, # ширина диапазона, МГЦ (800.0) - # cfb, # центр диапазона, МГЦ (2000.0) - # txe, # передатчик включен - # rxe # передатчик выключен - # }, - # { - # cname, # имя кластера ("Кластер-1") - # wfb, # ширина диапазона, МГЦ (200.0) - # cfb, # центр диапазона, МГЦ (1000.0) - # txe, # передатчик включен - # rxe # передатчик выключен - # }, - # ] - # } + + var result = [] + var all_clusters = [] + # Собираем все кластеры из всех устройств в один массив for nm in info: # nm - имя устройства var unit_data = info[nm] if not unit_data: continue - for cls in unit_data.mcls: - # cls - один кластер - print_debug([cls.cname, cls.wfb, cls.cfb, cls.txe, cls.rxe]) + # Добавлена проверка для совместимости + var clusters = unit_data if unit_data is Array else unit_data.mcls + # cls - один кластер + for cls in clusters: + var cfb = float(cls.cfb) + var wfb = float(cls.wfb) + # расчёт границ частотных диапазонов + var freq_min1 = cfb - wfb / 2.0 + var freq_max1 = cfb + wfb / 2.0 + all_clusters.append([nm, cls.cname, freq_min1, freq_max1, cls.txe, cls.rxe]) + print([nm, cls.cname, freq_min1, freq_max1, cls.txe, cls.rxe]) + + for i in all_clusters.size(): + var cl1 = all_clusters[i] + var dev1 = cl1[0] + var name1 = cl1[1] + var min1 = cl1[2] + var max1 = cl1[3] + var txe1 = cl1[4] + var rxe1 = cl1[5] + + # Сравниваем текущий кластер со всеми последующими, чтобы избежать дублей и самопересечений + for j in range(0, all_clusters.size()): + var cl2 = all_clusters[j] + var dev2 = cl2[0] + var name2 = cl2[1] + var min2 = cl2[2] + var max2 = cl2[3] + var txe2 = cl2[4] + var rxe2 = cl2[5] + + #Если нет пары TR(RT) то пропускаем эту комбинацию + if not ((txe1 and rxe2) or (rxe1 and txe2)): + continue + + # Проверка на пересечение диапазонов, пересечение есть если начало одного диапазона меньше конца другого + if max1 > min2 and max2 > min1: + #Вычисляем точные границы пересечения + var inter_start = max(min1, min2) + var inter_end = min(max1, max2) + + # Формируем результат в требуемом формате + result.append([dev1, dev2, name1, name2, inter_start, inter_end]) # заглушка для возвращаемых данных - return [['эмс-ор63', 'эмс-ор63', 'Кластер-0', 'Кластер-0', 1600.0, 2400.0]] + return result ## Отображает кластеры на шкале From 3eef38f56ab24298eadf750cad0895d3425e7427 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 26 Mar 2026 15:16:15 +0300 Subject: [PATCH 35/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=9E=D0=B1=D1=8A=D0=B5=D0=B4?= =?UTF-8?q?=D0=B8=D0=BD=D0=B8=D1=82=D1=8C=20=D0=B8=D0=BC=D0=B5=D1=8E=D1=89?= =?UTF-8?q?=D0=B8=D0=B5=D1=81=D1=8F=20=D0=B4=D0=BE=D0=BA=D0=BB=D0=B0=D0=B4?= =?UTF-8?q?=D1=8B=20=D0=BE=D0=B1=20=D0=BA=D0=BB=D0=B0=D1=81=D1=82=D0=B5?= =?UTF-8?q?=D1=80=D0=B0=D1=85=20=D1=81=20=D0=B2=D0=BD=D0=BE=D0=B2=D1=8C=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=B8=D0=B2=D1=88=D0=B8?= =?UTF-8?q?=D0=BC=D0=B8=20=D0=BE=D1=82=20=D1=83=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D1=81=D1=82=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 87 ++++++++++++++++++++++++----------------- 1 file changed, 52 insertions(+), 35 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 383b2739..4e6123f9 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -94,7 +94,7 @@ func _ready() -> void: for i in index_to_unit_names.size(): var nm: = index_to_unit_names[i] name_to_index[nm] = i - yems_info[nm] = {} + yems_info[nm] = {'mcls': []} yems_cmd[nm] = {} cnames_table[nm] = {} selected_unit[nm] = false @@ -157,7 +157,7 @@ func _on_scale_selected(val: bool, nm: StringName): var ctable = $'таблица/сетка' var indexes = cnames_table[nm] var unit_cvi = cmd_vs_info[nm] - map_yems_data_to_table(unit_info, ctable, indexes) + map_yems_info_to_table(unit_info, ctable, indexes) connect_cmd_handlers(ctable, nm, indexes) update_cmd_vs_info(nm) map_cvi_to_table(unit_cvi, ctable, indexes) @@ -227,26 +227,38 @@ func _on_user_cmd(val: bool, nm: StringName, cname: String, param_name: StringNa ## Обрабатывает событие [b]data_received[/b] func on_data_received(data: Dictionary, nm: StringName): - var unit_data: = yems_info[nm] - unit_data.merge(data, true) - if not unit_data: + set_timeouts(nm, data) + var unit_info: = yems_info[nm] + unit_info_merge(unit_info, data) + if not unit_info: return var ctable: GDTable = $'таблица/сетка' var claster_scale: = name_to_scale[nm] as GridContainer var indexes: = cnames_table[nm] # Индексы строк в таблице if selected_unit[nm]: - map_yems_data_to_table(unit_data, ctable, indexes) - map_yems_data_to_scale(unit_data, claster_scale) + map_yems_info_to_table(unit_info, ctable, indexes) + map_yems_info_to_scale(unit_info, claster_scale) var inters: = find_inters(yems_info) var unit_cvi = cmd_vs_info[nm] reset_matrix() map_inters_to_matrix(inters, $'матрица') - set_timeouts(yems_info) cmd_to_unit(nm) update_cmd_vs_info(nm) map_cvi_to_table(unit_cvi, ctable, indexes) +# Объединяет списки кластеров принятых от устройства +func unit_info_merge(unit_info: Dictionary, data_rx: Dictionary): + var drx: = {} + for cls in data_rx.mcls: + drx[cls.cname] = cls + var dinfo: = {} + for cls in unit_info.mcls: + dinfo[cls.cname] = cls + dinfo.merge(drx, true) + unit_info.mcls = dinfo.values() + + func cmd_to_unit(nm: StringName): var unit_yemstg: = network.get_unit_instance(nm) if unit_yemstg.cmd_state != unit.Unit.CmdState.DONE: @@ -264,21 +276,18 @@ func cmd_to_unit(nm: StringName): unit_yemstg.cmd_state = unit.Unit.CmdState.SEND -func set_timeouts(info: Dictionary): - for nm in info: # nm - имя устройства - var unit_data = info[nm] - if not unit_data: continue - for cls in unit_data.mcls: # cls - один кластер - var timer_name = NodePath('%s_%s' % [nm, cls.cname]) - var timer = get_node_or_null(timer_name) - if not timer: - timer = Timer.new() - timer.name = timer_name - timer.one_shot = true - timer.connect('timeout', _on_timeout_ttl.bind(nm, cls.cname)) - add_child(timer) - timer.start(cls.ttl) - cls['status'] = ClasterStatus.RUNNING +func set_timeouts(nm: StringName, unit_info: Dictionary): + for cls in unit_info.mcls: # cls - один кластер + var timer_name = NodePath('%s_%s' % [nm, cls.cname]) + var timer = get_node_or_null(timer_name) + if not timer: + timer = Timer.new() + timer.name = timer_name + timer.one_shot = true + timer.connect('timeout', _on_timeout_ttl.bind(nm, cls.cname)) + add_child(timer) + timer.start(cls.ttl) + cls['status'] = ClasterStatus.RUNNING ## Обработчик истечения времени жизни кластера @@ -288,10 +297,13 @@ func _on_timeout_ttl(nm, cname): if timer: remove_child(timer) timer.queue_free() - var unit_data = yems_info[nm] - for cls in unit_data.mcls: + var unit_info = yems_info[nm] + for cls in unit_info.mcls: if cname == cls.cname: cls.status = ClasterStatus.DELETED + var claster_scale: = name_to_scale[nm] as GridContainer + map_yems_info_to_scale(unit_info, claster_scale) + reset_matrix() func reset_matrix(): @@ -315,9 +327,9 @@ func map_inters_to_matrix(inters: Array, matrix: GridContainer) -> void: ## Отображает кластеры в таблицу ## [param nm] - имя устройства -func map_yems_data_to_table(unit_data: Dictionary, ctable: GDTable, indexes: Dictionary): +func map_yems_info_to_table(unit_info: Dictionary, ctable: GDTable, indexes: Dictionary): # Обойти все кластеры устройства - for cls in unit_data.mcls: + for cls in unit_info.mcls: # Строки для заполнения ряда var row_text = [cls.cname, 'Активен', '%.1f' % cls.ttl, '%.1f' % cls.daa, '%.1f' % cls.dap, '%.1f-%.1f' % [cls.cfb - cls.wfb / 2.0, cls.cfb + cls.wfb / 2.0]] # Если такой кластер уже есть, обновить его строку в таблице @@ -378,9 +390,9 @@ func find_inters(info: Dictionary) -> Array: ## Отображает кластеры на шкале ## [param nm] - имя устройства -func map_yems_data_to_scale(unit_data: Dictionary, claster_scale: GridContainer): +func map_yems_info_to_scale(unit_info: Dictionary, claster_scale: GridContainer): # Обойти все кластеры устройства - for cls in unit_data.mcls: + for cls in unit_info.mcls: # Преобразовать диапазоны частот в диапазоны отображения var c: = remap(cls.cfb, freq_min, freq_max, 0.0, 1.0) var w: = remap(cls.wfb, freq_min, freq_max, 0.0, 0.5) @@ -391,11 +403,16 @@ func map_yems_data_to_scale(unit_data: Dictionary, claster_scale: GridContainer) var h: = clampf(c + w, 0.0, 1.0) # Получить шкалу приёмника var scale_rx: = claster_scale.get_node('panel_rx') - # Отобразить диапазон приёмника, в соответствии с разрешением - var color_rxe: = color_enabled if cls.get('rxe', false) else color_disabled - scale_rx.set_range(cls.cname, l, h, color_rxe) # Получить шкалу передатчика var scale_tx: = claster_scale.get_node('panel_tx') - # Отобразить диапазон передатчика, в соответсвии с разрешением - var color_txe: = color_enabled if cls.get('txe', false) else color_disabled - scale_tx.set_range(cls.cname, l, h, color_txe) + # Проверить что диапазон работает + if cls.status == ClasterStatus.RUNNING: # Диапазон работает (информация обновляется) + # Отобразить диапазон приёмника, в соответствии с разрешением + var color_rxe: = color_enabled if cls.get('rxe', false) else color_disabled + scale_rx.set_range(cls.cname, l, h, color_rxe) + # Отобразить диапазон передатчика, в соответствии с разрешением + var color_txe: = color_enabled if cls.get('txe', false) else color_disabled + scale_tx.set_range(cls.cname, l, h, color_txe) + elif cls.status == ClasterStatus.DELETED: # Диапазон удалён (информация не обновляется) + scale_rx.del_range(cls.cname) + scale_tx.del_range(cls.cname) From a2d56a75532b584fdb6d1297421105c20220db5d Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 26 Mar 2026 15:30:37 +0300 Subject: [PATCH 36/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B0=D0=B7=D1=80?= =?UTF-8?q?=D0=B5=D1=88=D1=91=D0=BD=D0=BD=D1=8B=D1=85/=D0=B7=D0=B0=D0=BF?= =?UTF-8?q?=D1=80=D0=B5=D1=89=D1=91=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B4=D0=B8?= =?UTF-8?q?=D0=B0=D0=BF=D0=B0=D0=B7=D0=BE=D0=BD=D0=BE=D0=B2=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=BD=D1=8B=D0=BC=20=D1=86=D0=B2=D0=B5=D1=82=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.tscn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.tscn b/scenes/эмс-тг/эмс-тг.tscn index 2b2d5c4d..3df3e7d9 100644 --- a/scenes/эмс-тг/эмс-тг.tscn +++ b/scenes/эмс-тг/эмс-тг.tscn @@ -42,8 +42,8 @@ script = ExtResource("1_b7tfl") index_to_unit_names = Array[StringName]([&"эмс-ор63", &"эмс-454", &"эмс-го", &"эмс-рлс1", &"эмс-рлс2", &"эмс-ннвс", &"эмс-изделие7", &"эмс-изделие8"]) freq_min = 300.0 freq_max = 6000.0 -color_enabled = Color(0.898039, 0.458824, 0.239216, 1) -color_disabled = Color(0.601223, 0.601223, 0.601223, 1) +color_enabled = Color(0.898039, 0.458824, 0.239216, 0.7) +color_disabled = Color(0.601223, 0.601223, 0.601223, 0.7) color_alpha = 0.7 color_odd = Color(0.31863, 0.32773, 0.327729, 1) color_even = Color(0.258824, 0.266667, 0.266667, 1) From 193f0ab49842867da853f5e88e2d179f2bd2e3c3 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 26 Mar 2026 16:15:58 +0300 Subject: [PATCH 37/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=84?= =?UTF-8?q?=D0=BB=D0=B8=D0=BA=D1=82=D0=BE=D0=B2=20=D0=BD=D0=B0=20=D0=BC?= =?UTF-8?q?=D0=B0=D1=82=D1=80=D0=B8=D1=86=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 914f4f83..684a7fc3 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -356,7 +356,6 @@ func map_yems_info_to_table(unit_info: Dictionary, ctable: GDTable, indexes: Dic ## Находит пересечения диапазонов func find_inters(info: Dictionary) -> Array: - var result = [] var all_clusters = [] # Собираем все кластеры из всех устройств в один массив @@ -364,15 +363,13 @@ func find_inters(info: Dictionary) -> Array: # nm - имя устройства var unit_data = info[nm] if not unit_data: continue - # Добавлена проверка для совместимости - var clusters = unit_data if unit_data is Array else unit_data.mcls # cls - один кластер - for cls in clusters: + for cls in unit_data.mcls.filter(func(c): return c.status == ClasterStatus.RUNNING): var cfb = float(cls.cfb) - var wfb = float(cls.wfb) + var wfb = float(cls.wfb) / 2.0 # расчёт границ частотных диапазонов - var freq_min1 = cfb - wfb / 2.0 - var freq_max1 = cfb + wfb / 2.0 + var freq_min1 = cfb - wfb + var freq_max1 = cfb + wfb all_clusters.append([nm, cls.cname, freq_min1, freq_max1, cls.txe, cls.rxe]) print([nm, cls.cname, freq_min1, freq_max1, cls.txe, cls.rxe]) @@ -386,7 +383,7 @@ func find_inters(info: Dictionary) -> Array: var rxe1 = cl1[5] # Сравниваем текущий кластер со всеми последующими, чтобы избежать дублей и самопересечений - for j in range(0, all_clusters.size()): + for j in all_clusters.size(): var cl2 = all_clusters[j] var dev2 = cl2[0] var name2 = cl2[1] From 6f7bf0a5be636dd39377ce712c2139cd1f1aaf3a Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 26 Mar 2026 16:16:22 +0300 Subject: [PATCH 38/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=A7=D0=B8=D1=81=D1=82=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 1 - 1 file changed, 1 deletion(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 684a7fc3..791e2eba 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -371,7 +371,6 @@ func find_inters(info: Dictionary) -> Array: var freq_min1 = cfb - wfb var freq_max1 = cfb + wfb all_clusters.append([nm, cls.cname, freq_min1, freq_max1, cls.txe, cls.rxe]) - print([nm, cls.cname, freq_min1, freq_max1, cls.txe, cls.rxe]) for i in all_clusters.size(): var cl1 = all_clusters[i] From 21a0c0c01212c364f5ae5ee4a35519934674d0a4 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 27 Mar 2026 12:10:47 +0300 Subject: [PATCH 39/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20WIP=20=D0=A4=D0=BE=D1=80=D0=BC=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=B0=D0=BD=D0=B4=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 77 +++++++++++++++++++++++------------------ 1 file changed, 44 insertions(+), 33 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 791e2eba..b0b3a064 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -81,7 +81,7 @@ enum ClasterMode { ## Состояние кластера. Значения должны соответствовать состояниям [b]six-state-button[/b] -enum ClasterState { +enum ClasterResult { WAITING = 0, ## Ожидание даннных DONE = 1, ## Выполнено MISSMATCH = 2 ## Несоответствие @@ -166,36 +166,36 @@ func _on_scale_selected(val: bool, nm: StringName): func map_cvi_to_table(unit_cvi: Dictionary, ctable: GDTable, indexes: Dictionary): for cname in indexes: var i_row = indexes[cname] - var state_rxe: = ClasterState.WAITING - var state_txe: = ClasterState.WAITING + var result_rxe: = ClasterResult.WAITING + var result_txe: = ClasterResult.WAITING if unit_cvi.has(cname): - state_rxe = unit_cvi[cname]['state_rxe'] - state_txe = unit_cvi[cname]['state_txe'] - ctable.set_node_property(column_cmd_rx, i_row, 'state', int(state_rxe)) - ctable.set_node_property(column_cmd_tx, i_row, 'state', int(state_txe)) + result_rxe = unit_cvi[cname]['result_rxe'] + result_txe = unit_cvi[cname]['result_txe'] + ctable.set_node_property(column_cmd_rx, i_row, 'state', int(result_rxe)) + ctable.set_node_property(column_cmd_tx, i_row, 'state', int(result_txe)) func update_cmd_vs_info(nm: StringName): - if yems_info.has(nm): - return var unit_info = yems_info[nm] - if not unit_info.has('mcls'): - return - if not yems_cmd.has(nm): - return var unit_cvi = {} + var unit_cmd = yems_cmd[nm] for cls_info in unit_info.mcls: - var claster_cvi = {} - claster_cvi['state_txe'] = ClasterState.WAITING - claster_cvi['state_rxe'] = ClasterState.WAITING - var unit_cmd = yems_cmd[nm] + var result_rxe = ClasterResult.DONE + var result_txe = ClasterResult.DONE if not unit_cmd.has(cls_info.cname): + unit_cvi[cls_info.cname] = \ + { 'result_rxe': ClasterResult.DONE, + 'result_txe': ClasterResult.DONE } continue var cls_cmd = unit_cmd[cls_info.cname] - claster_cvi['state_rxe'] = ClasterState.DONE if cls_info.rxe == cls_cmd.rxe else ClasterState.MISSMATCH - claster_cvi['state_txe'] = ClasterState.DONE if cls_info.txe == cls_cmd.txe else ClasterState.MISSMATCH - unit_cvi[cls_info.cname] = claster_cvi - cmd_vs_info[nm] = unit_cvi + if cls_cmd.has('rxe'): + result_rxe = ClasterResult.DONE if (cls_info.rxe == cls_cmd.rxe) else ClasterResult.MISSMATCH + if cls_cmd.has('txe'): + result_txe = ClasterResult.DONE if (cls_info.txe == cls_cmd.txe) else ClasterResult.MISSMATCH + unit_cvi[cls_info.cname] = \ + { 'result_rxe': result_rxe, + 'result_txe': result_txe } + cmd_vs_info[nm].merge(unit_cvi, true) ## Подключает обработчики команд к таблице кластеров @@ -247,7 +247,7 @@ func on_data_received(data: Dictionary, nm: StringName): map_cvi_to_table(unit_cvi, ctable, indexes) -# Объединяет списки кластеров принятых от устройства +# Объединяет список кластеров принятых от устройства со списком сохранённым func unit_info_merge(unit_info: Dictionary, data_rx: Dictionary): var drx: = {} for cls in data_rx.mcls: @@ -256,23 +256,30 @@ func unit_info_merge(unit_info: Dictionary, data_rx: Dictionary): for cls in unit_info.mcls: dinfo[cls.cname] = cls dinfo.merge(drx, true) + unit_info.merge(data_rx, true) unit_info.mcls = dinfo.values() func cmd_to_unit(nm: StringName): var unit_yemstg: = network.get_unit_instance(nm) + # Проверить, что предидущие отправлены if unit_yemstg.cmd_state != unit.Unit.CmdState.DONE: return - # Команда формируется из докладов (данных принятых из сети от устройств) - var cmd = yems_info[nm] - # Переписать новыми значениями из команды заданной оператором - cmd['mtype'] = 'cmd' + # Сформировать команду из докладов (данных принятых из сети от устройств) + var unit_info_copy = yems_info[nm].duplicate(true) var unit_cmd = yems_cmd[nm] - for cls_info in cmd.mcls: + unit_info_copy['mtype'] = 'cmd' + # Выбрать только работающие кластеры (время которых ещё не истекло) + var mcls = unit_info_copy.mcls.filter(func(c): return c.status == ClasterStatus.RUNNING) + for cls_info in mcls: + # Если для это кластера есть команда оператора if unit_cmd.has(cls_info.cname): + # Переписать новыми значениями из команды заданной оператором var cmd_cls = unit_cmd[cls_info.cname] cls_info.merge(cmd_cls, true) - unit_yemstg.cmd.merge(cmd, true) + cls_info.erase('status') + # Передать команду сетевому стеку + unit_yemstg.cmd.merge(unit_info_copy, true) unit_yemstg.cmd_state = unit.Unit.CmdState.SEND @@ -352,6 +359,8 @@ func map_yems_info_to_table(unit_info: Dictionary, ctable: GDTable, indexes: Dic ctable.set_row_text(i_row, row_text) ctable.set_node_property(column_cmd_rx, i_row, 'pressed', cls.rxe) ctable.set_node_property(column_cmd_tx, i_row, 'pressed', cls.txe) + ctable.set_node_property(column_cmd_rx, i_row, 'state', ClasterResult.WAITING) + ctable.set_node_property(column_cmd_tx, i_row, 'state', ClasterResult.WAITING) ## Находит пересечения диапазонов @@ -363,8 +372,9 @@ func find_inters(info: Dictionary) -> Array: # nm - имя устройства var unit_data = info[nm] if not unit_data: continue - # cls - один кластер - for cls in unit_data.mcls.filter(func(c): return c.status == ClasterStatus.RUNNING): + var clasters = unit_data.mcls.filter(func(c): return c.status == ClasterStatus.RUNNING) + for cls in clasters: + # cls - один кластер var cfb = float(cls.cfb) var wfb = float(cls.wfb) / 2.0 # расчёт границ частотных диапазонов @@ -424,14 +434,15 @@ func map_yems_info_to_scale(unit_info: Dictionary, claster_scale: GridContainer) var scale_rx: = claster_scale.get_node('panel_rx') # Получить шкалу передатчика var scale_tx: = claster_scale.get_node('panel_tx') - # Проверить что диапазон работает - if cls.status == ClasterStatus.RUNNING: # Диапазон работает (информация обновляется) + # Диапазон работает (информация обновляется) + if cls.status == ClasterStatus.RUNNING: # Отобразить диапазон приёмника, в соответствии с разрешением var color_rxe: = color_enabled if cls.get('rxe', false) else color_disabled scale_rx.set_range(cls.cname, l, h, color_rxe) # Отобразить диапазон передатчика, в соответствии с разрешением var color_txe: = color_enabled if cls.get('txe', false) else color_disabled scale_tx.set_range(cls.cname, l, h, color_txe) - elif cls.status == ClasterStatus.DELETED: # Диапазон удалён (информация не обновляется) + # Диапазон удалён (информация не обновляется) + elif cls.status == ClasterStatus.DELETED: scale_rx.del_range(cls.cname) scale_tx.del_range(cls.cname) From d00fb92520763d95c9c90e2c9eb445604a2d66c2 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 30 Mar 2026 11:17:17 +0300 Subject: [PATCH 40/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 13 +++++----- scenes/эмс/yems-devs.gd | 2 +- scenes/эмс/эмс.gd | 53 ++++++++++++++++++++--------------------- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index b0b3a064..b9a1fde9 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -20,11 +20,11 @@ extends Panel @export_color_no_alpha var color_odd: Color ## Цвет чётных строк шкалы @export_color_no_alpha var color_even: Color -## Индекс колонки в таблице для разрешения работы приёмника +## Индекс колонки в таблице для управления работой приёмников @export var column_cmd_rx: int -## Индекс колонки в таблице для разрешения работы передатчика +## Индекс колонки в таблице для управления работой передатчиков @export var column_cmd_tx: int -## Максимальное количесво кластеров на одно устройство +## Максимальное количество кластеров на одно устройство @export var max_clasters_per_unit: int ## Сообщение пользователю @export var msg_select_unit: String @@ -44,7 +44,7 @@ extends Panel #endregion #region Заполняется автоматически при запуске -var name_to_index: Dictionary[StringName, int] ## Имя устройства -> Индекс +var name_to_index: Dictionary[StringName, int] ## Имя устройства -> Индекс устройства var name_to_scale: Dictionary[StringName, GridContainer] ## Имя устройства -> Шкала var table_cell_row: Array #endregion @@ -67,8 +67,8 @@ var cmd_vs_info: Dictionary[StringName, Dictionary] ## Состояние кластера enum ClasterStatus { - DELETED, - RUNNING + DELETED, ## Удалён (время ожидания обновления истекло) + RUNNING ## Работает (информация обновляется) } @@ -87,6 +87,7 @@ enum ClasterResult { MISSMATCH = 2 ## Несоответствие } + func _ready() -> void: # Инициализировать переменные color_enabled.a = color_alpha diff --git a/scenes/эмс/yems-devs.gd b/scenes/эмс/yems-devs.gd index fb0e5a09..cd17514f 100644 --- a/scenes/эмс/yems-devs.gd +++ b/scenes/эмс/yems-devs.gd @@ -74,7 +74,7 @@ class OutDev extends InDev: if btns_state.has(i_dev): btns_state[i_dev] = val var data = 0 - for i in range(yemsconsts.NUM_INPUT): + for i in yemsconsts.NUM_INPUT: data = data | (int(btns_state[i+1]) << i) ports_data[isa_addr + 4] = data & 0xffff ports_data[isa_addr + 6] = (data >> 16) & 0xffff diff --git a/scenes/эмс/эмс.gd b/scenes/эмс/эмс.gd index 79fa1077..c299ff87 100644 --- a/scenes/эмс/эмс.gd +++ b/scenes/эмс/эмс.gd @@ -63,17 +63,16 @@ func init_boards(): init_tbl_files() $scrl_files/tbl_files.pin_header($scrl_files, self) - unit_ems.connect('data_received', Callable(self, 'on_data_ems_received')) - unit_ems.connect('command_done', Callable(self, 'on_command_done')) - unit_ems.connect('line_changed', Callable(self, 'on_line_changed')) + unit_ems.connect('data_received', on_data_ems_received) + unit_ems.connect('command_done', on_command_done) + unit_ems.connect('line_changed', on_line_changed) for board in g_boards.values(): - board.connect('upd_delay_offset', Callable(self, 'on_upd_delay_offset')) - board.connect('upd_o_state', Callable(self, 'on_upd_o_state')) - $btn_connect.connect('pressed', Callable(self, 'on_btn_connect')) - $btn_disconnect.connect('pressed', Callable(self, 'on_btn_disconnect').bind(unit_ems)) - $btn_flash_read.button_connect('pressed', Callable(self, 'on_btn_flash_read').bind($btn_flash_read)) - $btn_flash_write.button_connect('pressed', Callable(self, 'on_btn_flash_write').bind($btn_flash_write)) - + board.connect('upd_delay_offset', on_upd_delay_offset) + board.connect('upd_o_state', on_upd_o_state) + $btn_connect.connect('pressed', on_btn_connect) + $btn_disconnect.connect('pressed', on_btn_disconnect.bind(unit_ems)) + $btn_flash_read.button_connect('pressed', on_btn_flash_read.bind($btn_flash_read)) + $btn_flash_write.button_connect('pressed', on_btn_flash_write.bind($btn_flash_write)) ## Обработчик нажатия кнопки disconnect. @@ -140,7 +139,7 @@ func init_tbl_files(): tools.fill_files_table($scrl_files/tbl_files, yemsconsts.files_folder, FILES_ROWS_TYPES) $scrl_files/tbl_files.set_columns_alignments(yemsconsts.FILES_ROWS_ALIGNMENT) $scrl_files/tbl_files.set_columns_min_size(yemsconsts.FILES_COLUMN_WIDTHS) - $scrl_files/tbl_files.connect('row_pressed', Callable(self, 'on_pressed_file')) + $scrl_files/tbl_files.connect('row_pressed', on_pressed_file) for i_row in $scrl_files/tbl_files.get_rows_count(): disable_edit($scrl_files/tbl_files, len(FILES_ROWS_TYPES), i_row) @@ -179,8 +178,8 @@ func init_tbl_in(): $scrollin/tbl_in.set_node_user_data(i, row_index, [in_dev, board]) $scrollin/tbl_in.set_columns_alignments(yams_alligment_in) $scrollin/tbl_in.set_columns_min_size(column_size) - $scrollin/tbl_in.connect('row_pressed', Callable(self, 'on_row_pressed_in')) - $scrollin/tbl_in.connect('selected_changed', Callable(self, 'on_selected_changed_in')) + $scrollin/tbl_in.connect('row_pressed', on_row_pressed_in) + $scrollin/tbl_in.connect('selected_changed', on_selected_changed_in) # Инициализация таблицы изменения параметров входа и списка выходов связанных с ним header_text[0] = 'Вход' @@ -188,8 +187,8 @@ func init_tbl_in(): $scrl_in_set/tbl_in_set.set_header_text(header_text) $scrl_in_set/tbl_in_set.set_columns_alignments(yams_alligment_in) $scrl_in_set/tbl_in_set.set_columns_min_size(column_size) - $scrl_in_set/tbl_in_set.connect('row_pressed', Callable(self, 'on_row_pressed_si')) - $scrl_in_set/tbl_in_set.connect('selected_changed', Callable(self, 'on_selected_changed_si')) + $scrl_in_set/tbl_in_set.connect('row_pressed', on_row_pressed_si) + $scrl_in_set/tbl_in_set.connect('selected_changed', on_selected_changed_si) ## Обработчик редактирования Entry в таблице параметров входов/выходов. @@ -302,16 +301,16 @@ func init_tbl_out(): cell.editable = false $scrollout/tbl_out.set_columns_min_size([250, 100, 70, 70, 70, 100]) $scrollout/tbl_out.set_columns_alignments(yams_alligment_out) - $scrollout/tbl_out.connect('row_pressed', Callable(self, 'on_row_pressed_out')) - $scrollout/tbl_out.connect('selected_changed', Callable(self, 'on_selected_changed_out')) + $scrollout/tbl_out.connect('row_pressed', on_row_pressed_out) + $scrollout/tbl_out.connect('selected_changed', on_selected_changed_out) # Инициализация таблицы изменения параметров выхода и списка входов связанных с ним header_text[0] = 'Выход' $scrl_out_set/tbl_out_set.set_header([TableHeader, TableHeader, CellFront, CellFrontRear, TableHeader, TableHeader]) $scrl_out_set/tbl_out_set.set_header_text(header_text) $scrl_out_set/tbl_out_set.set_columns_min_size([250, 100, 70, 70, 70, 100]) - $scrl_out_set/tbl_out_set.connect('row_pressed', Callable(self, 'on_row_pressed_so')) - $scrl_out_set/tbl_out_set.connect('selected_changed', Callable(self, 'on_selected_changed_so')) + $scrl_out_set/tbl_out_set.connect('row_pressed', on_row_pressed_so) + $scrl_out_set/tbl_out_set.connect('selected_changed', on_selected_changed_so) ## Обработчик выбора строки в таблице соединений выхода и изменения параметров. @@ -357,7 +356,7 @@ func set_out_dev(dev): var mode = $scrl_out_set/tbl_out_set.get_node2(5, 0) for opt in OUT_MODE: mode.add_item(opt) - mode.connect('item_selected', Callable(self, 'on_switch_done').bind(dev)) + mode.connect('item_selected', on_switch_done.bind(dev)) mode.select(dev.mode) @@ -532,20 +531,20 @@ func on_upd_delay_offset(_board, dev): tbl = $scrollout/tbl_out var le_delay = tbl.get_node2(TABLE_ENTRY_COLUMNS[0], dev.tbl_row_id) var le_offset = tbl.get_node2(TABLE_ENTRY_COLUMNS[1], dev.tbl_row_id) - le_delay.set_text(str('%3.1f' % dev.delay)) - le_offset.set_text(str('%3.1f' % dev.offset)) + le_delay.set_text('%3.1f' % dev.delay) + le_offset.set_text('%3.1f' % dev.offset) if $scrl_in_set/tbl_in_set.get_rows_count(): var sel_dev = $scrl_in_set/tbl_in_set.get_node_user_data(0, 0) var l_delay = $scrl_in_set/tbl_in_set.get_node2(2, 0) var l_offset = $scrl_in_set/tbl_in_set.get_node2(3, 0) - l_delay.set_text(str('%3.1f' % sel_dev.delay)) - l_offset.set_text(str('%3.1f' % sel_dev.offset)) + l_delay.set_text('%3.1f' % sel_dev.delay) + l_offset.set_text('%3.1f' % sel_dev.offset) if $scrl_out_set/tbl_out_set.get_rows_count(): var sel_dev = $scrl_out_set/tbl_out_set.get_node_user_data(0, 0) var l_delay = $scrl_out_set/tbl_out_set.get_node2(2, 0) var l_offset = $scrl_out_set/tbl_out_set.get_node2(3, 0) - l_delay.set_text(str('%3.1f' % sel_dev.delay)) - l_offset.set_text(str('%3.1f' % sel_dev.offset)) + l_delay.set_text('%3.1f' % sel_dev.delay) + l_offset.set_text('%3.1f' % sel_dev.offset) ## Вызывается по обновлению информации о режиме выходов @@ -662,4 +661,4 @@ func _on_btn_load_pressed() -> void: board.need_write = true log.message(log.INFO, 'Произведено чтение настроек ЭМС из файла: %s, для платы %s' %[fl_name, board.id_board]) else: - log.message(log.ERROR, 'Ошибка чтение настроек ЭМС из файла: %s' %fl_name) + log.message(log.ERROR, 'Ошибка чтение настроек ЭМС из файла: %s' % fl_name) From 446f8b6afccb5f8c4f1da48174d73c5fe3bc67fd Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 30 Mar 2026 11:17:53 +0300 Subject: [PATCH 41/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=A1=D0=BE=D0=B2=D0=BC=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project.godot | 2 ++ 1 file changed, 2 insertions(+) diff --git a/project.godot b/project.godot index 1bc7aa1a..797f901a 100644 --- a/project.godot +++ b/project.godot @@ -267,6 +267,8 @@ common/enable_object_picking=false [rendering] +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility" shader_compiler/shader_cache/strip_debug=true textures/default_filters/anisotropic_filtering_level=0 anti_aliasing/screen_space_roughness_limiter/enabled=false From 33a5dea6a033fe88b7f0fc44602ddfeab6d8d0be Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 30 Mar 2026 11:18:31 +0300 Subject: [PATCH 42/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=A0=D0=B5=D0=B6=D0=B8=D0=BC=20=D0=AD?= =?UTF-8?q?=D0=9C=D0=A1-=D0=A2=D0=93.=20=D0=A3=D0=B1=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D1=8B=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B5=D0=B5=20=D1=8D=D0=BB?= =?UTF-8?q?=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.tscn | 473 ++++++++++++++------------------------ 1 file changed, 168 insertions(+), 305 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.tscn b/scenes/эмс-тг/эмс-тг.tscn index 3df3e7d9..0c12fe74 100644 --- a/scenes/эмс-тг/эмс-тг.tscn +++ b/scenes/эмс-тг/эмс-тг.tscn @@ -1,9 +1,8 @@ -[gd_scene load_steps=32 format=3 uid="uid://musb21x2u0xs"] +[gd_scene load_steps=22 format=3 uid="uid://musb21x2u0xs"] [ext_resource type="Script" uid="uid://bvlqgv7aapebl" path="res://scenes/эмс-тг/эмс-тг.gd" id="1_b7tfl"] [ext_resource type="Texture2D" uid="uid://djv8fkddcjucs" path="res://data/матрица-чисто.png" id="2_s28jr"] [ext_resource type="Texture2D" uid="uid://busl8rb38lis" path="res://data/матрица-конфликт.png" id="3_its7t"] -[ext_resource type="Texture2D" uid="uid://hkcvl2waf63s" path="res://data/вид сверху.png" id="4_2hpfp"] [ext_resource type="Script" uid="uid://c5pq0hbrij34d" path="res://table/table.gd" id="4_bhff3"] [ext_resource type="PackedScene" uid="uid://hr55mkcneaer" path="res://scenes/hranges/panel.tscn" id="5_6hay3"] [ext_resource type="Texture2D" uid="uid://docnrxrm2f022" path="res://data/Угловой квадрат3.png" id="6_a0vpj"] @@ -11,6 +10,7 @@ [ext_resource type="Texture2D" uid="uid://d3qui21aom1ac" path="res://data/Квадрат марс 454.png" id="8_saoyo"] [ext_resource type="Texture2D" uid="uid://36xjgea2n22q" path="res://data/Квадрат марс ГО.png" id="9_bqil1"] [ext_resource type="Texture2D" uid="uid://by6a12oahbg82" path="res://data/Квадрат марс РЛС1.png" id="10_ggqgc"] +[ext_resource type="Texture2D" uid="uid://pfoscstbm025" path="res://data/эмс-бланк-перем.png" id="10_wdb1k"] [ext_resource type="Texture2D" uid="uid://dwgqofj6yae1v" path="res://data/Квадрат марс РЛС2.png" id="11_xothm"] [ext_resource type="Texture2D" uid="uid://dsuiytxdnole7" path="res://data/Квадрат марс с трубкой.png" id="12_4rjt3"] [ext_resource type="Texture2D" uid="uid://d3v1r4r62na8" path="res://data/Квадрат салатный ОР-63.png" id="13_g0j2q"] @@ -19,16 +19,6 @@ [ext_resource type="Texture2D" uid="uid://ddm55bo28sxcs" path="res://data/Квадрат салатный РЛС1.png" id="16_6042y"] [ext_resource type="Texture2D" uid="uid://dneqjcul4ipub" path="res://data/Квадрат салатный РЛС2.png" id="17_gvsi1"] [ext_resource type="Texture2D" uid="uid://cw8sd7v5f31ww" path="res://data/Квадрат салатный с трубкой.png" id="18_p3gp1"] -[ext_resource type="Texture2D" uid="uid://0w6q4vfst0ry" path="res://data/OP-63.png" id="19_o84s0"] -[ext_resource type="Texture2D" uid="uid://b85f1ne2wrwhg" path="res://data/Состояние РЭС 4.png" id="20_nwrva"] -[ext_resource type="Texture2D" uid="uid://6ar7sux3vcv1" path="res://data/Состояние РЭС 2.png" id="21_kcvtj"] -[ext_resource type="Texture2D" uid="uid://di30dfvbbdnms" path="res://data/Состояние РЭС 1.png" id="22_vx0p2"] -[ext_resource type="Texture2D" uid="uid://073el51yholj" path="res://data/454.png" id="23_txey4"] -[ext_resource type="Texture2D" uid="uid://cckk3jk5r32bh" path="res://data/ГО.png" id="24_8mkn8"] -[ext_resource type="Texture2D" uid="uid://c1nld5t17kws3" path="res://data/Состояние ЭМС слабый сигнал.png" id="25_ehxfq"] -[ext_resource type="Texture2D" uid="uid://kyrnn1mqpc08" path="res://data/РЛС1.png" id="26_3yebi"] -[ext_resource type="Texture2D" uid="uid://cx0f3wcx76u1k" path="res://data/РЛС2.png" id="27_3x2eg"] -[ext_resource type="Texture2D" uid="uid://duu8q7sv0jwfh" path="res://data/ННВС.png" id="28_wh3ue"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_niy1n"] @@ -57,16 +47,16 @@ table_cells = Array[String](["uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid: image_file_rx = "uid://c6etralq2tvxg" image_file_tx = "uid://c73tjrn8gr00o" table_rows_hight = 32 -table_column_widths = Array[int]([134, 134, 134, 134, 134, 134, 134, 134]) +table_column_widths = Array[int]([133, 133, 133, 133, 133, 133, 133, 133]) table_header_widths = Array[int]([136, 136, 136, 136, 136, 136, 136, 136]) table_header_text = Array[String](["Кластер", "Состояние", "Время", "Азимут", "Угол места", "Диапазон", "Приём", "Передача"]) [node name="таблица" type="ScrollContainer" parent="."] layout_mode = 0 offset_left = 20.0 -offset_top = 800.0 -offset_right = 1190.0 -offset_bottom = 1150.0 +offset_top = 765.0 +offset_right = 1180.0 +offset_bottom = 1145.0 theme_override_styles/focus = SubResource("StyleBoxEmpty_niy1n") draw_focus_border = true vertical_scroll_mode = 2 @@ -78,24 +68,12 @@ size_flags_vertical = 3 columns = 8 script = ExtResource("4_bhff3") -[node name="кораблик" type="TextureRect" parent="."] -modulate = Color(1, 0.596078, 0.4, 1) -layout_mode = 0 -offset_left = 1450.0 -offset_top = -8.0 -offset_right = 2169.0 -offset_bottom = 4282.0 -rotation = 1.5708 -scale = Vector2(0.325, 0.325) -texture = ExtResource("4_2hpfp") -expand_mode = 1 - [node name="шкала" type="GridContainer" parent="."] layout_mode = 0 offset_left = 20.0 -offset_top = 240.0 +offset_top = -20.0 offset_right = 1668.0 -offset_bottom = 771.0 +offset_bottom = 738.0 scale = Vector2(0.95, 0.95) columns = 2 @@ -106,6 +84,9 @@ toggle_mode = true action_mode = 0 button_group = SubResource("ButtonGroup_vwsbs") text = "ОР-63" +icon = ExtResource("7_xr3ub") +icon_alignment = 1 +vertical_icon_alignment = 0 metadata/unit_name = &"эмс-ор63" [node name="sub0" type="GridContainer" parent="шкала" groups=["чётные", "шкалы-кластеров"]] @@ -139,6 +120,9 @@ toggle_mode = true action_mode = 0 button_group = SubResource("ButtonGroup_vwsbs") text = "454" +icon = ExtResource("8_saoyo") +icon_alignment = 1 +vertical_icon_alignment = 0 metadata/unit_name = &"эмс-454" [node name="sub1" type="GridContainer" parent="шкала" groups=["нечётные", "шкалы-кластеров"]] @@ -170,6 +154,9 @@ toggle_mode = true action_mode = 0 button_group = SubResource("ButtonGroup_vwsbs") text = "ГО" +icon = ExtResource("9_bqil1") +icon_alignment = 1 +vertical_icon_alignment = 0 metadata/unit_name = &"эмс-го" [node name="sub2" type="GridContainer" parent="шкала" groups=["чётные", "шкалы-кластеров"]] @@ -203,6 +190,9 @@ toggle_mode = true action_mode = 0 button_group = SubResource("ButtonGroup_vwsbs") text = "РЛС1" +icon = ExtResource("10_ggqgc") +icon_alignment = 1 +vertical_icon_alignment = 0 metadata/unit_name = &"эмс-рлс1" [node name="sub3" type="GridContainer" parent="шкала" groups=["нечётные", "шкалы-кластеров"]] @@ -234,6 +224,9 @@ toggle_mode = true action_mode = 0 button_group = SubResource("ButtonGroup_vwsbs") text = "РЛС2" +icon = ExtResource("11_xothm") +icon_alignment = 1 +vertical_icon_alignment = 0 metadata/unit_name = &"эмс-рлс2" [node name="sub4" type="GridContainer" parent="шкала" groups=["чётные", "шкалы-кластеров"]] @@ -267,6 +260,9 @@ toggle_mode = true action_mode = 0 button_group = SubResource("ButtonGroup_vwsbs") text = "ННВС" +icon = ExtResource("12_4rjt3") +icon_alignment = 1 +vertical_icon_alignment = 0 metadata/unit_name = &"эмс-ннвс" [node name="sub5" type="GridContainer" parent="шкала" groups=["нечётные", "шкалы-кластеров"]] @@ -298,6 +294,9 @@ toggle_mode = true action_mode = 0 button_group = SubResource("ButtonGroup_vwsbs") text = "Изделие 7" +icon = ExtResource("10_wdb1k") +icon_alignment = 1 +vertical_icon_alignment = 0 metadata/unit_name = &"эмс-изделие7" [node name="sub6" type="GridContainer" parent="шкала" groups=["чётные", "шкалы-кластеров"]] @@ -331,6 +330,9 @@ toggle_mode = true action_mode = 0 button_group = SubResource("ButtonGroup_vwsbs") text = "Изделие 8" +icon = ExtResource("10_wdb1k") +icon_alignment = 1 +vertical_icon_alignment = 0 metadata/unit_name = &"эмс-изделие8" [node name="sub7" type="GridContainer" parent="шкала" groups=["нечётные", "шкалы-кластеров"]] @@ -354,603 +356,464 @@ size_flags_vertical = 3 image_file = "uid://c6etralq2tvxg" back_color = Color(0.31863, 0.32773, 0.327729, 1) -[node name="фон-матрицы" type="Polygon2D" parent="."] -self_modulate = Color(0.498039, 0.498039, 0.498039, 0.498039) -position = Vector2(1830, 1020) -offset = Vector2(-1430, -1020) -polygon = PackedVector2Array(800, 765, 1200, 765, 1200, 1165, 800, 1165) -uv = PackedVector2Array(800, 765, 1200, 765, 1200, 1165, 800, 1165) - [node name="матрица" type="GridContainer" parent="."] layout_mode = 0 -offset_left = 1225.0 -offset_top = 785.0 +offset_left = 1195.0 +offset_top = 735.0 offset_right = 1585.0 offset_bottom = 1145.0 columns = 7 [node name="прм-прд" type="TextureRect" parent="матрица"] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 texture = ExtResource("6_a0vpj") [node name="прд-0" type="TextureRect" parent="матрица"] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 texture = ExtResource("7_xr3ub") metadata/unit_name = &"" [node name="прд-1" type="TextureRect" parent="матрица"] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 texture = ExtResource("8_saoyo") metadata/unit_name = &"" [node name="прд-2" type="TextureRect" parent="матрица"] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 texture = ExtResource("9_bqil1") metadata/unit_name = &"" [node name="прд-3" type="TextureRect" parent="матрица"] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 texture = ExtResource("10_ggqgc") metadata/unit_name = &"" [node name="прд-4" type="TextureRect" parent="матрица"] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 texture = ExtResource("11_xothm") metadata/unit_name = &"" [node name="прд-5" type="TextureRect" parent="матрица"] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 texture = ExtResource("12_4rjt3") metadata/unit_name = &"" [node name="прм-0" type="TextureRect" parent="матрица"] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 texture = ExtResource("13_g0j2q") metadata/unit_name = &"эмс-ор63" [node name="матрица-0-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true action_mode = 0 button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-0-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-0-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-0-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-0-4" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-0-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="прм-1" type="TextureRect" parent="матрица"] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 texture = ExtResource("14_crrpm") metadata/unit_name = &"" [node name="матрица-1-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-1-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-1-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-1-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-1-4" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-1-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="прм-2" type="TextureRect" parent="матрица"] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 texture = ExtResource("15_0dspi") metadata/unit_name = &"" [node name="матрица-2-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-2-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-2-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-2-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-2-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-2-4" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="прм-3" type="TextureRect" parent="матрица"] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 texture = ExtResource("16_6042y") metadata/unit_name = &"" [node name="матрица-3-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-3-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-3-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-3-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-3-4" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-3-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="прм-4" type="TextureRect" parent="матрица"] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 texture = ExtResource("17_gvsi1") metadata/unit_name = &"" [node name="матрица-4-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-4-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-4-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-4-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-4-4" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-4-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="прм-5" type="TextureRect" parent="матрица"] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 texture = ExtResource("18_p3gp1") metadata/unit_name = &"" [node name="матрица-5-0" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-5-1" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-5-2" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-5-3" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-5-5" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") +stretch_mode = 0 [node name="матрица-5-6" type="TextureButton" parent="матрица" groups=["матрица-к"]] layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 toggle_mode = true button_mask = 0 texture_normal = ExtResource("2_s28jr") texture_pressed = ExtResource("3_its7t") - -[node name="ор-63" type="TextureRect" parent="."] -layout_mode = 0 -offset_left = 125.0 -offset_top = 66.0 -offset_right = 338.0 -offset_bottom = 358.0 -scale = Vector2(0.312207, 0.312207) -texture = ExtResource("19_o84s0") - -[node name="приём" type="TextureRect" parent="ор-63"] -layout_mode = 0 -offset_left = 237.022 -offset_top = 227.414 -offset_right = 290.022 -offset_bottom = 263.414 -scale = Vector2(1.77945, 1.77945) -texture = ExtResource("20_nwrva") - -[node name="передача" type="TextureRect" parent="ор-63"] -layout_mode = 0 -offset_left = 241.114 -offset_top = 147.338 -offset_right = 294.114 -offset_bottom = 183.338 -scale = Vector2(1.77945, 1.77945) -texture = ExtResource("21_kcvtj") - -[node name="насвязи" type="TextureRect" parent="ор-63"] -layout_mode = 0 -offset_left = 241.115 -offset_top = 3.203 -offset_right = 269.115 -offset_bottom = 23.203 -scale = Vector2(3.20301, 3.20301) -texture = ExtResource("22_vx0p2") - -[node name="454" type="TextureRect" parent="."] -layout_mode = 0 -offset_left = 277.0 -offset_top = 66.0 -offset_right = 490.0 -offset_bottom = 358.0 -scale = Vector2(0.312, 0.312) -texture = ExtResource("23_txey4") - -[node name="приём" type="TextureRect" parent="454"] -layout_mode = 0 -offset_left = 233.084 -offset_top = 208.333 -offset_right = 286.084 -offset_bottom = 244.333 -scale = Vector2(1.78063, 1.78063) -texture = ExtResource("20_nwrva") - -[node name="передача" type="TextureRect" parent="454"] -layout_mode = 0 -offset_left = 230.769 -offset_top = 128.205 -offset_right = 283.769 -offset_bottom = 164.205 -scale = Vector2(1.78063, 1.78063) -texture = ExtResource("21_kcvtj") - -[node name="насвязи" type="TextureRect" parent="454"] -layout_mode = 0 -offset_left = 230.769 -offset_right = 258.769 -offset_bottom = 20.0 -scale = Vector2(3.20513, 3.20513) -texture = ExtResource("22_vx0p2") - -[node name="Го" type="TextureRect" parent="."] -layout_mode = 0 -offset_left = 460.0 -offset_top = 67.0 -offset_right = 673.0 -offset_bottom = 359.0 -scale = Vector2(0.312, 0.312) -texture = ExtResource("24_8mkn8") - -[node name="приём" type="TextureRect" parent="Го"] -layout_mode = 0 -offset_left = 233.974 -offset_top = 217.949 -offset_right = 286.974 -offset_bottom = 253.949 -scale = Vector2(1.78063, 1.78063) -texture = ExtResource("20_nwrva") - -[node name="передача" type="TextureRect" parent="Го"] -layout_mode = 0 -offset_left = 233.974 -offset_top = 150.641 -offset_right = 286.974 -offset_bottom = 186.641 -scale = Vector2(1.78063, 1.78063) -texture = ExtResource("21_kcvtj") - -[node name="сигнал" type="TextureRect" parent="Го"] -layout_mode = 0 -offset_left = 233.974 -offset_top = 83.3334 -offset_right = 261.974 -offset_bottom = 103.334 -scale = Vector2(3.37683, 3.20513) -texture = ExtResource("25_ehxfq") - -[node name="лс1" type="TextureRect" parent="."] -layout_mode = 0 -offset_left = 639.0 -offset_top = 65.0 -offset_right = 852.0 -offset_bottom = 357.0 -scale = Vector2(0.312, 0.312) -texture = ExtResource("26_3yebi") - -[node name="приём" type="TextureRect" parent="лс1"] -layout_mode = 0 -offset_left = 233.974 -offset_top = 217.948 -offset_right = 286.974 -offset_bottom = 253.948 -scale = Vector2(1.78063, 1.78063) -texture = ExtResource("20_nwrva") - -[node name="передача" type="TextureRect" parent="лс1"] -layout_mode = 0 -offset_left = 233.974 -offset_top = 150.641 -offset_right = 286.974 -offset_bottom = 186.641 -scale = Vector2(1.78063, 1.78063) -texture = ExtResource("21_kcvtj") - -[node name="сигнал" type="TextureRect" parent="лс1"] -layout_mode = 0 -offset_left = 233.974 -offset_top = 83.3333 -offset_right = 261.974 -offset_bottom = 103.333 -scale = Vector2(3.37683, 3.20513) -texture = ExtResource("25_ehxfq") - -[node name="Рлс2" type="TextureRect" parent="."] -layout_mode = 0 -offset_left = 831.0 -offset_top = 65.0 -offset_right = 1044.0 -offset_bottom = 357.0 -scale = Vector2(0.312, 0.312) -texture = ExtResource("27_3x2eg") - -[node name="приём" type="TextureRect" parent="Рлс2"] -layout_mode = 0 -offset_left = 227.564 -offset_top = 217.948 -offset_right = 280.564 -offset_bottom = 253.948 -scale = Vector2(1.78063, 1.78063) -texture = ExtResource("20_nwrva") - -[node name="передача" type="TextureRect" parent="Рлс2"] -layout_mode = 0 -offset_left = 227.564 -offset_top = 150.641 -offset_right = 280.564 -offset_bottom = 186.641 -scale = Vector2(1.78063, 1.78063) -texture = ExtResource("21_kcvtj") - -[node name="сигнал" type="TextureRect" parent="Рлс2"] -layout_mode = 0 -offset_left = 227.564 -offset_top = 83.3333 -offset_right = 255.564 -offset_bottom = 103.333 -scale = Vector2(3.37683, 3.20513) -texture = ExtResource("25_ehxfq") - -[node name="Ннвс" type="TextureRect" parent="."] -layout_mode = 0 -offset_left = 1120.0 -offset_top = 69.0 -offset_right = 1333.0 -offset_bottom = 361.0 -scale = Vector2(0.312, 0.312) -texture = ExtResource("28_wh3ue") - -[node name="приём" type="TextureRect" parent="Ннвс"] -layout_mode = 0 -offset_left = 243.59 -offset_top = 214.744 -offset_right = 296.59 -offset_bottom = 250.744 -scale = Vector2(1.78063, 1.78063) -texture = ExtResource("20_nwrva") - -[node name="передача" type="TextureRect" parent="Ннвс"] -layout_mode = 0 -offset_left = 243.59 -offset_top = 147.436 -offset_right = 296.59 -offset_bottom = 183.436 -scale = Vector2(1.78063, 1.78063) -texture = ExtResource("21_kcvtj") - -[node name="label8" type="Label" parent="."] -layout_mode = 0 -offset_left = 134.0 -offset_top = 42.0 -offset_right = 176.0 -offset_bottom = 61.0 -size_flags_horizontal = 4 -size_flags_vertical = 6 -text = "ОР-63" - -[node name="label9" type="Label" parent="."] -layout_mode = 2 -offset_left = 482.0 -offset_top = 46.0 -offset_right = 499.0 -offset_bottom = 65.0 -size_flags_horizontal = 4 -size_flags_vertical = 6 -text = "ГО" - -[node name="label10" type="Label" parent="."] -layout_mode = 2 -offset_left = 293.0 -offset_top = 42.0 -offset_right = 322.0 -offset_bottom = 61.0 -size_flags_horizontal = 4 -size_flags_vertical = 6 -text = "454" - -[node name="label11" type="Label" parent="."] -layout_mode = 2 -offset_left = 851.0 -offset_top = 42.0 -offset_right = 887.0 -offset_bottom = 61.0 -size_flags_horizontal = 4 -size_flags_vertical = 6 -text = "РЛС2" - -[node name="label12" type="Label" parent="."] -layout_mode = 2 -offset_left = 656.0 -offset_top = 42.0 -offset_right = 692.0 -offset_bottom = 61.0 -size_flags_horizontal = 4 -size_flags_vertical = 6 -text = "РЛС1" - -[node name="label13" type="Label" parent="."] -layout_mode = 2 -offset_left = 1130.0 -offset_top = 46.0 -offset_right = 1170.0 -offset_bottom = 65.0 -size_flags_horizontal = 4 -size_flags_vertical = 6 -text = "ННВС" +stretch_mode = 0 [node name="label_msg" type="Label" parent="."] layout_mode = 0 From 407f9956faad193054f382c957e74d8c9e39750d Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 30 Mar 2026 12:50:57 +0300 Subject: [PATCH 43/52] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index b9a1fde9..fbabb145 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -160,7 +160,7 @@ func _on_scale_selected(val: bool, nm: StringName): var unit_cvi = cmd_vs_info[nm] map_yems_info_to_table(unit_info, ctable, indexes) connect_cmd_handlers(ctable, nm, indexes) - update_cmd_vs_info(nm) + update_cvi(nm) map_cvi_to_table(unit_cvi, ctable, indexes) @@ -170,13 +170,13 @@ func map_cvi_to_table(unit_cvi: Dictionary, ctable: GDTable, indexes: Dictionary var result_rxe: = ClasterResult.WAITING var result_txe: = ClasterResult.WAITING if unit_cvi.has(cname): - result_rxe = unit_cvi[cname]['result_rxe'] - result_txe = unit_cvi[cname]['result_txe'] + result_rxe = unit_cvi[cname].result_rxe + result_txe = unit_cvi[cname].result_txe ctable.set_node_property(column_cmd_rx, i_row, 'state', int(result_rxe)) ctable.set_node_property(column_cmd_tx, i_row, 'state', int(result_txe)) -func update_cmd_vs_info(nm: StringName): +func update_cvi(nm: StringName): var unit_info = yems_info[nm] var unit_cvi = {} var unit_cmd = yems_cmd[nm] @@ -244,7 +244,7 @@ func on_data_received(data: Dictionary, nm: StringName): reset_matrix() map_inters_to_matrix(inters, $'матрица') cmd_to_unit(nm) - update_cmd_vs_info(nm) + update_cvi(nm) map_cvi_to_table(unit_cvi, ctable, indexes) From ba4d2458af88272bafdba011c474cfe8b327981e Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 30 Mar 2026 12:52:39 +0300 Subject: [PATCH 44/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=A0=D0=B5=D0=B6=D0=B8=D0=BC=20=D0=AD?= =?UTF-8?q?=D0=9C=D0=A1-=D0=A2=D0=93.=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=BE=D1=8F=D0=BD=D0=B8=D1=8F=20=D0=BA=D0=BB=D0=B0=D1=81=D1=82?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=20=D0=90=D0=BA=D1=82=D0=B8=D0=B2=D0=B5=D0=BD?= =?UTF-8?q?/=D0=A3=D0=B4=D0=B0=D0=BB=D1=91=D0=BD=20=D0=B2=20=D1=82=D0=B0?= =?UTF-8?q?=D0=B1=D0=BB=D0=B8=D1=86=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index fbabb145..e122df03 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -339,7 +339,8 @@ func map_yems_info_to_table(unit_info: Dictionary, ctable: GDTable, indexes: Dic # Обойти все кластеры устройства for cls in unit_info.mcls: # Строки для заполнения ряда - var row_text = [cls.cname, 'Активен', '%.1f' % cls.ttl, '%.1f' % cls.daa, '%.1f' % cls.dap, '%.1f-%.1f' % [cls.cfb - cls.wfb / 2.0, cls.cfb + cls.wfb / 2.0]] + var status_str: = 'Активен' if cls.status == ClasterStatus.RUNNING else 'Удалён' + var row_text: = [cls.cname, status_str, '%.1f' % cls.ttl, '%.1f' % cls.daa, '%.1f' % cls.dap, '%.1f-%.1f' % [cls.cfb - cls.wfb / 2.0, cls.cfb + cls.wfb / 2.0]] # Если такой кластер уже есть, обновить его строку в таблице if cls.cname in indexes: # Получить индекс строки кластера в таблице From 49d7b71072b2020a4f28ded7050a6bed13735c36 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 30 Mar 2026 12:53:48 +0300 Subject: [PATCH 45/52] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5.=20WIP=20=D0=B8=D0=BD=D0=B4?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=D1=82=D0=BE=D1=80=20=D0=B8=D1=81=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BD=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4=D0=B8=D1=82=20=D0=B2=20?= =?UTF-8?q?=D1=81=D0=BE=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=B8=D0=B5=20"?= =?UTF-8?q?=D0=9E=D0=B6=D0=B8=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index e122df03..03dfe72a 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -309,6 +309,8 @@ func _on_timeout_ttl(nm, cname): for cls in unit_info.mcls: if cname == cls.cname: cls.status = ClasterStatus.DELETED + cls.result_rxe = ClasterResult.WAITING + cls.result_txe = ClasterResult.WAITING var claster_scale: = name_to_scale[nm] as GridContainer map_yems_info_to_scale(unit_info, claster_scale) reset_matrix() From 9fd258a74572f41baf3b241ceebdf80bc347f7ce Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 31 Mar 2026 10:20:15 +0300 Subject: [PATCH 46/52] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5.=20=D0=9E=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B8=D0=BD=D0=B4=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0=D1=82=D0=BE=D1=80=D0=BE=D0=B2=20=D1=80=D0=B5=D0=B7?= =?UTF-8?q?=D1=83=D0=BB=D1=8C=D1=82=D0=B0=D1=82=D1=8B=20=D0=B2=D1=8B=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=B0=D0=BD=D0=B4=D1=8B=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 159 +++++++++++++++++++++------------------- 1 file changed, 82 insertions(+), 77 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 03dfe72a..2bd32703 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -61,7 +61,6 @@ var pnames_scale: Dictionary[StringName, int] ## Текущее выбранное оператором устройство на шкале var selected_unit: Dictionary[StringName, bool] ## Состояния кластеров в соответствии с докладами и командами -var cmd_vs_info: Dictionary[StringName, Dictionary] #endregion @@ -99,7 +98,6 @@ func _ready() -> void: yems_cmd[nm] = {} cnames_table[nm] = {} selected_unit[nm] = false - cmd_vs_info[nm] = {} var btns_scales = get_tree().get_nodes_in_group('кнопки-шкалы') for node in btns_scales: var nm: = node.get_meta('unit_name') as StringName @@ -157,65 +155,53 @@ func _on_scale_selected(val: bool, nm: StringName): $label_msg.hide() var ctable = $'таблица/сетка' var indexes = cnames_table[nm] - var unit_cvi = cmd_vs_info[nm] - map_yems_info_to_table(unit_info, ctable, indexes) - connect_cmd_handlers(ctable, nm, indexes) update_cvi(nm) - map_cvi_to_table(unit_cvi, ctable, indexes) - - -func map_cvi_to_table(unit_cvi: Dictionary, ctable: GDTable, indexes: Dictionary): - for cname in indexes: - var i_row = indexes[cname] - var result_rxe: = ClasterResult.WAITING - var result_txe: = ClasterResult.WAITING - if unit_cvi.has(cname): - result_rxe = unit_cvi[cname].result_rxe - result_txe = unit_cvi[cname].result_txe - ctable.set_node_property(column_cmd_rx, i_row, 'state', int(result_rxe)) - ctable.set_node_property(column_cmd_tx, i_row, 'state', int(result_txe)) + var new_indexes = update_indexes(unit_info, indexes) + update_table(new_indexes, ctable, unit_info) + map_yems_info_to_table(unit_info, ctable, indexes) + connect_cmd_handlers(new_indexes, ctable, nm) +## Обновляет состояние выполнения команды оператора func update_cvi(nm: StringName): var unit_info = yems_info[nm] - var unit_cvi = {} var unit_cmd = yems_cmd[nm] for cls_info in unit_info.mcls: - var result_rxe = ClasterResult.DONE - var result_txe = ClasterResult.DONE - if not unit_cmd.has(cls_info.cname): - unit_cvi[cls_info.cname] = \ - { 'result_rxe': ClasterResult.DONE, - 'result_txe': ClasterResult.DONE } - continue - var cls_cmd = unit_cmd[cls_info.cname] - if cls_cmd.has('rxe'): - result_rxe = ClasterResult.DONE if (cls_info.rxe == cls_cmd.rxe) else ClasterResult.MISSMATCH - if cls_cmd.has('txe'): - result_txe = ClasterResult.DONE if (cls_info.txe == cls_cmd.txe) else ClasterResult.MISSMATCH - unit_cvi[cls_info.cname] = \ - { 'result_rxe': result_rxe, - 'result_txe': result_txe } - cmd_vs_info[nm].merge(unit_cvi, true) + var result_rxe: = ClasterResult.WAITING + var result_txe: = ClasterResult.WAITING + if unit_cmd.has(cls_info.cname): + var cls_cmd = unit_cmd[cls_info.cname] + if cls_info.status == ClasterStatus.RUNNING: + if cls_cmd.has('rxe'): + result_rxe = ClasterResult.DONE if (cls_info.rxe == cls_cmd.rxe) else ClasterResult.MISSMATCH + else: + result_rxe = ClasterResult.DONE + if cls_cmd.has('txe'): + result_txe = ClasterResult.DONE if (cls_info.txe == cls_cmd.txe) else ClasterResult.MISSMATCH + else: + result_txe = ClasterResult.DONE + else: + result_rxe = ClasterResult.DONE + result_txe = ClasterResult.DONE + cls_info['result_rxe'] = result_rxe + cls_info['result_txe'] = result_txe ## Подключает обработчики команд к таблице кластеров +## [param new_indexes] - новые индексы рядов таблицы ## [param cls_table] - таблица для отображения кластеров ## [param nm] - имя устройства -func connect_cmd_handlers(cls_table: GDTable, nm: StringName, indexes: Dictionary): - var rows_count = cls_table.get_rows_count() - if indexes.size() != rows_count: - push_error('indexes.size() != rows_count') - return - for cname in indexes: +func connect_cmd_handlers(new_indexes: Array, ctable: GDTable, nm: StringName): + for icls in new_indexes: + var i_row = icls[0] # Имя устройства и имя кластера - var i_row = indexes[cname] + var cls = icls[1] # Подключить обработчки разрешения приёмников - var node = cls_table.get_node2(column_cmd_rx, i_row) - node.connect_check('toggled', _on_user_cmd.bind(nm, cname, 'rxe')) + var node = ctable.get_node2(column_cmd_rx, i_row) + node.connect_check('toggled', _on_user_cmd.bind(nm, cls.cname, 'rxe')) # Подключить обработчки разрешения приёмников - node = cls_table.get_node2(column_cmd_tx, i_row) - node.connect_check('toggled', _on_user_cmd.bind(nm, cname, 'txe')) + node = ctable.get_node2(column_cmd_tx, i_row) + node.connect_check('toggled', _on_user_cmd.bind(nm, cls.cname, 'txe')) func _on_user_cmd(val: bool, nm: StringName, cname: String, param_name: StringName): @@ -236,16 +222,49 @@ func on_data_received(data: Dictionary, nm: StringName): var ctable: GDTable = $'таблица/сетка' var claster_scale: = name_to_scale[nm] as GridContainer var indexes: = cnames_table[nm] # Индексы строк в таблице + update_cvi(nm) if selected_unit[nm]: + var new_indexes = update_indexes(unit_info, indexes) + update_table(new_indexes, ctable, unit_info) map_yems_info_to_table(unit_info, ctable, indexes) + connect_cmd_handlers(new_indexes, ctable, nm) map_yems_info_to_scale(unit_info, claster_scale) var inters: = find_inters(yems_info) - var unit_cvi = cmd_vs_info[nm] reset_matrix() map_inters_to_matrix(inters, $'матрица') cmd_to_unit(nm) - update_cvi(nm) - map_cvi_to_table(unit_cvi, ctable, indexes) + + +## Создаёт новые ряды в таблице +func update_table(new_indexes: Array, ctable: GDTable, unit_info: Dictionary): + # Добавить новые ряды. Два прохода нужно для того, + # что порядок элементов в словаре не определён. + for icls in new_indexes: + ctable.add_row(table_cell_row) + # Заполнить новые ряды данными + for icls in new_indexes: + var i_row = icls[0] + var cls = icls[1] + # Установить высоту ряда (можно пропустить, если нужная высота будет выставлена по умолчанию) + ctable.set_row_min_hight(i_row, table_rows_hight) + # Установить новый текст + ctable.set_node_property(column_cmd_rx, i_row, 'pressed', cls.rxe) + ctable.set_node_property(column_cmd_tx, i_row, 'pressed', cls.txe) + ctable.set_node_property(column_cmd_rx, i_row, 'state', cls.result_rxe) + ctable.set_node_property(column_cmd_tx, i_row, 'state', cls.result_txe) + + +func update_indexes(unit_info, indexes) -> Array: + var new_indexes: = [] + for cls in unit_info.mcls: + # Проверить, есть ли уже такой индекс + if indexes.has(cls.cname): + continue + # Записать индекс нового ряда (связать с именем кластера) + var i_row = indexes.size() + indexes[cls.cname] = i_row + new_indexes.append([i_row, cls]) + return new_indexes # Объединяет список кластеров принятых от устройства со списком сохранённым @@ -261,24 +280,25 @@ func unit_info_merge(unit_info: Dictionary, data_rx: Dictionary): unit_info.mcls = dinfo.values() +## Отправляет команду в сетевой стек func cmd_to_unit(nm: StringName): var unit_yemstg: = network.get_unit_instance(nm) - # Проверить, что предидущие отправлены + # Проверить, что сетевой стек отправил предидущую команду if unit_yemstg.cmd_state != unit.Unit.CmdState.DONE: return # Сформировать команду из докладов (данных принятых из сети от устройств) var unit_info_copy = yems_info[nm].duplicate(true) var unit_cmd = yems_cmd[nm] - unit_info_copy['mtype'] = 'cmd' + unit_info_copy.mtype = 'cmd' # Выбрать только работающие кластеры (время которых ещё не истекло) var mcls = unit_info_copy.mcls.filter(func(c): return c.status == ClasterStatus.RUNNING) for cls_info in mcls: - # Если для это кластера есть команда оператора + # Если для этого кластера есть команда оператора ... if unit_cmd.has(cls_info.cname): - # Переписать новыми значениями из команды заданной оператором + # ... переписать значениями из команды оператора var cmd_cls = unit_cmd[cls_info.cname] - cls_info.merge(cmd_cls, true) - cls_info.erase('status') + cls_info.rxe = unit_cmd.get('rxe', cls_info.rxe) + cls_info.txe = unit_cmd.get('txe', cls_info.txe) # Передать команду сетевому стеку unit_yemstg.cmd.merge(unit_info_copy, true) unit_yemstg.cmd_state = unit.Unit.CmdState.SEND @@ -343,28 +363,13 @@ func map_yems_info_to_table(unit_info: Dictionary, ctable: GDTable, indexes: Dic # Строки для заполнения ряда var status_str: = 'Активен' if cls.status == ClasterStatus.RUNNING else 'Удалён' var row_text: = [cls.cname, status_str, '%.1f' % cls.ttl, '%.1f' % cls.daa, '%.1f' % cls.dap, '%.1f-%.1f' % [cls.cfb - cls.wfb / 2.0, cls.cfb + cls.wfb / 2.0]] - # Если такой кластер уже есть, обновить его строку в таблице - if cls.cname in indexes: - # Получить индекс строки кластера в таблице - var i_row = indexes[cls.cname] - # Установить новый текст - ctable.set_row_text(i_row, row_text) - # Если такого кластера нет, то создать его строку в таблице - else: - # Добавить новый ряд - ctable.add_row(table_cell_row) - # Получить индекс нового ряда в таблице - var i_row: = indexes.size() - # Записать индекс нового ряда (связать с именем кластера) - indexes[cls.cname] = i_row - # Установить высоту ряда (можно пропустить, если нужная высота будет выставлена по умолчанию) - ctable.set_row_min_hight(i_row, table_rows_hight) - # Установить новый текст - ctable.set_row_text(i_row, row_text) - ctable.set_node_property(column_cmd_rx, i_row, 'pressed', cls.rxe) - ctable.set_node_property(column_cmd_tx, i_row, 'pressed', cls.txe) - ctable.set_node_property(column_cmd_rx, i_row, 'state', ClasterResult.WAITING) - ctable.set_node_property(column_cmd_tx, i_row, 'state', ClasterResult.WAITING) + # Получить индекс строки кластера в таблице + var i_row = indexes[cls.cname] + # Установить новый текст + ctable.set_row_text(i_row, row_text) + # Результат выполнения + ctable.set_node_property(column_cmd_rx, i_row, 'state', cls.result_rxe) + ctable.set_node_property(column_cmd_tx, i_row, 'state', cls.result_txe) ## Находит пересечения диапазонов From f41c0ee75c9dd060af2354c1f5dbec0a7bc7d589 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 31 Mar 2026 11:30:41 +0300 Subject: [PATCH 47/52] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 84 +++++++++++++++++++++++------------------ 1 file changed, 47 insertions(+), 37 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 2bd32703..b26b9819 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -1,6 +1,8 @@ @tool extends Panel +## Выполнение функций информационного ЭМС (ЭМС-ТГ) + #region Определяемое при использовании ## Индекс -> Имя устройства. Нужен для предсказуемого ## порядка отображения: верх->вниз или лево->право. @@ -53,11 +55,8 @@ var table_cell_row: Array var yems_info: Dictionary[StringName, Dictionary] ## Доклады var yems_cmd: Dictionary[StringName, Dictionary] ## Команды ## Порядок следования кластеров в таблице. -## {имя_устройства: { имя_кластера: индекс_в_таблице } } +## {имя_устройства: {имя_кластера: индекс_в_таблице}} var cnames_table: Dictionary[StringName, Dictionary] -## Порядок следования кластеров на шкале. -## {имя_устройства: { индекс_на_шкале } } -var pnames_scale: Dictionary[StringName, int] ## Текущее выбранное оператором устройство на шкале var selected_unit: Dictionary[StringName, bool] ## Состояния кластеров в соответствии с докладами и командами @@ -79,7 +78,8 @@ enum ClasterMode { } -## Состояние кластера. Значения должны соответствовать состояниям [b]six-state-button[/b] +## Состояние кластера. Значения должны соответствовать +## состояниям [b]six-state-button[/b] enum ClasterResult { WAITING = 0, ## Ожидание даннных DONE = 1, ## Выполнено @@ -129,8 +129,8 @@ func _ready() -> void: var ctable: = $'таблица/сетка' ctable.set_header(header_row) ctable.set_header_text(table_header_text) - ctable.set_header_property(6, 'image_file', image_file_rx) - ctable.set_header_property(7, 'image_file', image_file_tx) + ctable.set_header_property(column_cmd_rx, 'image_file', image_file_rx) + ctable.set_header_property(column_cmd_tx, 'image_file', image_file_tx) ctable.set_headers_min_size(table_header_widths) ctable.set_columns_min_size(table_column_widths) ctable.set_rows_min_hight(table_rows_hight) @@ -139,6 +139,7 @@ func _ready() -> void: ## Вызывается при выборе оператором устройства на шкале +## [param val] - состояние кнопки переключателя устройств ## [param nm] - имя выбранного устройства func _on_scale_selected(val: bool, nm: StringName): selected_unit[nm] = val @@ -157,12 +158,13 @@ func _on_scale_selected(val: bool, nm: StringName): var indexes = cnames_table[nm] update_cvi(nm) var new_indexes = update_indexes(unit_info, indexes) - update_table(new_indexes, ctable, unit_info) + update_table(unit_info, ctable, new_indexes) map_yems_info_to_table(unit_info, ctable, indexes) - connect_cmd_handlers(new_indexes, ctable, nm) + connect_cmd_handlers(nm, ctable, new_indexes) ## Обновляет состояние выполнения команды оператора +## [param nm] - имя устройства func update_cvi(nm: StringName): var unit_info = yems_info[nm] var unit_cmd = yems_cmd[nm] @@ -188,10 +190,10 @@ func update_cvi(nm: StringName): ## Подключает обработчики команд к таблице кластеров +## [param nm] - имя устройства ## [param new_indexes] - новые индексы рядов таблицы ## [param cls_table] - таблица для отображения кластеров -## [param nm] - имя устройства -func connect_cmd_handlers(new_indexes: Array, ctable: GDTable, nm: StringName): +func connect_cmd_handlers(nm: StringName, ctable: GDTable, new_indexes: Array): for icls in new_indexes: var i_row = icls[0] # Имя устройства и имя кластера @@ -204,6 +206,7 @@ func connect_cmd_handlers(new_indexes: Array, ctable: GDTable, nm: StringName): node.connect_check('toggled', _on_user_cmd.bind(nm, cls.cname, 'txe')) +## Вызывается при перключении оператором разрешений func _on_user_cmd(val: bool, nm: StringName, cname: String, param_name: StringName): var unit_cmd = yems_cmd[nm] if cname in unit_cmd: @@ -213,30 +216,35 @@ func _on_user_cmd(val: bool, nm: StringName, cname: String, param_name: StringNa ## Обрабатывает событие [b]data_received[/b] +## [param data] - данные принятые от устройства +## [param nm] - имя устройства func on_data_received(data: Dictionary, nm: StringName): set_timeouts(nm, data) var unit_info: = yems_info[nm] unit_info_merge(unit_info, data) if not unit_info: + # для устройства нет данных return var ctable: GDTable = $'таблица/сетка' - var claster_scale: = name_to_scale[nm] as GridContainer - var indexes: = cnames_table[nm] # Индексы строк в таблице + var cscale: = name_to_scale[nm] as GridContainer # Шкала устройства + var indexes: = cnames_table[nm] # Индексы строк устройства в таблице update_cvi(nm) + # Если текущее устройство отображается в таблице, + # обновить таблицу новыми данными if selected_unit[nm]: var new_indexes = update_indexes(unit_info, indexes) - update_table(new_indexes, ctable, unit_info) + update_table(unit_info, ctable, new_indexes) map_yems_info_to_table(unit_info, ctable, indexes) - connect_cmd_handlers(new_indexes, ctable, nm) - map_yems_info_to_scale(unit_info, claster_scale) - var inters: = find_inters(yems_info) + connect_cmd_handlers(nm, ctable, new_indexes) + map_yems_info_to_scale(unit_info, cscale) + var inters: = find_inters() reset_matrix() map_inters_to_matrix(inters, $'матрица') cmd_to_unit(nm) ## Создаёт новые ряды в таблице -func update_table(new_indexes: Array, ctable: GDTable, unit_info: Dictionary): +func update_table(unit_info: Dictionary, ctable: GDTable, new_indexes: Array): # Добавить новые ряды. Два прохода нужно для того, # что порядок элементов в словаре не определён. for icls in new_indexes: @@ -254,7 +262,8 @@ func update_table(new_indexes: Array, ctable: GDTable, unit_info: Dictionary): ctable.set_node_property(column_cmd_tx, i_row, 'state', cls.result_txe) -func update_indexes(unit_info, indexes) -> Array: +## Обновляет индексы строк в таблице +func update_indexes(unit_info: Dictionary, indexes: Dictionary) -> Array: var new_indexes: = [] for cls in unit_info.mcls: # Проверить, есть ли уже такой индекс @@ -356,7 +365,9 @@ func map_inters_to_matrix(inters: Array, matrix: GridContainer) -> void: ## Отображает кластеры в таблицу -## [param nm] - имя устройства +## [param unit_info] - доклад от устройства +## [param ctable] - таблица +## [param indexes] - индексы в таблице func map_yems_info_to_table(unit_info: Dictionary, ctable: GDTable, indexes: Dictionary): # Обойти все кластеры устройства for cls in unit_info.mcls: @@ -372,16 +383,17 @@ func map_yems_info_to_table(unit_info: Dictionary, ctable: GDTable, indexes: Dic ctable.set_node_property(column_cmd_tx, i_row, 'state', cls.result_txe) -## Находит пересечения диапазонов -func find_inters(info: Dictionary) -> Array: +## Находит пересечения диапазонов всех устройств и кластеров +func find_inters() -> Array: var result = [] var all_clusters = [] # Собираем все кластеры из всех устройств в один массив - for nm in info: + for nm in yems_info: # nm - имя устройства - var unit_data = info[nm] + var unit_data = yems_info[nm] if not unit_data: continue - var clasters = unit_data.mcls.filter(func(c): return c.status == ClasterStatus.RUNNING) + var clasters = unit_data.mcls.filter \ + (func(c): return c.status == ClasterStatus.RUNNING) for cls in clasters: # cls - один кластер var cfb = float(cls.cfb) @@ -399,8 +411,8 @@ func find_inters(info: Dictionary) -> Array: var max1 = cl1[3] var txe1 = cl1[4] var rxe1 = cl1[5] - - # Сравниваем текущий кластер со всеми последующими, чтобы избежать дублей и самопересечений + # Сравниваем текущий кластер со всеми последующими, + # чтобы избежать дублей и самопересечений for j in all_clusters.size(): var cl2 = all_clusters[j] var dev2 = cl2[0] @@ -409,26 +421,24 @@ func find_inters(info: Dictionary) -> Array: var max2 = cl2[3] var txe2 = cl2[4] var rxe2 = cl2[5] - - #Если нет пары TR(RT) то пропускаем эту комбинацию + # Если нет пары TR(RT) то пропускаем эту комбинацию if not ((txe1 and rxe2) or (rxe1 and txe2)): continue - - # Проверка на пересечение диапазонов, пересечение есть если начало одного диапазона меньше конца другого + # Проверка на пересечение диапазонов, пересечение + # есть если начало одного диапазона меньше конца другого if max1 > min2 and max2 > min1: #Вычисляем точные границы пересечения var inter_start = max(min1, min2) var inter_end = min(max1, max2) - # Формируем результат в требуемом формате result.append([dev1, dev2, name1, name2, inter_start, inter_end]) - # заглушка для возвращаемых данных return result ## Отображает кластеры на шкале -## [param nm] - имя устройства -func map_yems_info_to_scale(unit_info: Dictionary, claster_scale: GridContainer): +## [param unit_info] - доклад устройства +## [param cscale] - шкала кластера +func map_yems_info_to_scale(unit_info: Dictionary, cscale: GridContainer): # Обойти все кластеры устройства for cls in unit_info.mcls: # Преобразовать диапазоны частот в диапазоны отображения @@ -440,9 +450,9 @@ func map_yems_info_to_scale(unit_info: Dictionary, claster_scale: GridContainer) var l: = clampf(c - w, 0.0, 1.0) var h: = clampf(c + w, 0.0, 1.0) # Получить шкалу приёмника - var scale_rx: = claster_scale.get_node('panel_rx') + var scale_rx: = cscale.get_node('panel_rx') # Получить шкалу передатчика - var scale_tx: = claster_scale.get_node('panel_tx') + var scale_tx: = cscale.get_node('panel_tx') # Диапазон работает (информация обновляется) if cls.status == ClasterStatus.RUNNING: # Отобразить диапазон приёмника, в соответствии с разрешением From e4dfdeb8991a03f07ad311aa759967b44a37bb21 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 31 Mar 2026 11:31:13 +0300 Subject: [PATCH 48/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BD=D0=B0=D0=B4=D0=BF=D0=B8=D1=81=D0=B8?= =?UTF-8?q?=20=D0=B2=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D0=B5=20=D0=AD=D0=9C?= =?UTF-8?q?=D0=A1-=D0=A2=D0=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.tscn | 50 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.tscn b/scenes/эмс-тг/эмс-тг.tscn index 0c12fe74..de8fbabc 100644 --- a/scenes/эмс-тг/эмс-тг.tscn +++ b/scenes/эмс-тг/эмс-тг.tscn @@ -71,9 +71,9 @@ script = ExtResource("4_bhff3") [node name="шкала" type="GridContainer" parent="."] layout_mode = 0 offset_left = 20.0 -offset_top = -20.0 +offset_top = 10.0 offset_right = 1668.0 -offset_bottom = 738.0 +offset_bottom = 736.0 scale = Vector2(0.95, 0.95) columns = 2 @@ -87,6 +87,7 @@ text = "ОР-63" icon = ExtResource("7_xr3ub") icon_alignment = 1 vertical_icon_alignment = 0 +expand_icon = true metadata/unit_name = &"эмс-ор63" [node name="sub0" type="GridContainer" parent="шкала" groups=["чётные", "шкалы-кластеров"]] @@ -123,6 +124,7 @@ text = "454" icon = ExtResource("8_saoyo") icon_alignment = 1 vertical_icon_alignment = 0 +expand_icon = true metadata/unit_name = &"эмс-454" [node name="sub1" type="GridContainer" parent="шкала" groups=["нечётные", "шкалы-кластеров"]] @@ -157,6 +159,7 @@ text = "ГО" icon = ExtResource("9_bqil1") icon_alignment = 1 vertical_icon_alignment = 0 +expand_icon = true metadata/unit_name = &"эмс-го" [node name="sub2" type="GridContainer" parent="шкала" groups=["чётные", "шкалы-кластеров"]] @@ -193,6 +196,7 @@ text = "РЛС1" icon = ExtResource("10_ggqgc") icon_alignment = 1 vertical_icon_alignment = 0 +expand_icon = true metadata/unit_name = &"эмс-рлс1" [node name="sub3" type="GridContainer" parent="шкала" groups=["нечётные", "шкалы-кластеров"]] @@ -227,6 +231,7 @@ text = "РЛС2" icon = ExtResource("11_xothm") icon_alignment = 1 vertical_icon_alignment = 0 +expand_icon = true metadata/unit_name = &"эмс-рлс2" [node name="sub4" type="GridContainer" parent="шкала" groups=["чётные", "шкалы-кластеров"]] @@ -263,6 +268,7 @@ text = "ННВС" icon = ExtResource("12_4rjt3") icon_alignment = 1 vertical_icon_alignment = 0 +expand_icon = true metadata/unit_name = &"эмс-ннвс" [node name="sub5" type="GridContainer" parent="шкала" groups=["нечётные", "шкалы-кластеров"]] @@ -824,3 +830,43 @@ offset_bottom = 1155.0 text = "Выберите устройство" horizontal_alignment = 1 vertical_alignment = 1 + +[node name="label1" type="Label" parent="."] +layout_mode = 2 +offset_left = 20.0 +offset_top = -20.0 +offset_right = 142.0 +offset_bottom = -1.0 +text = "Устройства" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="label3" type="Label" parent="."] +layout_mode = 2 +offset_left = 1195.0 +offset_top = 702.0 +offset_right = 1585.0 +offset_bottom = 725.0 +text = "Индикатор конфликтов" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="label2" type="Label" parent="."] +layout_mode = 2 +offset_left = 145.0 +offset_top = -20.0 +offset_right = 1585.0 +offset_bottom = 3.0 +text = "Рабочие диапазоны" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="label4" type="Label" parent="."] +layout_mode = 2 +offset_left = 20.0 +offset_top = 702.0 +offset_right = 1190.0 +offset_bottom = 725.0 +text = "Кластеры устройства" +horizontal_alignment = 1 +vertical_alignment = 1 From 94084fead0812e171ceff37f3dbf5fec02607232 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 31 Mar 2026 11:53:06 +0300 Subject: [PATCH 49/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86?= =?UTF-8?q?=D1=8B=20=D0=BF=D1=80=D0=B8=20=D0=BE=D1=82=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D0=B8=20=D1=83=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D1=81=D1=82=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index b26b9819..c4d711b8 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -340,6 +340,9 @@ func _on_timeout_ttl(nm, cname): cls.status = ClasterStatus.DELETED cls.result_rxe = ClasterResult.WAITING cls.result_txe = ClasterResult.WAITING + var ctable: GDTable = $'таблица/сетка' + var indexes: = cnames_table[nm] + map_yems_info_to_table(unit_info, ctable, indexes) var claster_scale: = name_to_scale[nm] as GridContainer map_yems_info_to_scale(unit_info, claster_scale) reset_matrix() From 6c46acc6b6c2161a8a108d37c66ec804ae436aa2 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 31 Mar 2026 11:54:13 +0300 Subject: [PATCH 50/52] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=B4=D1=81=D0=BA?= =?UTF-8?q?=D0=B0=D0=B7=D0=BE=D0=BA=20=D0=B4=D0=BB=D1=8F=20=D0=BE=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index c4d711b8..2a8e3fa0 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -150,10 +150,12 @@ func _on_scale_selected(val: bool, nm: StringName): $label_msg.show() return var unit_info = yems_info[nm] - if not unit_info: # проверить, есть ли данные + if not unit_info.mcls: # проверить, есть ли данные $label_msg.text = msg_waiting_data + $label_msg.show() return # данных ещё нет, ничего не далать - $label_msg.hide() + else: + $label_msg.hide() var ctable = $'таблица/сетка' var indexes = cnames_table[nm] update_cvi(nm) @@ -206,7 +208,7 @@ func connect_cmd_handlers(nm: StringName, ctable: GDTable, new_indexes: Array): node.connect_check('toggled', _on_user_cmd.bind(nm, cls.cname, 'txe')) -## Вызывается при перключении оператором разрешений +## Вызывается при переключении оператором разрешений для кластера func _on_user_cmd(val: bool, nm: StringName, cname: String, param_name: StringName): var unit_cmd = yems_cmd[nm] if cname in unit_cmd: From 4a928abc37316cb7a069916fc30358bf26cb0a71 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 31 Mar 2026 11:54:28 +0300 Subject: [PATCH 51/52] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 2a8e3fa0..24dec2f5 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -157,7 +157,7 @@ func _on_scale_selected(val: bool, nm: StringName): else: $label_msg.hide() var ctable = $'таблица/сетка' - var indexes = cnames_table[nm] + var indexes: = cnames_table[nm] update_cvi(nm) var new_indexes = update_indexes(unit_info, indexes) update_table(unit_info, ctable, new_indexes) From 8039e6bcb4f94709879d9ac08799d8892c07e7df Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 31 Mar 2026 12:08:46 +0300 Subject: [PATCH 52/52] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5.=20=D0=9E=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D0=B5=D0=BB=D1=8B=20=D0=BC=D0=B0=D1=81=D1=81=D0=B8?= =?UTF-8?q?=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 24dec2f5..d86cbb76 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -344,7 +344,8 @@ func _on_timeout_ttl(nm, cname): cls.result_txe = ClasterResult.WAITING var ctable: GDTable = $'таблица/сетка' var indexes: = cnames_table[nm] - map_yems_info_to_table(unit_info, ctable, indexes) + if indexes: + map_yems_info_to_table(unit_info, ctable, indexes) var claster_scale: = name_to_scale[nm] as GridContainer map_yems_info_to_scale(unit_info, claster_scale) reset_matrix()