Рефакторинг. Аннотации GDScript
This commit is contained in:
@@ -24,13 +24,16 @@ extends Node
|
||||
|
||||
|
||||
@export var ThreatParams = {
|
||||
'time_lost': [5.0, 'Время после последнего обновления в с, через которое цель считается потерянной'],
|
||||
'freq_min': [200.0, 'Нижняя рабочая частота, МГЦ'],
|
||||
'freq_max': [6000.0, 'Нижняя рабочая частота, МГЦ'] }
|
||||
'time_lost': [5.0, 'Время после последнего обновления в с, через которое цель считается потерянной'],
|
||||
'freq_min': [200.0, 'Нижняя рабочая частота, МГЦ'],
|
||||
'freq_max': [6000.0, 'Нижняя рабочая частота, МГЦ'],
|
||||
'radius_inner': [100, 'Внутренний радиус в пикселях для отображения частота-пеленг'],
|
||||
'radius_outter': [800, 'Наружний радиус в пикселях для отображения частота-пеленг'] }
|
||||
|
||||
|
||||
func _ready() -> void: Log.info('Модуль настроек готов')
|
||||
|
||||
|
||||
func get_unit_key(unit_name: String) -> Array:
|
||||
assert(unit_name in UnitProfiles, 'ошибка: нет такого устройства "%s"' % unit_name)
|
||||
var item = UnitProfiles[unit_name]
|
||||
|
||||
@@ -55,6 +55,7 @@ func _ready() -> void:
|
||||
|
||||
|
||||
func on_timer_check_lost(unit, time_lost: int):
|
||||
""" Периодически проверяет приборы на связи """
|
||||
for th in threats.values():
|
||||
if (unit.tick - th.atick) >= time_lost:
|
||||
threats.erase(th.id)
|
||||
@@ -66,13 +67,13 @@ func on_data_capsrpb_received(unit: capsrpb.CapsRpb):
|
||||
return
|
||||
var mis = unit.json_dic['mis']
|
||||
for dic_th in mis:
|
||||
if 'id' in dic_th:
|
||||
if dic_th.has('id'):
|
||||
var id = int(dic_th['id'])
|
||||
if id in threats:
|
||||
if threats.has(id):
|
||||
var th = threats[id]
|
||||
th.set_from_dic(dic_th)
|
||||
th.atick = unit.tick
|
||||
call_deferred('emit_signal', 'threat_update', threats, th)
|
||||
call_deferred('emit_signal', threat_update, threats, th)
|
||||
else:
|
||||
var th = Threat.new()
|
||||
th.set_from_dic(dic_th)
|
||||
|
||||
@@ -1,11 +1,40 @@
|
||||
extends Node
|
||||
|
||||
## Простые часто используемые функции
|
||||
|
||||
## Производит преобразование из угла в радианы
|
||||
func radians(val: float): return (val * PI) / 180.0
|
||||
|
||||
|
||||
## Возвращает значение из байтового массива в 16 битное слово
|
||||
func ibytes_to_word(buf: PackedByteArray, i: int) -> int: return buf[i] + (buf[i + 1] * 256)
|
||||
|
||||
|
||||
## Возвращает расстояние от центра координат до точки
|
||||
func hypot(x: float, y: float) -> float: return sqrt(x * x + y * y)
|
||||
|
||||
|
||||
## Проверяет пересечение диапазона x1, x2 с диапазоном y1, y2 """
|
||||
func is_overlap(x1, x2, y1, y2): return max(x1, y1) <= min(x2, y2)
|
||||
|
||||
|
||||
## Производит преобразование из декартовой в полярную систему координат
|
||||
func pos_calc(freq: float, aoa: float, pos0: Vector2, r0: float, r1: float, f0: float, df: float):
|
||||
var r = ((freq - f0) / df) * r1 + r0
|
||||
var aoa_rad = Tools.radians(aoa) - PI / 2.0
|
||||
var x = cos(aoa_rad) * r + pos0.x
|
||||
var y = sin(aoa_rad) * r + pos0.y
|
||||
return Vector2(x, y)
|
||||
|
||||
|
||||
## Отсекает значение до заданного диапазона
|
||||
func clip_value(val, val_min, val_max):
|
||||
if val < val_min: val = val_min
|
||||
if val > val_max: val = val_max
|
||||
return val
|
||||
|
||||
|
||||
## Возвращает массив с именами членов класса
|
||||
func get_members_names(obj: Object) -> Array:
|
||||
var pl = obj.get_property_list()
|
||||
var names: = Array()
|
||||
@@ -13,6 +42,7 @@ func get_members_names(obj: Object) -> Array:
|
||||
return names
|
||||
|
||||
|
||||
## Проверяет, что заданный массив похож на ip-адрес
|
||||
func assert_array_ipaddr(val: Array):
|
||||
""" Выкидывает исключение, если массив не содержит ip-адрес """
|
||||
assert(val.size() == 2)
|
||||
@@ -21,29 +51,25 @@ func assert_array_ipaddr(val: Array):
|
||||
assert((0 < val[1]) and (val[1] < 65536))
|
||||
|
||||
|
||||
## Преобразует декартовые координаты в полярные
|
||||
func map_dec_to_rad(pos0: Vector2, pos: Vector2) -> Vector2:
|
||||
""" Преобразует декартовые координаты в полярные """
|
||||
var x1: float = pos.x - pos0.x
|
||||
var y1: float = pos.y - pos0.y
|
||||
var ang: float = (atan2(y1, x1) * 180.0) / PI
|
||||
return Vector2(ang + 360.0 * float(ang < 0.0), hypot(x1, y1))
|
||||
|
||||
|
||||
func is_overlap(x1, x2, y1, y2):
|
||||
""" Проверяет пересечение диапазона x1, x2 с диапазоном y1, y2 """
|
||||
return max(x1, y1) <= min(x2, y2)
|
||||
|
||||
|
||||
## Переводит значение val из диапазона a0...a1 в диапазон b0...b1
|
||||
func map_range(val: float, a0: float, a1: float, b0: float, b1: float) -> float:
|
||||
""" Переводит значение val из диапазона a0...a1 в диапазон b0...b1 """
|
||||
return (((val - a0) * (b1 - b0)) / (a1 - a0)) + b0
|
||||
|
||||
|
||||
## Возвращает true, если val число, false - если иначе
|
||||
func type_is_num(val) -> bool:
|
||||
""" Возвращает true, если val число, false - если иначе """
|
||||
return (typeof(val) == TYPE_INT) or (typeof(val) == typeof(0.0))
|
||||
|
||||
|
||||
## Возвращает true, если точка внутри заданного полигона
|
||||
func is_point_in_polygon(pos: Vector2, p: PackedVector2Array) -> bool:
|
||||
var j: int = len(p) - 1
|
||||
var odd_nodes: int = 0
|
||||
@@ -54,13 +80,11 @@ func is_point_in_polygon(pos: Vector2, p: PackedVector2Array) -> bool:
|
||||
return odd_nodes > 0
|
||||
|
||||
|
||||
## Устанавливает слово в байтовом массиве
|
||||
## buf - Байтовый массив
|
||||
## index - Индекс младшего байта слова в массиве
|
||||
## val - Значение слова для записи в батовый массив
|
||||
## return - Ничего
|
||||
func set_wordi(buf: Array, index, val):
|
||||
"""
|
||||
Устанавливает слово в байтовом массиве
|
||||
:param buf: Байтовый массив
|
||||
:param index: Индекс младшего байта слова в массиве
|
||||
:param val: Значение слова для записи в батовый массив
|
||||
:return: None """
|
||||
buf[index] = val & 0xff
|
||||
buf[index + 1] = (val >> 8) & 0xff
|
||||
|
||||
|
||||
@@ -1,47 +1,50 @@
|
||||
extends Node
|
||||
|
||||
# Протокол ячейки ЯУ-07
|
||||
## Протокол ячейки ЯУ-07
|
||||
|
||||
const ONLINE_TIMEOUT = 5.0 # Время ожидания пакета от ячейки, секунды
|
||||
const RESEND_TIMEOUT = 0.3 # Задержка для повторной отправки команды, секунды
|
||||
const RETRY_COUNT = 5 # Количество повторных отправок
|
||||
const BUFFER_SIZE = 2048
|
||||
const ONLINE_TIMEOUT = 5.0 ## Время ожидания пакета от ячейки, секунды
|
||||
const RESEND_TIMEOUT = 0.3 ## Задержка для повторной отправки команды, секунды
|
||||
const RETRY_COUNT = 5 ## Количество повторных отправок
|
||||
const BUFFER_SIZE = 2048 ## Размер буфера для приёма датаграмм
|
||||
|
||||
|
||||
|
||||
# Ячейка ЯУ-07
|
||||
## Ячейка ЯУ-07
|
||||
class YaU07:
|
||||
|
||||
## Коды выполняемых команд
|
||||
enum CmdCode {
|
||||
READ_ISA = 0, # Код команды "читать порт ISA" ячейки ЯУ-07
|
||||
WRITE_ISA = 1 } # Код команды "записать порт ISA" ячейки ЯУ-07
|
||||
READ_ISA = 0, ## Код команды "читать порт ISA" ячейки ЯУ-07
|
||||
WRITE_ISA = 1 ## Код команды "записать порт ISA" ячейки ЯУ-07
|
||||
}
|
||||
|
||||
## Состояние автомата выполнения команды
|
||||
enum CmdState {
|
||||
UNCK, # Номер команды не ининцирован
|
||||
SEND, # Буфер готов для отправки
|
||||
WAIT, # Ожидание выполнения
|
||||
DONE, # Команда выполнена
|
||||
FAIL } # Команда не выполнена
|
||||
UNCK, ## Номер команды не ининцирован
|
||||
SEND, ## Буфер готов для отправки
|
||||
WAIT, ## Ожидание выполнения
|
||||
DONE, ## Команда выполнена
|
||||
FAIL ## Команда не выполнена
|
||||
}
|
||||
|
||||
signal line_changed(unit: YaU07)
|
||||
signal command_done(unit: YaU07)
|
||||
signal command_fail(unit: YaU07)
|
||||
signal line_changed(unit: YaU07) ## Вызывается когда меняется состояние связи с ячейкой
|
||||
signal command_done(unit: YaU07) ## Вызывается после выполнения команды
|
||||
signal command_fail(unit: YaU07) ## Вызывается если возникла ошибка при выполнении команды и команда не выполнена
|
||||
|
||||
var name: = String()
|
||||
var cmd_num_rx: = 0 # Номер команды принятый
|
||||
var cmd_num_tx: = 0 # Номер команды переданный
|
||||
var cmd_state = CmdState.UNCK # Состояние выполнения команды
|
||||
var cmd_result: = 1 # Результат выполнения команды. Устанавливается в ЯУ-07
|
||||
var cmd_data: = PackedByteArray() # Данные команды. Устанавливается в ЯУ-07
|
||||
var cmd_retry = 0
|
||||
var tick = 0.0
|
||||
var cmd_tick_tx = 0.0
|
||||
var cmd_tick_rx = 0.0
|
||||
var status: = PackedByteArray() # Поле "состояние прибора"
|
||||
var tx_data: = [] # Буфер отправленный
|
||||
var tx_len = 0
|
||||
var isa_ports = {} # Результат выполнения команды "читать порт"
|
||||
var online = false
|
||||
var cmd_num_rx: = 0 ## Номер команды принятый
|
||||
var cmd_num_tx: = 0 ## Номер команды переданный
|
||||
var cmd_state = CmdState.UNCK ## Состояние выполнения команды
|
||||
var cmd_result: = 1 ## Результат выполнения команды. Устанавливается в ЯУ-07
|
||||
var cmd_data: = PackedByteArray() ## Данные команды. Устанавливается в ЯУ-07
|
||||
var cmd_retry = 0 ## Счётчик оставшихся попыток выполнить команду
|
||||
var tick = 0.0 ## Текущее тик-время в мс
|
||||
var cmd_tick_tx = 0.0 ## Время последней отправки команды
|
||||
var cmd_tick_rx = 0.0 ## Время последнего приёма команды
|
||||
var status: = PackedByteArray() ## Поле "состояние прибора"
|
||||
var tx_data: = [] ## Буфер отправленный
|
||||
var tx_len = 0 ## Длина последнего отправленного пакета
|
||||
var isa_ports = {} ## Результат выполнения команды "читать порт"
|
||||
var online = false ## Состояние связи с ячейкой
|
||||
|
||||
func _to_string() -> String: return String('яу07: %s %s' % [self.name, ['отключен', 'на связи'][int(online)]])
|
||||
|
||||
@@ -105,10 +108,10 @@ class YaU07:
|
||||
return true
|
||||
|
||||
|
||||
## Возвращает код команды ЯУ-07
|
||||
## rx_data - Принятые данные
|
||||
## Возвращает - Код команды не найден, 0...255 - код команды
|
||||
func get_cmd_code(rx_data):
|
||||
""" Возвращает код команды ЯУ-07
|
||||
:param rx_data: Принятые данные
|
||||
:return: None - Код команды не найден, 0...255 - код команды """
|
||||
|
||||
var rx_data_len = rx_data.size()
|
||||
if rx_data_len < 7:
|
||||
@@ -143,13 +146,12 @@ class YaU07:
|
||||
return i > 0
|
||||
|
||||
|
||||
## Заполняет состояние прибора данными прочитанными из портов ЯУ-07
|
||||
## для команд "читать порты" или "записать порты"
|
||||
## rx_data - Принятые данные
|
||||
## Возвращает True - Данные обработаны успешно,
|
||||
## Возвращает False - Данные не обработаны из за ошибки
|
||||
func parse(rx_data: PackedByteArray) -> bool:
|
||||
"""
|
||||
Заполняет состояние прибора данными прочитанными из портов ЯУ-07
|
||||
для команд "читать порты" или "записать порты"
|
||||
:param rx_data: Принятые данные
|
||||
:return: True - Данные обработаны успешно,
|
||||
False - Данные не обработаны из за ошибки """
|
||||
|
||||
if not online:
|
||||
online = true
|
||||
|
||||
Reference in New Issue
Block a user