From c1762514d63decdad381760d8f76237718b289d7 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 4 Dec 2025 14:41:26 +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=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D1=87=D0=B8=D0=BA=D0=B0=D0=BC=D0=B8=20=D1=81=D0=BE=D0=B1=D1=8B?= =?UTF-8?q?=D1=82=D0=B8=D0=B9=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B5=D0=B6?= =?UTF-8?q?=D0=B8=D0=BC=D0=B0=20=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/работа/работа.gd | 105 ++++++++++++++++++++++++++-------------- 1 file changed, 69 insertions(+), 36 deletions(-) diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 9cc06a1a..d937010d 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -39,6 +39,7 @@ var color_emit: Color var color_emit_sel: Color var color_closed: Color var color_closed_emit: Color +var signal_conections: Array var course = 0.0 ## Курс корабля @@ -90,8 +91,35 @@ const VAL_TO_EVENT = { true: 'full_auto' } ## Выбор целей и установка помех автоматически. +var SIGNALS_CONNECTIONS = [ + [interfer, 'interfer_update', 'on_interfer_new'], + [signaller, 'bip_pressed', 'on_bip_pressed'], + [signaller, 'clear_klaster', 'clear_all_klaster'], + [signaller, 'fs_selected', 'on_fs_selected'], + [signaller, 'fs_update_color', 'set_fs_color'], + [signaller, 'fs_update_state', 'on_fs_update_state'], + [signaller, 'interfer_new', 'on_interfer_new'], + [signaller, 'interfer_off_all', 'on_interfer_off_all'], + [signaller, 'interfer_prinuditelno', 'on_chk_interfer_prinuditelno'], + [signaller, 'interfer_prinuditelno', 'on_interfer_prinuditelno'], + [signaller, 'interfer_selected', 'on_interfer_selected'], + [signaller, 'map_user_panning', 'on_user_panning'], + [signaller, 'on_prog_ecm_off', 'on_interfer_new'], + [signaller, 'rto_threat_sel', 'on_rto_threat_sel'], + [signaller, 'rto_threat_unsel', 'on_rto_threat_unsel'], + [signaller, 'sector_klaster', 'sector_klaster'], + [signaller, 'th_aoa_update', 'on_th_aoa_update'], + [signaller, 'threat_selected', 'on_threat_selected'], + [signaller, 'update_coordinates_map', 'on_update_coordinates_label'], + [signaller, 'update_scale_map', 'on_update_scale_label'], + [threats, 'threat_lost', 'on_threat_lost'], + [threats, 'threat_new', 'on_threat_new'], + [threats, 'threat_update', 'on_threat_update'], + [threats, 'threats_resized', 'on_threats_resized'] ] + + ## Обработчик выбора цели. -func on_threat_selected(th, ecm_btns): on_rto_threat_sel(th.id, ecm_btns) +func on_threat_selected(th): on_rto_threat_sel(th.id) ## Встроенный обратный вызов. @@ -175,36 +203,37 @@ func _ready(): btns_select.any(func(btn): btn.button_connect('pressed', Callable(self, 'on_button_select').bind(btn, btns_select))) var nodes: Array = get_tree().get_nodes_in_group('группа-режим-помехи') nodes.any(func(btn): btn.button_connect('pressed', Callable(self, 'on_button_pressed').bind(btn, nodes))) - $btn_close.button_connect('pressed', Callable(self, 'on_btn_close').bind($btn_close)) - $btn_work.button_connect('pressed', Callable(self, 'on_btn_work').bind($btn_work)) - threats.connect('threat_new', Callable(self, 'on_threat_new')) - threats.connect('threat_lost', Callable(self, 'on_threat_lost')) - threats.connect('threats_resized', Callable(self, 'on_threats_resized')) - threats.connect('threat_update', Callable(self, 'on_threat_update')) - 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('on_prog_ecm_off', Callable(self, 'on_interfer_new')) - signaller.connect('interfer_off_all', Callable(self, 'on_interfer_off_all')) - 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, 'set_fs_color')) - interfer.connect('interfer_update', Callable(self, 'on_interfer_new')) - signaller.connect('interfer_prinuditelno', Callable(self, 'on_chk_interfer_prinuditelno')) - signaller.connect('fs_update_state', Callable(self, 'on_fs_update_state')) - signaller.connect('map_user_panning', Callable(self, 'on_user_panning')) - signaller.connect('update_coordinates_map', Callable(self, 'on_update_coordinates_label')) - signaller.connect('update_scale_map', Callable(self, 'on_update_scale_label')) - signaller.connect('sector_klaster', Callable(self, 'sector_klaster')) - signaller.connect('clear_klaster', Callable(self, 'clear_all_klaster')) - signaller.connect('th_aoa_update', Callable(self, 'on_th_aoa_update')) + $btn_close.button_connect('pressed', on_btn_close) + $btn_work.button_connect('pressed', on_btn_work) var unit_nav = network.get_unit_instance('навигация') unit_nav.connect('data_received', on_navi_data_received) on_btn_center_toggled(true) on_btn_activate_toggled(true) + signaller.connect('режим_работа', connect_all) + signaller.connect('режим_контроль', disconnect_all) + signaller.connect('режим_журнал', disconnect_all) + signaller.connect('режим_эмс', disconnect_all) + signaller.connect('режим_эмс2', disconnect_all) + signaller.connect('режим_настройки', disconnect_all) + connect_all() + + +func connect_all() -> void: + signal_conections.clear() + for item in SIGNALS_CONNECTIONS: + var proc = Callable(self, item[2]) + var rc = item[0].connect(item[1], proc) + if rc == Error.OK: + signal_conections.append([item[0], item[1], proc]) + else: + var ers = error_string(rc) + push_error('%s: %s %s %s' % [ers, item[0], item[1], item[2]]) + + +func disconnect_all() -> void: + for item in signal_conections: + item[0].disconnect(item[1], item[2]) + signal_conections.clear() func sector_klaster(sector_data): @@ -320,13 +349,13 @@ func on_threat_lost(th) -> void: ## обработчик нажатия на цель на экране. -func on_bip_pressed(th_id, _ecm_btns): +func on_bip_pressed(th_id): if btn_select == BtnSel.THREAT: signaller.emit_signal('rto_threat_sel', th_id) ## Обработчик выбора РТО цели. -func on_rto_threat_sel(th_id, ecm_btns): +func on_rto_threat_sel(th_id): 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(): @@ -336,6 +365,7 @@ func on_rto_threat_sel(th_id, ecm_btns): item.set_sel_visible(false) var th = thrs_dict[th_id] var krp = interfer.get_krp(th) + var ecm_btns: Array = get_tree().get_nodes_in_group('группа-режим-помехи') for btn in ecm_btns: set_btns_disabled(false, btn) var btn_meta = btn.get_meta('rfi_name') @@ -346,13 +376,14 @@ func on_rto_threat_sel(th_id, ecm_btns): ## Обработчик снятия выбора РТО цели. -func on_rto_threat_unsel(th_id, ecm_btns): +func on_rto_threat_unsel(th_id): 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) + var ecm_btns: Array = get_tree().get_nodes_in_group('группа-режим-помехи') for btn in ecm_btns: btn.set_rec_visible(false) @@ -386,12 +417,13 @@ func on_button_pressed(btn_this, btn_others) -> void: ## Управляет состоянием кнопок в радиогруппе при выборе помехи. -func on_interfer_selected(ecm, btns) -> void: +func on_interfer_selected(ecm) -> void: var ecm_name: String if ecm != null: ecm_name = ecm.krp else: ecm_name = interfer.INTERFER_OFF + var btns: Array = get_tree().get_nodes_in_group('группа-режим-помехи') for btn in btns: set_btns_disabled(false, btn) btn.get_meta('rfi_name') @@ -578,13 +610,14 @@ func set_btns_disabled(value: bool, btn): btn.set_disabled(value) -func on_interfer_prinuditelno(prenuditelno_sectors, btns): +func on_interfer_prinuditelno(prenuditelno_sectors): for key in prenuditelno_sectors: var sectors = [] for sector in prenuditelno_sectors[key]: sectors.append(prd.get_fs_param(sector)) signaller.emit_signal('interfer_init', key, sectors, interfer.POW_DEFAULT) update_fs_colors() + var btns: Array = get_tree().get_nodes_in_group('группа-режим-помехи') for btn in btns: btn.set_pressed(false) set_btns_disabled(true, btn) @@ -616,16 +649,16 @@ func on_update_scale_label(scale_label) -> void: $scale_map.text = str(scale_label) -func on_btn_close(btn): +func on_btn_close(): await get_tree().create_timer(0.2).timeout - btn.pressed = false + $btn_close.pressed = false fs_closed.merge(fs_selected) signaller.emit_signal('update_fs_closed', fs_closed) -func on_btn_work(btn): +func on_btn_work(): await get_tree().create_timer(0.2).timeout - btn.pressed = false + $btn_work.pressed = false fs_closed.clear() for fs_index in prd.FS_PRD.keys(): if fs_index in fs_selected: continue