Реализация автомата в двух состояниях (0 и 3)

This commit is contained in:
lepshiy
2024-12-11 10:54:23 +03:00
parent e4338d2f0f
commit 77ef3124d5
8 changed files with 41 additions and 10 deletions

View File

@@ -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:

View File

@@ -17,7 +17,7 @@ const INTERFER_STATE = {
2: 'Ошибка',
3: 'Занято',
4: 'Неисправность',
5: 'Передача' }
5: ' ' }
## Состояние выполнения сеанса помехи

View File

@@ -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)

View File

@@ -301,6 +301,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')

View File

@@ -189,7 +189,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")
@@ -255,4 +254,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"]

View File

@@ -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

View File

@@ -146,3 +146,5 @@ signal map_mode_changed(mode: int)
signal th_aoa_update(threats: Dictionary)
signal fs_update_color(ecms:Dictionary)
signal socket_error(error: String)

View File

@@ -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))
@@ -111,6 +112,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)