diff --git a/scenes/frame-ecm-list/frm-ecm-list.gd b/scenes/frame-ecm-list/frm-ecm-list.gd index 72ae31d..eb42dde 100644 --- a/scenes/frame-ecm-list/frm-ecm-list.gd +++ b/scenes/frame-ecm-list/frm-ecm-list.gd @@ -1,13 +1,40 @@ class_name frm_ecm_list extends NinePatchRect +const srn_sectors: Dictionary = { + 'srni1': [4, 5, 6, 7, 8, 9, 10, 11] } + +const jtids_sectors: Dictionary = { + 'svi1': [12, 13, 14, 15, 16, 17, 18, 19] } + +const kupd_sectors: Dictionary = {} + +const panika_sectors: Dictionary = { + 'lchm1': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 20, 21, 22, 23, 24, 25, 26, 27], + 'srni1': [12, 13, 14, 15, 16, 17, 18, 19] } + + ## Called when the node enters the scene tree for the first time. func _ready(): + var nodes: Array = get_tree().get_nodes_in_group('группа-принудительно') $grd_forced/btn_cancel.button_connect('pressed', Callable(self, 'on_btn_cancel_pressed').bind($grd_forced/btn_cancel)) - $grd_forced/btn_panika.button_connect('pressed', Callable(self, 'on_btn_panika_pressed').bind($grd_forced/btn_panika)) + nodes.any(func(btn): btn.button_connect('pressed', Callable(self, 'on_btn_pressed').bind(btn, nodes))) func on_btn_cancel_pressed(btn): signaller.emit_signal('interfer_off_all') await get_tree().create_timer(0.1).timeout btn.pressed = false + + +func on_btn_pressed(btn_this, btn_others): + for btn_other in btn_others: btn_other.set_pressed(btn_this == btn_other) + signaller.emit_signal('interfer_off_all') + if btn_this == $grd_forced/btn_panika: + signaller.emit_signal('interfer_prenuditelno', panika_sectors) + elif btn_this == $grd_forced/btn_jtids: + signaller.emit_signal('interfer_prenuditelno', jtids_sectors) + elif btn_this == $grd_forced/btn_kupd: + signaller.emit_signal('interfer_prenuditelno', kupd_sectors) + elif btn_this == $grd_forced/btn_srn: + signaller.emit_signal('interfer_prenuditelno', srn_sectors) diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 3f76b90..e195616 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -154,9 +154,10 @@ 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')) 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')) - signaller.connect('fs_update_color', Callable(self, 'on_fs_update_color')) func get_all_nodes(root): @@ -302,9 +303,10 @@ func on_button_select(btn_this, btn_others) -> void: 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) + var interfer_name: String = btn_this.get_meta('rfi_name') for key in fs_selected.keys(): fs_arr.append(get_fs_param(key)) - signaller.emit_signal('interfer_init', btn_this, fs_arr) + signaller.emit_signal('interfer_init', interfer_name, fs_arr) ## Управляет состоянием кнопок в радиогруппе при выборе помехи. @@ -503,3 +505,11 @@ func on_fs_update_color(ecms): for ecm in ecms.values(): set_fs_color(ecm) update_fs_colors() + +func on_interfer_prenuditelno (prenuditelno_sectors): + for key in prenuditelno_sectors: + var sectors = [] + for sector in prenuditelno_sectors[key]: + sectors.append(get_fs_param(sector)) + signaller.emit_signal('interfer_init', key, sectors) + update_fs_colors() diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 93c6983..26f65bd 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -166,12 +166,11 @@ func on_data_capsrpb_received(unit: capsrpb.CapsRpb, ecms: Dictionary): ## Вызыватся, когда пользователь выбрал помеху и выбраны цели. -func on_interfer_create(btn, sel_threats, fs_arr, _unit, ecms): +func on_interfer_create(interfer_name, sel_threats, fs_arr, _unit, ecms): for item in sel_threats: var param: Dictionary = {} var kni: float = item.aoa var id = item.id - var interfer_name: String = btn.get_meta('rfi_name') param['freq'] = item.freq param['width'] = item.width interfer_create(interfer_name, ecms, param, kni, id, thrs, SOURCE_INTERFER[0]) @@ -180,7 +179,6 @@ func on_interfer_create(btn, sel_threats, fs_arr, _unit, ecms): var param: Dictionary = {} var kni: float = item[0] var id = item[3] - var interfer_name: String = btn.get_meta('rfi_name') param['freq'] = item[1] param['width'] = item[2] interfer_create(interfer_name, ecms, param, kni, id, fs, SOURCE_INTERFER[1]) diff --git a/scripts/signaller.gd b/scripts/signaller.gd index 8a9a874..4419711 100644 --- a/scripts/signaller.gd +++ b/scripts/signaller.gd @@ -89,13 +89,13 @@ signal rto_threat_unsel_all() ## Вызывается, когда пользователь выбирает помеху.[br] ## [param btn] - Нажатая кнопка помехи. -signal interfer_init(btn: PanelContainer, fs_arr: Array) +signal interfer_init(interfer_name: String, fs_arr: Array) ## Вызывается, когда выбраны цели для постановки помех.[br] ## [param btn] - Нажатая кнопка помехи.[br] ## [param sel_threats] - Cписок целей. -signal interfer_create(btn: PanelContainer, sel_threats: Array, fs_arr: Array) +signal interfer_create(interfer_name: String, sel_threats: Array, fs_arr: Array) ## Вызывается, когда создалась новая помеха.[br] @@ -110,10 +110,14 @@ signal interfer_new(ecm: interfer.Interfer) signal interfer_off(ecm: interfer.Interfer, ecms: Dictionary, thrs: Dictionary) -## Вызывается при нажатии отключить все помехи. +## Вызывается при нажатии отключить. signal interfer_off_all() +## Вызывается при нажатии паника. +signal interfer_prenuditelno(interfer_sectors: Dictionary) + + ## Вызывается при получении внешнего целеуказания. ## [param interfer_params] - Параметры полученной помехи от 5П-28.[br] signal interfer_rcv(interfer_params: Array) diff --git a/scripts/threats.gd b/scripts/threats.gd index 65884c1..f0827d7 100644 --- a/scripts/threats.gd +++ b/scripts/threats.gd @@ -106,13 +106,13 @@ func on_threat_selected(th, threats): ## Формирует список выбранных целей для включения помехи. -func on_interfer_init(btn, fs_arr, threats): +func on_interfer_init(interfer_name, fs_arr, threats): var sel_threats: Array = [] for threat in threats.values(): if threat.selected: sel_threats.append(threat) if len(sel_threats) or (len(fs_arr)): - signaller.emit_signal('interfer_create', btn, sel_threats, fs_arr) + signaller.emit_signal('interfer_create', interfer_name, sel_threats, fs_arr) ## Производит приём целей.