diff --git a/scenes/button-flat/button-flat.tscn b/scenes/button-flat/button-flat.tscn index 6fe161c8..b5e777f7 100644 --- a/scenes/button-flat/button-flat.tscn +++ b/scenes/button-flat/button-flat.tscn @@ -56,6 +56,7 @@ 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") @@ -79,6 +80,7 @@ axis_stretch_vertical = 2 layout_mode = 2 theme_override_colors/font_outline_color = Color(0, 0, 0, 1) theme_override_constants/outline_size = 4 +theme_override_font_sizes/font_size = 15 theme_override_styles/focus = SubResource("4") theme_override_styles/disabled = SubResource("5") theme_override_styles/hover = SubResource("2") diff --git a/scenes/button-flat/nine-patch-button.gd b/scenes/button-flat/nine-patch-button.gd index 7e2e61d0..f18ef37e 100644 --- a/scenes/button-flat/nine-patch-button.gd +++ b/scenes/button-flat/nine-patch-button.gd @@ -59,6 +59,11 @@ var _pressed: = false $button.set_toggle_mode(val) +@export var font_size: int = true: + set(val): + $button.add_theme_font_size_override('theme_override_font_sizes/font_size', val) + + func set_pressed(val: bool): pressed = val diff --git a/scenes/frame-ecm-list/frm-ecm-list.tscn b/scenes/frame-ecm-list/frm-ecm-list.tscn index e0086614..b1c524e6 100644 --- a/scenes/frame-ecm-list/frm-ecm-list.tscn +++ b/scenes/frame-ecm-list/frm-ecm-list.tscn @@ -57,6 +57,7 @@ size_flags_vertical = 3 tooltip_text = "Включает принудительную помеху" strips_rotation = 15.0 text = "СРН" +font_size = null metadata/rfi_name = "srn" [node name="btn_jtids" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")] @@ -66,6 +67,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 strips_rotation = 15.0 text = "СПРС" +font_size = null metadata/rfi_name = "sprs" [node name="btn_kupd" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")] @@ -75,6 +77,7 @@ size_flags_vertical = 3 tooltip_text = "Кнопка для принудительного включения группы секторов в режим КУПД" strips_rotation = 15.0 text = "КУПД" +font_size = null metadata/rfi_name = "kupd" [node name="btn_panika" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")] @@ -84,6 +87,7 @@ size_flags_vertical = 3 tooltip_text = "Кнопка для принудительного включения группы секторов в режим КУПД" strips_rotation = 15.0 text = "Паника" +font_size = null metadata/rfi_name = "" [node name="btn_cancel" parent="grd_forced" groups=["прин-секторы-срн"] instance=ExtResource("4_7ys3c")] @@ -92,4 +96,5 @@ size_flags_horizontal = 3 size_flags_vertical = 3 strips_rotation = 15.0 text = "Очистить" +font_size = null metadata/rfi_name = "" diff --git a/scenes/frame-ecm-list/scroll-ecm-list.gd b/scenes/frame-ecm-list/scroll-ecm-list.gd index 7acaa671..eb3beee7 100644 --- a/scenes/frame-ecm-list/scroll-ecm-list.gd +++ b/scenes/frame-ecm-list/scroll-ecm-list.gd @@ -36,7 +36,8 @@ const INTERFER_NAMES = { 'svi1': 'СВ-И1', 'k1': 'K1', 'svm2': 'СВ-М2', - 'ozp1': 'ОЗП-1'} + 'ozp1': 'ОЗП-1', + 'eprls': 'ЕПРЛС',} ## Индексы колонок @@ -84,6 +85,7 @@ func _ready(): signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel')) signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind(table_index)) interfer.connect('interfer_update', Callable(self, 'on_interfer_update').bind(table_index)) + interfer.connect('interfer_recommendate', Callable(self, 'on_interfer_recommendate')) $table.connect('row_pressed', Callable(self, 'on_row_pressed')) call_deferred('init_table') @@ -120,21 +122,13 @@ func on_interfer_new(ecm, table_index): signaller.emit_signal('interfer_selected', ecm) -func on_interfer_off(ecm, ecms, thrs, table_index): - var sz = ecms.size() +func on_interfer_off(ecm, table_index): $table.remove_row(table_index[ecm.ispp]) rehash(table_index) - ecms.erase(ecm.ispp) - thrs.erase(ecm.ispp) - interfer.cu.erase(ecm.ispp) - interfer.fs.erase(ecm.ispp) - interfer.push_id(ecm.ispp) var sel_rows: Array $table.get_selected_rows(sel_rows) if not len(sel_rows): signaller.emit_signal('interfer_selected', null) - if sz != ecms.size(): - interfer.call_deferred('emit_signal', 'interfer_resized', ecms) ## Перестраивает индекс таблицы. Вызывать при удалении строки @@ -159,3 +153,13 @@ func map_th_to_row(ecm) -> Array: if INTERFER_STATE.has(ecm.svk): row[COLUMN_STATE] = '%s' % INTERFER_STATE[ecm.svk] return row + + +func on_interfer_recommendate(ecm): + var sel_rows: Array + $table.get_selected_rows(sel_rows) + if not len(sel_rows): return + var row = sel_rows[0] + var sel_ecm = $table.get_node_user_data(0, sel_rows[0]) + if ecm == sel_ecm: + signaller.emit_signal('interfer_selected', ecm) diff --git a/scenes/grid-buttons-ecm/grid-buttons-ecm.tscn b/scenes/grid-buttons-ecm/grid-buttons-ecm.tscn index 3c28e215..ddad15be 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 @@ -14,6 +14,7 @@ size_flags_vertical = 3 strips_rotation = 30.0 text = "Откл." disabled = true +font_size = 1 metadata/rfi_name = "off" [node name="btn_p12" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] @@ -23,6 +24,7 @@ size_flags_vertical = 3 strips_rotation = 30.0 text = "МЧМ-1" disabled = true +font_size = 1 metadata/rfi_name = "mchm1" [node name="btn_p16" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] @@ -32,6 +34,7 @@ size_flags_vertical = 3 strips_rotation = 30.0 text = "СРН-И1" disabled = true +font_size = 1 metadata/rfi_name = "srni1" [node name="btn_p15" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] @@ -41,6 +44,7 @@ size_flags_vertical = 3 strips_rotation = 30.0 text = "СРН-М2" disabled = true +font_size = 1 metadata/rfi_name = "srnm2" [node name="btn_p18" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] @@ -50,6 +54,7 @@ size_flags_vertical = 3 strips_rotation = 30.0 text = "СРН-GPS" disabled = true +font_size = 1 metadata/rfi_name = "srngps" [node name="btn_p14" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] @@ -59,6 +64,7 @@ size_flags_vertical = 3 strips_rotation = 30.0 text = "ПД-М4" disabled = true +font_size = 1 metadata/rfi_name = "pdm4" [node name="btn_p13" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] @@ -68,6 +74,7 @@ size_flags_vertical = 3 strips_rotation = 30.0 text = "ПД-М2" disabled = true +font_size = 1 metadata/rfi_name = "pdm2" [node name="btn_p11" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] @@ -77,6 +84,7 @@ size_flags_vertical = 3 strips_rotation = 30.0 text = "ЛЧМ-1" disabled = true +font_size = 1 metadata/rfi_name = "lchm1" [node name="btn_p17" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] @@ -86,6 +94,7 @@ size_flags_vertical = 3 strips_rotation = 30.0 text = "ЛЧМ-2" disabled = true +font_size = 1 metadata/rfi_name = "lchm2" [node name="btn_p10" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] @@ -95,6 +104,7 @@ size_flags_vertical = 3 strips_rotation = 30.0 text = "ПД-М4С" disabled = true +font_size = 1 metadata/rfi_name = "pdm4s" [node name="btn_p9" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] @@ -104,6 +114,7 @@ size_flags_vertical = 3 strips_rotation = 30.0 text = "ПД-ЧМ" disabled = true +font_size = 1 metadata/rfi_name = "pdchm" [node name="btn_p8" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] @@ -113,6 +124,7 @@ size_flags_vertical = 3 strips_rotation = 30.0 text = "СВ-И1" disabled = true +font_size = 1 metadata/rfi_name = "svi1" [node name="btn_p7" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] @@ -122,6 +134,7 @@ size_flags_vertical = 3 strips_rotation = 30.0 text = "K1" disabled = true +font_size = 1 metadata/rfi_name = "k1" [node name="btn_p6" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] @@ -131,6 +144,7 @@ size_flags_vertical = 3 strips_rotation = 30.0 text = "СВ-М2" disabled = true +font_size = 1 metadata/rfi_name = "svm2" [node name="btn_p5" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] @@ -140,4 +154,15 @@ size_flags_vertical = 3 strips_rotation = 30.0 text = "ОЗП-1" disabled = true +font_size = 1 metadata/rfi_name = "ozp1" + +[node name="btn_p19" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +strips_rotation = 30.0 +text = "ЕПРЛС" +disabled = true +font_size = 1 +metadata/rfi_name = "eprls" diff --git a/scenes/журнал/журнал.gd b/scenes/журнал/журнал.gd index dc5ab850..401ad0d8 100644 --- a/scenes/журнал/журнал.gd +++ b/scenes/журнал/журнал.gd @@ -5,7 +5,7 @@ func on_line_changed(unit_inst): log.message(Logger.INFO, '\"%s\" изменен func on_command_fail(unit_inst): log.message(Logger.ERROR, '\"%s\" команда не выполнена' % unit_inst.name) func on_threats_changed(th: Object, msg: String): log.message(Logger.INFO, '%s: %s' % [msg, th.to_string()]) func on_parse_error(unit_inst, msg: String): log.message(Logger.ERROR, '%s: %s' % [unit_inst.name, msg]) -func on_interfer_off(ecm, _ecms, _thrs,msg: String): log.message(Logger.INFO, '%s: %s' % [msg, ecm.to_string()]) +func on_interfer_off(ecm, msg: String): log.message(Logger.INFO, '%s: %s' % [msg, ecm.to_string()]) func on_set_program_mode(msg: String): log.message(Logger.INFO, msg) func on_interfer_new(ecm, msg: String): diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 242edf4b..9f46f221 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -229,13 +229,6 @@ func on_interfer_off_all(): update_fs_colors() -func on_interfer_off(ecm_id): - fs_active.erase(ecm_id) - fs_selected.erase(ecm_id) - fs_active.clear() - update_fs_colors() - - ## Обработчик сигнала обнаружения цели. func on_threat_new(th) -> void: var bip = Bip.instantiate() diff --git a/scenes/работа/работа.tscn b/scenes/работа/работа.tscn index 6d645182..9e1abc88 100644 --- a/scenes/работа/работа.tscn +++ b/scenes/работа/работа.tscn @@ -174,6 +174,7 @@ size_flags_vertical = 3 tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" strips_rotation = 25.0 text = "Строб" +font_size = null metadata/state = 0 [node name="btn_threats" parent="btns_select" groups=["группа-режим-выбора"] instance=ExtResource("8_k0iv2")] @@ -183,6 +184,7 @@ size_flags_vertical = 3 tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" strips_rotation = 25.0 text = "Цель" +font_size = null metadata/state = 1 [node name="btn_fs_sector" parent="btns_select" groups=["группа-режим-выбора"] instance=ExtResource("8_k0iv2")] @@ -192,6 +194,7 @@ size_flags_vertical = 3 tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" strips_rotation = 25.0 text = "Сектор" +font_size = null metadata/state = 2 [node name="chk_auto" type="CheckBox" parent="."] diff --git a/scenes/эмс/эмс.tscn b/scenes/эмс/эмс.tscn index 32717b0e..9198fcfc 100644 --- a/scenes/эмс/эмс.tscn +++ b/scenes/эмс/эмс.tscn @@ -81,6 +81,7 @@ offset_right = 1583.0 offset_bottom = 85.0 strips_rotation = 10.0 text = "Прочитать" +font_size = null [node name="btn_flash_write" parent="." instance=ExtResource("2_eju8r")] layout_mode = 0 @@ -90,6 +91,7 @@ offset_right = 1583.0 offset_bottom = 129.0 strips_rotation = 10.0 text = "Записать" +font_size = null [node name="btn_save" type="Button" parent="."] layout_mode = 0 diff --git a/scripts/interfer.gd b/scripts/interfer.gd index b7d68810..37cd4b81 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -18,7 +18,13 @@ const ITERFER_MODE = { 'svi1': [INTERFER_IQFILE, SVI1_PARAMS, 20], 'svm2': [INTERFER_IQFILE, SVM2_PARAMS, 21], 'k1': [INTERFER_IQFILE, K1_PARAMS, 50], - 'ozp1': [INTERFER_IQFILE, OZP1_PARAMS, 51] } + 'ozp1': [INTERFER_IQFILE, OZP1_PARAMS, 51], + 'eprls': [INTERFER_IQFILE, EPRLS_PARAMS, 52], } + +const RECOMMEND_INTERFER = { + 'ПСП + ФМ-2': 'srni1', + 'Линейная ЧМ': 'lchm1' +} const SRNI1_PARAMS = {'par_names' : ['freq', 'width']} const SRNM2_PARAMS = {'par_names' : ['freq', 'width', 'period']} @@ -54,7 +60,9 @@ const SVM2_PARAMS = {'files': {1: ['SVM2_LIT2.pcm', 1017], 2: ['SVM2_LIT3.pcm', 1156]}, 'call_proc': 'call_diap', 'par_names' : ['freq', 'filename']} - +const EPRLS_PARAMS = {'files' : 'ERLS.pcm', + 'call_proc' : 'call_all_diap', + 'par_names' : ['freq', 'filename']} # Файл : Ключ (ширина): ['имя файла'] const PDCHM_PARAMS = {'files': { 5 : 'pdchm_5.pcm', @@ -139,6 +147,7 @@ signal interfer_run(ecm: Interfer) ## Вызывается в м signal interfer_error(ecm: Interfer, msg: String) ## Вызывается при ошибке. signal interfer_update(ecm: Interfer) ## Вызывается при обновлении помехи. signal interfer_resized(ecms: Dictionary) ## Вызывается при изменении количества сеансов помех. +signal interfer_recommendate(ecm: Interfer) ## Вызывается когда назначается рекомендуемая для цели помеха ## Отправляет словарь помех в юнит, для запаковки и отправки в 5П28. @@ -171,7 +180,7 @@ func _ready() -> void: signaller.connect('interfer_new', Callable(self, 'send_ecm').bind(unit_caps)) signaller.connect('interfer_off_all', Callable(self, 'on_interfer_off_all').bind(unit_caps, ecms)) signaller.connect('th_aoa_update', Callable(self, 'on_th_aoa_update').bind(ecms, unit_caps)) - signaller.connect('interfer_off', Callable(self, 'on_interfer_off')) + signaller.connect('interfer_off', Callable(self, 'on_interfer_off').bind(ecms)) signaller.connect('manual_control', Callable(self, 'on_manual_control')) signaller.connect('full_auto', Callable(self, 'on_full_auto')) signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno')) @@ -265,17 +274,23 @@ func on_data_capsrpb_received(unit0: capsrpb.CapsRpb, ecms: Dictionary) -> void: ## Вызыватся, когда пользователь выбрал помеху и выбраны цели. func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> void: + var ecm_name = interfer_name for item in sel_threats: var param: Dictionary = {} var kni: float = item.aoa var id = item.id param['freq'] = item.freq param['width'] = item.width + if (item.rkrp != '') and item.fflags.rkrp: + var krp = get_krp(item) + if krp != '': + ecm_name = krp + set_rparams(item, param) 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, thrs, SOURCE_INTERFER[0], power) + interfer_create(u, ecm_name, ecms, param, kni, id, thrs, SOURCE_INTERFER[0], power) for item in fs_arr: var param: Dictionary = {} @@ -287,6 +302,11 @@ func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> v if th != null: param['freq'] = th.freq param['width'] = th.width + if (th.rkrp != '') and th.fflags.rkrp: + var krp = get_krp(th) + if krp != '': + ecm_name = krp + set_rparams(th, param) else: param['freq'] = item[1] param['width'] = item[2] @@ -295,10 +315,10 @@ func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> v elif (param['width'] > settings.WIDTH_MAX): param['width'] = settings.WIDTH_MAX if th == null: - interfer_create(u, interfer_name, ecms, param, kni, id, fs, SOURCE_INTERFER[1], power) + interfer_create(u, ecm_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) + interfer_create(u, ecm_name, ecms, param, kni, id, thrs, SOURCE_INTERFER[0], power) func on_interfer_rcv(interfer_params: Array, unit0, ecms) -> void: var err: bool = false @@ -371,7 +391,7 @@ func interfer_create(u, interfer_name, ecms, param, kni, id, dict, source_interf log.error('Ошибка выбора модуля ФС для помехи: %s' %[ecm.ispp]) signaller.emit_signal('interfer_new', ecm) if interfer_name == 'off': - signaller.emit_signal('interfer_off', ecm, ecms, thrs) + signaller.emit_signal('interfer_off', ecm) thrs.erase(ispp) ecm.tick_tx = Time.get_ticks_msec() send_ecm(ecm, u) @@ -394,7 +414,7 @@ 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, ecms, thrs) + signaller.emit_signal('interfer_off', ecm) func on_threats_lost(th, ecms, unit0) -> void: @@ -404,7 +424,7 @@ func on_threats_lost(th, ecms, unit0) -> void: var ecm = ecms[ecm_id] ecm.krp = INTERFER_OFF send_ecm(ecm, unit0) - signaller.emit_signal('interfer_off', ecm, ecms, thrs) + signaller.emit_signal('interfer_off', ecm) func pop_id() -> int: @@ -470,6 +490,13 @@ func on_threats_update(threat, ecms, unit_caps): if thrs[ecm_i] == th_id: ecm = ecms[ecm_i] ecm.params['freq'] = threat.freq + ecm.params['width'] = threat.width + if (threat.rkrp != '') and threat.fflags.rkrp: + var krp = get_krp(threat) + if krp != '': + ecm.krp = krp + set_rparams(threat, ecm.params) + emit_signal('interfer_recommendate', ecm) ecm.kni = threat.aoa set_nmfs(ecm) if threat.tmod != 'fm': @@ -538,3 +565,45 @@ func find_threat(freq: int, aoa: float): if fs_index_arr[0] == fs_index: return th return null + + +func set_rparams(threat: threats.Threat, params: Dictionary): + if threat.rparams.has('freq'): + params['freq'] = threat.rparams['freq'] + else: + params['freq'] = threat.freq + if threat.rparams.has('period'): + params['period'] = threat.rparams['period'] + if threat.rparams.has('width'): + params['width'] = threat.rparams['width'] + else: + params['width'] = threat.width + if threat.rparams.has('filename'): + params['filename'] = threat.rparams['filename'] + + +func get_krp(threat: threats.Threat): + var krp = '' + if RECOMMEND_INTERFER.has(threat.rkrp): + krp = RECOMMEND_INTERFER[threat.rkrp] + return krp + elif threat.rkrp == INTERFER_IQFILE: + if not threat.rparams.has('filename'): return krp + for key in ITERFER_MODE.keys(): + var ecm_params = ITERFER_MODE[key][1] + if not ecm_params.has('files'): continue + if ecm_params['files'] == threat.rparams['filename']: + krp = key + return krp + return krp + + +func on_interfer_off(ecm: Interfer, ecms): + var sz = ecms.size() + ecms.erase(ecm.ispp) + thrs.erase(ecm.ispp) + interfer.cu.erase(ecm.ispp) + interfer.fs.erase(ecm.ispp) + interfer.push_id(ecm.ispp) + if sz != ecms.size(): + interfer.call_deferred('emit_signal', 'interfer_resized', ecms) diff --git a/scripts/signaller.gd b/scripts/signaller.gd index d96201fd..9e2a7c34 100644 --- a/scripts/signaller.gd +++ b/scripts/signaller.gd @@ -107,7 +107,7 @@ signal interfer_new(ecm: interfer.Interfer) ## [param ecm] - Новая помеха.[br] ## [param ecms] - словарь помех.[br] ## [param thrs] - словарь id помех и связанных с ними целей.[br] -signal interfer_off(ecm: interfer.Interfer, ecms: Dictionary, thrs: Dictionary) +signal interfer_off(ecm: interfer.Interfer) ## Вызывается при нажатии отключить. diff --git a/scripts/threats.gd b/scripts/threats.gd index 93d34b33..11775bcd 100644 --- a/scripts/threats.gd +++ b/scripts/threats.gd @@ -18,7 +18,7 @@ class Threat: var power: float ## Уровень принимаемого сигнала, дБм. var proto: String ## Тип протокола источника сигнала. var rkrp: String ## Рекомендуемый режим помехи. - var rparams: String ## Рекомендуемые параметры помехи. + var rparams: Dictionary ## Рекомендуемые параметры помехи. var salt: float ## Координаты старта, высота от уровня моря, м. var slat: float ## Координаты старта, широта в градусах. var slon: float ## Координаты старта, долгота в градусах.