From 9a03434fe1611610e20cc028a31053d59e93dac3 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Fri, 26 Sep 2025 15:20:37 +0300 Subject: [PATCH 01/13] =?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=D1=8F.=20=D0=9B=D0=B8=D1=88=D0=BD?= =?UTF-8?q?=D1=8F=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=20=D0=BE=D1=82=D0=B6=D0=B0=D1=82=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B5=20=D0=9F=D0=BE?= =?UTF-8?q?=D0=B4=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/interfer.gd | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 37cd4b8..42b02b4 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -403,8 +403,6 @@ func send_ecm(ecm, unit0) -> void: if ecm.krp != INTERFER_OFF: if not emit_enable: return - elif not ecm.modulation: - return msg6_num += 1 var json_data = ecm.get_msg6_data(msg6_num) unit0.tx_stack.append(json_data) From 37ca1aced6fe99c5fc8d4a8ae5cdd1eb7d1723b6 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Mon, 29 Sep 2025 13:22:41 +0300 Subject: [PATCH 02/13] =?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=D1=8F.=20=D0=98=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D1=8B=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=B0=20?= =?UTF-8?q?=D1=83=D0=B3=D0=BB=D0=B0=20=D0=BC=D0=B5=D1=81=D1=82=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/button-flat/button-flat.tscn | 1 - scenes/frame-ecm-list/frm-ecm-list.tscn | 10 +++++----- scenes/работа/работа.tscn | 8 ++++---- scenes/эмс/эмс.tscn | 4 ++-- scripts/interfer.gd | 2 ++ scripts/prd.gd | 9 +++++---- 6 files changed, 18 insertions(+), 16 deletions(-) diff --git a/scenes/button-flat/button-flat.tscn b/scenes/button-flat/button-flat.tscn index b5e777f..a35c4c3 100644 --- a/scenes/button-flat/button-flat.tscn +++ b/scenes/button-flat/button-flat.tscn @@ -56,7 +56,6 @@ offset_right = 20.0 offset_bottom = 20.0 theme_override_styles/panel = SubResource("1") script = ExtResource("1_ui6sg") -font_size = null [node name="back" type="Sprite2D" parent="."] material = SubResource("ShaderMaterial_hhdyc") diff --git a/scenes/frame-ecm-list/frm-ecm-list.tscn b/scenes/frame-ecm-list/frm-ecm-list.tscn index b1c524e..6508d41 100644 --- a/scenes/frame-ecm-list/frm-ecm-list.tscn +++ b/scenes/frame-ecm-list/frm-ecm-list.tscn @@ -57,7 +57,7 @@ size_flags_vertical = 3 tooltip_text = "Включает принудительную помеху" strips_rotation = 15.0 text = "СРН" -font_size = null +font_size = 1 metadata/rfi_name = "srn" [node name="btn_jtids" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")] @@ -67,7 +67,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 strips_rotation = 15.0 text = "СПРС" -font_size = null +font_size = 1 metadata/rfi_name = "sprs" [node name="btn_kupd" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")] @@ -77,7 +77,7 @@ size_flags_vertical = 3 tooltip_text = "Кнопка для принудительного включения группы секторов в режим КУПД" strips_rotation = 15.0 text = "КУПД" -font_size = null +font_size = 1 metadata/rfi_name = "kupd" [node name="btn_panika" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")] @@ -87,7 +87,7 @@ size_flags_vertical = 3 tooltip_text = "Кнопка для принудительного включения группы секторов в режим КУПД" strips_rotation = 15.0 text = "Паника" -font_size = null +font_size = 1 metadata/rfi_name = "" [node name="btn_cancel" parent="grd_forced" groups=["прин-секторы-срн"] instance=ExtResource("4_7ys3c")] @@ -96,5 +96,5 @@ size_flags_horizontal = 3 size_flags_vertical = 3 strips_rotation = 15.0 text = "Очистить" -font_size = null +font_size = 1 metadata/rfi_name = "" diff --git a/scenes/работа/работа.tscn b/scenes/работа/работа.tscn index 9e1abc8..692683e 100644 --- a/scenes/работа/работа.tscn +++ b/scenes/работа/работа.tscn @@ -174,7 +174,7 @@ size_flags_vertical = 3 tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" strips_rotation = 25.0 text = "Строб" -font_size = null +font_size = 1 metadata/state = 0 [node name="btn_threats" parent="btns_select" groups=["группа-режим-выбора"] instance=ExtResource("8_k0iv2")] @@ -184,7 +184,7 @@ size_flags_vertical = 3 tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" strips_rotation = 25.0 text = "Цель" -font_size = null +font_size = 1 metadata/state = 1 [node name="btn_fs_sector" parent="btns_select" groups=["группа-режим-выбора"] instance=ExtResource("8_k0iv2")] @@ -194,7 +194,7 @@ size_flags_vertical = 3 tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" strips_rotation = 25.0 text = "Сектор" -font_size = null +font_size = 1 metadata/state = 2 [node name="chk_auto" type="CheckBox" parent="."] @@ -308,6 +308,6 @@ text = "Масштаб:" [connection signal="drag_continue" from="." to="." method="_on_drag_continue"] [connection signal="toggled" from="btn_view" to="." method="on_button_view_toggled"] [connection signal="toggled" from="chk_auto" to="." method="on_value_changed"] -[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate"] [connection signal="toggled" from="btn_activate" to="." method="on_btn_activate_toggled"] +[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate"] [connection signal="toggled" from="btn_center" to="." method="on_btn_center_toggled"] diff --git a/scenes/эмс/эмс.tscn b/scenes/эмс/эмс.tscn index 9198fcf..18894bd 100644 --- a/scenes/эмс/эмс.tscn +++ b/scenes/эмс/эмс.tscn @@ -81,7 +81,7 @@ offset_right = 1583.0 offset_bottom = 85.0 strips_rotation = 10.0 text = "Прочитать" -font_size = null +font_size = 1 [node name="btn_flash_write" parent="." instance=ExtResource("2_eju8r")] layout_mode = 0 @@ -91,7 +91,7 @@ offset_right = 1583.0 offset_bottom = 129.0 strips_rotation = 10.0 text = "Записать" -font_size = null +font_size = 1 [node name="btn_save" type="Button" parent="."] layout_mode = 0 diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 42b02b4..3221cf9 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -402,6 +402,8 @@ func interfer_create(u, interfer_name, ecms, param, kni, id, dict, source_interf func send_ecm(ecm, unit0) -> void: if ecm.krp != INTERFER_OFF: if not emit_enable: + ecm.svk = 0 + call_deferred('emit_signal', 'interfer_update', ecm) return msg6_num += 1 var json_data = ecm.get_msg6_data(msg6_num) diff --git a/scripts/prd.gd b/scripts/prd.gd index 30cfe54..4308652 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -93,11 +93,11 @@ var fs_caps_id: Dictionary ## Словарь соответствия номе class Fs: const UM_PORTS: Dictionary = { 1 : 0x106, - 2 : 0x10A, + 2 : 0x108, 3 : 0x106, - 4 : 0x10A, + 4 : 0x108, 5 : 0x106, - 6 : 0x10A } + 6 : 0x108 } const CODE_UM: Array = [ [-5, 0], @@ -145,7 +145,7 @@ class Fs: if UM_PORTS.has(index/4): var val = um_code_tx if u.isa_ports.has(um_port): - val = tools.set_bits(u.isa_ports[um_port], um_code_tx, 0x0003) + val = tools.set_bits(u.isa_ports[um_port], um_code_tx, 0x0007) data_arr.append(um_port) data_arr.append(val) @@ -225,6 +225,7 @@ class PRD: func execute_cmd(): if not len(cmd_array): return + if unit_yau07.cmd_state != unit_yau07.CmdState.DONE: return var cmd: Array = cmd_array.pop_front() unit_yau07.send_isa(cmd[0], cmd[1]) From 6d947cdc7ae0ef7ab58705296fa1b1097c002149 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Tue, 21 Oct 2025 08:27:27 +0300 Subject: [PATCH 03/13] Godot4 --- scenes/frame-ecm-list/frm-ecm-list.tscn | 5 ----- scenes/контроль/контроль.tscn | 1 + scenes/настройки/настройки.tscn | 9 ++++----- scenes/работа/работа.tscn | 5 +---- scenes/эмс/эмс.tscn | 2 -- 5 files changed, 6 insertions(+), 16 deletions(-) diff --git a/scenes/frame-ecm-list/frm-ecm-list.tscn b/scenes/frame-ecm-list/frm-ecm-list.tscn index 6508d41..e008661 100644 --- a/scenes/frame-ecm-list/frm-ecm-list.tscn +++ b/scenes/frame-ecm-list/frm-ecm-list.tscn @@ -57,7 +57,6 @@ size_flags_vertical = 3 tooltip_text = "Включает принудительную помеху" strips_rotation = 15.0 text = "СРН" -font_size = 1 metadata/rfi_name = "srn" [node name="btn_jtids" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")] @@ -67,7 +66,6 @@ size_flags_horizontal = 3 size_flags_vertical = 3 strips_rotation = 15.0 text = "СПРС" -font_size = 1 metadata/rfi_name = "sprs" [node name="btn_kupd" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")] @@ -77,7 +75,6 @@ size_flags_vertical = 3 tooltip_text = "Кнопка для принудительного включения группы секторов в режим КУПД" strips_rotation = 15.0 text = "КУПД" -font_size = 1 metadata/rfi_name = "kupd" [node name="btn_panika" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")] @@ -87,7 +84,6 @@ size_flags_vertical = 3 tooltip_text = "Кнопка для принудительного включения группы секторов в режим КУПД" strips_rotation = 15.0 text = "Паника" -font_size = 1 metadata/rfi_name = "" [node name="btn_cancel" parent="grd_forced" groups=["прин-секторы-срн"] instance=ExtResource("4_7ys3c")] @@ -96,5 +92,4 @@ size_flags_horizontal = 3 size_flags_vertical = 3 strips_rotation = 15.0 text = "Очистить" -font_size = 1 metadata/rfi_name = "" diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 5ed8246..10e7779 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -416,6 +416,7 @@ metadata/unit_name = ["уарэп-эмс"] metadata/online_proc = "on_line_changed" [node name="label" type="Label" parent="pribor_uf"] +self_modulate = Color(0, 1, 0, 1) layout_mode = 0 offset_left = 15.0 offset_top = -34.0 diff --git a/scenes/настройки/настройки.tscn b/scenes/настройки/настройки.tscn index e757390..08f80ce 100644 --- a/scenes/настройки/настройки.tscn +++ b/scenes/настройки/настройки.tscn @@ -67,11 +67,10 @@ const SETTING_TABLE = [ ['уареп-трасса', TableEdit, TableEdit, 'IP-адрес для связи с Трассой [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'] ] const EXTERNAL_CU = 16 ## Внешнее целеуказание -const TRASSA = 17 -const SUPPRESS = 18 ## Строка - Подавление -const KEYBOARD = 19 ## Строка - Виртуальная клавиатура -const HIDE_EMS2 = 20 ## Строка - Скрыть вкладку ЭМС 2 -const COMMIT = 21 ## Строка - Версия УАРЭП +const SUPPRESS = 17 ## Строка - Подавление +const KEYBOARD = 18 ## Строка - Виртуальная клавиатура +const HIDE_EMS2 = 19 ## Строка - Скрыть вкладку ЭМС 2 +const COMMIT = 20 ## Строка - Версия УАРЭП var name_to_line_index: = {} ## Для преобразования названия параметра в номер строки diff --git a/scenes/работа/работа.tscn b/scenes/работа/работа.tscn index 0e89ccb..006c55c 100644 --- a/scenes/работа/работа.tscn +++ b/scenes/работа/работа.tscn @@ -178,7 +178,6 @@ size_flags_vertical = 3 tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" strips_rotation = 25.0 text = "Строб" -font_size = 1 metadata/state = 0 [node name="btn_threats" parent="btns_select" groups=["группа-режим-выбора"] instance=ExtResource("8_k0iv2")] @@ -188,7 +187,6 @@ size_flags_vertical = 3 tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" strips_rotation = 25.0 text = "Цель" -font_size = 1 metadata/state = 1 [node name="btn_fs_sector" parent="btns_select" groups=["группа-режим-выбора"] instance=ExtResource("8_k0iv2")] @@ -198,7 +196,6 @@ size_flags_vertical = 3 tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" strips_rotation = 25.0 text = "Сектор" -font_size = 1 metadata/state = 2 [node name="chk_auto" type="CheckBox" parent="."] @@ -345,8 +342,8 @@ text = "−" [connection signal="drag_continue" from="." to="." method="_on_drag_continue"] [connection signal="toggled" from="btn_view" to="." method="on_button_view_toggled"] [connection signal="toggled" from="chk_auto" to="." method="on_value_changed"] -[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate_toggled"] [connection signal="toggled" from="btn_activate" to="." method="on_btn_activate"] +[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate_toggled"] [connection signal="toggled" from="btn_center" to="." method="on_btn_center_toggled"] [connection signal="button_down" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_down"] [connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_up"] diff --git a/scenes/эмс/эмс.tscn b/scenes/эмс/эмс.tscn index 18894bd..32717b0 100644 --- a/scenes/эмс/эмс.tscn +++ b/scenes/эмс/эмс.tscn @@ -81,7 +81,6 @@ offset_right = 1583.0 offset_bottom = 85.0 strips_rotation = 10.0 text = "Прочитать" -font_size = 1 [node name="btn_flash_write" parent="." instance=ExtResource("2_eju8r")] layout_mode = 0 @@ -91,7 +90,6 @@ offset_right = 1583.0 offset_bottom = 129.0 strips_rotation = 10.0 text = "Записать" -font_size = 1 [node name="btn_save" type="Button" parent="."] layout_mode = 0 From e22fba469fcc1dad36ba93dfb836942cdec33f47 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Tue, 21 Oct 2025 10:47:37 +0300 Subject: [PATCH 04/13] =?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=B8=D0=BD=D1=8F=D1=8F=20=D1=80?= =?UTF-8?q?=D0=B0=D0=BC=D0=BA=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B5=D0=BD=D0=B4=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D0=BE=D0=B9=20=D0=BF=D0=BE=D0=BC=D0=B5=D1=85=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/button-flat/button-flat.tscn | 8 ++++++++ scenes/button-flat/nine-patch-button.gd | 2 ++ scenes/grid-buttons-ecm/grid-buttons-ecm.tscn | 2 +- scenes/настройки/настройки.tscn | 9 +++++---- scenes/работа/работа.gd | 6 +++--- scenes/работа/работа.tscn | 4 ++-- 6 files changed, 21 insertions(+), 10 deletions(-) diff --git a/scenes/button-flat/button-flat.tscn b/scenes/button-flat/button-flat.tscn index a35c4c3..607ed5f 100644 --- a/scenes/button-flat/button-flat.tscn +++ b/scenes/button-flat/button-flat.tscn @@ -57,6 +57,14 @@ offset_bottom = 20.0 theme_override_styles/panel = SubResource("1") script = ExtResource("1_ui6sg") +[node name="recommend" type="ReferenceRect" parent="."] +visible = false +z_as_relative = false +layout_mode = 2 +border_color = Color(0, 0.549509, 0.921779, 1) +border_width = 5.0 +editor_only = false + [node name="back" type="Sprite2D" parent="."] material = SubResource("ShaderMaterial_hhdyc") scale = Vector2(20, 20) diff --git a/scenes/button-flat/nine-patch-button.gd b/scenes/button-flat/nine-patch-button.gd index 10a93a2..95a07a4 100644 --- a/scenes/button-flat/nine-patch-button.gd +++ b/scenes/button-flat/nine-patch-button.gd @@ -4,10 +4,12 @@ extends PanelContainer func set_text(val: String): $button.set_text(val) func set_disabled(val: bool): disabled = val +func set_rec_visible(val: bool): $recommend.visible = val func get_text(): return $button.get_text() func is_pressed(): return $button.is_pressed() func is_toggle_mode(): return $button.is_toggle_mode() + var _pressed: = false @export var texture_state0: Texture2D = preload('res://data/кнопка-квадрат-0.png'): diff --git a/scenes/grid-buttons-ecm/grid-buttons-ecm.tscn b/scenes/grid-buttons-ecm/grid-buttons-ecm.tscn index 145ec7a..a1b2522 100644 --- a/scenes/grid-buttons-ecm/grid-buttons-ecm.tscn +++ b/scenes/grid-buttons-ecm/grid-buttons-ecm.tscn @@ -5,7 +5,7 @@ [node name="grd_btns" type="GridContainer"] offset_right = 1096.0 offset_bottom = 54.0 -columns = 15 +columns = 16 [node name="btn_off" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] layout_mode = 2 diff --git a/scenes/настройки/настройки.tscn b/scenes/настройки/настройки.tscn index 08f80ce..e757390 100644 --- a/scenes/настройки/настройки.tscn +++ b/scenes/настройки/настройки.tscn @@ -67,10 +67,11 @@ const SETTING_TABLE = [ ['уареп-трасса', TableEdit, TableEdit, 'IP-адрес для связи с Трассой [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'] ] const EXTERNAL_CU = 16 ## Внешнее целеуказание -const SUPPRESS = 17 ## Строка - Подавление -const KEYBOARD = 18 ## Строка - Виртуальная клавиатура -const HIDE_EMS2 = 19 ## Строка - Скрыть вкладку ЭМС 2 -const COMMIT = 20 ## Строка - Версия УАРЭП +const TRASSA = 17 +const SUPPRESS = 18 ## Строка - Подавление +const KEYBOARD = 19 ## Строка - Виртуальная клавиатура +const HIDE_EMS2 = 20 ## Строка - Скрыть вкладку ЭМС 2 +const COMMIT = 21 ## Строка - Версия УАРЭП var name_to_line_index: = {} ## Для преобразования названия параметра в номер строки diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index fe9aae3..4b79f25 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -306,9 +306,9 @@ func on_rto_threat_sel(th_id, ecm_btns): set_btns_disabled(false, btn) var btn_meta = btn.get_meta('rfi_name') if krp == btn_meta: - btn.modulate = Color.DEEP_SKY_BLUE + btn.set_rec_visible(true) else: - btn.modulate = Color(1.0, 1.0, 1.0, 1.0) + btn.set_rec_visible(false) ## Обработчик снятия выбора РТО цели. @@ -320,7 +320,7 @@ func on_rto_threat_unsel(th_id, ecm_btns): break set_ecm_btns_state(true) for btn in ecm_btns: - btn.modulate = Color(1.0, 1.0, 1.0, 1.0) + btn.set_rec_visible(false) ## Обработчик нажатия кнопки "Строб". Управляет отображением строба. diff --git a/scenes/работа/работа.tscn b/scenes/работа/работа.tscn index 006c55c..cb6871f 100644 --- a/scenes/работа/работа.tscn +++ b/scenes/работа/работа.tscn @@ -342,11 +342,11 @@ text = "−" [connection signal="drag_continue" from="." to="." method="_on_drag_continue"] [connection signal="toggled" from="btn_view" to="." method="on_button_view_toggled"] [connection signal="toggled" from="chk_auto" to="." method="on_value_changed"] -[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate"] [connection signal="toggled" from="btn_activate" to="." method="on_btn_activate_toggled"] +[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate"] [connection signal="toggled" from="btn_center" to="." method="on_btn_center_toggled"] [connection signal="button_down" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_down"] -[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_up"] [connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_button_up"] +[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_up"] [connection signal="button_down" from="zoom_minus" to="tilemap" method="_on_zoom_minus_button_down"] [connection signal="button_up" from="zoom_minus" to="tilemap" method="_on_zoom_button_up"] From 10389cf81875f6cd618b2a69e09265814ec779a6 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Tue, 21 Oct 2025 16:32:42 +0300 Subject: [PATCH 05/13] =?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=D1=88=D0=B8=D0=B1?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B2=20=D0=B0=D0=B2=D1=82=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B5=20=D0=BF=D1=80=D0=B8=20=D0=BE=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B8=20=D0=B8=D0=BD=D1=84=D0=BE?= =?UTF-8?q?=D1=80=D0=BC=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BE=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BC=D0=B5=D1=85=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/настройки/настройки.tscn | 11 ++++++- scripts/interfer.gd | 52 +++++++++++++++++++++++---------- 2 files changed, 46 insertions(+), 17 deletions(-) diff --git a/scenes/настройки/настройки.tscn b/scenes/настройки/настройки.tscn index e757390..6aa194e 100644 --- a/scenes/настройки/настройки.tscn +++ b/scenes/настройки/настройки.tscn @@ -64,7 +64,9 @@ const SETTING_TABLE = [ ['Адрес БПО правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'], ['Период опроса состояния БПО, секунды', TableEdit, TableEdit, 'Время в секундах' ], ['Период опроса состояния АФСП, секунды', TableEdit, TableEdit, 'Время в секундах' ], - ['уареп-трасса', TableEdit, TableEdit, 'IP-адрес для связи с Трассой [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'] ] + ['уареп-трасса', TableEdit, TableEdit, 'IP-адрес для связи с Трассой [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'], + ['Включить работу по своим целям', TableEdit, TableToggle, 'Разрешает работу в секторе со своей целью'], + ['Список своих протоколов', TableEdit, TableEdit, 'Список протоколов целей, по которым запрещено работать' ], ] const EXTERNAL_CU = 16 ## Внешнее целеуказание const TRASSA = 17 @@ -72,6 +74,7 @@ const SUPPRESS = 18 ## Строка - Подавление const KEYBOARD = 19 ## Строка - Виртуальная клавиатура const HIDE_EMS2 = 20 ## Строка - Скрыть вкладку ЭМС 2 const COMMIT = 21 ## Строка - Версия УАРЭП +const GOS_BTN = 51 ## Разрешить работу по своим целям var name_to_line_index: = {} ## Для преобразования названия параметра в номер строки @@ -102,6 +105,10 @@ func on_vk_pressed(btn) -> void: signaller.emit_signal('kb_pressed', btn.button_pressed) +func on_gos_pressed(btn) -> void: + ProjectSettings.set_setting('application/config/Включить работу по своим целям', btn.button_pressed) + + func on_ems2_pressed(btn) -> void: var state = btn.button_pressed signaller.emit_signal('ems2_hide_pressed', state) @@ -222,6 +229,8 @@ func button_settings(): ems2_hide_node.connect('pressed', on_ems2_pressed.bind(ems2_hide_node)) ems2_hide_node.set_pressed(true) on_ems2_pressed(ems2_hide_node) + var gos_node = $scroll_set/table.get_node2(1, GOS_BTN).get_children()[0] + gos_node.connect('pressed', on_gos_pressed.bind(gos_node)) func _on_btn_save_settings_pressed(): diff --git a/scripts/interfer.gd b/scripts/interfer.gd index ee76a19..2ecfd55 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -93,17 +93,19 @@ const ID_INTERFERS_LEN = 63 ## Размер пула номеров целе const INTERFER_OFF = 'off' const INTERFER_IQFILE = 'IQ-файл' const POW_DEFAULT: float = 50.0 -var msg6_num: int = 0 ## Счётчик сообщений "тип 6" -var msg8_num: int = 0 ## Счётчик сообщений "тип 8" -var id_array: Array ## Массив id воздействий. -var thrs: Dictionary ## Словарь воздействия для целей, ключ - id воздействия. -var fs: Dictionary ## Словарь воздействий для секторов, ключ - id воздействия. -var cu: Dictionary ## Словарь воздействий для 5П-28, ключ - id воздействия. -var thrs_dict: Dictionary ## Ссылка на словарь целей -var auto_enabled: bool = false ## Режим автомата -var emit_enable: bool = true ## Разрешить излучение -var trenazh_mode: bool = false ## Переключение режима Тренаж -var course = 0.0 ## Курс корабля +var msg6_num: int = 0 ## Счётчик сообщений "тип 6" +var msg8_num: int = 0 ## Счётчик сообщений "тип 8" +var id_array: Array ## Массив id воздействий. +var thrs: Dictionary ## Словарь воздействия для целей, ключ - id воздействия. +var fs: Dictionary ## Словарь воздействий для секторов, ключ - id воздействия. +var cu: Dictionary ## Словарь воздействий для 5П-28, ключ - id воздействия. +var thrs_dict: Dictionary ## Ссылка на словарь целей +var auto_enabled: bool = false ## Режим автомата +var emit_enable: bool = true ## Разрешить излучение +var trenazh_mode: bool = false ## Переключение режима Тренаж +var course = 0.0 ## Курс корабля +var gos_flag = true ## Флаг работать по своим целям +var gos_protocols: PackedStringArray ## Список протоколов своих целей ## Сеанс помехи. class Interfer: @@ -207,6 +209,7 @@ func _ready() -> void: threats.connect('threat_lost', Callable(self, 'on_threats_lost').bind(ecms, unit_caps)) threats.connect('threats_resized', Callable(self, 'on_threats_resized')) threats.connect('threat_update', Callable(self, 'on_threats_update').bind(ecms, unit_caps)) + ProjectSettings.connect('settings_changed', on_settings_changed) var unit_nav = network.get_unit_instance('навигация') unit_nav.connect('data_received', on_nav_data_received.bind(unit_caps)) @@ -257,6 +260,7 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit_instance) -> v ecm.kni = thr.aoa - course if ecm.kni < 0: ecm.kni += 360 + call_ecm_proc(ecm) send_ecm(ecm, unit_instance) signaller.emit_signal('fs_update_color', ecms) prd.update_fs_state(ecms, trenazh_mode) @@ -267,6 +271,12 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit_instance) -> v if auto_enabled: for thr in threats.values(): thr.auto_selected = true + if (thr.rkrp != '') and thr.fflags.rkrp and auto_enabled: + var krp = get_krp(thr) + if krp != '': + signaller.emit_signal('interfer_init', krp, [], interfer.POW_DEFAULT) + thr.auto_selected = false + continue signaller.emit_signal('interfer_init', 'lchm1', [], interfer.POW_DEFAULT) thr.auto_selected = false @@ -414,10 +424,7 @@ func interfer_create(u, interfer_name, ecms, param, kni, id, dict, source_interf ecm.source_interfer = source_interfer ecm.modulation = emit_enable ecm.um = param.get('um', 15.0) # Значение по умолчанию - var ecm_params = ITERFER_MODE[interfer_name][1] - if ecm_params.has('call_proc'): - var call_set_params = Callable(self, ecm_params['call_proc']).bind(ecm, ecm_params) - call_set_params.call() + call_ecm_proc(ecm) var set_nmfs_ok = set_nmfs(ecm) if set_nmfs_ok != Error.OK: log.error('Ошибка выбора модуля ФС для помехи: %s' %[ecm.ispp]) @@ -528,7 +535,10 @@ func on_threats_update(threat, ecms, unit_caps): if krp != '': ecm.krp = krp set_rparams(threat, ecm.params) + call_ecm_proc(ecm) emit_signal('interfer_recommendate', ecm) + else: + call_ecm_proc(ecm) ecm.kni = threat.aoa - course if ecm.kni < 0: ecm.kni += 360 @@ -644,8 +654,18 @@ func on_interfer_off(ecm: Interfer, ecms): func on_interfer_new(ecm, unit_caps): + call_ecm_proc(ecm) + send_ecm(ecm, unit_caps) + + +func on_settings_changed(): + gos_flag = ProjectSettings.get_setting('application/config/Включить работу по своим целям', true) + var protocols: String = ProjectSettings.get_setting('application/config/Список своих протоколов', '') + gos_protocols = protocols.split(",", true) + + +func call_ecm_proc(ecm): var ecm_params = ITERFER_MODE[ecm.krp][1] if ecm_params.has('call_proc'): var call_set_params = Callable(self, ecm_params['call_proc']).bind(ecm, ecm_params) call_set_params.call() - send_ecm(ecm, unit_caps) From 7ab8d73f034f69dc91cffab492726a48056b270f Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Wed, 22 Oct 2025 15:34:48 +0300 Subject: [PATCH 06/13] =?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=93=D0=BE=D1=81.=20=D0=BE=D0=BF=D0=BE?= =?UTF-8?q?=D0=B7=D0=BD=D0=B0=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D0=BA=D0=BE=D0=BB=D0=BE=D0=B2.=20=D0=98?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=B0=20=D1=86=D0=B2=D0=B5=D1=82?= =?UTF-8?q?=D0=B0=20=D1=81=D0=B5=D0=BA=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 | 35 ++++++++++++----------------------- scenes/работа/работа.tscn | 4 ++-- scripts/interfer.gd | 33 ++++++++++++++++++++++++++++++++- scripts/threats.gd | 10 ++++++---- 4 files changed, 52 insertions(+), 30 deletions(-) diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 4b79f25..7ada244 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -158,7 +158,7 @@ func _ready(): signaller.connect('interfer_off_all', Callable(self, 'on_interfer_off_all')) signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno').bind(nodes)) signaller.connect('fs_selected', Callable(self, 'on_fs_selected')) - signaller.connect('fs_update_color', Callable(self, 'on_fs_update_color')) + signaller.connect('fs_update_color', Callable(self, 'set_fs_color')) interfer.connect('interfer_update', Callable(self, 'on_interfer_new')) signaller.connect('interfer_prinuditelno', Callable(self, 'on_chk_interfer_prinuditelno')) signaller.connect('fs_update_state', Callable(self, 'on_fs_update_state')) @@ -254,9 +254,7 @@ func on_interfer_new(ecm): bip.set_track_visible(false) else: interfer.thrs.erase(ecm.ispp) - set_fs_color(ecm) update_fs_colors() - set_fs_color(ecm) ## Обработчик выключения всех помех. @@ -469,18 +467,17 @@ func sel_fs_sector(event): set_ecm_btns_state(btn_state) -func set_fs_color(ecm): - if not prd.fs_caps_id.has(ecm.nmfs): - push_warning('нет такого модуля ФС: %d, но имеется: %s' % [ecm.nmfs, prd.fs_caps_id.keys()]) - return - if ecm.krp != interfer.INTERFER_OFF: - fs_active[prd.fs_caps_id[ecm.nmfs]] = null - else: - fs_active.erase(prd.fs_caps_id[ecm.nmfs]) - if ecm.svk == SVK_EMIT: - fs_emit[prd.fs_caps_id[ecm.nmfs]] = null - else: - fs_emit.erase(prd.fs_caps_id[ecm.nmfs]) +func set_fs_color(ecms): + fs_active.clear() + fs_emit.clear() + for ecm in ecms.values(): + if not prd.fs_caps_id.has(ecm.nmfs): + push_warning('нет такого модуля ФС: %d, но имеется: %s' % [ecm.nmfs, prd.fs_caps_id.keys()]) + continue + if ecm.krp != interfer.INTERFER_OFF: + fs_active[prd.fs_caps_id[ecm.nmfs]] = null + if ecm.svk == SVK_EMIT: + fs_emit[prd.fs_caps_id[ecm.nmfs]] = null update_fs_colors() @@ -530,14 +527,6 @@ func set_btns_disabled(value: bool, btn): btn.set_disabled(value) -func on_fs_update_color(ecms): - fs_active.clear() - fs_emit.clear() - for ecm in ecms.values(): - set_fs_color(ecm) - update_fs_colors() - - func on_interfer_prinuditelno (prenuditelno_sectors, btns): for key in prenuditelno_sectors: var sectors = [] diff --git a/scenes/работа/работа.tscn b/scenes/работа/работа.tscn index cb6871f..006c55c 100644 --- a/scenes/работа/работа.tscn +++ b/scenes/работа/работа.tscn @@ -342,11 +342,11 @@ text = "−" [connection signal="drag_continue" from="." to="." method="_on_drag_continue"] [connection signal="toggled" from="btn_view" to="." method="on_button_view_toggled"] [connection signal="toggled" from="chk_auto" to="." method="on_value_changed"] -[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate_toggled"] [connection signal="toggled" from="btn_activate" to="." method="on_btn_activate"] +[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate_toggled"] [connection signal="toggled" from="btn_center" to="." method="on_btn_center_toggled"] [connection signal="button_down" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_down"] -[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_button_up"] [connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_up"] +[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_button_up"] [connection signal="button_down" from="zoom_minus" to="tilemap" method="_on_zoom_minus_button_down"] [connection signal="button_up" from="zoom_minus" to="tilemap" method="_on_zoom_button_up"] diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 2ecfd55..8d0b429 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -106,6 +106,7 @@ var trenazh_mode: bool = false ## Переключение ре var course = 0.0 ## Курс корабля var gos_flag = true ## Флаг работать по своим целям var gos_protocols: PackedStringArray ## Список протоколов своих целей +var gos_nmfs: Array ## Список номеров блоков ФС для которых запрещена работа ## Сеанс помехи. class Interfer: @@ -251,7 +252,16 @@ func on_timer_check_state(unit_instance, ecms, resend_timeout) -> void: func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit_instance) -> void: + gos_nmfs.clear() for thr in threats.values(): + if not gos_flag: # Составляется список запретных секторов работы + if (thr.proto in gos_protocols) and thr.fflags.proto: + var fs_arr: Array = [] + prd.find_fs_index(thr.aoa, thr.freq, fs_arr) + if fs_arr.size(): + for item in fs_arr: + var nmfs = prd.FS_PRD[item][1] + gos_nmfs.append(nmfs) var th_id = thr.id for ecm_i in thrs.keys(): if thrs[ecm_i] == th_id: @@ -261,15 +271,36 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit_instance) -> v if ecm.kni < 0: ecm.kni += 360 call_ecm_proc(ecm) - send_ecm(ecm, unit_instance) + if ecm.nmfs in gos_nmfs: + ecm.krp = INTERFER_OFF + send_ecm(ecm, unit_instance) + signaller.emit_signal('interfer_off', ecm) + else: + send_ecm(ecm, unit_instance) signaller.emit_signal('fs_update_color', ecms) prd.update_fs_state(ecms, trenazh_mode) + if not gos_flag: + for ecm in ecms.values(): + if not (ecm.nmfs in gos_nmfs): continue + ecm.krp = INTERFER_OFF + send_ecm(ecm, unit_instance) + signaller.emit_signal('interfer_off', ecm) + if not auto_enabled: return if auto_enabled: for thr in threats.values(): + if not gos_flag: + var fs_arr: Array = [] + prd.find_fs_index(thr.aoa, thr.freq, fs_arr) + if fs_arr.size(): + var need_continue = false + for item in fs_arr: + var nmfs = prd.FS_PRD[item][1] + if nmfs in gos_nmfs: need_continue = true + if need_continue: continue thr.auto_selected = true if (thr.rkrp != '') and thr.fflags.rkrp and auto_enabled: var krp = get_krp(thr) diff --git a/scripts/threats.gd b/scripts/threats.gd index 83de85c..28f6dea 100644 --- a/scripts/threats.gd +++ b/scripts/threats.gd @@ -111,10 +111,12 @@ func on_threat_selected(th, threats): func on_interfer_init(interfer_name, fs_arr, power, threats): var sel_threats: Array = [] for threat in threats.values(): - if threat.selected: - sel_threats.append(threat) - if threat.auto_selected: - sel_threats.append(threat) + if interfer.auto_enabled: + if threat.auto_selected: + sel_threats.append(threat) + else: + if threat.selected: + sel_threats.append(threat) if len(sel_threats) or len(fs_arr): signaller.emit_signal('interfer_create', interfer_name, sel_threats, fs_arr, power) From d382409c34fa2dfd587efe816e2f7b0884774103 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Thu, 23 Oct 2025 12:27:15 +0300 Subject: [PATCH 07/13] =?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=9F=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D0=BA=D0=B0=20=D1=84=D0=BB=D0=B0=D0=B3=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B4=D0=BE=D1=81=D1=82=D0=BE=D0=B2=D0=B5=D1=80=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D1=86=D0=B5=D0=BB?= =?UTF-8?q?=D0=B8,=20=D0=BF=D1=80=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B8=20=D0=B2=20=D1=82=D0=B0=D0=B1?= =?UTF-8?q?=D0=BB=D0=B8=D1=86=D1=83.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/frame-threats/scroll-threats.gd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scenes/frame-threats/scroll-threats.gd b/scenes/frame-threats/scroll-threats.gd index e2ef9d3..377be5b 100644 --- a/scenes/frame-threats/scroll-threats.gd +++ b/scenes/frame-threats/scroll-threats.gd @@ -91,6 +91,8 @@ func map_th_to_row(th) -> Array: for param_name in TABLE_COLUMN_PARAM: var val = th.get(param_name) row[i_col] = '%0.1f' % val if val is float else '%s' % val + if not th.fflags[param_name]: + row[i_col] = '' i_col += 1 return row From d04eda024b8c46bb9b347d6ec8874d9de86fb908 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 23 Oct 2025 14:59:35 +0300 Subject: [PATCH 08/13] =?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=92=D0=B0=D0=B6=D0=BD=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=8F=D1=81=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 --- ip-tables-navigation.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ip-tables-navigation.sh b/ip-tables-navigation.sh index 70762f9..960abb7 100644 --- a/ip-tables-navigation.sh +++ b/ip-tables-navigation.sh @@ -61,8 +61,8 @@ if [[ -z "$IP_PORT_IN" ]]; then fi # Дублирование трафика на другой порт. Перенаправить копии входящих UDP-пакетов -# с порта ${IP_PORT_IN} на порт ${IP_PORT_OUT} (или любой другой), чтобы оригинальная программа -# продолжала работать с портом ${IP_PORT_IN}, а копии пакетов отправлялись на ${IP_PORT_OUT}: +# с порта ${IP_PORT_IN} на порт ${IP_PORT_OUT}, чтобы другой процесс продолжал +# работать с портом ${IP_PORT_IN}, а копии пакетов отправлялись на ${IP_PORT_OUT}: echo "${SUDO_PASS}" | sudo -S iptables -t nat -A PREROUTING -p udp --dport "${IP_PORT_IN}" -j REDIRECT --to-ports "${IP_PORT_OUT}" echo "${SUDO_PASS}" | sudo -S iptables -A INPUT -p udp --dport "${IP_PORT_IN}" -j ACCEPT echo "${SUDO_PASS}" | sudo -S iptables -t nat -L -n -v From 4a37c1a6734c2561975ddd7509609f2873b49f24 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Fri, 24 Oct 2025 08:33:32 +0300 Subject: [PATCH 09/13] =?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=D1=81=D0=B5=D0=BA=D1=82=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=BF=D1=80=D0=B5=D1=82=D1=8B=20=D0=B8=20=D0=BE?= =?UTF-8?q?=D1=82=D0=B2=D0=B5=D1=82=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D0=BE=D0=B9=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project.godot | 2 +- scenes/работа/работа.gd | 40 ++++++++++++++++++++++++-- scenes/работа/работа.tscn | 44 ++++++++++++++++++++++++++-- scripts/interfer.gd | 60 +++++++++++++++++++++++---------------- scripts/network.gd | 2 +- scripts/signaller.gd | 5 ++++ 6 files changed, 122 insertions(+), 31 deletions(-) diff --git a/project.godot b/project.godot index 43e8826..39bda02 100644 --- a/project.godot +++ b/project.godot @@ -37,7 +37,7 @@ config/emsg_files_path="user://emsg/" config/settings_path="user://settings.json" config/unit_bpo_request_period=20.0 interfer/emit_color=Color(0.58, 0.471, 0.51, 0.2) -interfer/emit_sel_color=Color(1, 1, 1, 1) +interfer/closed_sectors=Color(0, 0, 0, 1) [autoload] diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 7ada244..1b06948 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -36,6 +36,8 @@ var color_ecm: Color var color_select: Color var color_emit: Color var color_emit_sel: Color +var color_closed: Color +var color_closed_emit: Color var course = 0.0 ## Курс корабля @@ -51,7 +53,8 @@ const map_sizes = [ var fs_band = prd.FS_BAND_RTO ## Текущий режим блоков ФС по частоте var fs_selected: Dictionary ## Словарь выбранных секторов var fs_active: Dictionary ## Словарь секторов назначенных на подавление -var fs_emit: Dictionary ## Словарь секторов назначенных на подавление +var fs_emit: Dictionary ## Словарь секторов назначенных на подавление +var fs_closed: Dictionary ## Словарь для секторов запрета ## Состояние перетаскивания. enum DragFSM { @@ -89,14 +92,19 @@ func on_enter_tree() -> void: call_deferred('on_button_strobe_pressed') func on_settings_changed(): - color_emit_sel = ProjectSettings.get_setting('application/interfer/emit_sel_color', Color(1.0, 1.0, 1.0, 1.0)) color_emit = ProjectSettings.get_setting('application/interfer/emit_color', Color(0.58, 0.47, 0.51, 1.0)) color_ecm = ProjectSettings.get_setting('application/interfer/interfer_color', Color(0.58, 0.47, 0.51, 1.0)) color_select = ProjectSettings.get_setting('application/interfer/select_color', Color(1.0, 1.0, 1.0, 1.0)) + color_closed = ProjectSettings.get_setting('application/interfer/closed_sectors', Color(0.0, 0.0, 0.0, 1.0)) + color_emit_sel = color_select + color_closed_emit = color_closed color_select *= Color(1.0, 1.0, 1.0, 0.0) color_ecm *= Color(1.0, 1.0, 1.0, 0.0) color_emit_sel *= Color(1.0, 1.0, 1.0, 0.2) + color_closed *= Color(1.0, 1.0, 1.0, 0.0) + color_closed_emit *= Color(1.0, 1.0, 1.0, 1.0) + ## Обработчик сигнала изменения списка целей. @@ -145,6 +153,8 @@ func _ready(): btns_select.any(func(btn): btn.button_connect('pressed', Callable(self, 'on_button_select').bind(btn, btns_select))) var nodes: Array = get_tree().get_nodes_in_group('группа-режим-помехи') nodes.any(func(btn): btn.button_connect('pressed', Callable(self, 'on_button_pressed').bind(btn, nodes))) + $btn_close.button_connect('pressed', Callable(self, 'on_btn_close').bind($btn_close)) + $btn_work.button_connect('pressed', Callable(self, 'on_btn_work').bind($btn_work)) threats.connect('threat_new', Callable(self, 'on_threat_new')) threats.connect('threat_lost', Callable(self, 'on_threat_lost')) threats.connect('threats_resized', Callable(self, 'on_threats_resized')) @@ -165,6 +175,7 @@ func _ready(): signaller.connect('map_user_panning', Callable(self, 'on_user_panning')) signaller.connect('update_coordinates_map', Callable(self, 'on_update_coordinates_label')) signaller.connect('update_scale_map', Callable(self, 'on_update_scale_label')) + var unit_nav = network.get_unit_instance('навигация') unit_nav.connect('data_received', on_navi_data_received) on_btn_center_toggled(true) @@ -487,6 +498,11 @@ func update_fs_colors(): fs_colors[key] = color_ecm for key in fs_emit.keys(): fs_colors[key] = color_emit + for key in fs_closed: + if key in fs_emit: + fs_colors[key] = color_closed_emit + else: + fs_colors[key] = color_closed for key in fs_selected.keys(): if key in fs_emit: fs_colors[key] = color_emit_sel @@ -560,3 +576,23 @@ func on_update_coordinates_label(coordinates_label) -> void: func on_update_scale_label(scale_label) -> void: $scale_map.text = str(scale_label) + + +func on_btn_close(btn): + await get_tree().create_timer(0.2).timeout + btn.pressed = false + fs_closed.merge(fs_selected) + signaller.emit_signal('update_fs_closed', fs_closed) + +func on_btn_work(btn): + await get_tree().create_timer(0.2).timeout + btn.pressed = false + fs_closed.clear() + for fs_index in prd.FS_PRD.keys(): + if fs_index in fs_selected: continue + fs_closed[fs_index] = null + signaller.emit_signal('update_fs_closed', fs_closed) + +func _on_btn_all_work_pressed() -> void: + fs_closed.clear() + signaller.emit_signal('update_fs_closed', fs_closed) diff --git a/scenes/работа/работа.tscn b/scenes/работа/работа.tscn index 006c55c..08aba72 100644 --- a/scenes/работа/работа.tscn +++ b/scenes/работа/работа.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=18 format=3 uid="uid://b276iygic5itk"] +[gd_scene load_steps=19 format=3 uid="uid://b276iygic5itk"] [ext_resource type="Script" uid="uid://daudc0s3oox3i" path="res://scenes/работа/работа.gd" id="1_niok4"] [ext_resource type="PackedScene" uid="uid://nl1vklubr5kr" path="res://scenes/bip/bip.tscn" id="2_br3s6"] @@ -13,6 +13,7 @@ [ext_resource type="Texture2D" uid="uid://csdw3q5dtvu4w" path="res://data/power-1.png" id="11_xp4y6"] [ext_resource type="Texture2D" uid="uid://0sk43ticjaxk" path="res://data/navi-center-0.png" id="12_5ffal"] [ext_resource type="Texture2D" uid="uid://bk4ssfho1murp" path="res://data/navi-center-1.png" id="13_ggrwd"] +[ext_resource type="Texture2D" uid="uid://c6booa8753u5t" path="res://data/состояние-исправности-2.png" id="14_ggrwd"] [sub_resource type="Animation" id="Animation_5ffal"] resource_name = "goto" @@ -338,15 +339,52 @@ offset_bottom = 302.0 theme_override_font_sizes/font_size = 20 text = "−" +[node name="btn_close" parent="." instance=ExtResource("8_k0iv2")] +layout_mode = 0 +offset_left = 10.0 +offset_top = 917.0 +offset_right = 109.0 +offset_bottom = 937.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" +strips_rotation = 25.0 +text = "Сек. запрета" +metadata/state = 0 + +[node name="btn_work" parent="." instance=ExtResource("8_k0iv2")] +layout_mode = 2 +offset_left = 10.0 +offset_top = 890.0 +offset_right = 109.0 +offset_bottom = 910.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" +strips_rotation = 25.0 +text = "Сек. работы" +metadata/state = 0 + +[node name="btn_all_work" type="TextureButton" parent="."] +modulate = Color(1, 1, 1, 0.356863) +layout_mode = 0 +offset_left = 112.0 +offset_top = 920.0 +offset_right = 336.0 +offset_bottom = 1144.0 +scale = Vector2(0.06, 0.06) +texture_normal = ExtResource("14_ggrwd") + [connection signal="drag_begin" from="." to="." method="_on_drag_begin"] [connection signal="drag_continue" from="." to="." method="_on_drag_continue"] [connection signal="toggled" from="btn_view" to="." method="on_button_view_toggled"] [connection signal="toggled" from="chk_auto" to="." method="on_value_changed"] -[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate"] [connection signal="toggled" from="btn_activate" to="." method="on_btn_activate_toggled"] +[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate"] [connection signal="toggled" from="btn_center" to="." method="on_btn_center_toggled"] [connection signal="button_down" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_down"] -[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_up"] [connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_button_up"] +[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_up"] [connection signal="button_down" from="zoom_minus" to="tilemap" method="_on_zoom_minus_button_down"] [connection signal="button_up" from="zoom_minus" to="tilemap" method="_on_zoom_button_up"] +[connection signal="pressed" from="btn_all_work" to="." method="_on_btn_all_work_pressed"] diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 8d0b429..2b4e62b 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -107,6 +107,8 @@ var course = 0.0 ## Курс корабля var gos_flag = true ## Флаг работать по своим целям var gos_protocols: PackedStringArray ## Список протоколов своих целей var gos_nmfs: Array ## Список номеров блоков ФС для которых запрещена работа +var fs_closed: Dictionary ## Словарь секторов запрета + ## Сеанс помехи. class Interfer: @@ -207,6 +209,7 @@ func _ready() -> void: signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno')) signaller.connect('emit_changed', Callable(self, 'on_emit_changed').bind(ecms)) signaller.connect('режим_тренаж', on_trenazh_mode) + signaller.connect('update_fs_closed', Callable(self, 'on_update_fs_closed')) threats.connect('threat_lost', Callable(self, 'on_threats_lost').bind(ecms, unit_caps)) threats.connect('threats_resized', Callable(self, 'on_threats_resized')) threats.connect('threat_update', Callable(self, 'on_threats_update').bind(ecms, unit_caps)) @@ -272,35 +275,38 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit_instance) -> v ecm.kni += 360 call_ecm_proc(ecm) if ecm.nmfs in gos_nmfs: - ecm.krp = INTERFER_OFF - send_ecm(ecm, unit_instance) - signaller.emit_signal('interfer_off', ecm) + interfer_off(ecm, unit_instance) + elif prd.fs_caps_id[ecm.nmfs] in fs_closed: + interfer_off(ecm, unit_instance) else: send_ecm(ecm, unit_instance) signaller.emit_signal('fs_update_color', ecms) prd.update_fs_state(ecms, trenazh_mode) - if not gos_flag: - for ecm in ecms.values(): - if not (ecm.nmfs in gos_nmfs): continue - ecm.krp = INTERFER_OFF - send_ecm(ecm, unit_instance) - signaller.emit_signal('interfer_off', ecm) + + for ecm in ecms.values(): + var ecm_active = true + if not gos_flag: + if ecm.nmfs in gos_nmfs: + interfer_off(ecm, unit_instance) + ecm_active = false + if ecm_active and (prd.fs_caps_id[ecm.nmfs] in fs_closed): + interfer_off(ecm, unit_instance) if not auto_enabled: return if auto_enabled: for thr in threats.values(): - if not gos_flag: - var fs_arr: Array = [] - prd.find_fs_index(thr.aoa, thr.freq, fs_arr) - if fs_arr.size(): - var need_continue = false - for item in fs_arr: - var nmfs = prd.FS_PRD[item][1] - if nmfs in gos_nmfs: need_continue = true - if need_continue: continue + var fs_arr: Array = [] + prd.find_fs_index(thr.aoa, thr.freq, fs_arr) + if fs_arr.size(): + var need_continue = false + for item in fs_arr: + var nmfs = prd.FS_PRD[item][1] + if (nmfs in gos_nmfs) and (not gos_flag): need_continue = true + if prd.fs_caps_id[nmfs] in fs_closed: need_continue = true + if need_continue: continue thr.auto_selected = true if (thr.rkrp != '') and thr.fflags.rkrp and auto_enabled: var krp = get_krp(thr) @@ -482,9 +488,7 @@ func send_ecm(ecm, unit0) -> void: func on_interfer_off_all(unit0, ecms: Dictionary) -> void: for ecm in ecms.values(): - ecm.krp = INTERFER_OFF - send_ecm(ecm, unit0) - signaller.emit_signal('interfer_off', ecm) + interfer_off(ecm, unit0) func on_threats_lost(th, ecms, unit0) -> void: @@ -492,9 +496,7 @@ func on_threats_lost(th, ecms, unit0) -> void: if interfer.thrs[key] == th.id: var ecm_id = key var ecm = ecms[ecm_id] - ecm.krp = INTERFER_OFF - send_ecm(ecm, unit0) - signaller.emit_signal('interfer_off', ecm) + interfer_off(ecm, unit0) func pop_id() -> int: @@ -684,6 +686,12 @@ func on_interfer_off(ecm: Interfer, ecms): interfer.call_deferred('emit_signal', 'interfer_resized', ecms) +func interfer_off(ecm, unit_caps): + ecm.krp = INTERFER_OFF + send_ecm(ecm, unit_caps) + signaller.emit_signal('interfer_off', ecm) + + func on_interfer_new(ecm, unit_caps): call_ecm_proc(ecm) send_ecm(ecm, unit_caps) @@ -700,3 +708,7 @@ func call_ecm_proc(ecm): if ecm_params.has('call_proc'): var call_set_params = Callable(self, ecm_params['call_proc']).bind(ecm, ecm_params) call_set_params.call() + + +func on_update_fs_closed(fs_dict): + fs_closed = fs_dict diff --git a/scripts/network.gd b/scripts/network.gd index a895016..dea8706 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -1,4 +1,4 @@ -@tool +#@tool class_name Network extends Node const YAU07_PROTO: = {'yau07tx': yau07.YaU07} diff --git a/scripts/signaller.gd b/scripts/signaller.gd index 8a4ca5c..05663b7 100644 --- a/scripts/signaller.gd +++ b/scripts/signaller.gd @@ -201,3 +201,8 @@ signal update_uf_serviceability(uf_serviceaability: bool) signal tool_tip(new_ctrl_pos) + + +## Вызывается при изменении секторов запрета.[br] +## [param fs_closed] - обновленное секторов запрета ([b]true[/b] +signal update_fs_closed(fs_closed: Dictionary) From a48ace21788b0273fbac9ac3b4d87aa86f83aabc Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Fri, 24 Oct 2025 12:39:37 +0300 Subject: [PATCH 10/13] =?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=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=20=D1=81=D0=B5=D0=BA=D1=82=D0=BE=D1=80=D0=BE=D0=B2=20=D0=B2=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D0=B5=20=D0=BE=D0=B1=D0=B7=D0=BE?= =?UTF-8?q?=D1=80=D0=BD=D0=BE=D0=B9=20=D0=BA=D0=B0=D1=80=D1=82=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/работа/работа.gd | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 1b06948..30a6260 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -123,6 +123,8 @@ func on_button_view_toggled(toggled: bool): $tilemap.size = s.size $tilemap.position = s.position view_mode = MapViewMode.RLS if toggled else MapViewMode.RTO + if view_mode != MapViewMode.RTO: + fs_selected.clear() ## Встроенный обратный вызов. @@ -448,6 +450,7 @@ func _input(event) -> void: ## Обработчик нажатия по сектору формирователя сигналов. func sel_fs_sector(event): + if view_mode != MapViewMode.RTO: return if (event.button_index == MOUSE_BUTTON_LEFT) or (event.button_index == MOUSE_BUTTON_RIGHT): var center: Vector2 = $tilemap.position var center_offset: Vector2 = ProjectSettings.get_setting('application/interfer/center_offset', Vector2i(0, 25)) @@ -529,6 +532,7 @@ func on_fs_selected(ecm): var fs_index_arr: Array = [] prd.get_fs_index(ecm, fs_index_arr) fs_selected.clear() + if view_mode != MapViewMode.RTO: return for item in fs_index_arr: fs_selected[item] = null update_fs_colors() From cec245895caaeaaad7fcbdea52a5975a8d90e0d2 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 24 Oct 2025 14:15:59 +0300 Subject: [PATCH 11/13] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/настройки/настройки.tscn | 2 +- scenes/работа/работа.gd | 5 +++-- scenes/работа/работа.tscn | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/scenes/настройки/настройки.tscn b/scenes/настройки/настройки.tscn index 6aa194e..b77ce24 100644 --- a/scenes/настройки/настройки.tscn +++ b/scenes/настройки/настройки.tscn @@ -182,7 +182,7 @@ func setting_tab(): var child = node_values[0] if child is CheckButton: child.connect('pressed', Callable(self, 'on_checkbutton_pressed').bind(i)) - var val = ProjectSettings.get_setting('application/config/%s' % param_name) + var val = ProjectSettings.get_setting('application/config/%s' % param_name, true) child.set_pressed(val) else: if settings_data.has(param_name): diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 30a6260..c4d6a73 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -192,8 +192,9 @@ func _ready(): func on_navi_data_received(data: Dictionary): - $canvas.set_canvas_rotation(data.get('k', 0.0)) - course = data.get('k', 0.0) + var k = data.get('k', 0.0) + $canvas.set_canvas_rotation(k) + course = k func on_user_panning(): diff --git a/scenes/работа/работа.tscn b/scenes/работа/работа.tscn index 08aba72..8313ec3 100644 --- a/scenes/работа/работа.tscn +++ b/scenes/работа/работа.tscn @@ -379,12 +379,12 @@ texture_normal = ExtResource("14_ggrwd") [connection signal="drag_continue" from="." to="." method="_on_drag_continue"] [connection signal="toggled" from="btn_view" to="." method="on_button_view_toggled"] [connection signal="toggled" from="chk_auto" to="." method="on_value_changed"] -[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate_toggled"] [connection signal="toggled" from="btn_activate" to="." method="on_btn_activate"] +[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate_toggled"] [connection signal="toggled" from="btn_center" to="." method="on_btn_center_toggled"] [connection signal="button_down" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_down"] -[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_button_up"] [connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_up"] +[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_button_up"] [connection signal="button_down" from="zoom_minus" to="tilemap" method="_on_zoom_minus_button_down"] [connection signal="button_up" from="zoom_minus" to="tilemap" method="_on_zoom_button_up"] [connection signal="pressed" from="btn_all_work" to="." method="_on_btn_all_work_pressed"] From 2a29e4bd542ffcc430c252cce4e5879009829802 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 24 Oct 2025 16:05:42 +0300 Subject: [PATCH 12/13] =?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=92=D0=B0=D0=B6=D0=BD=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=8F=D1=81=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 | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3fc369d..31e07bf 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ - [Проброс последовательных портов через Ethernet](http://gitea.srez.local:3000/sasha80/uart-forwarder) - [Сборка Godot из исходников](http://gitea.srez.local:3000/sasha80/godot-build) - [Сервер карт](http://gitea.srez.local:3000/sasha80/map-tiles) +- [Генераторы PCM файлов для модулей ФС](http://gitea.srez.local:3000/danil_tim/Signals_to_the_MP-550) # Ссылки на имитаторы From 5991a079c797ce1bc4014b1550f6a082b1b135cc Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 24 Oct 2025 16:14:29 +0300 Subject: [PATCH 13/13] =?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=92=D0=B0=D0=B6=D0=BD=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=8F=D1=81=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 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 31e07bf..0389621 100644 --- a/README.md +++ b/README.md @@ -36,4 +36,4 @@ - После клонирования запустить скрипт `git-hooks-config.sh` - В среде **Windows** запуск скрипта `git-hooks-config.sh` производить из оболочки `git bash` -- Нужно обновить `settings.json` +- При необходимости обновить `settings.json`