From 64d0580a3ec1087b9cfe8baa5135a76a3421f81c Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Fri, 5 Sep 2025 13:57:21 +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=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B8=D0=BC=D0=B5=D0=BD=D0=B8=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D0=B0,=20=D0=B8=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=BE=D1=82=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=BC=D0=B5=D1=85?= =?UTF-8?q?=D0=B8.=20=D0=9F=D0=BE=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BF=D0=BE=D0=BC=D0=B5=D1=85=D0=B8=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=86=D0=B5=D0=BB=D1=8C,=20=D0=B5=D1=81=D0=BB=D0=B8?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=B1=D1=80=D0=B0=D1=82=D1=8C=20=D1=81=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D1=80=20=D1=81=20=D1=86=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D1=8E.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/работа/работа.tscn | 2 +- scripts/interfer.gd | 73 +++++++++++++++++++++++++++++---------- scripts/prd.gd | 4 +-- 3 files changed, 57 insertions(+), 22 deletions(-) diff --git a/scenes/работа/работа.tscn b/scenes/работа/работа.tscn index 6d64518..64b1bbd 100644 --- a/scenes/работа/работа.tscn +++ b/scenes/работа/работа.tscn @@ -305,6 +305,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/scripts/interfer.gd b/scripts/interfer.gd index a9e7689..2b6b311 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -4,7 +4,7 @@ class_name Iterfer extends Node ## Режимы помехи. const ITERFER_MODE = { - INTERFER_OFF: ['Откл', {}, 0], + INTERFER_OFF: [INTERFER_OFF, {}, 0], 'srni1': ['ПСП + ФМ-2', SRNI1_PARAMS, 1], 'srnm2': ['Линейная ЧМ', SRNM2_PARAMS, 2], 'srngps': [INTERFER_IQFILE, SRNGPS_PARAMS, 3], @@ -39,9 +39,6 @@ const PDM4_PARAMS = {'par_names' : ['freq', 'filename'], const PDM4S_PARAMS = {'par_names' : ['freq', 'filename'], 'files': 'PDM4S_5.pcm', 'call_proc': 'call_all_diap'} -const PDCHM_PARAMS = {'par_names' : ['freq', 'filename'], - 'files': 'FM_5.pcm', - 'call_proc': 'call_all_diap'} const K1_PARAMS = {'files' : 'K1.pcm', 'call_proc' : 'call_all_diap', 'par_names' : ['freq', 'filename']} @@ -58,15 +55,17 @@ const SVM2_PARAMS = {'files': {1: ['SVM2_LIT2.pcm', 1017], 'call_proc': 'call_diap', 'par_names' : ['freq', 'filename']} -# Файл : Ключ: ['имя файла', ширина, использовать 2 ЛЧМ] -const PD_CHM = {'files': { - 5 : ['1 FM 5', 5, false], - 11: ['1 FM 10', 10, false], - 12: ['2 FM 20', 10, true], - 20: ['2 FM 40', 20, false] }, - 'call_proc': 'call_pd_chm'} +# Файл : Ключ (ширина): ['имя файла'] +const PDCHM_PARAMS = {'files': { + 5 : 'pdchm_5.pcm', + 10: 'pdchm__0.pcm', + 20: 'pdchm_20.pcm', + 40: 'pdchm_40.pcm' }, + 'call_proc': 'call_pdchm', + 'par_names' : ['freq', 'filename'],} const SOURCE_INTERFER = ['th','fs','cu'] +const EXCLUDE_INTERFER = ['srni1', 'srnm2', 'srngps', 'svi1', 'svm2'] const ID_INTERFERS_LEN = 63 ## Размер пула номеров целей. const INTERFER_OFF = 'off' const INTERFER_IQFILE = 'IQ-файл' @@ -279,14 +278,24 @@ func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> v var param: Dictionary = {} var kni: float = item[0] var id = item[3] - param['freq'] = item[1] - param['width'] = item[2] + var th = null + if not interfer_name in EXCLUDE_INTERFER: + th = find_threat(item[1], kni) + if th != null: + param['freq'] = th.freq + param['width'] = th.width + else: + param['freq'] = item[1] + param['width'] = item[2] if (param['width'] < settings.WIDTH_MIN): param['width'] = settings.WIDTH_MIN elif (param['width'] > settings.WIDTH_MAX): param['width'] = settings.WIDTH_MAX - interfer_create(u, interfer_name, ecms, param, kni, id, fs, SOURCE_INTERFER[1], power) - + if th == null: + interfer_create(u, interfer_name, ecms, param, kni, id, fs, SOURCE_INTERFER[1], power) + else: + id = th.id + interfer_create(u, interfer_name, ecms, param, kni, id, thrs, SOURCE_INTERFER[0], power) func on_interfer_rcv(interfer_params: Array, unit0, ecms) -> void: var err: bool = false @@ -426,6 +435,17 @@ func call_diap(ecm, ecm_params: Dictionary): ecm.params['freq'] = ecm_params['files'][band][1] +func call_pdchm(ecm, ecm_params: Dictionary): + var temp_key: float = settings.WIDTH_MIN + for key in ecm_params['files'].keys(): + if key > temp_key: temp_key = key + for key in ecm_params['files'].keys(): + if key < ecm.params['width']: continue + if key < temp_key: + temp_key = key + ecm.params['filename'] = ecm_params['files'][int(temp_key)] + + func set_nmfs(ecm): var fs_index_arr: Array prd.get_fs_index(ecm, fs_index_arr) @@ -448,6 +468,7 @@ func on_threats_update(threat, ecms, unit_caps): ecm = ecms[ecm_i] ecm.params['freq'] = threat.freq ecm.kni = threat.aoa + set_nmfs(ecm) if threat.tmod != 'fm': if ecm != null: send_ecm(ecm, unit_caps) @@ -477,12 +498,10 @@ func on_threats_update(threat, ecms, unit_caps): th_fm_dict[th_index] = thrs_dict[th_index] if len(th_fm_dict) > 1: pass - send_ecm(ecm, unit_caps) func get_freq_range(freq_range_dict: Dictionary, th_dict: Dictionary): - var min_range_abs: int = 6000 for key_i in th_dict: var min_range: int = 6000 var key_min = null @@ -493,10 +512,26 @@ func get_freq_range(freq_range_dict: Dictionary, th_dict: Dictionary): if freq_range < min_range: key_min = key_j min_range = freq_range - if min_range > PD_CHM['files'][20][1]: + var max_width = 0 + for key in PDCHM_PARAMS['files'].keys(): + if max_width < key: max_width = key + if min_range > max_width: th_dict.erase(key_i) continue else: if key_min == null: continue freq_range_dict[key_i] = [th_dict[key_i], th_dict[key_min], min_range] - if min_range < min_range_abs: min_range_abs = min_range + + +func find_threat(freq: int, aoa: float): + var fs_index_arr = [] + prd.find_fs_index(aoa, freq, fs_index_arr) + if not fs_index_arr.size(): return null + var fs_index = fs_index_arr[0] + for th in thrs_dict.values(): + fs_index_arr = [] + prd.find_fs_index(th.aoa, th.freq, fs_index_arr) + if not fs_index_arr.size(): continue + if fs_index_arr[0] == fs_index: + return th + return null diff --git a/scripts/prd.gd b/scripts/prd.gd index ebc97a3..30cfe54 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -296,7 +296,7 @@ func get_fs_param(index: int) -> Array: ## Функция возвращает массив с индексами модулей ФС для выбранной помехи func get_fs_index(ecm, fs_index_arr): - var angle: float = ecm.kni + 45.0 + var angle: float = ecm.kni if ecm.params.has('freq'): find_fs_index(angle, ecm.params['freq'], fs_index_arr) @@ -304,7 +304,7 @@ func get_fs_index(ecm, fs_index_arr): func find_fs_index(aoa: float, freq: int, fs_index_arr: Array): var sector: int var band: Array - var angle = aoa + var angle = aoa + 45.0 if angle > 360.0: angle -= 360.0 for sec in FS_SECTORS.values():