Files
uarep-ctl/scripts/threats.gd
sasha80 4969d38489 Merge remote-tracking branch 'MaD_CaT/master'
# Conflicts:
#	scenes/frm_threats.gd
#	scenes/tab_switch.gd
#	scenes/ЭМС.gd
#	scenes/работа.gd
#	scenes/работа.tscn
#	scripts/repnetwork.gd
#	scripts/threats.gd
#	scripts/yems_devs.gd
#	table/table.gd
2023-08-10 13:07:58 +03:00

84 lines
4.2 KiB
GDScript

extends Node
##
## Цель
class Threat:
var alt: float ## Текущая высота, метры.
var aoa: float ## Курсовой угол на источник сигнала, градусы.
var atick: float ## Тик обнаружения.
var baud: float ## Модуляционная скорость.
var fflags: Dictionary ## Флаги достоверности полей.
var freq: float ## Частота несущей или центральная частота, МГц.
var freqm: String ## Режим смены частоты.
var lat: float ## Текущие координаты, долгота в градусах.
var lon: float ## Текущие координаты, широта в градусах.
var power: float ## Уровень принимаемого сигнала, дБм.
var proto: String ## Тип протокола источника сигнала.
var rkrp: String ## Рекомендуемый режим помехи.
var rparams: String ## Рекомендуемые параметры помехи.
var salt: float ## Координаты старта, высота от уровня моря, м.
var slat: float ## Координаты старта, широта в градусах.
var slon: float ## Координаты старта, долгота в градусах.
var tick: int ## Время приёма сигнала, мс.
var tmod: String ## Тип модуляции.
var utime: Dictionary ## Время крайнего обновления.
var width: float ## Ширина занимаемого диапазона частот, МГц.
var id: int ## Идентификатор цели.
func _init(): Tools.get_members_names(self).any(func(vn): fflags[vn] = false)
func _to_string() -> String: return 'номер:%d пеленг:%0.1f частота:%0.1f МГц' % [id, aoa, freq]
func set_from_dic(dic_vals: Dictionary):
var items: = fflags.keys().filter(func(vn): return vn in dic_vals)
items.any(func(vn): set(vn, dic_vals[vn]); fflags[vn] = true; return false)
signal threat_new(threats: Dictionary, th: Threat)
signal threat_lost(threats: Dictionary, th: Threat)
signal threat_update(threats: Dictionary, th: Threat)
var threats = {} ## Список целей. Индекс - <источник цели>:<номер цели> Источник цели может быть: 'RPB', 'SIGMA', 'RLKS', 'MP405'
func _ready() -> void:
Log.info('Модуль обработки целей готов')
#var unit_key = REPSettings.get_unit_key('уарэп-капсрпб-отп')
var unit = REPNetwork.units[unit_key]
var timer_check_lost: = Timer.new()
add_child(timer_check_lost)
#unit.connect('data_received', Callable(self, 'on_data_capsrpb_received'))
timer_check_lost.connect('timeout', Callable(self, 'on_timer_check_lost').bind(unit, REPSettings.ThreatParams.time_lost[0]))
timer_check_lost.start(REPSettings.ThreatParams.time_lost[0] / 2.0)
## Периодически проверяет приборы на связи
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)
call_deferred('emit_signal', 'threat_lost', threats, th)
## Приём целей
func on_data_capsrpb_received(unit: capsrpb.CapsRpb):
if 'mis' not in unit.json_dic:
return
var mis = unit.json_dic['mis']
for dic_th in mis:
if dic_th.has('id'):
var id = int(dic_th['id'])
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)
else:
var th = Threat.new()
th.set_from_dic(dic_th)
th.atick = unit.tick
th.fflags['atick'] = true
threats[id] = th
call_deferred('emit_signal', 'threat_new', threats, th)