Доработка. Добавлена поддержка сообщений типа 6,7,8.

This commit is contained in:
MaD_CaT
2023-09-18 11:20:09 +03:00
parent bd0af07437
commit 4b3ed240d0
14 changed files with 607 additions and 63 deletions

186
interfers.gd Normal file
View File

@@ -0,0 +1,186 @@
extends Node
var id_array: Array # Массив id целей
var interfers : Dictionary # Словарь целей
var msg_counter : int = 0 # Счётчик отправленных пакетов
var g_table # таблица с помехами
const TableCellType1 = preload('res://ячейка-1.tscn')
const TableCellType2 = preload('res://кнопка-3.tscn')
const TableCellType3 = preload('res://кнопка-4.tscn')
const TableCellType4 = preload('res://заголовок.tscn')
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]
const COLUMN_ISPP = 0 # Индекс сейанса постановки помехи
const COLUMN_SVK = 1 # Состояние выполнения помехи
const COLUMN_KRP = 2 # Помеха
const COLUMN_POWP = 3 # Мощность излучения
const COLUMN_KNI = 4 # Курсовой угол
const COLUMN_FREQ = 5 # Частота
const COLUMN_WIDTH = 6 # Ширина диапазона
# Индексы колонок, которым можно задавать выравнивание текста
const TABLE_ALLIGNED_COLUMNS = [
COLUMN_ISPP,
COLUMN_KRP,
COLUMN_POWP,
COLUMN_KNI,
COLUMN_FREQ,
COLUMN_WIDTH, ]
# Состояние выполнения команды поставновки помехи
const SVK = ['Подготовка', 'Выполнено', 'Ошибка', 'Занято', 'Неисправно']
# Номера колонок
const COLUMN_OPT = [[COLUMN_SVK, SVK]]
const COLUMN_OPT_BTN = [COLUMN_SVK]
const ID_ARRAY_LEN = 100 # Размер пула номеров целей
# Помеха
class Interfer:
# параметры цели, второе значение, разрешение отправки.
var get_data: Dictionary = {
'fpga_ver ': '',
'brd_ver': '',
'mcu_ver': '',
'soc_temp': '',
'rf_temp': '',
'psu_temp': '',
}
var options: Dictionary = {
'ispp': 0,
'krp': '',
'powp': 0.0,
'kni': 0.0,
'params': {},
'get': [],
}
var svk: int = 0
var row_id: int
var active_fs: fs.Fs
func _init(data: Dictionary):
options.merge(data, true)
func update_row():
var new_row: Array = []
new_row.append(str(options['ispp']))
new_row.append(str(SVK[svk]))
new_row.append(str(options['krp']))
new_row.append(str(options['powp']))
new_row.append(str(options['kni']))
new_row.append(get_val('freq'))
new_row.append(get_val('width'))
return new_row
func get_val(val):
if options['params'].has(val) :
return str(options['params'][val])
else:
return ''
func update_interfer(data: Dictionary):
options.merge(data, true)
func set_interfer(data):
if interfers.has(data['ispp']):
interfers[data['ispp']].update_interfer(data)
var new_row = interfers[data['ispp']].update_row()
g_table.set_row_text(interfers[data['ispp']].row_id, new_row)
else:
var new_interfer = Interfer.new(data)
interfers[data['ispp']] = new_interfer
on_row_add(g_table, interfers[data['ispp']])
var cmd_state: int = fs.set_fs(interfers[data['ispp']])
interfers[data['ispp']].svk = cmd_state
var cell = g_table.get_node2(COLUMN_SVK, interfers[data['ispp']].row_id)
cell.select(cmd_state)
func init_table(table: Table, sizes: Array):
for i_row in table.get_rows_count():
table.set_nodes_min_size(i_row, sizes)
func init_opt_btns(row : int, table):
for item in COLUMN_OPT:
var i_col = item[0]
var opt_arr = item[1]
var cell = table.get_node2(i_col, row)
for opt in opt_arr:
cell.add_item(opt)
cell.select(0)
func init_pomehi(table): # Инициализация вкладки с целями
g_table = table
g_table.set_header(TABLE_HEADER_TYPES)
g_table.set_header_text(TABLE_HEADERS)
init_table(g_table, TABLE_COLUMN_SIZES)
g_table.connect('row_pressed', Callable(self, 'on_row_pressed').bind(g_table))
func on_row_add(table, interfer):
var row = interfer.update_row()
table.add_row(TABLE_ROW_TYPES)
table.set_row_text(table.get_rows_count()-1, row)
table.set_columns_min_size(TABLE_COLUMN_SIZES)
table.set_node_user_data(0, table.get_rows_count()-1, interfer)
interfer.row_id = table.get_rows_count()-1
init_opt_btns(table.get_rows_count()-1, table)
table.connect_columns(self, 'item_selected', 'on_item_selected', COLUMN_OPT_BTN, [])
func on_item_selected(item_num, node):
var optbtn_text = node[0].text
var indexis = g_table.get_key_indexes(node[0].name)
var row_i = indexis[1]
var col_i = indexis[0]
var cell = g_table.get_node2(0,row_i)
var interfer = g_table.get_node_user_data(0, row_i)
interfer.svk = item_num
func get_msg7_data():
var data_to_json : Dictionary
data_to_json['ts'] = 7
msg_counter += 1
data_to_json['ss'] = msg_counter
data_to_json['sa'] = 1
data_to_json['msfs'] = []
data_to_json['msrr'] = []
data_to_json['ret'] = []
data_to_json['retss'] = 0
for key in fs.g_fs_dict:
var block_fs: fs.Fs = fs.g_fs_dict[key]
var fs_param: Dictionary = {}
fs_param['nmfs'] = int(block_fs.nmfs)
fs_param['isg'] = int(block_fs.isg)
if block_fs.pow is float:
fs_param['pow'] = str(block_fs.pow)
if block_fs.freq is float:
fs_param['freq'] = str(block_fs.freq)
if block_fs.width is float:
fs_param['width'] = str(block_fs.width)
data_to_json['msfs'].append(fs_param)
var json = JSON.new().stringify(data_to_json)
var pac = json.to_utf8_buffer()
return pac
func on_row_pressed(i_row: int, table):
pass