diff --git a/scenes/bip/bip.gd b/scenes/bip/bip.gd index 64a44568..0174251a 100644 --- a/scenes/bip/bip.gd +++ b/scenes/bip/bip.gd @@ -23,7 +23,7 @@ func _on_bip_gui_input(event): if event is InputEventMouseButton and event.pressed: match event.button_index: MOUSE_BUTTON_LEFT: - signaller.emit_signal('rto_threat_sel', name.to_int()) + signaller.emit_signal('bip_pressed', name.to_int()) MOUSE_BUTTON_RIGHT: if selected: signaller.emit_signal('rto_threat_unsel', name.to_int()) diff --git a/scenes/button-flat/nine-patch-button.gd b/scenes/button-flat/nine-patch-button.gd index 1e190074..4ff8c1d3 100644 --- a/scenes/button-flat/nine-patch-button.gd +++ b/scenes/button-flat/nine-patch-button.gd @@ -23,10 +23,9 @@ var save_modulate: Color $button.set_disabled(val) $back.disabled = val if val: - save_modulate = $state.modulate - $state.modulate *= Color(1.0, 1.0, 1.0, 0.5) + $state.modulate.a = 0.5 else: - $state.modulate = save_modulate + $state.modulate.a = 1.0 get: return $button.disabled diff --git a/scenes/frame-ecm-list/frm-ecm-list.tscn b/scenes/frame-ecm-list/frm-ecm-list.tscn index f9775f66..4c898328 100644 --- a/scenes/frame-ecm-list/frm-ecm-list.tscn +++ b/scenes/frame-ecm-list/frm-ecm-list.tscn @@ -63,7 +63,7 @@ editor_description = "Кнопка для принудительного вкл layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -text = "JTIDS" +text = "СПРС" metadata/rfi_name = "ozp1" [node name="btn_kupd" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")] diff --git a/scenes/frame-ecm-list/scroll-ecm-list.gd b/scenes/frame-ecm-list/scroll-ecm-list.gd index a417d708..f4737732 100644 --- a/scenes/frame-ecm-list/scroll-ecm-list.gd +++ b/scenes/frame-ecm-list/scroll-ecm-list.gd @@ -53,6 +53,8 @@ func on_row_pressed(i_row: int): if interfer.thrs.has(ecm.ispp): signaller.emit_signal('rto_threat_sel', interfer.thrs[ecm.ispp]) else: + if interfer.fs.has(ecm.ispp): + signaller.emit_signal('fs_selected', ecm) signaller.emit_signal('interfer_selected', ecm) diff --git a/scenes/frame-ecm-params/scroll-ecm-params.gd b/scenes/frame-ecm-params/scroll-ecm-params.gd index 1d7447dc..09fa2922 100644 --- a/scenes/frame-ecm-params/scroll-ecm-params.gd +++ b/scenes/frame-ecm-params/scroll-ecm-params.gd @@ -70,7 +70,7 @@ func on_interfer_selected(ecm): func on_ecm_update(): - for item in range(len(TABLE_PARAMS)): + for item in len(TABLE_PARAMS): $table.set_node_text(1, item, '') $table.set_node_editable(1, item, false) if $table.has_meta('ecm') == false: return diff --git a/scenes/frm_ecm_list.gd b/scenes/frm_ecm_list.gd deleted file mode 100644 index cf95ef28..00000000 --- a/scenes/frm_ecm_list.gd +++ /dev/null @@ -1,17 +0,0 @@ -extends NinePatchRect - - -# Called when the node enters the scene tree for the first time. -func _ready(): - $grd_forced/btn_cancel.button_connect('pressed', Callable(self, 'on_btn_cancel_pressed').bind($grd_forced/btn_cancel)) - - -func on_btn_cancel_pressed(btn): - signaller.emit_signal('interfer_off_all') - await get_tree().create_timer(0.1).timeout - btn.pressed = false - - -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta): - pass diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 7b88d116..035650da 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -21,28 +21,22 @@ extends Panel @export var window_0_id: int ## Идетификатор окна. Присваивается godot от 0 до количества созданных окон -var drag_button: MouseButton ## Кнопка мыши нажатая при перетаскивании -var drag_fsm: DragFSM = DragFSM.IDLE ## Текущее состояние перетаскивания -var drag_pos_begin: Vector2 ## Точка начала перетаскивания -var max_zoom: int ## Максимальный уровень детализации -var min_zoom: int ## Минимальный уровень детализации -var shift_pressed: bool ## Кнопка SHIFT нажата -var strob_band_begin: float ## Ширина строба в момент начала перетаскивания -var strob_dir_begin: float ## Направление антенны в момент начала перетаскивания -var strob_width_begin: float ## Ширина строба по углу в момент начала перетаскивания +var drag_button: MouseButton ## Кнопка мыши нажатая при перетаскивании +var drag_fsm: DragFSM = DragFSM.IDLE ## Текущее состояние перетаскивания +var btn_select: BtnSel = BtnSel.THREAT ## Текущее состояние кнопки выбора цели +var drag_pos_begin: Vector2 ## Точка начала перетаскивания +var max_zoom: int ## Максимальный уровень детализации +var min_zoom: int ## Минимальный уровень детализации +var shift_pressed: bool ## Кнопка SHIFT нажата +var strob_band_begin: float ## Ширина строба в момент начала перетаскивания +var strob_dir_begin: float ## Направление антенны в момент начала перетаскивания +var strob_width_begin: float ## Ширина строба по углу в момент начала перетаскивания signal drag_begin ## Вызывается в момент начала перетаскивания signal drag_continue ## Вызывается во время продолжения перетаскивания signal drag_end ## Вызывается в момент завершения перетаскивания -## Границы секторов блоков ФС по пеленгу -const fs_sectors: Dictionary = { - 0: [0.0, 90.0], - 3: [90.0, 180.0], - 2: [180.0, 270.0], - 1: [270.0, 360.0] } - ## Границы секторов блоков ФС по частоте в режиме РТО const fs_band_rto: Dictionary = { 0: [200.0, 250.0], @@ -63,6 +57,12 @@ const fs_band_rls: Dictionary = { 5: [530.0, 540.0], 6: [540.0, 550.0] } +## Границы секторов блоков ФС по пеленгу +const fs_sectors: Dictionary = { + 0: [0.0, 90.0], + 3: [90.0, 180.0], + 2: [180.0, 270.0], + 1: [270.0, 360.0] } const fs_freq: Dictionary = { 0: [400.0, 1200.0], @@ -73,12 +73,10 @@ const fs_freq: Dictionary = { 5: [4400.0, 5200.0], 6: [5200.0, 6000.0] } - var fs_band = fs_band_rto # Текущий режим блоков ФС по частоте var fs_default_colors: Array # Цвета по умолчанию для блоков ФС -var fs_colors: Array # Текущие цвета блоков ФС -var fs_selected: Array # Массив выбранных секторов -var th_selected: bool = false # Флаг, того, что выбрана цель. +var fs_selected: Dictionary # Словарь выбранных секторов +var fs_active: Dictionary # Словарь секторов назначенных на подавление ## Состояние перетаскивания enum DragFSM { @@ -87,6 +85,12 @@ enum DragFSM { OFF ## Выключено } +## Состояние перетаскивания +enum BtnSel { + SECTOR, ## В процессе + THREAT, ## Не активно, ожидание + FS ## Выключено + } ## Обработчик сигнала изменения списка целей func on_threats_resized(threats: Dictionary): $count_all_pad/count_all.text = '%02d' % threats.size() @@ -139,11 +143,13 @@ func _ready(): threats.connect('threat_update', Callable(self, 'on_threat_update')) signaller.connect('zoom_complete', Callable(self, '_on_zoom_complete')) signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind(nodes)) + signaller.connect('bip_pressed', Callable(self, 'on_bip_pressed').bind(nodes)) signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel').bind(nodes)) signaller.connect('threat_selected', Callable(self, 'on_threat_selected').bind(nodes)) signaller.connect('interfer_selected', Callable(self, 'on_interfer_selected').bind(nodes)) signaller.connect('interfer_new', Callable(self, 'on_interfer_new')) - signaller.connect('interfer_off_all', Callable(self, 'interfer_off_all')) + signaller.connect('interfer_off_all', Callable(self, 'on_interfer_off_all')) + signaller.connect('fs_selected', Callable(self, 'on_fs_selected')) interfer.connect('interfer_update', Callable(self, 'on_interfer_new')) @@ -174,25 +180,28 @@ func on_threat_update(th): ## Обработчик выбора помехи для цели func on_interfer_new(ecm): if interfer.thrs.has(ecm.ispp): - var th_id = interfer.thrs[ecm.ispp] - var bip = get_node('%d' % th_id) - if ecm.krp != interfer.INTERFER_OFF: - bip.set_track_visible(true) - if ecm.svk == 1: - bip.set_ecm_visible(true) - else: bip.set_ecm_visible(false) - else: - bip.set_ecm_visible(false) - bip.set_track_visible(false) + if interfer.thrs.has(ecm.ispp): + var th_id = interfer.thrs[ecm.ispp] + var bip = get_node('%d' % th_id) + if ecm.krp != interfer.INTERFER_OFF: + bip.set_track_visible(true) + if ecm.svk == 1: + bip.set_ecm_visible(true) + else: bip.set_ecm_visible(false) + else: + bip.set_ecm_visible(false) + bip.set_track_visible(false) set_fs_color(ecm) ## Обработчик выключения всех помех -func interfer_off_all(): +func on_interfer_off_all(): var bips: Array = get_children().filter(func(item): return item.name.is_valid_int()) for bip in bips: bip.set_ecm_visible(false) bip.set_track_visible(false) + fs_active.clear() + update_fs_colors() ## Обработчик сигнала обнаружения цели @@ -210,31 +219,33 @@ func on_threat_lost(th) -> void: bip.free() +## обработчик нажатия на цель на экране +func on_bip_pressed(th_id, _ecm_btns): + if btn_select == BtnSel.THREAT: + signaller.emit_signal('rto_threat_sel', th_id) + + ## Обработчик выбора РТО цели func on_rto_threat_sel(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(true) + unsel_fs_all(false) else: item.set_sel_visible(false) for btn in ecm_btns: btn.set_disabled(false) - th_selected = true - await get_tree().create_timer(0.2).timeout - th_selected = false ## Обработчик снятия выбора РТО цели -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 - for btn in ecm_btns: - btn.set_pressed(false) - btn.set_disabled(true) + set_ecm_btns_state(true) ## Обработчик нажатия кнопки "Строб". Управляет отображением строба @@ -246,13 +257,20 @@ func on_button_strobe_pressed() -> void: ## Поведение радиокнопок в группе. Управляет состоянием кнопок выбора целей func on_button_select(btn_this, btn_others) -> void: for btn_other in btn_others: btn_other.set_pressed(btn_this == btn_other) + btn_select = btn_this.get_meta('state') on_button_strobe_pressed() + signaller.emit_signal('rto_threat_unsel_all') + unsel_fs_all(true) + set_ecm_btns_state(true) ## Поведение радиокнопок в группе. Управляет состоянием кнопок в радиогруппе func on_button_pressed(btn_this, btn_others) -> void: + var fs_arr: Array = [] for btn_other in btn_others: btn_other.set_pressed(btn_this == btn_other) - signaller.emit_signal('interfer_init', btn_this) + for key in fs_selected.keys(): + fs_arr.append(get_fs_param(key)) + signaller.emit_signal('interfer_init', btn_this, fs_arr) ## Управляет состоянием кнопок в радиогруппе при выборе помехи @@ -329,7 +347,7 @@ func _input(event) -> void: drag_fsm = DragFSM.DRAG emit_signal('drag_begin', event) else: - if (event.button_index == MOUSE_BUTTON_LEFT) and (not $btns_select/btn_strob.pressed): + if btn_select == BtnSel.FS: sel_fs_sector(event) drag_fsm = DragFSM.IDLE emit_signal('drag_end', event) @@ -351,40 +369,7 @@ func _on_zoom_complete(zoom: int) -> void: var prefix = $btn_zoom.get_meta('prefix') $btn_zoom/lbl.text = '%s %d' % [prefix, zoom] $btn_zoom.set_meta('zoom', zoom) - -# Обработчик нажатия по сектору формирователя сигналов -func sel_fs_sector(event): - var center: Vector2 = $tilemap.position - var center_offset: Vector2 = ProjectSettings.get_setting('application/interfer/center_offset', Vector2i(0, 25)) - var angle: float = event.position.angle_to_point(center + center_offset) * 180/PI - 45.0 - if angle < 0: - angle +=360 - var distance: float = event.position.distance_to(center + center_offset) - var sector: int - var band: int - var has_band: bool = false - for sec in fs_sectors.values(): - if angle >= sec[0] and angle <= sec[1]: - sector = fs_sectors.find_key(sec) - for diap in fs_band.values(): - if distance >= diap[0] and distance <= diap[1]: - band = fs_band.find_key(diap) - has_band = true - if not has_band: - return - var fs_index = band * 4 + sector - var select_color: Vector3 = ProjectSettings.get_setting('application/interfer/select_color', Vector3(1.0, 1.0, 1.0)) - if not th_selected: - if len(fs_selected) > 0: - for fs_sector in fs_selected: - fs_colors[fs_sector[0]] = fs_sector[1] - fs_selected.clear() - fs_selected.append([fs_index, fs_colors[fs_index]]) - fs_colors[fs_index] = select_color - $canvas.set_band_colors(fs_colors) - signaller.emit_signal('rto_threat_unsel_all') - ## Закрашивание по умолчанию блоков ФС цветами из настроек func set_def_colors(): @@ -397,12 +382,92 @@ func set_def_colors(): fs_default_colors.append(col_arr[int(col)]) col = not col col = not col - fs_colors = fs_default_colors $canvas.set_band_colors(fs_default_colors) +# Обработчик нажатия по сектору формирователя сигналов +func sel_fs_sector(event): + if (event.button_index == MOUSE_BUTTON_LEFT) or (event.button_index == MOUSE_BUTTON_RIGHT): + var center: Vector2 = $tilemap.position + var center_offset: Vector2 = ProjectSettings.get_setting('application/interfer/center_offset', Vector2i(0, 25)) + var angle: float = event.position.angle_to_point(center + center_offset) * 180/PI - 45.0 + if angle < 0: + angle +=360 + var distance: float = event.position.distance_to(center + center_offset) + var sector: int + var band: int + var has_band: bool = false + for sec in fs_sectors.values(): + if angle >= sec[0] and angle <= sec[1]: + sector = fs_sectors.find_key(sec) + for diap in fs_band.values(): + if distance >= diap[0] and distance <= diap[1]: + band = fs_band.find_key(diap) + has_band = true + if not has_band: + return + var fs_index = band * 4 + sector + if event.button_index == MOUSE_BUTTON_LEFT: + fs_selected[fs_index] = null + else: + fs_selected.erase(fs_index) + update_fs_colors() + signaller.emit_signal('rto_threat_unsel_all') + var btn_state = len(fs_selected) == 0 + set_ecm_btns_state(btn_state) + + func set_fs_color(ecm): + var fs_index = get_fs_index(ecm) + if ecm.krp != interfer.INTERFER_OFF: + fs_active[fs_index] = null + else: + fs_active.erase(fs_index) + update_fs_colors() + + +func update_fs_colors(): + var fs_colors = fs_default_colors.duplicate() var color_ecm: Vector3 = ProjectSettings.get_setting('application/interfer/interfer_color', Vector3(0.58, 0.47, 0.51)) + var color_select: Vector3 = ProjectSettings.get_setting('application/interfer/select_color', Vector3(1.0, 1.0, 1.0)) + for key in fs_active.keys(): + fs_colors[key] = color_ecm + for key in fs_selected.keys(): + fs_colors[key] = color_select + $canvas.set_band_colors(fs_colors) + + +func unsel_fs_all(need_btns_off: bool): + fs_selected.clear() + update_fs_colors() + if need_btns_off: + set_ecm_btns_state(true) + + +func set_ecm_btns_state(value: bool): + var btns: Array = get_tree().get_nodes_in_group('группа-режим-помехи') + for btn in btns: + btn.set_pressed(false) + btn.set_disabled(value) + + +func get_fs_param(index: int) -> Array: + var freq = (fs_freq[index / 4][0] + fs_freq[index / 4][1])/2 + var sector = (fs_sectors[index % 4][0] + fs_sectors[index % 4][1])/2 - 45.0 + if sector < 0: + sector += 360.0 + var width = fs_freq[index / 4][1] - fs_freq[index / 4][0] + return [sector, freq, width, index] + + +func on_fs_selected(ecm): + var fs_index = get_fs_index(ecm) + fs_selected.clear() + fs_selected[fs_index] = null + update_fs_colors() + + +func get_fs_index(ecm): var sector: int var band: int var angle: float = ecm.kni + 45.0 @@ -416,10 +481,4 @@ func set_fs_color(ecm): if ecm.params['freq'] >= diap[0] and ecm.params['freq'] <= diap[1]: band = fs_freq.find_key(diap) var fs_index = band * 4 + sector - var fs_is_selected: bool = false - for item in fs_selected: - if fs_index == item[0]: - fs_is_selected = true - if not fs_is_selected: - fs_colors[fs_index] = color_ecm - $canvas.set_band_colors(fs_colors) + return fs_index diff --git a/scenes/работа/работа.tscn b/scenes/работа/работа.tscn index 6f0cccc5..0b335d29 100644 --- a/scenes/работа/работа.tscn +++ b/scenes/работа/работа.tscn @@ -137,6 +137,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" text = "Строб" +metadata/state = 0 [node name="btn_threats" parent="btns_select" instance=ExtResource("8_k0iv2")] layout_mode = 2 @@ -144,6 +145,8 @@ size_flags_horizontal = 3 size_flags_vertical = 3 tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" text = "Цель" +pressed = true +metadata/state = 1 [node name="btn_fs_sector" parent="btns_select" instance=ExtResource("8_k0iv2")] layout_mode = 2 @@ -151,6 +154,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" text = "Сектор" +metadata/state = 2 [connection signal="drag_begin" from="." to="." method="_on_drag_begin"] [connection signal="drag_continue" from="." to="." method="_on_drag_continue"] diff --git a/scripts/interfer.gd b/scripts/interfer.gd index ede10998..da8addb4 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -2,7 +2,6 @@ extends Node ## Представление помехи - ## Режимы помехи const ITERFER_MODE = { 'off': ['Откл', ['freq', 'width']], @@ -20,26 +19,29 @@ const ITERFER_MODE = { 'k1': ['K1', ['freq', 'width', 'dur', 'period']], 'ozp1': ['ОЗП-1', ['freq', 'width']] } +const TYPE_TH = ['th','fs'] const ID_INTERFERS_LEN = 63 ## Размер пула номеров целей const INTERFER_OFF = 'off' const STATE_TSMT = 5 ## Значение svk для цели, когда ответ ещё не получен var msg_ss: int = 0 ## счётчик сообщений var id_array: Array ## Массив id воздействий var thrs: Dictionary ## Словарь воздействия для целей, ключ - id воздействия +var fs: Dictionary ## Словарь воздействий для секторов, ключ - id воздействия ## Сеанс помехи class Interfer: - var ss: int = 0 ## Счётчик сообщений. - var ispp: int = 0 ## Индекс сеанса. - var svk: = 0 ## Состояние сеанса. Ответ КАПСРПБ. Возможные значения в [param ITERFER_STATE]. - var krp: String = '' ## Тип помехи. Возможные значения в [param INTERFER_MODE]. - var powp: float = 0.0 ## Мощность излучения выраженная в процентах. - var kni: = 0.0 ## Курсовой угол направления излучения. - var params: = {} ## Параметры помехи. - var get_params: Array[String] ## Запрос массива параметров (список запрошенных параметров). - var retss: int ## Значение счётчика сообщения в котором был произведён запрос массива параметров. - var tick_tx: int ## Тик время обновления цели, мс. + var ss: int = 0 ## Счётчик сообщений. + var ispp: int = 0 ## Индекс сеанса. + var svk: = 0 ## Состояние сеанса. Ответ КАПСРПБ. Возможные значения в [param ITERFER_STATE]. + var krp: String = '' ## Тип помехи. Возможные значения в [param INTERFER_MODE]. + var powp: float = 0.0 ## Мощность излучения выраженная в процентах. + var kni: = 0.0 ## Курсовой угол направления излучения. + var params: = {} ## Параметры помехи. + var get_params: Array[String] ## Запрос массива параметров (список запрошенных параметров). + var retss: int ## Значение счётчика сообщения в котором был произведён запрос массива параметров. + var tick_tx: int ## Тик время обновления цели, мс. + var type_th: String = '' ## Тип объекта по которой поставлена помеха func _to_string() -> String: return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni] @@ -138,46 +140,60 @@ func on_data_capsrpb_received(unit: capsrpb.CapsRpb, ecms: Dictionary): ## Вызыватся, когда пользователь выбрал помеху и выбраны цели -func on_interfer_create(btn, sel_threats, unit, ecms): +func on_interfer_create(btn, sel_threats, fs_arr, _unit, ecms): for item in sel_threats: - var ispp: int = 0 - var interfer_name: String = btn.get_meta('rfi_name') var param: Dictionary = {} var kni: float = item.aoa + var id = item.id param['freq'] = item.freq param['width'] = item.width - if interfer_name == 'k1': - param['dur'] = 1.0 # Необходимо добавить параметры управления - param['period'] = 1.0 # Необходимо добавить параметры управления - var key = thrs.find_key(item.id) - if key != null: - ispp = key - else: - if interfer_name == 'off': - return - ispp = pop_id() - if ispp == 0: return - msg_ss += 1 - var ecm: Interfer - if ecms.has(ispp): - ecm = ecms[ispp] - else: - ecm = Interfer.new() - ecm.ispp = ispp - ecms[ispp] = ecm - ecm.svk = STATE_TSMT # Подготовка к передаче сообщения - ecm.ss = msg_ss - ecm.kni = kni - ecm.krp = interfer_name - ecm.params = param - ecm.powp = 100.0 # Необходимо добавить управление мощностью - thrs[ispp] = item.id - signaller.emit_signal('interfer_new', ecm) + interfer_create(btn, ecms, param, kni, id, thrs, item, TYPE_TH[0]) + + for item in fs_arr: + var param: Dictionary = {} + var kni: float = item[0] + var id = item[3] + param['freq'] = item[1] + param['width'] = item[2] + interfer_create(btn, ecms, param, kni, id, fs, item, TYPE_TH[1]) + + +func interfer_create(btn, ecms, param, kni, id, dict, item, type_th): + var ispp: int = 0 + var interfer_name: String = btn.get_meta('rfi_name') + if interfer_name == 'k1': + param['dur'] = 1.0 # Необходимо добавить параметры управления + param['period'] = 1.0 # Необходимо добавить параметры управления + var key = dict.find_key(id) + if key != null: + ispp = key + else: if interfer_name == 'off': - signaller.emit_signal('interfer_off', ecm, ecms, thrs) - push_id(ecm.ispp) - thrs.erase(ispp) - ecm.tick_tx = Time.get_ticks_msec() + return + ispp = pop_id() + if ispp == 0: return + dict[ispp] = id + msg_ss += 1 + var ecm: Interfer + if ecms.has(ispp): + ecm = ecms[ispp] + else: + ecm = Interfer.new() + ecm.ispp = ispp + ecms[ispp] = ecm + ecm.svk = STATE_TSMT # Подготовка к передаче сообщения + ecm.ss = msg_ss + ecm.kni = kni + ecm.krp = interfer_name + ecm.params = param + ecm.powp = 100.0 # Необходимо добавить управление мощностью + ecm.type_th = type_th + signaller.emit_signal('interfer_new', ecm) + if interfer_name == 'off': + signaller.emit_signal('interfer_off', ecm, ecms, thrs) + push_id(ecm.ispp) + thrs.erase(ispp) + ecm.tick_tx = Time.get_ticks_msec() func send_ecm(ecm, unit): diff --git a/scripts/signaller.gd b/scripts/signaller.gd index 27cffad9..93dace7e 100644 --- a/scripts/signaller.gd +++ b/scripts/signaller.gd @@ -27,6 +27,11 @@ signal full_screen(id: int) signal rto_threat_sel (th_id: int) +## Вызывается, когда пользователь нажимает на значёк цели +## [param th_id] - Отметка цели на экране +signal bip_pressed (th_id: int) + + ## Вызывается, когда пользователь снимает выделение с цели ## [param th_id] - Отметка цели на экране signal rto_threat_unsel (th_id: int) @@ -38,13 +43,13 @@ signal rto_threat_unsel_all () ## Вызывается, когда пользователь выбирает помеху ## [param btn] - Нажатая кнопка помехи. -signal interfer_init (btn: PanelContainer) +signal interfer_init (btn: PanelContainer, fs_arr: Array) ## Вызывается, когда выбраны цели для постановки помех ## [param btn] - Нажатая кнопка помехи.[br] ## [param sel_threats] - Cписок целей. -signal interfer_create (btn: PanelContainer, sel_threats: Array) +signal interfer_create (btn: PanelContainer, sel_threats: Array, fs_arr: Array) ## Вызывается, когда создалась новая помеха @@ -67,6 +72,11 @@ signal interfer_off_all () signal interfer_selected (ecm: interfer.Interfer) +## Вызывается, когда отключается выбираем помеху по сектору в таблице +## [param ecm] - Выбранная помеха +signal fs_selected(ecm: interfer.Interfer) + + ## Вызывается при запросе изменения уровня детализации карты ## [param zoom] - Вновь установленный уровень детализации signal zoom_changed(zoom: int) diff --git a/scripts/threats.gd b/scripts/threats.gd index 98ce1832..cb4f4ca5 100644 --- a/scripts/threats.gd +++ b/scripts/threats.gd @@ -93,13 +93,13 @@ func on_threat_selected(th, threats): ## Формирует список выбранных целей для включения помехи -func on_interfer_init(btn, threats): +func on_interfer_init(btn, fs_arr, threats): var sel_threats: Array = [] for threat in threats.values(): if threat.selected: sel_threats.append(threat) - if len(sel_threats): - signaller.emit_signal('interfer_create', btn, sel_threats) + if len(sel_threats) or (len(fs_arr)): + signaller.emit_signal('interfer_create', btn, sel_threats, fs_arr) ## Производит приём целей