Compare commits
10 Commits
211c629454
...
be156c1fde
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
be156c1fde | ||
|
|
4e9fa826a8 | ||
|
|
cf3f882e79 | ||
|
|
86420ad320 | ||
|
|
db3e4bf574 | ||
|
|
6f1080d083 | ||
|
|
02aa2d9723 | ||
|
|
c00d9b8429 | ||
|
|
8e256b07ca | ||
|
|
44f2ed3dba |
@@ -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=[]
|
||||
|
||||
@@ -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=[]
|
||||
|
||||
@@ -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
1
consts.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://gvpooxgqqapr
|
||||
142
fs.gd
142
fs.gd
@@ -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):
|
||||
|
||||
46
interfers.gd
46
interfers.gd
@@ -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
1
interfers.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dkujodmapae6p
|
||||
24
main.gd
24
main.gd
@@ -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
1
main.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dirnw021k0sgw
|
||||
28
main.tscn
28
main.tscn
@@ -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
|
||||
|
||||
|
||||
@@ -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
1
save.json
Normal 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
1
table/table.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://c7yk2vx6bqrwb
|
||||
65
threats.gd
65
threats.gd
@@ -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
1
threats.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://ba7gmy80uig64
|
||||
1
tools.gd.uid
Normal file
1
tools.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://d306xafvkrl2k
|
||||
Reference in New Issue
Block a user