From 7ab8d73f034f69dc91cffab492726a48056b270f Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Wed, 22 Oct 2025 15:34:48 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0.=20=D0=93=D0=BE=D1=81.=20=D0=BE=D0=BF=D0=BE=D0=B7?= =?UTF-8?q?=D0=BD=D0=B0=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=BA=D0=BE=D0=BB=D0=BE=D0=B2.=20=D0=98=D1=81?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=B1=D0=BE=D1=80=D0=B0=20=D1=86=D0=B2=D0=B5=D1=82=D0=B0?= =?UTF-8?q?=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 4b79f252..7ada2449 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 cb6871f1..006c55c8 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 2ecfd554..8d0b4292 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 83de85c5..28f6dea5 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)