diff --git a/scenes/frame-ecm-list/scroll-ecm-list.gd b/scenes/frame-ecm-list/scroll-ecm-list.gd index 733550e9..e0f42344 100644 --- a/scenes/frame-ecm-list/scroll-ecm-list.gd +++ b/scenes/frame-ecm-list/scroll-ecm-list.gd @@ -151,7 +151,10 @@ func map_th_to_row(ecm) -> Array: row[COLUMN_NAME] = '' if INTERFER_NAMES.has(ecm.krp): row[COLUMN_NAME] = '%s' % INTERFER_NAMES[ecm.krp] - row[COLUMN_AOA] = '%s' % (ecm.kni + course) + var aoa = ecm.kni + course + if aoa > 360.0: + aoa -= 360.0 + row[COLUMN_AOA] = '%5.1f' % aoa row[COLUMN_STATE] = '' if INTERFER_STATE.has(ecm.svk): row[COLUMN_STATE] = '%s' % INTERFER_STATE[ecm.svk] diff --git a/scenes/grid-buttons-ecm/grid-buttons-ecm.tscn b/scenes/grid-buttons-ecm/grid-buttons-ecm.tscn index b9efbe39..a1b2522a 100644 --- a/scenes/grid-buttons-ecm/grid-buttons-ecm.tscn +++ b/scenes/grid-buttons-ecm/grid-buttons-ecm.tscn @@ -149,5 +149,4 @@ size_flags_vertical = 3 strips_rotation = 30.0 text = "ЕПРЛС" disabled = true -font_size = 1 metadata/rfi_name = "eprls" diff --git a/scenes/tilemap/tilemap.gd b/scenes/tilemap/tilemap.gd index a3f4137c..d546a2f8 100644 --- a/scenes/tilemap/tilemap.gd +++ b/scenes/tilemap/tilemap.gd @@ -381,7 +381,7 @@ func _process(delta) -> void: func _response(result, code, _headers: Array, body: PackedByteArray, req, tile: Tile) -> void: - + var unit_instance = network.get_unit_instance('уарэп-карта') _req_count -= 1 remove_child(req) req.queue_free() @@ -405,7 +405,6 @@ func _response(result, code, _headers: Array, body: PackedByteArray, req, tile: push_error('не удалось получить изображение (неверный формат?) из \"%s\"' % tile.url) return - var unit_instance = network.get_unit_instance('уарэп-карта') unit_instance.rx_tick = Time.get_ticks_msec() if not unit_instance.online: unit_instance.online = true diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 86c3cdbc..fa4950da 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -30,6 +30,7 @@ var strob_band_begin: float ## Ширина строба в моме var strob_dir_begin: float ## Направление антенны в момент начала перетаскивания. var strob_width_begin: float ## Ширина строба по углу в момент начала перетаскивания. var view_mode: MapViewMode ## Режим отображения карты +var thrs_dict: Dictionary ## Ссылка на словарь целей var color_ecm: Color var color_select: Color @@ -93,6 +94,7 @@ func on_threats_resized(ths: Dictionary): $count_all_pad/count_all.text = '%02d' % ths.size() var c: int = ths.values().filter(func(th: threats.Threat): return th.proto != '').size() $count_danger_pad/count_danger.text = '%02d' % c + thrs_dict = ths ## Обработчик нажатия на кнопку вид. @@ -287,18 +289,27 @@ func on_rto_threat_sel(th_id, ecm_btns): unsel_fs_all(false) else: item.set_sel_visible(false) + var th = thrs_dict[th_id] + var krp = interfer.get_krp(th) for btn in 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 + else: + btn.modulate = Color(1.0, 1.0, 1.0, 1.0) ## Обработчик снятия выбора РТО цели. -func on_rto_threat_unsel(th_id, _ecm_btns): +func on_rto_threat_unsel(th_id, ecm_btns): var bips: Array = get_children().filter(func(item): return item.name.is_valid_int()) for item in bips: if th_id == item.name.to_int(): item.set_sel_visible(false) break set_ecm_btns_state(true) + for btn in ecm_btns: + btn.modulate = Color(1.0, 1.0, 1.0, 1.0) ## Обработчик нажатия кнопки "Строб". Управляет отображением строба. diff --git a/scripts/interfer.gd b/scripts/interfer.gd index e8c08f0a..ee76a19c 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -39,15 +39,27 @@ const LCHM2_PARAMS = {'par_names' : ['freq', 'width', 'period']} const MCHM1_PARAMS = {'par_names' : ['freq', 'filename'], 'files': 'MCHM1.pcm', 'call_proc': 'call_all_diap'} -const PDM2_PARAMS = {'par_names' : ['freq', 'filename'], - 'files': 'PDM2_20.pcm', - 'call_proc': 'call_all_diap'} -const PDM4_PARAMS = {'par_names' : ['freq', 'filename'], - 'files': 'PDM4_20.pcm', - 'call_proc': 'call_all_diap'} -const PDM4S_PARAMS = {'par_names' : ['freq', 'filename'], - 'files': 'PDM4S_5.pcm', - 'call_proc': 'call_all_diap'} +const PDM2_PARAMS = {'files': { + 20 : 'PDM2_20.pcm', + 40: 'PDM2_40.pcm', + 88: 'PDM2_88.pcm', + 112: 'PDM2_112.pcm' }, + 'call_proc': 'call_pdchm', + 'par_names' : ['freq', 'filename'],} +const PDM4_PARAMS = {'files': { + 20 : 'PDM4_20.pcm', + 40: 'PDM4_40.pcm', + 84: 'PDM4_84.pcm', + 108: 'PDM4_108.pcm' }, + 'call_proc': 'call_pdchm', + 'par_names' : ['freq', 'filename'],} +const PDM4S_PARAMS = {'files': { + 5 : 'PDM4S_5.pcm', + 7 : 'PDM4S_10.pcm', + 10: 'PDM4S_2_5.pcm', + 20: 'PDM4S_10.pcm' }, + 'call_proc': 'call_pdchm', + 'par_names' : ['freq', 'filename'],} const K1_PARAMS = {'files' : 'K1.pcm', 'call_proc' : 'call_all_diap', 'par_names' : ['freq', 'filename']} @@ -68,10 +80,10 @@ const EPRLS_PARAMS = {'files' : 'ERLS.pcm', 'par_names' : ['freq', 'filename']} # Файл : Ключ (ширина): ['имя файла'] const PDCHM_PARAMS = {'files': { - 5 : 'pdchm_5.pcm', - 10: 'pdchm__0.pcm', - 20: 'pdchm_20.pcm', - 40: 'pdchm_40.pcm' }, + 5 : 'PDCHM_5.pcm', + 10: 'PDCHM_10.pcm', + 20: 'PDCHM_20.pcm', + 40: 'PDCHM_40.pcm' }, 'call_proc': 'call_pdchm', 'par_names' : ['freq', 'filename'],} @@ -91,6 +103,7 @@ var thrs_dict: Dictionary ## Ссылка на словарь целей var auto_enabled: bool = false ## Режим автомата var emit_enable: bool = true ## Разрешить излучение var trenazh_mode: bool = false ## Переключение режима Тренаж +var course = 0.0 ## Курс корабля ## Сеанс помехи. class Interfer: @@ -182,7 +195,7 @@ func _ready() -> void: unit_5p28.connect('get_interfers', Callable(self, 'on_get_interfers').bind(unit_5p28, ecms)) signaller.connect('interfer_create', Callable(self, 'on_interfer_create').bind(unit_caps, ecms)) signaller.connect('interfer_rcv', Callable(self, 'on_interfer_rcv').bind(unit_5p28, ecms)) - signaller.connect('interfer_new', Callable(self, 'send_ecm').bind(unit_caps)) + signaller.connect('interfer_new', Callable(self, 'on_interfer_new').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').bind(ecms)) @@ -203,6 +216,7 @@ func on_trenazh_mode(val: bool): trenazh_mode = val func on_nav_data_received(coords: Dictionary, unit_caps): var ship_time = Time.get_datetime_dict_from_system() + course = coords.get('k', 0.0) var data_to_json = { 'ts': 8, 'ss': msg8_num, @@ -240,7 +254,9 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit_instance) -> v if thrs[ecm_i] == th_id: var ecm = ecms[ecm_i] ecm.params['freq'] = thr.freq - ecm.kni = thr.aoa + ecm.kni = thr.aoa - course + if ecm.kni < 0: + ecm.kni += 360 send_ecm(ecm, unit_instance) signaller.emit_signal('fs_update_color', ecms) prd.update_fs_state(ecms, trenazh_mode) @@ -304,7 +320,9 @@ func map_mpchf_to_seczaps(unit_instance: unit.Unit, seczaps: Dictionary): func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> void: for item in sel_threats: var param: Dictionary = {} - var kni: float = item.aoa + var kni: float = item.aoa - course + if kni < 0: + kni += 360.0 var id = item.id param['freq'] = item.freq param['width'] = item.width @@ -323,38 +341,22 @@ 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] - var th = null - th = find_threat(item[1], kni) - if th != null: - if not interfer_name in EXCLUDE_INTERFER: - param['freq'] = th.freq - param['width'] = th.width - else: - param['freq'] = item[1] - param['width'] = item[2] - if (th.rkrp != '') and th.fflags.rkrp and auto_enabled: - var krp = get_krp(th) - if krp != '': - interfer_name = krp - set_rparams(th, param) - else: - param['freq'] = item[1] - param['width'] = item[2] + 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 - 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) + interfer_create(u, interfer_name, ecms, param, kni, id, fs, SOURCE_INTERFER[1], power) + func on_interfer_rcv(interfer_params: Array, unit0, ecms) -> void: var err: bool = false var mode = interfer_params[0] var id = interfer_params[1] - var aoa = interfer_params[2] + var aoa = interfer_params[2] - course + if aoa < 0: + aoa += 360 var um = interfer_params[3] if (aoa < 0.0) and (aoa > 360.0): err = true @@ -527,7 +529,9 @@ func on_threats_update(threat, ecms, unit_caps): ecm.krp = krp set_rparams(threat, ecm.params) emit_signal('interfer_recommendate', ecm) - ecm.kni = threat.aoa + ecm.kni = threat.aoa - course + if ecm.kni < 0: + ecm.kni += 360 set_nmfs(ecm) if threat.tmod != 'fm': if ecm != null: @@ -637,3 +641,11 @@ func on_interfer_off(ecm: Interfer, ecms): interfer.push_id(ecm.ispp) if sz != ecms.size(): interfer.call_deferred('emit_signal', 'interfer_resized', ecms) + + +func on_interfer_new(ecm, unit_caps): + 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) diff --git a/scripts/prd.gd b/scripts/prd.gd index 91f78de0..0ff163e3 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -33,8 +33,8 @@ const FS_FREQ: Dictionary = { 0: [390.0, 510.0, 450.0], 1: [800.0, 1065.0, 932.0], 2: [1065.0, 1210.0, 1137.0], - 3: [1150.0, 1280.0, 1215.0], - 4: [1490.0, 2000.0, 1575.0], + 3: [1150.0, 1380.0, 1215.0], + 4: [1380.0, 2000.0, 1575.0], 5: [2000.0, 3500.0, 2750.0], 6: [3500.0, 6000.0, 4750.0] } @@ -86,7 +86,7 @@ const FS_PRD: Dictionary = { var fs_dict: Dictionary ## Словарь с модулями ФС var prd_dict: Dictionary ## Словарь с приборами ПРД -var course = 0.0 ## Курс корабля +var course = 0.0 ## Курс корабля var fs_caps_id: Dictionary ## Словарь соответствия номеров ФС от КАПС РПБ внутрипрограммной нумерации diff --git a/scripts/settings.gd b/scripts/settings.gd index 93270847..0628fcd8 100644 --- a/scripts/settings.gd +++ b/scripts/settings.gd @@ -50,7 +50,7 @@ var UnitProfiles: Dictionary[StringName, Array] = { \ const FREQ_MAX: = 6000.0 const FREQ_MIN: = 400.0 -const WIDTH_MAX: = 100.0 +const WIDTH_MAX: = 120.0 const WIDTH_MIN: = 0.0 const DUR_MAX: = 1000000.0 const PERIOD_MAX: = 1000000.0