Merge remote-tracking branch 'lepshiy/master'
# Conflicts: # scenes/работа/работа.gd # scripts/signaller.gd
This commit is contained in:
@@ -2,12 +2,13 @@ class_name frm_ecm_list extends NinePatchRect
|
||||
|
||||
|
||||
const srn_sectors: Dictionary = {
|
||||
'srni1': [4, 5, 6, 7, 8, 9, 10, 11] }
|
||||
'srni1': [12, 13, 14, 15, 16, 17, 18, 19] }
|
||||
|
||||
const jtids_sectors: Dictionary = {
|
||||
'svi1': [12, 13, 14, 15, 16, 17, 18, 19] }
|
||||
'svi1': [4, 5, 6, 7, 8, 9, 10, 11] }
|
||||
|
||||
const kupd_sectors: Dictionary = {}
|
||||
const kupd_sectors: Dictionary = {
|
||||
'lchm1': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 20, 21, 22, 23, 24, 25, 26, 27] }
|
||||
|
||||
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],
|
||||
@@ -17,19 +18,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:
|
||||
|
||||
@@ -17,7 +17,7 @@ const INTERFER_STATE = {
|
||||
2: 'Ошибка',
|
||||
3: 'Занято',
|
||||
4: 'Неисправность',
|
||||
5: 'Передача' }
|
||||
5: ' ' }
|
||||
|
||||
|
||||
## Состояние выполнения сеанса помехи
|
||||
@@ -126,6 +126,7 @@ func on_interfer_off(ecm, ecms, thrs, table_index):
|
||||
rehash(table_index)
|
||||
ecms.erase(ecm.ispp)
|
||||
thrs.erase(ecm.ispp)
|
||||
interfer.push_id(ecm.ispp)
|
||||
|
||||
|
||||
## Перестраивает индекс таблицы. Вызывать при удалении строки
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -64,13 +64,14 @@ const fs_sectors: Dictionary = {
|
||||
1: [270.0, 360.0] }
|
||||
|
||||
const fs_freq: Dictionary = {
|
||||
0: [370.0, 800.0, 200.0, 250.0],
|
||||
1: [800.0, 1065.0, 250.0, 300.0],
|
||||
2: [1065.0, 1180.0, 300.0, 350.0],
|
||||
3: [1180.0, 1450.0, 350.0, 400.0],
|
||||
4: [1450.0, 2000.0, 400.0, 450.0],
|
||||
5: [2000.0, 3500.0, 450.0, 500.0],
|
||||
6: [3500.0, 6000.0, 500.0, 550.0] }
|
||||
0: [390.0, 510.0, 200.0, 250.0, 433.0],
|
||||
1: [800.0, 1065.0, 250.0, 300.0, 860.0],
|
||||
2: [1065.0, 1210.0, 300.0, 350.0, 1137.0],
|
||||
3: [1150.0, 1280.0, 350.0, 400.0, 1227.0],
|
||||
4: [1490.0, 2000.0, 400.0, 450.0, 1575.0],
|
||||
5: [2000.0, 3500.0, 450.0, 500.0, 2450.0],
|
||||
6: [3500.0, 6000.0, 500.0, 550.0, 5800.0]
|
||||
}
|
||||
|
||||
## Размеры карты для разных режимов РТО и РЛС соответственно
|
||||
const map_sizes = [
|
||||
@@ -171,17 +172,18 @@ func get_all_nodes(root):
|
||||
func map_threat_to_bip(th: threats.Threat, bip: Control):
|
||||
var freq = th.freq
|
||||
var sector_key = null
|
||||
var sector_width = 50.0
|
||||
for key in fs_freq:
|
||||
var freq_range = fs_freq[key]
|
||||
var num_values = (freq_range[1]- freq_range[0]) / sector_width
|
||||
if freq_range[0] <= freq and freq <= freq_range[1]:
|
||||
sector_key = key
|
||||
break
|
||||
if sector_key != null:
|
||||
var fsf = fs_freq[sector_key]
|
||||
radius_internal = fsf[2]
|
||||
radius_outter = fsf[3]
|
||||
freq_low = fsf[0]
|
||||
freq_high = fsf[1]
|
||||
if sector_key!= null:
|
||||
radius_internal = fs_freq[sector_key][2]
|
||||
radius_outter = fs_freq[sector_key][3]
|
||||
freq_low = fs_freq[sector_key][0]
|
||||
freq_high = fs_freq[sector_key][1]
|
||||
bip.position = tools.pos_calc(
|
||||
th.freq,
|
||||
th.aoa,
|
||||
@@ -299,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')
|
||||
@@ -458,7 +462,7 @@ func set_ecm_btns_state(value: bool):
|
||||
|
||||
|
||||
func get_fs_param(index: int) -> Array:
|
||||
var freq = (fs_freq[index / 4][0] + fs_freq[index / 4][1])/2
|
||||
var freq = (fs_freq[index / 4][4])
|
||||
var sector = (fs_sectors[index % 4][0] + fs_sectors[index % 4][1])/2 - 45.0
|
||||
if sector < 0:
|
||||
sector += 360.0
|
||||
@@ -504,6 +508,7 @@ func on_fs_update_color(ecms):
|
||||
set_fs_color(ecm)
|
||||
update_fs_colors()
|
||||
|
||||
|
||||
func on_interfer_prenuditelno (prenuditelno_sectors, btns):
|
||||
for key in prenuditelno_sectors:
|
||||
var sectors = []
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -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):
|
||||
@@ -211,11 +229,12 @@ func on_interfer_rcv(interfer_params: Array, unit, ecms):
|
||||
|
||||
|
||||
func interfer_create(interfer_name, ecms, param, kni, id, dict, source_interfer):
|
||||
print_debug(ecms)
|
||||
var ispp: int = 0
|
||||
if interfer_name == 'k1':
|
||||
param['dur'] = 1.0 # Необходимо добавить параметры управления
|
||||
param['period'] = 1.0 # Необходимо добавить параметры управления
|
||||
var key = dict.find_key(id)
|
||||
var key = ecms.find_key(id)
|
||||
if source_interfer != SOURCE_INTERFER[2]:
|
||||
if key != null:
|
||||
ispp = key
|
||||
@@ -225,6 +244,7 @@ func interfer_create(interfer_name, ecms, param, kni, id, dict, source_interfer)
|
||||
ispp = pop_id()
|
||||
if ispp == 0: return
|
||||
else: ispp = id
|
||||
print_debug(id_array)
|
||||
dict[ispp] = id
|
||||
msg_ss += 1
|
||||
var ecm: Interfer
|
||||
@@ -234,7 +254,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
|
||||
@@ -244,7 +264,6 @@ func interfer_create(interfer_name, ecms, param, kni, id, dict, source_interfer)
|
||||
signaller.emit_signal('interfer_new', ecm)
|
||||
if interfer_name == 'off':
|
||||
signaller.emit_signal('interfer_off', ecm, ecms, thrs)
|
||||
push_id(ecm.ispp)
|
||||
thrs.erase(ispp)
|
||||
ecm.tick_tx = Time.get_ticks_msec()
|
||||
|
||||
@@ -257,7 +276,6 @@ func send_ecm(ecm, unit):
|
||||
func on_interfer_off_all(unit, ecms):
|
||||
for ecm in ecms.values():
|
||||
ecm.krp = INTERFER_OFF
|
||||
push_id(ecm.ispp)
|
||||
send_ecm(ecm, unit)
|
||||
signaller.emit_signal('interfer_off',ecm, ecms, thrs)
|
||||
|
||||
@@ -267,7 +285,6 @@ func on_threats_lost(th, ecms, unit):
|
||||
var ecm_id = key
|
||||
var ecm = ecms[ecm_id]
|
||||
ecm.krp = INTERFER_OFF
|
||||
push_id(ecm.ispp)
|
||||
send_ecm(ecm, unit)
|
||||
signaller.emit_signal('interfer_off',ecm, ecms, thrs)
|
||||
|
||||
|
||||
@@ -142,7 +142,6 @@ signal map_coords_changed(lan: float, lat: float)
|
||||
## [param mode] - Вновь установленный режим.
|
||||
signal map_mode_changed(mode: int)
|
||||
|
||||
|
||||
## Вызывается при обновлении позиции(угла) цели.[br]
|
||||
signal th_aoa_update(threats: Dictionary)
|
||||
|
||||
@@ -150,3 +149,5 @@ signal th_aoa_update(threats: Dictionary)
|
||||
## <...>[br]
|
||||
## [param ecms] - <...>
|
||||
signal fs_update_color(ecms: Dictionary)
|
||||
|
||||
signal socket_error(error: String)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user