diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 81b942d6..54004de4 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -1,6 +1,6 @@ class_name Iterfer extends Node -const default_um: = 15.0 ## Угол места по умолчанию +const default_um: = 5.0 ## Угол места по умолчанию ## Представление помехи. @@ -94,7 +94,7 @@ const EXCLUDE_INTERFER = ['srni1', 'srnm2', 'srngps', 'svi1', 'svm2'] const ID_INTERFERS_LEN = 63 ## Размер пула номеров целей. const INTERFER_OFF = 'off' const INTERFER_IQFILE = 'IQ-файл' -const POW_DEFAULT: float = 50.0 +const POW_DEFAULT: float = 80.0 const PERIOD_DEFAULT = 7.5 const MIN_WIDTH_COEF = 1.0 const MIN_RESEND_TIMEOUT = 0.05 @@ -117,6 +117,8 @@ var fs_closed: Dictionary ## Словарь секторо var width_coef: float = 1.5 ## Коэффициент расширения полосы var now: = 0.0 ## Время с момента запуска var resend_timeout: float = 1.0 ## Время повторной отправки команды +var trim = 0.0 ## Килевая качка +var roll = 0.0 ## Бортовая качка signal send_ecms(time_now) ## Сигнал отправки помех, если настало время @@ -140,6 +142,9 @@ class Interfer: var priority: int = 0 ## Приоритет помехи var active: bool = false ## Флаг, что фиксируется мощность на выходном усилителе var freq_change = false ## Флаг, что частота изменнена пользователем + var bort = false ## Признак бортовая или килевая качка + var trim_roll = 0.0 ## Качка для конкретной помехи + var trim_roll_manual = false ## Флаг что ум задан оператором func _to_string() -> String: return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni] @@ -176,11 +181,25 @@ class Interfer: var param = self.get(value_key) if param == null: params[value_key] = value + elif value_key == 'um': + trim_roll_manual = true + params[value_key] = value + set_um() else: self.set(value_key, value) if value_key == 'freq': freq_change = true - + + func set_um(): + if not self.trim_roll_manual: + self.um = params.get('um', default_um) + self.trim_roll + else: + self.um = params.get('um', default_um) + if (self.um < settings.UM_MIN): + self.um = settings.UM_MIN + elif (self.um > settings.UM_MAX): + self.um = settings.UM_MAX + signal interfer_preparing(ecm: Interfer) ## Вызывается в момент запуска помехи. signal interfer_run(ecm: Interfer) ## Вызывается в момент начала работы помехи. signal interfer_error(ecm: Interfer, msg: String) ## Вызывается при ошибке. @@ -227,7 +246,7 @@ func _ready() -> void: threats.connect('threat_update', Callable(self, 'on_threats_update').bind(ecms)) ProjectSettings.connect('settings_changed', on_settings_changed) unit_nav = network.get_unit_instance('навигация') - unit_nav.connect('data_received', on_nav_data_received.bind(unit_caps)) + unit_nav.connect('data_received', on_nav_data_received.bind(unit_caps, ecms)) connect('send_ecms', Callable(self, 'on_send_ecms').bind(ecms, unit_caps)) call_deferred('emit_signal', 'interfer_resized', ecms) @@ -235,8 +254,9 @@ func _ready() -> void: func on_trenazh_mode(val: bool): trenazh_mode = val -func on_nav_data_received(coords: Dictionary, unit_caps): +func on_nav_data_received(coords: Dictionary, unit_caps, ecms): var ship_time = Time.get_datetime_dict_from_system() + var update_bk_kk = false course = coords.get('k', 0.0) var data_to_json = { 'ts': 8, @@ -254,9 +274,23 @@ func on_nav_data_received(coords: Dictionary, unit_caps): 'minute': ship_time['minute'], 'second': ship_time['second'],} var json_data = JSON.stringify(data_to_json).to_utf8_buffer() + if data_to_json['roll'] != roll: + roll = data_to_json['roll'] + update_bk_kk = true + if data_to_json['trim'] != trim: + trim = data_to_json['trim'] + update_bk_kk = true unit_caps.tx_stack.append(json_data) msg8_num += 1 msg8_num %= 0xffffffff + if update_bk_kk: + for ecm in ecms.values(): + if ecm.bort: + ecm.trim_roll = roll + else: + ecm.trim_roll = trim + ecm.set_um() + signaller.emit_signal('interfer_new', ecm) func on_th_aoa_update(threats: Dictionary, ecms: Dictionary) -> void: @@ -486,11 +520,12 @@ func interfer_create(_u, interfer_name, ecms, param, kni, id, dict, source_inter ecm.params = param ecm.powp = power ecm.source_interfer = source_interfer - ecm.um = param.get('um', default_um) # Значение по умолчанию if source_interfer == SOURCE_INTERFER[0]: if thrs_dict.has(dict[ispp]): ecm.priority = thrs_dict[dict[ispp]].priority call_ecm_proc(ecm) + set_bort(ecm) + ecm.set_um() var set_nmfs_ok = set_nmfs(ecm) if set_nmfs_ok != Error.OK: log.error('Ошибка выбора модуля ФС для помехи: %s' %[ecm.ispp]) @@ -737,3 +772,18 @@ func on_send_ecms(time_now, ecms, unit_caps): func _process(delta: float) -> void: now += delta emit_signal('send_ecms', now) + + +func set_bort(ecm: Interfer): + var sec = 0 + for sect in prd.FS_SECTORS.keys(): + if ecm.kni >= prd.FS_SECTORS[sect][0] and ecm.kni <= prd.FS_SECTORS[sect][1]: + sec = sect + if (sec == 0) or (sec == 2): + ecm.bort = false + else: + ecm.bort = true + if ecm.bort: + ecm.trim_roll = roll + else: + ecm.trim_roll = trim