Доработка. Добавлено мерцание цели.
This commit is contained in:
2
main.gd
2
main.gd
@@ -35,7 +35,7 @@ func _ready():
|
||||
'panel': panel_threats}
|
||||
sock.bind(main_addr[1], main_addr[0])
|
||||
sock.set_dest_address(dst_addr[0], dst_addr[1])
|
||||
Threats.init_treats(table_threats, nodes)
|
||||
Threats.init_threats(table_threats, nodes)
|
||||
Interfers.init_pomehi(table_pomehi)
|
||||
fs.init_fs($ColorRect/tabs/pomehi, $ColorRect/tabs/pomehi/fs_rect)
|
||||
var timer = Timer.new()
|
||||
|
||||
101
threats.gd
101
threats.gd
@@ -1,13 +1,5 @@
|
||||
extends Node
|
||||
|
||||
var id_array: Array # Массив id целей
|
||||
var treats : Dictionary # Словарь целей
|
||||
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')
|
||||
const TableCellType3 = preload('res://кнопка-4.tscn')
|
||||
@@ -16,13 +8,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 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 = [ 40, 70, 82, 82, 82, 90, 110, 150, 80, 130, 82, 82, 82, 82, 82, 82, 140]
|
||||
# Индекс колонки: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
||||
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, 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, HORIZONTAL_ALIGNMENT_CENTER]
|
||||
const TABLE_ROW_TYPES = [ TableCellType1, TableCellType5, TableCellType5, TableCellType5, TableCellType5, TableCellType5, TableCellType6, TableCellType6, TableCellType5, TableCellType6, TableCellType5, TableCellType5, TableCellType5, TableCellType5, TableCellType5, TableCellType5, TableCellType6, 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, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER]
|
||||
const TABLE_COLUMN_SIZES = [ 40, 70, 82, 82, 82, 90, 110, 150, 80, 130, 82, 82, 82, 82, 82, 82, 140, 82]
|
||||
|
||||
const COLUMN_ID = 0 # Идентификатор цели
|
||||
const COLUMN_AOA = 1 # Курсовой угол на источник сигнала, градусы
|
||||
@@ -41,6 +33,7 @@ const COLUMN_LAT = 13 # Текущие координаты, долгота
|
||||
const COLUMN_LON = 14 # Текущие координаты, широта в градусах
|
||||
const COLUMN_ALT = 15 # Текущая высота, метры
|
||||
const COLUMN_REC = 16 # Текущая высота, метры
|
||||
const COLUMN_FLIC = 17 # Время мерцания
|
||||
|
||||
# Индексы колонок, которым можно задавать выравнивание текста
|
||||
const TABLE_ALLIGNED_COLUMNS = [
|
||||
@@ -56,7 +49,8 @@ const TABLE_ALLIGNED_COLUMNS = [
|
||||
COLUMN_SALT,
|
||||
COLUMN_LAT,
|
||||
COLUMN_LON,
|
||||
COLUMN_ALT ]
|
||||
COLUMN_ALT,
|
||||
COLUMN_FLIC ]
|
||||
|
||||
# Индексы колонок, в которых можно вводит текст
|
||||
const TABLE_ENTRY_COLUMNS = [
|
||||
@@ -71,7 +65,8 @@ const TABLE_ENTRY_COLUMNS = [
|
||||
COLUMN_SALT,
|
||||
COLUMN_LAT,
|
||||
COLUMN_LON,
|
||||
COLUMN_ALT ]
|
||||
COLUMN_ALT,
|
||||
COLUMN_FLIC ]
|
||||
|
||||
# Типы модуляции
|
||||
const MODE_TYPES = ['<неопр.>', 'am', 'ook', 'ask', 'fm', 'qpsk', 'oqpsk', 'pi4qpsk', 'qam16',
|
||||
@@ -84,12 +79,20 @@ const FREQM = ['<неопр.>', 'fhss', 'lfm', 'const']
|
||||
const M_PROTO = ['<неопр.>', '3dlink', 'skyhopperpro', 'picardiooem', 'solo7', 'j11',
|
||||
'mavlink', 'ltm', 'hc12', 'df1', ]
|
||||
|
||||
const COLUMN_OPT_BTN = [COLUMN_TMOD, COLUMN_FREQM, COLUMN_PROTO, COLUMN_REC]
|
||||
const ID_ARRAY_LEN = 150 # Размер пула номеров целей
|
||||
const MIN_FLIC_TIME = 1.0 # минимальное время мерцания цели
|
||||
|
||||
var id_array: Array # Массив id целей
|
||||
var threats : Dictionary # Словарь целей
|
||||
var msg_counter : int = 0 # Счётчик отправленных пакетов
|
||||
var g_table: GridContainer
|
||||
var send_flag = true
|
||||
var rkrp = []
|
||||
var now = 0.0 # Время с момента запуска приложения
|
||||
|
||||
# Номера колонок
|
||||
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 # Размер пула номеров целей
|
||||
|
||||
|
||||
# Цель
|
||||
@@ -116,6 +119,9 @@ class Threat:
|
||||
'alt': [0.0, false],
|
||||
}
|
||||
var row_id: int
|
||||
var flic: Array = [0.0, false]
|
||||
var flic_ena: bool = true
|
||||
var flic_tick: = 0.0 ## Время изменения состояния flic
|
||||
|
||||
func _init(th_id : int, row_i: int):
|
||||
row.id[0] = th_id
|
||||
@@ -150,6 +156,7 @@ class Threat:
|
||||
new_rows.append(_check_value(row.lon))
|
||||
new_rows.append(_check_value(row.alt))
|
||||
new_rows.append(_check_value(row.rkrp))
|
||||
new_rows.append(_check_value(flic))
|
||||
return new_rows
|
||||
|
||||
|
||||
@@ -186,6 +193,16 @@ class Threat:
|
||||
row.width[1] = Tools.check_empty(value)
|
||||
return value
|
||||
|
||||
|
||||
func set_flic(val):
|
||||
var value = float(val)
|
||||
value = Tools.check_negative(value)
|
||||
value = Tools.check_len(val, value)
|
||||
flic[0] = value
|
||||
flic[1] = Tools.check_empty(value)
|
||||
return value
|
||||
|
||||
|
||||
func set_power(val):
|
||||
var value = float(val)
|
||||
value = Tools.check_negative(value)
|
||||
@@ -292,7 +309,7 @@ class Threat:
|
||||
return value
|
||||
|
||||
|
||||
func init_treats(table, nodes): # Инициализация вкладки с целями
|
||||
func init_threats(table, nodes): # Инициализация вкладки с целями
|
||||
set_rkrp()
|
||||
for i in range(ID_ARRAY_LEN): # Заполняет массив ID целей
|
||||
id_array.append(i+1)
|
||||
@@ -331,10 +348,11 @@ func load_treats(table):
|
||||
var id = int(item['id'])
|
||||
id_array.erase(int(id))
|
||||
var threat : = Threat.new(id, table.get_rows_count())
|
||||
treats['%d' % id] = threat
|
||||
threats['%d' % id] = threat
|
||||
for key in item:
|
||||
if key == 'id': threat.row[key] = [int(item[key]), true]
|
||||
elif key == 'tick': threat.row[key] = [int(item[key]), true]
|
||||
elif key == 'flic': threat.flic = [float(item[key]), true]
|
||||
else: threat.row[key] = [item[key], true]
|
||||
var row = threat.update_rows()
|
||||
table.add_row(TABLE_ROW_TYPES)
|
||||
@@ -348,9 +366,10 @@ func load_treats(table):
|
||||
func on_btn_save():
|
||||
var file = FileAccess.open('user://save.json', FileAccess.WRITE)
|
||||
var data_to_json : Array
|
||||
for key in treats:
|
||||
var treat = treats[key]
|
||||
for key in threats:
|
||||
var treat = threats[key]
|
||||
var data = treat.get_data()
|
||||
data['flic'] = threats[key].flic[0]
|
||||
data_to_json.append(data)
|
||||
var json = JSON.new().stringify(data_to_json)
|
||||
file.store_string(json)
|
||||
@@ -401,7 +420,7 @@ func on_edit_entry(text : String, entry):
|
||||
|
||||
|
||||
func set_value(val : String, treat_id : String, column : int):
|
||||
var treat = treats[treat_id]
|
||||
var treat = threats[treat_id]
|
||||
match column:
|
||||
COLUMN_AOA:
|
||||
return treat.set_aoa(val)
|
||||
@@ -435,6 +454,8 @@ func set_value(val : String, treat_id : String, column : int):
|
||||
return treat.set_alt_pressed(val)
|
||||
COLUMN_REC:
|
||||
return treat.set_rname(val)
|
||||
COLUMN_FLIC:
|
||||
return treat.set_flic(val)
|
||||
|
||||
func on_row_pressed(i_row: int, table):
|
||||
table.clear_rows_selected()
|
||||
@@ -444,7 +465,7 @@ func on_row_pressed(i_row: int, table):
|
||||
func on_btn_add(table):
|
||||
var id = pop_id()
|
||||
var threat : = Threat.new(id, table.get_rows_count())
|
||||
treats['%d' % id] = threat
|
||||
threats['%d' % id] = threat
|
||||
var row = threat.update_rows()
|
||||
table.add_row(TABLE_ROW_TYPES)
|
||||
table.set_row_text(table.get_rows_count()-1, row)
|
||||
@@ -459,7 +480,7 @@ func on_btn_del(table):
|
||||
table.get_selected_rows(row_i)
|
||||
if len(row_i) > 0:
|
||||
var cell = table.get_node2(0, row_i[0])
|
||||
treats.erase(cell.text)
|
||||
threats.erase(cell.text)
|
||||
table.remove_row(row_i[0])
|
||||
for i in table.get_rows_count():
|
||||
var treat = table.get_node_user_data(0, i)
|
||||
@@ -490,13 +511,13 @@ func get_threats_data():
|
||||
msvk['svk'] = item.svk
|
||||
data_to_json['msvk'].append(msvk)
|
||||
data_to_json['mis'] = []
|
||||
for key in treats:
|
||||
var treat = treats[key]
|
||||
for key in threats:
|
||||
var threat = threats[key]
|
||||
var flag = int(key) % 2
|
||||
if int(send_flag) ^ flag:
|
||||
if (int(send_flag) ^ flag) or (not threat.flic_ena):
|
||||
continue
|
||||
set_ticks(treat)
|
||||
var data = treat.get_data()
|
||||
set_ticks(threat)
|
||||
var data = threat.get_data()
|
||||
data_to_json['mis'].append(data)
|
||||
var json = JSON.new().stringify(data_to_json)
|
||||
var pac = json.to_utf8_buffer()
|
||||
@@ -512,7 +533,7 @@ func set_ticks(treat):
|
||||
|
||||
func on_rotate_th(entry, table):
|
||||
if entry.text.is_valid_float():
|
||||
for th in treats.values():
|
||||
for th in threats.values():
|
||||
var aoa = th.row.aoa[0]
|
||||
aoa += float(entry.text)
|
||||
if aoa > 360.0:
|
||||
@@ -535,7 +556,7 @@ func on_timeout(entry, table, chkbx_rt):
|
||||
func on_btn_load(table):
|
||||
for i in table.get_rows_count():
|
||||
var cell = table.get_node2(0, 0)
|
||||
treats.erase(cell.text)
|
||||
threats.erase(cell.text)
|
||||
table.remove_row(0)
|
||||
load_treats(table)
|
||||
|
||||
@@ -545,7 +566,7 @@ func on_thr_gen(table):
|
||||
var id = pop_id()
|
||||
if id == 0: return
|
||||
var threat : = Threat.new(id, table.get_rows_count())
|
||||
treats['%d' % id] = threat
|
||||
threats['%d' % id] = threat
|
||||
threat.row.aoa[0] = 0 + 30 * i
|
||||
while (threat.row.aoa[0] > 360):
|
||||
threat.row.aoa[0] -= 360
|
||||
@@ -560,7 +581,19 @@ func on_thr_gen(table):
|
||||
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)
|
||||
|
||||
|
||||
func _process(delta):
|
||||
now += delta
|
||||
for th in threats.values():
|
||||
if th.flic[0] > MIN_FLIC_TIME:
|
||||
if (now - th.flic_tick) >= th.flic[0]:
|
||||
th.flic_ena = not th.flic_ena
|
||||
th.flic_tick = now
|
||||
else:
|
||||
th.flic_ena = true
|
||||
|
||||
Reference in New Issue
Block a user