diff --git a/scenes/frame-ecm-list/frm-ecm-list.gd b/scenes/frame-ecm-list/frm-ecm-list.gd index eb42dde1..9b4f8069 100644 --- a/scenes/frame-ecm-list/frm-ecm-list.gd +++ b/scenes/frame-ecm-list/frm-ecm-list.gd @@ -17,19 +17,21 @@ const panika_sectors: Dictionary = { ## 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_cancel.button_connect('pressed', Callable(self, 'on_btn_cancel_pressed').bind($grd_forced/btn_cancel, nodes)) nodes.any(func(btn): btn.button_connect('pressed', Callable(self, 'on_btn_pressed').bind(btn, nodes))) -func on_btn_cancel_pressed(btn): +func on_btn_cancel_pressed(btn, nodes): signaller.emit_signal('interfer_off_all') await get_tree().create_timer(0.1).timeout btn.pressed = false + nodes.any(func(btn): 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') + signaller.emit_signal('rto_threat_unsel_all') if btn_this == $grd_forced/btn_panika: signaller.emit_signal('interfer_prenuditelno', panika_sectors) elif btn_this == $grd_forced/btn_jtids: diff --git a/scenes/frame-ecm-list/scroll-ecm-list.gd b/scenes/frame-ecm-list/scroll-ecm-list.gd index f9f55e8a..a34cfed9 100644 --- a/scenes/frame-ecm-list/scroll-ecm-list.gd +++ b/scenes/frame-ecm-list/scroll-ecm-list.gd @@ -17,7 +17,7 @@ const INTERFER_STATE = { 2: 'Ошибка', 3: 'Занято', 4: 'Неисправность', - 5: 'Передача' } + 5: ' ' } ## Состояние выполнения сеанса помехи diff --git a/scenes/работа/sld-mode.gd b/scenes/работа/sld-mode.gd index f8e97d42..c577743e 100644 --- a/scenes/работа/sld-mode.gd +++ b/scenes/работа/sld-mode.gd @@ -3,10 +3,11 @@ extends VSlider const VAL_TO_LABEL = { 0: 'label0', 1: 'label1', 2: 'label2', 3: 'label3' } const VAL_TO_EVENT = { 0: 'manual_control', 1: 'interfer_auto', 2: 'threat_auto', 3: 'full_auto' } -func _ready(): _on_value_changed(3) +func _ready(): + on_value_changed(0) + signaller.connect('interfer_prenuditelno', Callable(self, 'on_interfer_prenuditelno')) - -func _on_value_changed(val): +func on_value_changed(val): val = int(val) for nm in VAL_TO_LABEL.values(): var lbl0 = get_node(nm) @@ -14,3 +15,7 @@ func _on_value_changed(val): var lbl1 = get_node(VAL_TO_LABEL[val]) lbl1.self_modulate.a = 1.0 signaller.emit_signal(VAL_TO_EVENT[val]) + +func on_interfer_prenuditelno(_interfer_sectors): + self.set_value_no_signal(0) + on_value_changed(0) diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index f64907a0..9f259994 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -299,6 +299,8 @@ func on_button_select(btn_this, btn_others) -> void: ## Поведение радиокнопок в группе. Управляет состоянием кнопок в радиогруппе. func on_button_pressed(btn_this, btn_others) -> void: + $vslider.set_value_no_signal(0) + $vslider.on_value_changed(0) 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') diff --git a/scenes/работа/работа.tscn b/scenes/работа/работа.tscn index 15faac20..ed58136c 100644 --- a/scenes/работа/работа.tscn +++ b/scenes/работа/работа.tscn @@ -188,7 +188,6 @@ offset_right = 1143.0 offset_bottom = 1055.0 scale = Vector2(-1, 1) max_value = 3.0 -value = 3.0 tick_count = 4 ticks_on_borders = true script = ExtResource("12_gqdkl") @@ -254,4 +253,4 @@ vertical_alignment = 1 [connection signal="drag_begin" from="." to="." method="_on_drag_begin"] [connection signal="drag_continue" from="." to="." method="_on_drag_continue"] -[connection signal="value_changed" from="vslider" to="vslider" method="_on_value_changed"] +[connection signal="value_changed" from="vslider" to="vslider" method="on_value_changed"] diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 26f65bd6..cb117621 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -35,6 +35,7 @@ var id_array: Array ## Массив id воздействий. var thrs: Dictionary ## Словарь воздействия для целей, ключ - id воздействия. var fs: Dictionary ## Словарь воздействий для секторов, ключ - id воздействия. var cu: Dictionary ## Словарь воздействий для 5П-28, ключ - id воздействия. +var auto_status: int = 0 # Статус скролла автомата ## Сеанс помехи. class Interfer: @@ -114,6 +115,9 @@ func _ready(): signaller.connect('interfer_off_all', Callable(self, 'on_interfer_off_all').bind(unit, ecms)) signaller.connect('th_aoa_update', Callable(self, 'on_th_aoa_update').bind(ecms, unit)) 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')) threats.connect('threat_lost', Callable(self, 'on_threats_lost').bind(ecms, unit)) @@ -126,6 +130,11 @@ func on_timer_check_state(unit, ecms, resend_timeout): send_ecm(ecm, unit) ecm.tick_tx = tick +func on_manual_control(): + auto_status = 0 + +func on_full_auto(): + auto_status = 3 func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit): for thr in threats.values(): @@ -138,6 +147,15 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit): send_ecm(ecm, unit) signaller.emit_signal('fs_update_color', ecms) + if auto_status == 0: + return + + if auto_status == 3: + for thr in threats.values(): + thr.auto_selected = true + signaller.emit_signal('interfer_init', 'lchm1', []) + thr.auto_selected = false + ## Производит приём состояния помех. [param unit] -> [param ecms]. func on_data_capsrpb_received(unit: capsrpb.CapsRpb, ecms: Dictionary): @@ -234,7 +252,7 @@ func interfer_create(interfer_name, ecms, param, kni, id, dict, source_interfer) ecm = Interfer.new() ecm.ispp = ispp ecms[ispp] = ecm - ecm.svk = STATE_TSMT # Подготовка к передаче сообщения + ecm.svk = STATE_TSMT # Подготовка к передаче сообщения ecm.ss = msg_ss ecm.kni = kni ecm.krp = interfer_name diff --git a/scripts/signaller.gd b/scripts/signaller.gd index 0c10356d..6553ed0f 100644 --- a/scripts/signaller.gd +++ b/scripts/signaller.gd @@ -150,3 +150,5 @@ signal th_aoa_update(threats: Dictionary) ## <...>[br] ## [param ecms] - <...> signal fs_update_color(ecms: Dictionary) + +signal socket_error(error: String) diff --git a/scripts/threats.gd b/scripts/threats.gd index f4a53c7c..793485e0 100644 --- a/scripts/threats.gd +++ b/scripts/threats.gd @@ -27,6 +27,7 @@ class Threat: var tmod: String ## Тип модуляции. var width: float ## Ширина занимаемого диапазона частот, МГц. var selected: bool ## Флаг, что цель выбрана. + var auto_selected: bool = false #Флаг автомата для целей func _init(): clear_fflags() func _to_string() -> String: return 'номер: %d пеленг: %0.1f частота: %0.1f МГц' % [id, aoa, freq] @@ -59,7 +60,7 @@ func _ready() -> void: timer_check_lost.connect('timeout', Callable(self, 'on_timer_check_lost').bind(settings.ThreatParams.time_lost, threats)) timer_check_lost.start(settings.ThreatParams.time_lost / 1000.0) timer_aoa_update.connect('timeout', Callable(self, 'on_timer_aoa_update').bind(threats)) - timer_aoa_update.start(0.25) + timer_aoa_update.start(1.00) signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind(threats)) signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel').bind(threats)) signaller.connect('rto_threat_unsel_all', Callable(self, 'on_rto_threat_unsel_all').bind(threats)) @@ -112,6 +113,8 @@ func on_interfer_init(interfer_name, fs_arr, threats): for threat in threats.values(): if threat.selected: sel_threats.append(threat) + if threat.auto_selected: + sel_threats.append(threat) if len(sel_threats) or (len(fs_arr)): signaller.emit_signal('interfer_create', interfer_name, sel_threats, fs_arr)