Доработка. Управление обработчиками событий для режима Работа
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user