diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 2a3306a5..7c9a60ce 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -125,6 +125,7 @@ class Interfer: var modulation: bool ## Модуляция для включения усилителей var um: float ## Угол места для помехи. var nmfs: int = 0 ## Номер модуля ФС в нумерации СТЦ + var priority: int = 0 ## Приоритет помехи func _to_string() -> String: return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni] @@ -366,6 +367,16 @@ 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: + if auto_enabled: + var need_continue = false + for ecm in ecms.values(): + if ecm.nmfs == item.nmfs: + if item.priority > ecm.priority: + interfer_off(ecm, u) + elif item.priority < ecm.priority: + need_continue = true + break + if need_continue: continue var param: Dictionary = {} var kni: float = item.aoa - course if kni < 0: @@ -461,6 +472,9 @@ func interfer_create(u, interfer_name, ecms, param, kni, id, dict, source_interf ecm.powp = power ecm.source_interfer = source_interfer ecm.um = param.get('um', 15.0) # Значение по умолчанию + if source_interfer == SOURCE_INTERFER[0]: + if thrs_dict.has(dict[ispp]): + ecm.priority = thrs_dict[dict[ispp]].priority call_ecm_proc(ecm) var set_nmfs_ok = set_nmfs(ecm) if set_nmfs_ok != Error.OK: @@ -563,6 +577,7 @@ func on_threats_update(threat, ecms, unit_caps): for ecm_i in thrs.keys(): if thrs[ecm_i] == th_id: ecm = ecms[ecm_i] + ecm.priority = threat.priority ecm.params['freq'] = threat.freq var width = threat.width * 1.5 if width < settings.WIDTH_MIN: diff --git a/scripts/threats.gd b/scripts/threats.gd index 5f39f51b..1070cd29 100644 --- a/scripts/threats.gd +++ b/scripts/threats.gd @@ -29,7 +29,8 @@ class Threat: var selected: bool ## Флаг, что цель выбрана. var auto_selected: bool = false ## Флаг автомата для целей var emit_state: int = 0 ## 0 - подавление не назначено, 1 - назначено, 2 - выполняется - var nmfs:int ## Индекс модуля ФС, в зону действия которого попала цель + var nmfs: int ## Индекс модуля ФС, в зону действия которого попала цель + var priority: int ## Приоритет опасности цели func _init(): clear_fflags() func _to_string() -> String: return 'номер: %d пеленг: %0.1f частота: %0.1f МГц' % [id, aoa, freq] @@ -142,6 +143,10 @@ func on_data_capsrpb_received(unit: capsrpb.CapsRpb, threats: Dictionary): th.clear_fflags() th.set_from_dic(dic_th) th.tick_rx = unit.tick + if th.fflags.proto and th.proto != '': + th.priority = 1 + else: + th.priority = 0 call_deferred('emit_signal', 'threat_update', th) else: var th: = Threat.new()