Рефакторинг. Аннотации GDScript

This commit is contained in:
sasha80
2023-08-09 15:16:00 +03:00
parent ffb35b8ca6
commit 74abae7195
8 changed files with 173 additions and 191 deletions

View File

@@ -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]

View File

@@ -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)

View File

@@ -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

View File

@@ -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