From 33ee5bbf9677a1f33201079a156eae4f6ffa6315 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Mon, 17 Feb 2025 16:09:30 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0.=20=D0=A3=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F=D1=86?= =?UTF-8?q?=D0=B8=D0=B5=D0=B9=20=D1=83=D1=81=D0=B8=D0=BB=D0=B8=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D0=B9.=20=D0=9A=D0=BD=D0=BE=D0=BF=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D1=8F=D0=B5=D1=82=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=20=D0=BF=D0=BE=20=D1=83=D0=BC?= =?UTF-8?q?=D0=BE=D0=BB=D1=87=D0=B0=D0=BD=D0=B8=D1=8E=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=B2=D1=81=D0=B5=D1=85=20=D0=BF=D0=BE=D0=BC=D0=B5=D1=85.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/frame-ecm-list/frm-ecm-list.gd | 8 ++--- scenes/frame-ecm-params/scroll-ecm-params.gd | 8 ++++- scenes/работа/sld-mode.gd | 4 +-- scenes/работа/работа.gd | 9 +++-- scenes/работа/работа.tscn | 1 + scenes/эмс/yems-boards.gd | 24 +++++++++++++ scenes/эмс/yems-g.gd | 14 ++------ scripts/interfer.gd | 12 +++++-- scripts/prd.gd | 38 ++++++++++++++------ scripts/signaller.gd | 9 ++++- 10 files changed, 94 insertions(+), 33 deletions(-) diff --git a/scenes/frame-ecm-list/frm-ecm-list.gd b/scenes/frame-ecm-list/frm-ecm-list.gd index e77ccff9..0acfb097 100644 --- a/scenes/frame-ecm-list/frm-ecm-list.gd +++ b/scenes/frame-ecm-list/frm-ecm-list.gd @@ -34,10 +34,10 @@ func on_btn_pressed(btn_this, btn_others): signaller.emit_signal('interfer_off_all') signaller.emit_signal('rto_threat_unsel_all') if btn_this == $grd_forced/btn_panika: - signaller.emit_signal('interfer_prenuditelno', panika_sectors) + signaller.emit_signal('interfer_prinuditelno', panika_sectors) elif btn_this == $grd_forced/btn_jtids: - signaller.emit_signal('interfer_prenuditelno', jtids_sectors) + signaller.emit_signal('interfer_prinuditelno', jtids_sectors) elif btn_this == $grd_forced/btn_kupd: - signaller.emit_signal('interfer_prenuditelno', kupd_sectors) + signaller.emit_signal('interfer_prinuditelno', kupd_sectors) elif btn_this == $grd_forced/btn_srn: - signaller.emit_signal('interfer_prenuditelno', srn_sectors) + signaller.emit_signal('interfer_prinuditelno', srn_sectors) diff --git a/scenes/frame-ecm-params/scroll-ecm-params.gd b/scenes/frame-ecm-params/scroll-ecm-params.gd index 7aa48873..f98ed5a8 100644 --- a/scenes/frame-ecm-params/scroll-ecm-params.gd +++ b/scenes/frame-ecm-params/scroll-ecm-params.gd @@ -34,7 +34,7 @@ func init_table(): var node = $table.get_node2(1, p[0]) node.connect('text_submitted', Callable(self, 'on_edit_entry').bind(node)) $table.add_row(TABLE_TAGGLE_BTN) - $table.set_node_text(0, MOD_ROW_INDEX, 'Модуляция') + $table.set_node_text(0, MOD_ROW_INDEX, 'Подавление') $table.set_node_alligment(0, MOD_ROW_INDEX, HORIZONTAL_ALIGNMENT_LEFT) $table.set_node_editable(0, MOD_ROW_INDEX, false) var taggle_node = $table.get_node2(1, MOD_ROW_INDEX) @@ -52,6 +52,7 @@ func init_table(): $table.set_meta('id', 0) signaller.connect('interfer_selected', Callable(self, 'on_interfer_selected').bind(taggle_btn)) signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel')) + signaller.connect('emit_changed', Callable(self, 'on_emit_changed').bind(taggle_btn)) ## Called when the node enters the scene tree for the first time. @@ -120,3 +121,8 @@ func on_taggle_btn(taggle_btn): if not $table.has_meta('ecm'): return var ecm: interfer.Interfer = $table.get_meta('ecm') ecm.modulation = taggle_btn.button_pressed + + +func on_emit_changed(state, taggle_btn): + if not taggle_btn.disabled: + taggle_btn.button_pressed = state diff --git a/scenes/работа/sld-mode.gd b/scenes/работа/sld-mode.gd index ee7c61ea..d286cedd 100644 --- a/scenes/работа/sld-mode.gd +++ b/scenes/работа/sld-mode.gd @@ -5,7 +5,7 @@ const VAL_TO_EVENT = { 0: 'manual_control', 1: 'interfer_auto', 2: 'threat_auto' func _ready(): on_value_changed(0) - signaller.connect('interfer_prenuditelno', Callable(self, 'on_interfer_prenuditelno')) + signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno')) func on_value_changed(val): @@ -18,6 +18,6 @@ func on_value_changed(val): signaller.emit_signal(VAL_TO_EVENT[val]) -func on_interfer_prenuditelno(_interfer_sectors): +func on_interfer_prinuditelno(_interfer_sectors): self.set_value_no_signal(0) on_value_changed(0) diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 02e35568..5bef2f7a 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -103,6 +103,7 @@ func _ready(): max_zoom = ProjectSettings.get_setting('application/config/map_maximum_zoom', 19) drag_fsm = DragFSM.OFF var btns_select: Array = $btns_select.get_children() + $btn_activate.button_connect('pressed', Callable(self, 'on_btn_activate').bind($btn_activate)) btns_select.any(func(btn): btn.button_connect('pressed', Callable(self, 'on_button_select').bind(btn, btns_select))) $btn_view.button_connect('toggled', Callable(self, 'on_button_view_toggled')) var nodes: Array = get_tree().get_nodes_in_group('группа-режим-помехи') @@ -118,7 +119,7 @@ func _ready(): 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, 'on_interfer_off_all')) - signaller.connect('interfer_prenuditelno', Callable(self, 'on_interfer_prenuditelno').bind(nodes)) + signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno').bind(nodes)) signaller.connect('fs_selected', Callable(self, 'on_fs_selected')) signaller.connect('fs_update_color', Callable(self, 'on_fs_update_color')) interfer.connect('interfer_update', Callable(self, 'on_interfer_new')) @@ -462,7 +463,7 @@ func on_fs_update_color(ecms): update_fs_colors() -func on_interfer_prenuditelno (prenuditelno_sectors, btns): +func on_interfer_prinuditelno (prenuditelno_sectors, btns): for key in prenuditelno_sectors: var sectors = [] for sector in prenuditelno_sectors[key]: @@ -472,3 +473,7 @@ func on_interfer_prenuditelno (prenuditelno_sectors, btns): for btn in btns: btn.set_pressed(false) set_btns_disabled(true, btn) + + +func on_btn_activate(btn): + signaller.emit_signal('emit_changed', btn.is_pressed()) diff --git a/scenes/работа/работа.tscn b/scenes/работа/работа.tscn index ed58136c..42b57166 100644 --- a/scenes/работа/работа.tscn +++ b/scenes/работа/работа.tscn @@ -114,6 +114,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 strips_rotation = 15.0 text = "Подавление" +pressed = true toggle_mode = true [node name="bt_navig_u" type="TextureButton" parent="."] diff --git a/scenes/эмс/yems-boards.gd b/scenes/эмс/yems-boards.gd index e34cc910..d0c27bc7 100644 --- a/scenes/эмс/yems-boards.gd +++ b/scenes/эмс/yems-boards.gd @@ -4,6 +4,15 @@ class EmsBoard: enum {WAIT, WR_DEV_NUM_W, WRITE, WR_DEV_NUM_R, READ, READ_FLASH, WRITE_FLASH, WRITE_FLASH_BEGIN, LOAD_KEMS, WRITE_FLASH_END, LOAD_FAIL} ## Состояния платы + const modulation_dev: Dictionary = { ## Словарь соответствия диапазона номеру устройства + 0 : 50, + 1 : 51, + 2 : 52, + 3 : 51, + 4 : 52, + 5 : 51, + 6 : 52, } + var id_board: int ## id платы var in_devs: Dictionary ## Словарь с входными устройствами. var out_devs: Dictionary ## Словарь с выходными устройствами. @@ -26,6 +35,7 @@ class EmsBoard: var need_flash_wr: bool = false ## Флаг, что надо записать данные в флеш var need_write: bool = false ## Флаг, что надо записать данные в ячейку ЭМС var ems_g_fn: String = '' ## Имя файла настроек ЭМС-Г + var cmd_array: Array ## Очередь выполнения команд signal upd_delay_offset(board, cur_dev) ## Сигнал о обновлении данных задержек signal upd_o_state(board, cur_dev) ## Сигнал о обновлении данных режима выходов @@ -284,3 +294,17 @@ class EmsBoard: func set_load_done(): unit_ems.send_load_ems_done(unit_ems.CmdCode.LOAD_EMS_DONE) + + func execute_cmd(): + if len(cmd_array): + var cmd: Array = cmd_array.pop_front() + change_mode(cmd[0], cmd[1]) + + func add_cmd(band, mode_state): + var state = 2 + if mode_state: + state = 3 + cmd_array.append([modulation_dev[band], state]) + + func get_dev_mode(fs_index): + return out_devs[modulation_dev[fs_index/4]].mode diff --git a/scenes/эмс/yems-g.gd b/scenes/эмс/yems-g.gd index ade970dc..4dead059 100644 --- a/scenes/эмс/yems-g.gd +++ b/scenes/эмс/yems-g.gd @@ -1,15 +1,5 @@ extends Node -const modulation_dev: Dictionary = { - 0 : 50, - 1 : 51, - 2 : 52, - 3 : 51, - 4 : 52, - 5 : 51, - 6 : 52, -} - var ems_board: Dictionary = {} # Called when the node enters the scene tree for the first time. @@ -51,10 +41,12 @@ func on_data_ems_received(unit_ems, board): board.set_status(unit_ems.status) if board.state_board == board.WAIT and board.state_cmd == board.WAIT: if board.online: - if board.need_write: + if board.need_write and (not board.ems_load): start_load(board) elif not board.ems_load: board.set_load_done() + elif board.ems_load and len(board.cmd_array): + board.execute_cmd() else: board.need_write = true diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 36aa3c19..e298d406 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -35,7 +35,8 @@ var id_array: Array ## Массив id воздействий. var thrs: Dictionary ## Словарь воздействия для целей, ключ - id воздействия. var fs: Dictionary ## Словарь воздействий для секторов, ключ - id воздействия. var cu: Dictionary ## Словарь воздействий для 5П-28, ключ - id воздействия. -var auto_status: int = 0 # Статус скролла автомата +var auto_status: int = 0 ## Статус скролла автомата +var emit_enable: bool = true ## Разрешить излучение ## Сеанс помехи. class Interfer: @@ -117,7 +118,8 @@ func _ready(): signaller.connect('interfer_off', Callable(self, 'on_interfer_off')) signaller.connect('manual_control', Callable(self, 'on_manual_control')) signaller.connect('full_auto', Callable(self, 'on_full_auto')) - signaller.connect('interfer_prenuditelno', Callable(self, 'on_interfer_prenuditelno')) + signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno')) + signaller.connect('emit_changed', Callable(self, 'on_emit_changed').bind(ecms)) threats.connect('threat_lost', Callable(self, 'on_threats_lost').bind(ecms, unit)) @@ -263,6 +265,7 @@ func interfer_create(interfer_name, ecms, param, kni, id, dict, source_interfer) ecm.params = param ecm.powp = 100.0 # Необходимо добавить управление мощностью ecm.source_interfer = source_interfer + ecm.modulation = emit_enable signaller.emit_signal('interfer_new', ecm) if interfer_name == 'off': signaller.emit_signal('interfer_off', ecm, ecms, thrs) @@ -307,3 +310,8 @@ func push_id(id : int): ## Отправляет словарь помех в юнит, для запаковки и отправки в 5П28. func on_get_interfers(unit, ecms): unit.pack_interfers(cu, ecms) + +func on_emit_changed(state, ecms): + emit_enable = state + for ecm in ecms.values(): + ecm.modulation = state diff --git a/scripts/prd.gd b/scripts/prd.gd index c6a503fe..4328ada9 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -51,7 +51,7 @@ const prd_names: Array = [ 'уарэп-яу07-4в', 'уарэп-яу07-4к', ] -const fs_ampls: Dictionary = { +const fs_prd: Dictionary = { 0: ['уарэп-яу07-1к'], 1: ['уарэп-яу07-4к'], 2: ['уарэп-яу07-3к'], @@ -84,11 +84,13 @@ const fs_ampls: Dictionary = { var fs_dict: Dictionary var prd_dict: Dictionary -class FsAmpl: +class Fs: var index ## Индекс блока усилителей - var modulation: int ## Состояние модуляции + var modulation: bool ## Состояние модуляции var prd_name: String ## Ипя прибора ПРД в котором стоит модуль + signal update_modulation(index) + func _init(i, p_name): prd_name = p_name index = i @@ -108,6 +110,9 @@ class PRD: unit_yau07 = u yemsg_board = yems_board + func on_update_modulation(index): + yemsg_board.add_cmd(index/4, fs_dic[index].modulation) + func _ready() -> void: for prd_name in prd_names: @@ -118,11 +123,12 @@ func _ready() -> void: var yemsg_b = yemsg_board[0] var new_prd = PRD.new(prd_name, unit_prd, yemsg_b) prd_dict[prd_name] = new_prd - for key in fs_ampls.keys(): - var fs_ampl = FsAmpl.new(key, fs_ampls[key][0]) - fs_dict[key] = fs_ampl - if prd_dict.has(fs_ampl.prd_name): - prd_dict[fs_ampl.prd_name].fs_dic[key] = fs_ampl + for key in fs_prd.keys(): + var fs = Fs.new(key, fs_prd[key][0]) + fs_dict[key] = fs + if prd_dict.has(fs.prd_name): + prd_dict[fs.prd_name].fs_dic[key] = fs + fs.connect('update_modulation', prd_dict[fs.prd_name].on_update_modulation.bind(fs.index)) func get_fs_index(ecm, fs_index_arr): @@ -143,8 +149,20 @@ func get_fs_index(ecm, fs_index_arr): func update_fs_state(ecms): + for fs in fs_dict.values(): + fs.set_modulation(false) for ecm in ecms.values(): var fs_ids: Array get_fs_index(ecm, fs_ids) - - pass + for fs_index in fs_ids: + var fs = fs_dict[fs_index] + fs.set_modulation(ecm.modulation) + for prd_module in prd_dict.values(): + if not prd_module.unit_yau07.online: continue + for fs in prd_module.fs_dic.values(): + var dev_mode = prd_module.yemsg_board.get_dev_mode(fs.index) + var fs_state = 2 + if fs.modulation: + fs_state = 3 + if dev_mode != fs_state: + fs.emit_signal('update_modulation') diff --git a/scripts/signaller.gd b/scripts/signaller.gd index 955cb181..51fdd010 100644 --- a/scripts/signaller.gd +++ b/scripts/signaller.gd @@ -115,7 +115,7 @@ signal interfer_off_all() ## Вызывается при нажатии паника. -signal interfer_prenuditelno(interfer_sectors: Dictionary) +signal interfer_prinuditelno(interfer_sectors: Dictionary) ## Вызывается при получении внешнего целеуказания. @@ -151,8 +151,10 @@ signal th_aoa_update(threats: Dictionary) ## [param ecms] - <...> signal fs_update_color(ecms: Dictionary) + signal socket_error(error: String) + ## Вызывается при нажатии на кнопку экранной клавиатуры ## [param state] - состояние нажатого переключателя виртуальной клавиатуры астры signal kb_pressed(state) @@ -161,3 +163,8 @@ signal kb_pressed(state) ## Вызывается при нажатии на кнопку экранной клавиатуры ## [param state] - состояние скрытия кнопки ЭМС2 signal ems2_hide_pressed(state) + + +## Вызывается при нажатии на кнопку экранной клавиатуры +## [param state] - состояние скрытия кнопки ЭМС2 +signal emit_changed(state)