Compare commits

...

10 Commits

17 changed files with 204 additions and 122 deletions

View File

@@ -15,6 +15,7 @@ dest_files=["res://.godot/imported/DejaVuSans.ttf-9b3237397afd1f73977bc4b24b1096
Rendering=null
antialiasing=1
generate_mipmaps=false
disable_embedded_bitmaps=true
multichannel_signed_distance_field=false
msdf_pixel_range=8
msdf_size=48
@@ -22,6 +23,7 @@ allow_system_fallback=true
force_autohinter=false
hinting=1
subpixel_positioning=1
keep_rounding_remainders=true
oversampling=0.0
Fallbacks=null
fallbacks=[]

View File

@@ -15,6 +15,7 @@ dest_files=["res://.godot/imported/DejaVuSansCondensed.ttf-cf82d94147dd2c6295544
Rendering=null
antialiasing=1
generate_mipmaps=false
disable_embedded_bitmaps=true
multichannel_signed_distance_field=false
msdf_pixel_range=8
msdf_size=48
@@ -22,6 +23,7 @@ allow_system_fallback=true
force_autohinter=false
hinting=1
subpixel_positioning=1
keep_rounding_remainders=true
oversampling=0.0
Fallbacks=null
fallbacks=[]

View File

@@ -3,11 +3,6 @@ extends Node2D
const MENU_SCENE_FILE: String = 'res://меню.tscn'
# Адрес имитатора
const MAIN_ADDR = [ '127.0.0.1', 42022 ]
const DST_ADDR = [ '127.0.0.1', 42023 ]
const TABLE_ROW_HIGHT = 34 # Высота строки таблицы в пикселях
const TABLE_ROW_POINTS = [ Vector2(1, 0), Vector2(1247, 0), Vector2(1247, TABLE_ROW_HIGHT), Vector2(1, TABLE_ROW_HIGHT), Vector2(1, 0) ]
const TABLE_MARKER_ADJ = Vector2(22.0, 9.0)

1
consts.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://gvpooxgqqapr

142
fs.gd
View File

@@ -33,34 +33,34 @@ const LBLS_PARAM: Array = [
const OPT_BTN_TEXT: Array = ['не исправно', 'исправно', 'не определено']
# [номер сектора, номер литеры, номер ФС, координата x, координата y]
const FS_PARAM = [
[1, 1, 17, 0, 0],
[1, 2, 19, 50, 0],
[1, 3, 18, 100, 0],
[1, 4, 20, 150, 0],
[1, 5, 21, 200, 0],
[1, 6, 22, 250, 0],
[1, 7, 31, 300, 0],
[2, 1, 33, 0, 50],
[2, 2, 34, 50, 50],
[2, 3, 35, 100, 50],
[2, 4, 36, 150, 50],
[2, 5, 37, 200, 50],
[2, 6, 38, 250, 50],
[2, 7, 47, 300, 50],
[3, 1, 49, 0, 100],
[3, 2, 51, 50, 100],
[3, 3, 50, 100, 100],
[3, 4, 52, 150, 100],
[3, 5, 53, 200, 100],
[3, 6, 54, 250, 100],
[3, 7, 63, 300, 100],
[4, 1, 65, 0, 150],
[4, 2, 66, 50, 150],
[4, 3, 67, 100, 150],
[4, 4, 68, 150, 150],
[4, 5, 69, 200, 150],
[4, 6, 70, 250, 150],
[4, 7, 87, 300, 150],
[1, 1, 11, 0, 0],
[1, 2, 12, 50, 0],
[1, 3, 13, 100, 0],
[1, 4, 14, 150, 0],
[1, 5, 15, 200, 0],
[1, 6, 16, 250, 0],
[1, 7, 17, 300, 0],
[2, 1, 21, 0, 50],
[2, 2, 22, 50, 50],
[2, 3, 23, 100, 50],
[2, 4, 24, 150, 50],
[2, 5, 25, 200, 50],
[2, 6, 26, 250, 50],
[2, 7, 27, 300, 50],
[3, 1, 31, 0, 100],
[3, 2, 32, 50, 100],
[3, 3, 33, 100, 100],
[3, 4, 34, 150, 100],
[3, 5, 35, 200, 100],
[3, 6, 36, 250, 100],
[3, 7, 37, 300, 100],
[4, 1, 41, 0, 150],
[4, 2, 42, 50, 150],
[4, 3, 43, 100, 150],
[4, 4, 44, 150, 150],
[4, 5, 45, 200, 150],
[4, 6, 46, 250, 150],
[4, 7, 47, 300, 150],
]
const MSG8_DATA = [
['roll','Крен корабля, градусы:'],
@@ -222,56 +222,50 @@ func set_fs(interfer: Interfers.Interfer):
var lit: int
var freq = interfer.get_val('freq')
var width = interfer.get_val('width')
if (freq == '') or (width == ''):
fs_of_old(interfer)
return 2
for i in range(len(BANDS)):
if (float(freq) >= BANDS[i][0]) and (float(freq) <= BANDS[i][1]):
lit = i+1
if (float(interfer.options['kni']) < 0) or (float(interfer.options['kni'] > 360)):
fs_of_old(interfer)
return 2
for i in range(len(SECTORS)):
if i < 1:
if (float(interfer.options['kni']) >= SECTORS[i][0]) or (float(interfer.options['kni']) <= SECTORS[i][1]):
sec = i+1
else:
if (float(interfer.options['kni']) >= SECTORS[i][0]) and (float(interfer.options['kni']) <= SECTORS[i][1]):
sec = i+1
var fs_arr: Array
fs_arr = FS_PARAM.filter(func(item): return item[0] == sec)
fs_arr = fs_arr.filter(func(item): return item[1] == lit)
if len(fs_arr) > 0:
var fs_num = fs_arr[0][2]
if g_fs_dict[fs_num].isg == 1:
if g_fs_dict[fs_num].interfer == null:
g_fs_dict[fs_num].interfer = interfer
if (interfer.active_fs != g_fs_dict[fs_num]) and (interfer.active_fs != null):
fs_off(interfer.active_fs)
interfer.active_fs = g_fs_dict[fs_num]
g_fs_dict[fs_num].pow = float(interfer.options['powp'])
g_fs_dict[fs_num].freq = float(freq)
g_fs_dict[fs_num].width = float(width)
update_fs(g_fs_dict[fs_num], float(interfer.options['powp']), float(freq), float(width))
g_fs_dict[fs_num].btn.set_texture_normal(btn_txr2)
if g_active_fs == g_fs_dict[fs_num]:
on_btn_fs(g_active_fs)
return 1
elif g_fs_dict[fs_num].interfer == interfer:
update_fs(g_fs_dict[fs_num], float(interfer.options['powp']), float(freq), float(width))
if g_active_fs == g_fs_dict[fs_num]:
on_btn_fs(g_active_fs)
return 1
else:
var fs_item = null
var ecm_name = interfer.options.krp
if Interfers.INTERFER_NAMES.has(ecm_name):
if ecm_name == Interfers.IQ_FL_NAME:
var iq_fl_name = interfer.get_val('filename')
if not iq_fl_name in Interfers.INTERFER_NAMES[Interfers.IQ_FL_NAME]:
fs_of_old(interfer)
return 3
else:
fs_of_old(interfer)
return 4
return 2
else:
fs_of_old(interfer)
return 2
if (freq == ''):
fs_of_old(interfer)
return 2
if g_fs_dict.has(interfer.options['nmfs']):
fs_item = g_fs_dict[interfer.options['nmfs']]
else:
fs_of_old(interfer)
return 2
if fs_item.isg == 1:
if fs_item.interfer == null:
fs_item.interfer = interfer
if (interfer.active_fs != fs_item) and (interfer.active_fs != null):
fs_off(interfer.active_fs)
interfer.active_fs = fs_item
fs_item.pow = float(interfer.options['powp'])
fs_item.freq = float(freq)
fs_item.width = float(width)
update_fs(fs_item, float(interfer.options['powp']), float(freq), float(width))
fs_item.btn.set_texture_normal(btn_txr2)
if g_active_fs == fs_item:
on_btn_fs(g_active_fs)
return 1
elif fs_item.interfer == interfer:
update_fs(fs_item, float(interfer.options['powp']), float(freq), float(width))
if g_active_fs == fs_item:
on_btn_fs(g_active_fs)
return 1
else:
fs_of_old(interfer)
return 3
else:
fs_of_old(interfer)
return 4
func fs_of_old(interfer):

1
fs.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://3ko30lmoppek

View File

@@ -14,13 +14,13 @@ const TableCellType5 = preload('res://ячейка-2.tscn')
const TableCellType6 = preload('res://кнопка-5.tscn')
const TableHeader = preload('res://table/header.tscn')
# Индекс колонки: 0 1 2 3 4 5 6
const TABLE_HEADERS = [ 'Индекс', 'Состояние', 'Помеха', 'Мощность', 'Кур. уг.', 'Частота', 'Ш. диап.']
const TABLE_HEADER_TYPES = [ TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader]
const TABLE_HEADER_ALIGNMENTS = [ HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER]
const TABLE_ROW_TYPES = [ TableCellType1, TableCellType6, TableCellType1, TableCellType1, TableCellType1, TableCellType1, TableCellType1]
const TABLE_ROW_ALIGNMENTS = [ HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER]
const TABLE_COLUMN_SIZES = [ 82, 150, 82, 100, 82, 90, 150]
# Индекс колонки: 0 1 2 3 4 5 6 7
const TABLE_HEADERS = [ 'Индекс', 'Состояние', 'Помеха', 'Мощность', 'Кур. уг.', 'Частота', 'Ш. диап.', 'Номер ФС']
const TABLE_HEADER_TYPES = [ TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader]
const TABLE_HEADER_ALIGNMENTS = [ HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER]
const TABLE_ROW_TYPES = [ TableCellType1, TableCellType6, TableCellType1, TableCellType1, TableCellType1, TableCellType1, TableCellType1, TableCellType1]
const TABLE_ROW_ALIGNMENTS = [ HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER]
const TABLE_COLUMN_SIZES = [ 82, 130, 100, 82, 82, 82, 82, 82]
const COLUMN_ISPP = 0 # Индекс сейанса постановки помехи
const COLUMN_SVK = 1 # Состояние выполнения помехи
@@ -29,7 +29,7 @@ const COLUMN_POWP = 3 # Мощность излучения
const COLUMN_KNI = 4 # Курсовой угол
const COLUMN_FREQ = 5 # Частота
const COLUMN_WIDTH = 6 # Ширина диапазона
const COLUMN_NUM_FS = 7 # Номер модуля фс
# Индексы колонок, которым можно задавать выравнивание текста
const TABLE_ALLIGNED_COLUMNS = [
@@ -38,7 +38,8 @@ const TABLE_ALLIGNED_COLUMNS = [
COLUMN_POWP,
COLUMN_KNI,
COLUMN_FREQ,
COLUMN_WIDTH, ]
COLUMN_WIDTH,
COLUMN_NUM_FS]
# Состояние выполнения команды поставновки помехи
const SVK = ['Подготовка', 'Выполнено', 'Ошибка', 'Занято', 'Неисправно']
@@ -46,10 +47,31 @@ const SVK = ['Подготовка', 'Выполнено', 'Ошибка', 'За
# Номера колонок
const COLUMN_OPT = [[COLUMN_SVK, SVK]]
const COLUMN_OPT_BTN = [COLUMN_SVK]
const IQ_FL_NAME = 'IQ-файл'
const LCHM = 'Линейная ЧМ'
const INTERFER_NAMES: Dictionary = {
'off' : null,
'ПСП + ФМ-2' : null,
LCHM : null,
IQ_FL_NAME : ['SRNGPS.pcm',
'MCHM1.pcm',
'PDM2_20.pcm',
'PDM4_20.pcm',
'PDM4S_5.pcm',
'FM_5.pcm',
'K1.pcm',
'OZP1.pcm',
'SVI1_LIT2.pcm',
'SVI1_LIT3.pcm',
'SVM2_LIT2.pcm',
'SVM2_LIT3.pcm',
'ERLS.pcm',
'SRNI1_LIT4.pcm',
'SRNI1_LIT5.pcm'] }
# Помеха
class Interfer:
# параметры цели, второе значение, разрешение отправки.
var get_data: Dictionary = {
'fpga_ver ': '',
'brd_ver': '',
@@ -63,6 +85,7 @@ class Interfer:
'krp': '',
'powp': 0.0,
'kni': 0.0,
'nmfs': 0,
'params': {},
'get': [],
}
@@ -82,6 +105,7 @@ class Interfer:
new_row.append(str(options['kni']))
new_row.append(get_val('freq'))
new_row.append(get_val('width'))
new_row.append(str(options['nmfs']))
return new_row
func get_val(val):
@@ -92,7 +116,7 @@ class Interfer:
func update_interfer(data: Dictionary):
options.merge(data, true)
options['nmfs'] = int(options['nmfs'])
func set_interfer(data):
if interfers.has(data['ispp']):

1
interfers.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://dkujodmapae6p

24
main.gd
View File

@@ -1,6 +1,11 @@
extends Node2D
var sock = PacketPeerUDP.new()
# Адрес имитатора
var main_addr = [ '127.0.0.1', 42022 ]
var dst_addr = [ '127.0.0.1', 42023 ]
@onready var table_threats = get_node('ColorRect/tabs/threats/scroll_thr/table_t')
@onready var btn_add_threats = get_node('ColorRect/tabs/threats/btn_add')
@onready var btn_del_threats = get_node('ColorRect/tabs/threats/btn_del')
@@ -28,8 +33,8 @@ func _ready():
'chkbx_rt': chkbx_rotate,
'scroll_thr': scroll_thr,
'panel': panel_threats}
sock.bind(Consts.MAIN_ADDR[1], Consts.MAIN_ADDR[0])
sock.set_dest_address(Consts.DST_ADDR[0], Consts.DST_ADDR[1])
sock.bind(main_addr[1], main_addr[0])
sock.set_dest_address(dst_addr[0], dst_addr[1])
Threats.init_treats(table_threats, nodes)
Interfers.init_pomehi(table_pomehi)
fs.init_fs($ColorRect/tabs/pomehi, $ColorRect/tabs/pomehi/fs_rect)
@@ -78,5 +83,18 @@ func _process(delta):
var data: = sock.get_packet()
var addr: = sock.get_packet_ip()
var port: = sock.get_packet_port()
print_debug()
on_receive(data)
func parse_command_line() -> void:
var args = OS.get_cmdline_args()
for argument in args:
argument = argument.strip_edges()
if argument.begins_with("--main_ip="):
var key_value = argument.split("=")
if key_value.size() == 2:
main_addr[0] = key_value[1].strip_edges()
if argument.begins_with("--dst_ip="):
var key_value = argument.split("=")
if key_value.size() == 2:
dst_addr[0] = key_value[1].strip_edges()

1
main.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://dirnw021k0sgw

View File

@@ -1,7 +1,7 @@
[gd_scene load_steps=10 format=3 uid="uid://87gtvqd7bbje"]
[ext_resource type="Script" path="res://main.gd" id="1_jt2ds"]
[ext_resource type="Script" path="res://table/table.gd" id="2_61iss"]
[ext_resource type="Script" uid="uid://dirnw021k0sgw" path="res://main.gd" id="1_jt2ds"]
[ext_resource type="Script" uid="uid://c7yk2vx6bqrwb" path="res://table/table.gd" id="2_61iss"]
[ext_resource type="Texture2D" uid="uid://cex4jiu1pcj3x" path="res://edit-add-0.png" id="3_0aqi0"]
[ext_resource type="Texture2D" uid="uid://cx746np1wexnd" path="res://edit-add-1.png" id="4_s8cxp"]
[ext_resource type="Texture2D" uid="uid://wh7p3t4frxf" path="res://disconnect.png" id="6_hj3vd"]
@@ -25,9 +25,10 @@ self_modulate = Color(0, 0, 0, 1)
layout_mode = 0
offset_right = 1594.0
offset_bottom = 897.0
current_tab = 0
current_tab = 1
[node name="threats" type="Panel" parent="ColorRect/tabs"]
visible = false
self_modulate = Color(0, 0, 0, 1)
light_mask = 2
layout_mode = 2
@@ -38,7 +39,7 @@ metadata/_tab_index = 0
layout_mode = 0
offset_left = 5.0
offset_top = 78.0
offset_right = 1597.0
offset_right = 1693.0
offset_bottom = 876.0
[node name="table_t" type="GridContainer" parent="ColorRect/tabs/threats/scroll_thr"]
@@ -48,36 +49,36 @@ node_type_file = "res://ячейка-1.tscn"
[node name="btn_add" type="TextureButton" parent="ColorRect/tabs/threats"]
layout_mode = 0
offset_left = 1533.0
offset_left = 1640.0
offset_top = -2.0
offset_right = 1581.0
offset_right = 1688.0
offset_bottom = 46.0
texture_normal = ExtResource("3_0aqi0")
texture_pressed = ExtResource("4_s8cxp")
[node name="btn_del" type="TextureButton" parent="ColorRect/tabs/threats"]
layout_mode = 0
offset_left = 1499.0
offset_left = 1606.0
offset_top = 1.0
offset_right = 1547.0
offset_right = 1654.0
offset_bottom = 67.0
scale = Vector2(0.62, 0.62)
texture_normal = ExtResource("6_hj3vd")
[node name="btn_save" type="TextureButton" parent="ColorRect/tabs/threats"]
layout_mode = 0
offset_left = 1454.0
offset_top = 0.999999
offset_right = 1966.0
offset_left = 1561.0
offset_top = 1.0
offset_right = 2073.0
offset_bottom = 513.0
scale = Vector2(0.08, 0.08)
texture_normal = ExtResource("6_xh685")
[node name="btn_load" type="TextureButton" parent="ColorRect/tabs/threats"]
layout_mode = 0
offset_left = 1410.0
offset_left = 1517.0
offset_top = 1.0
offset_right = 1922.0
offset_right = 2029.0
offset_bottom = 513.0
scale = Vector2(0.08, 0.08)
texture_normal = ExtResource("7_v45w5")
@@ -136,7 +137,6 @@ offset_bottom = 50.0
text = "100 целей"
[node name="pomehi" type="Panel" parent="ColorRect/tabs"]
visible = false
layout_mode = 2
metadata/_tab_index = 1

View File

@@ -12,7 +12,7 @@ config_version=5
config/name="Имитатор ПО КАПС РПБ для МП-1К"
run/main_scene="res://main.tscn"
config/features=PackedStringArray("4.3")
config/features=PackedStringArray("4.4")
config/icon="res://icon.png"
[autoload]
@@ -26,7 +26,7 @@ fs="*res://fs.gd"
[display]
window/size/viewport_width=1600
window/size/viewport_width=1700
window/size/viewport_height=900
window/stretch/mode="2d"

1
save.json Normal file
View File

@@ -0,0 +1 @@
[{"aoa":20.0,"freq":2480.0,"id":1,"lat":47.5,"lon":38.3,"power":20.0,"tick":27801,"width":20.0},{"alt":1.2,"aoa":210.0,"freq":2480.0,"freqm":"lfm","id":2,"lat":47.6,"lon":38.5,"power":20.0,"tick":28802,"width":20.0},{"alt":3.0,"aoa":30.0,"freq":2480.0,"id":3,"lat":47.0,"lon":39.0,"power":20.0,"tick":27801,"tmod":"fm","width":20.0},{"alt":4.0,"aoa":40.0,"freq":2480.0,"freqm":"lfm","id":4,"lat":46.8,"lon":39.2,"power":20.0,"tick":28803,"width":20.0},{"alt":0.4,"aoa":50.0,"freq":2480.0,"freqm":"lfm","id":5,"lat":47.2,"lon":38.7,"power":20.0,"tick":27801,"width":20.0},{"alt":1.0,"aoa":60.0,"freq":2480.0,"id":6,"lat":46.5,"lon":37.7,"power":20.0,"tick":28803,"width":20.0},{"alt":6.0,"aoa":80.0,"freq":3000.0,"id":7,"lat":46.0,"lon":36.0,"power":20.0,"tick":27801,"width":20.0},{"alt":0.1,"aoa":90.0,"freq":5000.0,"id":8,"lat":45.0,"lon":35.1,"power":20.0,"tick":28803,"width":20.0},{"alt":0.3,"aoa":100.0,"freq":1000.0,"id":9,"lat":46.9,"lon":37.4,"power":20.0,"tick":27801,"width":20.0}]

1
table/table.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://c7yk2vx6bqrwb

View File

@@ -6,6 +6,7 @@ var msg_counter : int = 0 # Счётчик отправленных п
var g_table: GridContainer
var send_flag = true
const TableCellType1 = preload('res://ячейка-1.tscn')
const TableCellType2 = preload('res://кнопка-3.tscn')
@@ -15,13 +16,13 @@ const TableCellType5 = preload('res://ячейка-2.tscn')
const TableCellType6 = preload('res://кнопка-5.tscn')
const TableHeader = preload('res://table/header.tscn')
# Индекс колонки: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
const TABLE_HEADERS = ['ID Цели', 'Курc.град', 'Частота', 'Ш. диап.', 'Ампл.', 'T обновл.', 'Мод.', 'Реж. см. F', 'Ск. пер.', 'Протокол', 'Ст. дол.', 'Ст. шир.', 'Cт. выс.', 'Тек. дол.', 'Тек. шир.', 'Тек. выс.', ]
const TABLE_HEADER_TYPES = [ TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader]
const TABLE_HEADER_ALIGNMENTS = [ HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER]
const TABLE_ROW_TYPES = [ TableCellType1, TableCellType5, TableCellType5, TableCellType5, TableCellType5, TableCellType5, TableCellType6, TableCellType6, TableCellType5, TableCellType6, TableCellType5, TableCellType5, TableCellType5, TableCellType5, TableCellType5, TableCellType5]
const TABLE_ROW_ALIGNMENTS = [ HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_LEFT, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER]
const TABLE_COLUMN_SIZES = [ 82, 82, 82, 82, 82, 90, 150, 150, 80, 150, 82, 82, 82, 82, 82, 82]
# Индекс колонки: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
const TABLE_HEADERS = ['ID Цели', 'Курc.град', 'Частота', 'Ш. диап.', 'Ампл.', 'T обновл.', 'Мод.', 'Реж. см. F', 'Ск. пер.', 'Протокол', 'Ст. дол.', 'Ст. шир.', 'Cт. выс.', 'Тек. дол.', 'Тек. шир.', 'Тек. выс.', 'Рек. тип помехи']
const TABLE_HEADER_TYPES = [ TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader]
const TABLE_HEADER_ALIGNMENTS = [ HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER]
const TABLE_ROW_TYPES = [ TableCellType1, TableCellType5, TableCellType5, TableCellType5, TableCellType5, TableCellType5, TableCellType6, TableCellType6, TableCellType5, TableCellType6, TableCellType5, TableCellType5, TableCellType5, TableCellType5, TableCellType5, TableCellType5, TableCellType6]
const TABLE_ROW_ALIGNMENTS = [ HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_LEFT, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER]
const TABLE_COLUMN_SIZES = [ 82, 82, 82, 82, 82, 90, 150, 150, 80, 150, 82, 82, 82, 82, 82, 82, 100]
const COLUMN_ID = 0 # Идентификатор цели
const COLUMN_AOA = 1 # Курсовой угол на источник сигнала, градусы
@@ -39,6 +40,7 @@ const COLUMN_SALT = 12 # Координаты старта, высота о
const COLUMN_LAT = 13 # Текущие координаты, долгота в градусах
const COLUMN_LON = 14 # Текущие координаты, широта в градусах
const COLUMN_ALT = 15 # Текущая высота, метры
const COLUMN_REC = 16 # Текущая высота, метры
# Индексы колонок, которым можно задавать выравнивание текста
const TABLE_ALLIGNED_COLUMNS = [
@@ -82,9 +84,11 @@ const FREQM = ['<неопр.>', 'fhss', 'lfm', 'const']
const M_PROTO = ['<неопр.>', '3dlink', 'skyhopperpro', 'picardiooem', 'solo7', 'j11',
'mavlink', 'ltm', 'hc12', 'df1', ]
var rkrp = []
# Номера колонок
const COLUMN_OPT = [[COLUMN_TMOD, MODE_TYPES], [COLUMN_FREQM, FREQM], [COLUMN_PROTO, M_PROTO]]
const COLUMN_OPT_BTN = [COLUMN_TMOD, COLUMN_FREQM, COLUMN_PROTO]
var COLUMN_OPT = [[COLUMN_TMOD, MODE_TYPES], [COLUMN_FREQM, FREQM], [COLUMN_PROTO, M_PROTO], [COLUMN_REC, rkrp]]
const COLUMN_OPT_BTN = [COLUMN_TMOD, COLUMN_FREQM, COLUMN_PROTO, COLUMN_REC]
const ID_ARRAY_LEN = 150 # Размер пула номеров целей
@@ -101,7 +105,9 @@ class Threat:
'tmod':['<неопр.>',false],
'freqm':['<неопр.>',false],
'baud':[0.0,false],
'proto':['<неопр.>',false],
'rparams': [{},false],
'rkrp': ['<неопр.>', false],
'proto':['<неопр.>', false],
'slon':[0.0,false],
'slat':[0.0,false],
'salt':[0.0,false],
@@ -143,6 +149,7 @@ class Threat:
new_rows.append(_check_value(row.lat))
new_rows.append(_check_value(row.lon))
new_rows.append(_check_value(row.alt))
new_rows.append(_check_value(row.rkrp))
return new_rows
@@ -167,6 +174,8 @@ class Threat:
value = Tools.check_len(val, value)
row.freq[0] = value
row.freq[1] = Tools.check_empty(value)
if row.rparams[0].has('freq'):
row.rparams[0]['freq'] = row.freq[0]
return value
func set_width(val):
@@ -266,7 +275,25 @@ class Threat:
return value
func set_rname(val):
var value = str(val)
row.rkrp[0] = value
row.rkrp[1] = false if value == '<неопр.>' else true
row.rparams[1] = row.rkrp[1]
row.rparams[0] = {}
if row.freq[1]:
row.rparams[0]['freq'] = row.freq[0]
if row.width[1]:
row.rparams[0]['width'] = row.width[0]
if row.rkrp[0] == Interfers.LCHM:
row.rparams[0]['period'] = 1.0
elif row.rkrp[0] == Interfers.IQ_FL_NAME:
row.rparams[0]['filename'] = Interfers.INTERFER_NAMES[Interfers.IQ_FL_NAME][0]
return value
func init_treats(table, nodes): # Инициализация вкладки с целями
set_rkrp()
for i in range(ID_ARRAY_LEN): # Заполняет массив ID целей
id_array.append(i+1)
table.set_header(TABLE_HEADER_TYPES)
@@ -301,12 +328,14 @@ func load_treats(table):
var json_data = json_conv.get_data()
for item in json_data:
if item.has('id'):
var id = item['id']
var id = int(item['id'])
id_array.erase(int(id))
var threat : = Threat.new(id, table.get_rows_count())
treats['%d' % id] = threat
for key in item:
threat.row[key] = [item[key], true]
if key == 'id': threat.row[key] = [int(item[key]), true]
elif key == 'tick': threat.row[key] = [int(item[key]), true]
else: threat.row[key] = [item[key], true]
var row = threat.update_rows()
table.add_row(TABLE_ROW_TYPES)
table.set_row_text(table.get_rows_count()-1, row)
@@ -404,7 +433,8 @@ func set_value(val : String, treat_id : String, column : int):
return treat.set_lat(val)
COLUMN_ALT:
return treat.set_alt_pressed(val)
COLUMN_REC:
return treat.set_rname(val)
func on_row_pressed(i_row: int, table):
table.clear_rows_selected()
@@ -462,11 +492,15 @@ func get_threats_data():
data_to_json['mis'] = []
for key in treats:
var treat = treats[key]
var flag = int(key) % 2
if int(send_flag) ^ flag:
continue
set_ticks(treat)
var data = treat.get_data()
data_to_json['mis'].append(data)
var json = JSON.new().stringify(data_to_json)
var pac = json.to_utf8_buffer()
send_flag = not send_flag
return pac
@@ -525,3 +559,8 @@ func on_thr_gen(table):
init_opt_btns(table.get_rows_count()-1, table, threat)
table.connect_columns(self, 'text_submitted', 'on_edit_entry', TABLE_ENTRY_COLUMNS, [])
table.connect_columns(self, 'item_selected', 'on_item_selected', COLUMN_OPT_BTN, [])
func set_rkrp():
rkrp.append('<неопр.>')
for key in Interfers.INTERFER_NAMES.keys():
rkrp.append(key)

1
threats.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://ba7gmy80uig64

1
tools.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://d306xafvkrl2k