Merge remote-tracking branch 'refs/remotes/Cat/master'

# Conflicts:
#	scripts/trassa.gd
This commit is contained in:
lepshiy
2025-09-26 14:47:38 +03:00
12 changed files with 138 additions and 30 deletions

View File

@@ -56,6 +56,7 @@ offset_right = 20.0
offset_bottom = 20.0 offset_bottom = 20.0
theme_override_styles/panel = SubResource("1") theme_override_styles/panel = SubResource("1")
script = ExtResource("1_ui6sg") script = ExtResource("1_ui6sg")
font_size = null
[node name="back" type="Sprite2D" parent="."] [node name="back" type="Sprite2D" parent="."]
material = SubResource("ShaderMaterial_hhdyc") material = SubResource("ShaderMaterial_hhdyc")
@@ -79,6 +80,7 @@ axis_stretch_vertical = 2
layout_mode = 2 layout_mode = 2
theme_override_colors/font_outline_color = Color(0, 0, 0, 1) theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
theme_override_constants/outline_size = 4 theme_override_constants/outline_size = 4
theme_override_font_sizes/font_size = 15
theme_override_styles/focus = SubResource("4") theme_override_styles/focus = SubResource("4")
theme_override_styles/disabled = SubResource("5") theme_override_styles/disabled = SubResource("5")
theme_override_styles/hover = SubResource("2") theme_override_styles/hover = SubResource("2")

View File

@@ -59,6 +59,11 @@ var _pressed: = false
$button.set_toggle_mode(val) $button.set_toggle_mode(val)
@export var font_size: int = true:
set(val):
$button.add_theme_font_size_override('theme_override_font_sizes/font_size', val)
func set_pressed(val: bool): func set_pressed(val: bool):
pressed = val pressed = val

View File

@@ -57,6 +57,7 @@ size_flags_vertical = 3
tooltip_text = "Включает принудительную помеху" tooltip_text = "Включает принудительную помеху"
strips_rotation = 15.0 strips_rotation = 15.0
text = "СРН" text = "СРН"
font_size = null
metadata/rfi_name = "srn" metadata/rfi_name = "srn"
[node name="btn_jtids" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")] [node name="btn_jtids" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")]
@@ -66,6 +67,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
strips_rotation = 15.0 strips_rotation = 15.0
text = "СПРС" text = "СПРС"
font_size = null
metadata/rfi_name = "sprs" metadata/rfi_name = "sprs"
[node name="btn_kupd" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")] [node name="btn_kupd" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")]
@@ -75,6 +77,7 @@ size_flags_vertical = 3
tooltip_text = "Кнопка для принудительного включения группы секторов в режим КУПД" tooltip_text = "Кнопка для принудительного включения группы секторов в режим КУПД"
strips_rotation = 15.0 strips_rotation = 15.0
text = "КУПД" text = "КУПД"
font_size = null
metadata/rfi_name = "kupd" metadata/rfi_name = "kupd"
[node name="btn_panika" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")] [node name="btn_panika" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")]
@@ -84,6 +87,7 @@ size_flags_vertical = 3
tooltip_text = "Кнопка для принудительного включения группы секторов в режим КУПД" tooltip_text = "Кнопка для принудительного включения группы секторов в режим КУПД"
strips_rotation = 15.0 strips_rotation = 15.0
text = "Паника" text = "Паника"
font_size = null
metadata/rfi_name = "<off>" metadata/rfi_name = "<off>"
[node name="btn_cancel" parent="grd_forced" groups=["прин-секторы-срн"] instance=ExtResource("4_7ys3c")] [node name="btn_cancel" parent="grd_forced" groups=["прин-секторы-срн"] instance=ExtResource("4_7ys3c")]
@@ -92,4 +96,5 @@ size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
strips_rotation = 15.0 strips_rotation = 15.0
text = "Очистить" text = "Очистить"
font_size = null
metadata/rfi_name = "<off>" metadata/rfi_name = "<off>"

View File

@@ -36,7 +36,8 @@ const INTERFER_NAMES = {
'svi1': 'СВ-И1', 'svi1': 'СВ-И1',
'k1': 'K1', 'k1': 'K1',
'svm2': 'СВ-М2', 'svm2': 'СВ-М2',
'ozp1': 'ОЗП-1'} 'ozp1': 'ОЗП-1',
'eprls': 'ЕПРЛС',}
## Индексы колонок ## Индексы колонок
@@ -84,6 +85,7 @@ func _ready():
signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel')) signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel'))
signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind(table_index)) signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind(table_index))
interfer.connect('interfer_update', Callable(self, 'on_interfer_update').bind(table_index)) interfer.connect('interfer_update', Callable(self, 'on_interfer_update').bind(table_index))
interfer.connect('interfer_recommendate', Callable(self, 'on_interfer_recommendate'))
$table.connect('row_pressed', Callable(self, 'on_row_pressed')) $table.connect('row_pressed', Callable(self, 'on_row_pressed'))
call_deferred('init_table') call_deferred('init_table')
@@ -120,21 +122,13 @@ func on_interfer_new(ecm, table_index):
signaller.emit_signal('interfer_selected', ecm) signaller.emit_signal('interfer_selected', ecm)
func on_interfer_off(ecm, ecms, thrs, table_index): func on_interfer_off(ecm, table_index):
var sz = ecms.size()
$table.remove_row(table_index[ecm.ispp]) $table.remove_row(table_index[ecm.ispp])
rehash(table_index) rehash(table_index)
ecms.erase(ecm.ispp)
thrs.erase(ecm.ispp)
interfer.cu.erase(ecm.ispp)
interfer.fs.erase(ecm.ispp)
interfer.push_id(ecm.ispp)
var sel_rows: Array var sel_rows: Array
$table.get_selected_rows(sel_rows) $table.get_selected_rows(sel_rows)
if not len(sel_rows): if not len(sel_rows):
signaller.emit_signal('interfer_selected', null) signaller.emit_signal('interfer_selected', null)
if sz != ecms.size():
interfer.call_deferred('emit_signal', 'interfer_resized', ecms)
## Перестраивает индекс таблицы. Вызывать при удалении строки ## Перестраивает индекс таблицы. Вызывать при удалении строки
@@ -159,3 +153,13 @@ func map_th_to_row(ecm) -> Array:
if INTERFER_STATE.has(ecm.svk): if INTERFER_STATE.has(ecm.svk):
row[COLUMN_STATE] = '%s' % INTERFER_STATE[ecm.svk] row[COLUMN_STATE] = '%s' % INTERFER_STATE[ecm.svk]
return row return row
func on_interfer_recommendate(ecm):
var sel_rows: Array
$table.get_selected_rows(sel_rows)
if not len(sel_rows): return
var row = sel_rows[0]
var sel_ecm = $table.get_node_user_data(0, sel_rows[0])
if ecm == sel_ecm:
signaller.emit_signal('interfer_selected', ecm)

View File

@@ -5,7 +5,7 @@
[node name="grd_btns" type="GridContainer"] [node name="grd_btns" type="GridContainer"]
offset_right = 1096.0 offset_right = 1096.0
offset_bottom = 54.0 offset_bottom = 54.0
columns = 15 columns = 16
[node name="btn_off" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] [node name="btn_off" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
layout_mode = 2 layout_mode = 2
@@ -14,6 +14,7 @@ size_flags_vertical = 3
strips_rotation = 30.0 strips_rotation = 30.0
text = "Откл." text = "Откл."
disabled = true disabled = true
font_size = 1
metadata/rfi_name = "off" metadata/rfi_name = "off"
[node name="btn_p12" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] [node name="btn_p12" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
@@ -23,6 +24,7 @@ size_flags_vertical = 3
strips_rotation = 30.0 strips_rotation = 30.0
text = "МЧМ-1" text = "МЧМ-1"
disabled = true disabled = true
font_size = 1
metadata/rfi_name = "mchm1" metadata/rfi_name = "mchm1"
[node name="btn_p16" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] [node name="btn_p16" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
@@ -32,6 +34,7 @@ size_flags_vertical = 3
strips_rotation = 30.0 strips_rotation = 30.0
text = "СРН-И1" text = "СРН-И1"
disabled = true disabled = true
font_size = 1
metadata/rfi_name = "srni1" metadata/rfi_name = "srni1"
[node name="btn_p15" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] [node name="btn_p15" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
@@ -41,6 +44,7 @@ size_flags_vertical = 3
strips_rotation = 30.0 strips_rotation = 30.0
text = "СРН-М2" text = "СРН-М2"
disabled = true disabled = true
font_size = 1
metadata/rfi_name = "srnm2" metadata/rfi_name = "srnm2"
[node name="btn_p18" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] [node name="btn_p18" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
@@ -50,6 +54,7 @@ size_flags_vertical = 3
strips_rotation = 30.0 strips_rotation = 30.0
text = "СРН-GPS" text = "СРН-GPS"
disabled = true disabled = true
font_size = 1
metadata/rfi_name = "srngps" metadata/rfi_name = "srngps"
[node name="btn_p14" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] [node name="btn_p14" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
@@ -59,6 +64,7 @@ size_flags_vertical = 3
strips_rotation = 30.0 strips_rotation = 30.0
text = "ПД-М4" text = "ПД-М4"
disabled = true disabled = true
font_size = 1
metadata/rfi_name = "pdm4" metadata/rfi_name = "pdm4"
[node name="btn_p13" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] [node name="btn_p13" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
@@ -68,6 +74,7 @@ size_flags_vertical = 3
strips_rotation = 30.0 strips_rotation = 30.0
text = "ПД-М2" text = "ПД-М2"
disabled = true disabled = true
font_size = 1
metadata/rfi_name = "pdm2" metadata/rfi_name = "pdm2"
[node name="btn_p11" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] [node name="btn_p11" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
@@ -77,6 +84,7 @@ size_flags_vertical = 3
strips_rotation = 30.0 strips_rotation = 30.0
text = "ЛЧМ-1" text = "ЛЧМ-1"
disabled = true disabled = true
font_size = 1
metadata/rfi_name = "lchm1" metadata/rfi_name = "lchm1"
[node name="btn_p17" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] [node name="btn_p17" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
@@ -86,6 +94,7 @@ size_flags_vertical = 3
strips_rotation = 30.0 strips_rotation = 30.0
text = "ЛЧМ-2" text = "ЛЧМ-2"
disabled = true disabled = true
font_size = 1
metadata/rfi_name = "lchm2" metadata/rfi_name = "lchm2"
[node name="btn_p10" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] [node name="btn_p10" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
@@ -95,6 +104,7 @@ size_flags_vertical = 3
strips_rotation = 30.0 strips_rotation = 30.0
text = "ПД-М4С" text = "ПД-М4С"
disabled = true disabled = true
font_size = 1
metadata/rfi_name = "pdm4s" metadata/rfi_name = "pdm4s"
[node name="btn_p9" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] [node name="btn_p9" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
@@ -104,6 +114,7 @@ size_flags_vertical = 3
strips_rotation = 30.0 strips_rotation = 30.0
text = "ПД-ЧМ" text = "ПД-ЧМ"
disabled = true disabled = true
font_size = 1
metadata/rfi_name = "pdchm" metadata/rfi_name = "pdchm"
[node name="btn_p8" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] [node name="btn_p8" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
@@ -113,6 +124,7 @@ size_flags_vertical = 3
strips_rotation = 30.0 strips_rotation = 30.0
text = "СВ-И1" text = "СВ-И1"
disabled = true disabled = true
font_size = 1
metadata/rfi_name = "svi1" metadata/rfi_name = "svi1"
[node name="btn_p7" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] [node name="btn_p7" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
@@ -122,6 +134,7 @@ size_flags_vertical = 3
strips_rotation = 30.0 strips_rotation = 30.0
text = "K1" text = "K1"
disabled = true disabled = true
font_size = 1
metadata/rfi_name = "k1" metadata/rfi_name = "k1"
[node name="btn_p6" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] [node name="btn_p6" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
@@ -131,6 +144,7 @@ size_flags_vertical = 3
strips_rotation = 30.0 strips_rotation = 30.0
text = "СВ-М2" text = "СВ-М2"
disabled = true disabled = true
font_size = 1
metadata/rfi_name = "svm2" metadata/rfi_name = "svm2"
[node name="btn_p5" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")] [node name="btn_p5" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
@@ -140,4 +154,15 @@ size_flags_vertical = 3
strips_rotation = 30.0 strips_rotation = 30.0
text = "ОЗП-1" text = "ОЗП-1"
disabled = true disabled = true
font_size = 1
metadata/rfi_name = "ozp1" metadata/rfi_name = "ozp1"
[node name="btn_p19" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
strips_rotation = 30.0
text = "ЕПРЛС"
disabled = true
font_size = 1
metadata/rfi_name = "eprls"

View File

@@ -5,7 +5,7 @@ func on_line_changed(unit_inst): log.message(Logger.INFO, '\"%s\" изменен
func on_command_fail(unit_inst): log.message(Logger.ERROR, '\"%s\" команда не выполнена' % unit_inst.name) func on_command_fail(unit_inst): log.message(Logger.ERROR, '\"%s\" команда не выполнена' % unit_inst.name)
func on_threats_changed(th: Object, msg: String): log.message(Logger.INFO, '%s: %s' % [msg, th.to_string()]) func on_threats_changed(th: Object, msg: String): log.message(Logger.INFO, '%s: %s' % [msg, th.to_string()])
func on_parse_error(unit_inst, msg: String): log.message(Logger.ERROR, '%s: %s' % [unit_inst.name, msg]) func on_parse_error(unit_inst, msg: String): log.message(Logger.ERROR, '%s: %s' % [unit_inst.name, msg])
func on_interfer_off(ecm, _ecms, _thrs,msg: String): log.message(Logger.INFO, '%s: %s' % [msg, ecm.to_string()]) func on_interfer_off(ecm, msg: String): log.message(Logger.INFO, '%s: %s' % [msg, ecm.to_string()])
func on_set_program_mode(msg: String): log.message(Logger.INFO, msg) func on_set_program_mode(msg: String): log.message(Logger.INFO, msg)
func on_interfer_new(ecm, msg: String): func on_interfer_new(ecm, msg: String):

View File

@@ -229,13 +229,6 @@ func on_interfer_off_all():
update_fs_colors() update_fs_colors()
func on_interfer_off(ecm_id):
fs_active.erase(ecm_id)
fs_selected.erase(ecm_id)
fs_active.clear()
update_fs_colors()
## Обработчик сигнала обнаружения цели. ## Обработчик сигнала обнаружения цели.
func on_threat_new(th) -> void: func on_threat_new(th) -> void:
var bip = Bip.instantiate() var bip = Bip.instantiate()

View File

@@ -174,6 +174,7 @@ size_flags_vertical = 3
tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой"
strips_rotation = 25.0 strips_rotation = 25.0
text = "Строб" text = "Строб"
font_size = null
metadata/state = 0 metadata/state = 0
[node name="btn_threats" parent="btns_select" groups=["группа-режим-выбора"] instance=ExtResource("8_k0iv2")] [node name="btn_threats" parent="btns_select" groups=["группа-режим-выбора"] instance=ExtResource("8_k0iv2")]
@@ -183,6 +184,7 @@ size_flags_vertical = 3
tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой"
strips_rotation = 25.0 strips_rotation = 25.0
text = "Цель" text = "Цель"
font_size = null
metadata/state = 1 metadata/state = 1
[node name="btn_fs_sector" parent="btns_select" groups=["группа-режим-выбора"] instance=ExtResource("8_k0iv2")] [node name="btn_fs_sector" parent="btns_select" groups=["группа-режим-выбора"] instance=ExtResource("8_k0iv2")]
@@ -192,6 +194,7 @@ size_flags_vertical = 3
tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой" tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой"
strips_rotation = 25.0 strips_rotation = 25.0
text = "Сектор" text = "Сектор"
font_size = null
metadata/state = 2 metadata/state = 2
[node name="chk_auto" type="CheckBox" parent="."] [node name="chk_auto" type="CheckBox" parent="."]

View File

@@ -81,6 +81,7 @@ offset_right = 1583.0
offset_bottom = 85.0 offset_bottom = 85.0
strips_rotation = 10.0 strips_rotation = 10.0
text = "Прочитать" text = "Прочитать"
font_size = null
[node name="btn_flash_write" parent="." instance=ExtResource("2_eju8r")] [node name="btn_flash_write" parent="." instance=ExtResource("2_eju8r")]
layout_mode = 0 layout_mode = 0
@@ -90,6 +91,7 @@ offset_right = 1583.0
offset_bottom = 129.0 offset_bottom = 129.0
strips_rotation = 10.0 strips_rotation = 10.0
text = "Записать" text = "Записать"
font_size = null
[node name="btn_save" type="Button" parent="."] [node name="btn_save" type="Button" parent="."]
layout_mode = 0 layout_mode = 0

View File

@@ -18,7 +18,13 @@ const ITERFER_MODE = {
'svi1': [INTERFER_IQFILE, SVI1_PARAMS, 20], 'svi1': [INTERFER_IQFILE, SVI1_PARAMS, 20],
'svm2': [INTERFER_IQFILE, SVM2_PARAMS, 21], 'svm2': [INTERFER_IQFILE, SVM2_PARAMS, 21],
'k1': [INTERFER_IQFILE, K1_PARAMS, 50], 'k1': [INTERFER_IQFILE, K1_PARAMS, 50],
'ozp1': [INTERFER_IQFILE, OZP1_PARAMS, 51] } 'ozp1': [INTERFER_IQFILE, OZP1_PARAMS, 51],
'eprls': [INTERFER_IQFILE, EPRLS_PARAMS, 52], }
const RECOMMEND_INTERFER = {
'ПСП + ФМ-2': 'srni1',
'Линейная ЧМ': 'lchm1'
}
const SRNI1_PARAMS = {'par_names' : ['freq', 'width']} const SRNI1_PARAMS = {'par_names' : ['freq', 'width']}
const SRNM2_PARAMS = {'par_names' : ['freq', 'width', 'period']} const SRNM2_PARAMS = {'par_names' : ['freq', 'width', 'period']}
@@ -54,7 +60,9 @@ const SVM2_PARAMS = {'files': {1: ['SVM2_LIT2.pcm', 1017],
2: ['SVM2_LIT3.pcm', 1156]}, 2: ['SVM2_LIT3.pcm', 1156]},
'call_proc': 'call_diap', 'call_proc': 'call_diap',
'par_names' : ['freq', 'filename']} 'par_names' : ['freq', 'filename']}
const EPRLS_PARAMS = {'files' : 'ERLS.pcm',
'call_proc' : 'call_all_diap',
'par_names' : ['freq', 'filename']}
# Файл : Ключ (ширина): ['имя файла'] # Файл : Ключ (ширина): ['имя файла']
const PDCHM_PARAMS = {'files': { const PDCHM_PARAMS = {'files': {
5 : 'pdchm_5.pcm', 5 : 'pdchm_5.pcm',
@@ -139,6 +147,7 @@ signal interfer_run(ecm: Interfer) ## Вызывается в м
signal interfer_error(ecm: Interfer, msg: String) ## Вызывается при ошибке. signal interfer_error(ecm: Interfer, msg: String) ## Вызывается при ошибке.
signal interfer_update(ecm: Interfer) ## Вызывается при обновлении помехи. signal interfer_update(ecm: Interfer) ## Вызывается при обновлении помехи.
signal interfer_resized(ecms: Dictionary) ## Вызывается при изменении количества сеансов помех. signal interfer_resized(ecms: Dictionary) ## Вызывается при изменении количества сеансов помех.
signal interfer_recommendate(ecm: Interfer) ## Вызывается когда назначается рекомендуемая для цели помеха
## Отправляет словарь помех в юнит, для запаковки и отправки в 5П28. ## Отправляет словарь помех в юнит, для запаковки и отправки в 5П28.
@@ -171,7 +180,7 @@ func _ready() -> void:
signaller.connect('interfer_new', Callable(self, 'send_ecm').bind(unit_caps)) signaller.connect('interfer_new', Callable(self, 'send_ecm').bind(unit_caps))
signaller.connect('interfer_off_all', Callable(self, 'on_interfer_off_all').bind(unit_caps, ecms)) signaller.connect('interfer_off_all', Callable(self, 'on_interfer_off_all').bind(unit_caps, ecms))
signaller.connect('th_aoa_update', Callable(self, 'on_th_aoa_update').bind(ecms, unit_caps)) signaller.connect('th_aoa_update', Callable(self, 'on_th_aoa_update').bind(ecms, unit_caps))
signaller.connect('interfer_off', Callable(self, 'on_interfer_off')) signaller.connect('interfer_off', Callable(self, 'on_interfer_off').bind(ecms))
signaller.connect('manual_control', Callable(self, 'on_manual_control')) signaller.connect('manual_control', Callable(self, 'on_manual_control'))
signaller.connect('full_auto', Callable(self, 'on_full_auto')) signaller.connect('full_auto', Callable(self, 'on_full_auto'))
signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno')) signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno'))
@@ -265,17 +274,23 @@ func on_data_capsrpb_received(unit0: capsrpb.CapsRpb, ecms: Dictionary) -> void:
## Вызыватся, когда пользователь выбрал помеху и выбраны цели. ## Вызыватся, когда пользователь выбрал помеху и выбраны цели.
func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> void: func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> void:
var ecm_name = interfer_name
for item in sel_threats: for item in sel_threats:
var param: Dictionary = {} var param: Dictionary = {}
var kni: float = item.aoa var kni: float = item.aoa
var id = item.id var id = item.id
param['freq'] = item.freq param['freq'] = item.freq
param['width'] = item.width param['width'] = item.width
if (item.rkrp != '') and item.fflags.rkrp:
var krp = get_krp(item)
if krp != '':
ecm_name = krp
set_rparams(item, param)
if (param['width'] < settings.WIDTH_MIN): if (param['width'] < settings.WIDTH_MIN):
param['width'] = settings.WIDTH_MIN param['width'] = settings.WIDTH_MIN
elif (param['width'] > settings.WIDTH_MAX): elif (param['width'] > settings.WIDTH_MAX):
param['width'] = settings.WIDTH_MAX param['width'] = settings.WIDTH_MAX
interfer_create(u, interfer_name, ecms, param, kni, id, thrs, SOURCE_INTERFER[0], power) interfer_create(u, ecm_name, ecms, param, kni, id, thrs, SOURCE_INTERFER[0], power)
for item in fs_arr: for item in fs_arr:
var param: Dictionary = {} var param: Dictionary = {}
@@ -287,6 +302,11 @@ func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> v
if th != null: if th != null:
param['freq'] = th.freq param['freq'] = th.freq
param['width'] = th.width param['width'] = th.width
if (th.rkrp != '') and th.fflags.rkrp:
var krp = get_krp(th)
if krp != '':
ecm_name = krp
set_rparams(th, param)
else: else:
param['freq'] = item[1] param['freq'] = item[1]
param['width'] = item[2] param['width'] = item[2]
@@ -295,10 +315,10 @@ func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> v
elif (param['width'] > settings.WIDTH_MAX): elif (param['width'] > settings.WIDTH_MAX):
param['width'] = settings.WIDTH_MAX param['width'] = settings.WIDTH_MAX
if th == null: if th == null:
interfer_create(u, interfer_name, ecms, param, kni, id, fs, SOURCE_INTERFER[1], power) interfer_create(u, ecm_name, ecms, param, kni, id, fs, SOURCE_INTERFER[1], power)
else: else:
id = th.id id = th.id
interfer_create(u, interfer_name, ecms, param, kni, id, thrs, SOURCE_INTERFER[0], power) interfer_create(u, ecm_name, ecms, param, kni, id, thrs, SOURCE_INTERFER[0], power)
func on_interfer_rcv(interfer_params: Array, unit0, ecms) -> void: func on_interfer_rcv(interfer_params: Array, unit0, ecms) -> void:
var err: bool = false var err: bool = false
@@ -371,7 +391,7 @@ func interfer_create(u, interfer_name, ecms, param, kni, id, dict, source_interf
log.error('Ошибка выбора модуля ФС для помехи: %s' %[ecm.ispp]) log.error('Ошибка выбора модуля ФС для помехи: %s' %[ecm.ispp])
signaller.emit_signal('interfer_new', ecm) signaller.emit_signal('interfer_new', ecm)
if interfer_name == 'off': if interfer_name == 'off':
signaller.emit_signal('interfer_off', ecm, ecms, thrs) signaller.emit_signal('interfer_off', ecm)
thrs.erase(ispp) thrs.erase(ispp)
ecm.tick_tx = Time.get_ticks_msec() ecm.tick_tx = Time.get_ticks_msec()
send_ecm(ecm, u) send_ecm(ecm, u)
@@ -394,7 +414,7 @@ func on_interfer_off_all(unit0, ecms: Dictionary) -> void:
for ecm in ecms.values(): for ecm in ecms.values():
ecm.krp = INTERFER_OFF ecm.krp = INTERFER_OFF
send_ecm(ecm, unit0) send_ecm(ecm, unit0)
signaller.emit_signal('interfer_off', ecm, ecms, thrs) signaller.emit_signal('interfer_off', ecm)
func on_threats_lost(th, ecms, unit0) -> void: func on_threats_lost(th, ecms, unit0) -> void:
@@ -404,7 +424,7 @@ func on_threats_lost(th, ecms, unit0) -> void:
var ecm = ecms[ecm_id] var ecm = ecms[ecm_id]
ecm.krp = INTERFER_OFF ecm.krp = INTERFER_OFF
send_ecm(ecm, unit0) send_ecm(ecm, unit0)
signaller.emit_signal('interfer_off', ecm, ecms, thrs) signaller.emit_signal('interfer_off', ecm)
func pop_id() -> int: func pop_id() -> int:
@@ -470,6 +490,13 @@ func on_threats_update(threat, ecms, unit_caps):
if thrs[ecm_i] == th_id: if thrs[ecm_i] == th_id:
ecm = ecms[ecm_i] ecm = ecms[ecm_i]
ecm.params['freq'] = threat.freq ecm.params['freq'] = threat.freq
ecm.params['width'] = threat.width
if (threat.rkrp != '') and threat.fflags.rkrp:
var krp = get_krp(threat)
if krp != '':
ecm.krp = krp
set_rparams(threat, ecm.params)
emit_signal('interfer_recommendate', ecm)
ecm.kni = threat.aoa ecm.kni = threat.aoa
set_nmfs(ecm) set_nmfs(ecm)
if threat.tmod != 'fm': if threat.tmod != 'fm':
@@ -538,3 +565,45 @@ func find_threat(freq: int, aoa: float):
if fs_index_arr[0] == fs_index: if fs_index_arr[0] == fs_index:
return th return th
return null return null
func set_rparams(threat: threats.Threat, params: Dictionary):
if threat.rparams.has('freq'):
params['freq'] = threat.rparams['freq']
else:
params['freq'] = threat.freq
if threat.rparams.has('period'):
params['period'] = threat.rparams['period']
if threat.rparams.has('width'):
params['width'] = threat.rparams['width']
else:
params['width'] = threat.width
if threat.rparams.has('filename'):
params['filename'] = threat.rparams['filename']
func get_krp(threat: threats.Threat):
var krp = ''
if RECOMMEND_INTERFER.has(threat.rkrp):
krp = RECOMMEND_INTERFER[threat.rkrp]
return krp
elif threat.rkrp == INTERFER_IQFILE:
if not threat.rparams.has('filename'): return krp
for key in ITERFER_MODE.keys():
var ecm_params = ITERFER_MODE[key][1]
if not ecm_params.has('files'): continue
if ecm_params['files'] == threat.rparams['filename']:
krp = key
return krp
return krp
func on_interfer_off(ecm: Interfer, ecms):
var sz = ecms.size()
ecms.erase(ecm.ispp)
thrs.erase(ecm.ispp)
interfer.cu.erase(ecm.ispp)
interfer.fs.erase(ecm.ispp)
interfer.push_id(ecm.ispp)
if sz != ecms.size():
interfer.call_deferred('emit_signal', 'interfer_resized', ecms)

View File

@@ -107,7 +107,7 @@ signal interfer_new(ecm: interfer.Interfer)
## [param ecm] - Новая помеха.[br] ## [param ecm] - Новая помеха.[br]
## [param ecms] - словарь помех.[br] ## [param ecms] - словарь помех.[br]
## [param thrs] - словарь id помех и связанных с ними целей.[br] ## [param thrs] - словарь id помех и связанных с ними целей.[br]
signal interfer_off(ecm: interfer.Interfer, ecms: Dictionary, thrs: Dictionary) signal interfer_off(ecm: interfer.Interfer)
## Вызывается при нажатии отключить. ## Вызывается при нажатии отключить.

View File

@@ -18,7 +18,7 @@ class Threat:
var power: float ## Уровень принимаемого сигнала, дБм. var power: float ## Уровень принимаемого сигнала, дБм.
var proto: String ## Тип протокола источника сигнала. var proto: String ## Тип протокола источника сигнала.
var rkrp: String ## Рекомендуемый режим помехи. var rkrp: String ## Рекомендуемый режим помехи.
var rparams: String ## Рекомендуемые параметры помехи. var rparams: Dictionary ## Рекомендуемые параметры помехи.
var salt: float ## Координаты старта, высота от уровня моря, м. var salt: float ## Координаты старта, высота от уровня моря, м.
var slat: float ## Координаты старта, широта в градусах. var slat: float ## Координаты старта, широта в градусах.
var slon: float ## Координаты старта, долгота в градусах. var slon: float ## Координаты старта, долгота в градусах.