Доработка. Улучшение документации.
This commit is contained in:
@@ -1,40 +1,40 @@
|
||||
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 id: int ## Идентификатор цели.
|
||||
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 tick_rx: int ## Тик время обновления цели, мс.
|
||||
var tmod: String ## Тип модуляции.
|
||||
var width: float ## Ширина занимаемого диапазона частот, МГц.
|
||||
var selected: bool ## Флаг, что цель выбрана
|
||||
var alt: float ## Текущая высота, метры.
|
||||
var aoa: float ## Курсовой угол на источник сигнала, градусы.
|
||||
var atick: float ## Тик обнаружения.
|
||||
var baud: float ## Модуляционная скорость.
|
||||
var fflags: Dictionary ## Флаги достоверности полей.
|
||||
var freq: float ## Частота несущей или центральная частота, МГц.
|
||||
var freqm: String ## Режим смены частоты.
|
||||
var id: int ## Идентификатор цели.
|
||||
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 tick_rx: int ## Тик время обновления цели, мс.
|
||||
var tmod: String ## Тип модуляции.
|
||||
var width: float ## Ширина занимаемого диапазона частот, МГц.
|
||||
var selected: bool ## Флаг, что цель выбрана.
|
||||
|
||||
func _init(): clear_fflags()
|
||||
func _to_string() -> String: return 'номер: %d пеленг: %0.1f частота: %0.1f МГц' % [id, aoa, freq]
|
||||
func clear_fflags(): tools.get_members_names(self).any(func(vn): fflags[vn] = false)
|
||||
func _init(): clear_fflags()
|
||||
func _to_string() -> String: return 'номер: %d пеленг: %0.1f частота: %0.1f МГц' % [id, aoa, freq]
|
||||
func clear_fflags(): tools.get_members_names(self).any(func(vn): fflags[vn] = false)
|
||||
|
||||
func set_from_dic(dic: Dictionary):
|
||||
var items: = fflags.keys().filter(func(vn): return dic.has(vn))
|
||||
items.any(func(vn): set(vn, dic[vn]); fflags[vn] = true; return false)
|
||||
func set_from_dic(dic: Dictionary):
|
||||
var items: = fflags.keys().filter(func(vn): return dic.has(vn))
|
||||
items.any(func(vn): set(vn, dic[vn]); fflags[vn] = true; return false)
|
||||
|
||||
|
||||
signal threat_new(th: Threat)
|
||||
@@ -44,37 +44,37 @@ signal threats_resized(th: Dictionary)
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
log.info('Модуль обработки целей готов')
|
||||
var threats = {} ## Список целей. Индекс - <номер цели>
|
||||
var unit_key = repsettings.get_unit_key('уарэп-капсрпб-отп')
|
||||
var unit = repnetwork.units[unit_key]
|
||||
var unit_5p28_key = repsettings.get_unit_key('уарэп-5п28')
|
||||
var unit_5p28 = repnetwork.units_tcp[unit_5p28_key]
|
||||
var timer_check_lost: = Timer.new()
|
||||
add_child(timer_check_lost)
|
||||
unit.connect('data_received', Callable(self, 'on_data_capsrpb_received').bind(threats))
|
||||
unit_5p28.connect('get_threats', Callable(self, 'on_get_threats').bind(unit_5p28, threats))
|
||||
timer_check_lost.connect('timeout', Callable(self, 'on_timer_check_lost').bind(repsettings.ThreatParams.time_lost, threats))
|
||||
timer_check_lost.start(repsettings.ThreatParams.time_lost / 1000.0)
|
||||
signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind(threats))
|
||||
signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel').bind(threats))
|
||||
signaller.connect('rto_threat_unsel_all', Callable(self, 'on_rto_threat_unsel_all').bind(threats))
|
||||
signaller.connect('threat_selected', Callable(self, 'on_threat_selected').bind(threats))
|
||||
signaller.connect('interfer_init', Callable(self, 'on_interfer_init').bind(threats))
|
||||
log.info('Модуль обработки целей готов')
|
||||
var threats = {} ## Список целей. Индекс - <номер цели>
|
||||
var unit_key = repsettings.get_unit_key('уарэп-капсрпб-отп')
|
||||
var unit = repnetwork.units[unit_key]
|
||||
var unit_5p28_key = repsettings.get_unit_key('уарэп-5п28')
|
||||
var unit_5p28 = repnetwork.units_tcp[unit_5p28_key]
|
||||
var timer_check_lost: = Timer.new()
|
||||
add_child(timer_check_lost)
|
||||
unit.connect('data_received', Callable(self, 'on_data_capsrpb_received').bind(threats))
|
||||
unit_5p28.connect('get_threats', Callable(self, 'on_get_threats').bind(unit_5p28, threats))
|
||||
timer_check_lost.connect('timeout', Callable(self, 'on_timer_check_lost').bind(repsettings.ThreatParams.time_lost, threats))
|
||||
timer_check_lost.start(repsettings.ThreatParams.time_lost / 1000.0)
|
||||
signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind(threats))
|
||||
signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel').bind(threats))
|
||||
signaller.connect('rto_threat_unsel_all', Callable(self, 'on_rto_threat_unsel_all').bind(threats))
|
||||
signaller.connect('threat_selected', Callable(self, 'on_threat_selected').bind(threats))
|
||||
signaller.connect('interfer_init', Callable(self, 'on_interfer_init').bind(threats))
|
||||
|
||||
## Периодически удаляет устаревшие цели
|
||||
## Периодически удаляет устаревшие цели.
|
||||
func on_timer_check_lost(time_lost: int, threats: Dictionary):
|
||||
var tick = Time.get_ticks_msec()
|
||||
var sz: = threats.size()
|
||||
for th in threats.values():
|
||||
if (tick - th.tick_rx) >= time_lost:
|
||||
threats.erase(th.id)
|
||||
call_deferred('emit_signal', 'threat_lost', th)
|
||||
if sz != threats.size():
|
||||
call_deferred('emit_signal', 'threats_resized', threats)
|
||||
var tick = Time.get_ticks_msec()
|
||||
var sz: = threats.size()
|
||||
for th in threats.values():
|
||||
if (tick - th.tick_rx) >= time_lost:
|
||||
threats.erase(th.id)
|
||||
call_deferred('emit_signal', 'threat_lost', th)
|
||||
if sz != threats.size():
|
||||
call_deferred('emit_signal', 'threats_resized', threats)
|
||||
|
||||
|
||||
## отправляет словарь целей в юнит, для запаковки и отправки в 5П28
|
||||
## отправляет словарь целей в юнит, для запаковки и отправки в 5П28.
|
||||
func on_get_threats(unit, threats): unit.pack_threats(threats)
|
||||
|
||||
|
||||
@@ -82,56 +82,56 @@ func on_get_threats(unit, threats): unit.pack_threats(threats)
|
||||
func on_rto_threat_unsel(th_id, threats): threats[th_id].selected = false
|
||||
|
||||
|
||||
## Снимает выделение со всех целей
|
||||
## Снимает выделение со всех целей.
|
||||
func on_rto_threat_unsel_all(threats):
|
||||
for th in threats.values():
|
||||
signaller.emit_signal('rto_threat_unsel', th.id)
|
||||
for th in threats.values():
|
||||
signaller.emit_signal('rto_threat_unsel', th.id)
|
||||
|
||||
|
||||
## Выбирает цель, если нажать по отметке цели.
|
||||
func on_rto_threat_sel(th_id, threats): on_threat_selected(threats[th_id], threats)
|
||||
|
||||
|
||||
## Выбирает цель, если выбрать в таблице
|
||||
## Выбирает цель, если выбрать в таблице.
|
||||
func on_threat_selected(th, threats):
|
||||
for threat in threats.values():
|
||||
threat.selected = false
|
||||
th.selected = true
|
||||
for threat in threats.values():
|
||||
threat.selected = false
|
||||
th.selected = true
|
||||
|
||||
|
||||
## Формирует список выбранных целей для включения помехи
|
||||
## Формирует список выбранных целей для включения помехи.
|
||||
func on_interfer_init(btn, fs_arr, threats):
|
||||
var sel_threats: Array = []
|
||||
for threat in threats.values():
|
||||
if threat.selected:
|
||||
sel_threats.append(threat)
|
||||
if len(sel_threats) or (len(fs_arr)):
|
||||
signaller.emit_signal('interfer_create', btn, sel_threats, fs_arr)
|
||||
var sel_threats: Array = []
|
||||
for threat in threats.values():
|
||||
if threat.selected:
|
||||
sel_threats.append(threat)
|
||||
if len(sel_threats) or (len(fs_arr)):
|
||||
signaller.emit_signal('interfer_create', btn, sel_threats, fs_arr)
|
||||
|
||||
|
||||
## Производит приём целей
|
||||
## Производит приём целей.
|
||||
func on_data_capsrpb_received(unit: capsrpb.CapsRpb, threats: Dictionary):
|
||||
if not unit.json_dic.has('ts'): return
|
||||
if unit.json_dic['ts'] != 5: return
|
||||
if not unit.json_dic.has('mis'): return
|
||||
if not unit.json_dic.has('ts'): return
|
||||
if unit.json_dic['ts'] != 5: return
|
||||
if not unit.json_dic.has('mis'): return
|
||||
|
||||
var mis = unit.json_dic['mis']
|
||||
var sz: = threats.size()
|
||||
for dic_th in mis:
|
||||
if dic_th is Dictionary:
|
||||
if dic_th.has('id'):
|
||||
var id = int(dic_th['id'])
|
||||
if threats.has(id):
|
||||
var th = threats[id]
|
||||
th.clear_fflags()
|
||||
th.set_from_dic(dic_th)
|
||||
th.tick_rx = unit.tick
|
||||
call_deferred('emit_signal', 'threat_update', th)
|
||||
else:
|
||||
var th = Threat.new()
|
||||
th.set_from_dic(dic_th)
|
||||
threats[id] = th
|
||||
th.tick_rx = unit.tick
|
||||
call_deferred('emit_signal', 'threat_new', th)
|
||||
if sz != threats.size():
|
||||
call_deferred('emit_signal', 'threats_resized', threats)
|
||||
var mis = unit.json_dic['mis']
|
||||
var sz: = threats.size()
|
||||
for dic_th in mis:
|
||||
if dic_th is Dictionary:
|
||||
if dic_th.has('id'):
|
||||
var id = int(dic_th['id'])
|
||||
if threats.has(id):
|
||||
var th = threats[id]
|
||||
th.clear_fflags()
|
||||
th.set_from_dic(dic_th)
|
||||
th.tick_rx = unit.tick
|
||||
call_deferred('emit_signal', 'threat_update', th)
|
||||
else:
|
||||
var th = Threat.new()
|
||||
th.set_from_dic(dic_th)
|
||||
threats[id] = th
|
||||
th.tick_rx = unit.tick
|
||||
call_deferred('emit_signal', 'threat_new', th)
|
||||
if sz != threats.size():
|
||||
call_deferred('emit_signal', 'threats_resized', threats)
|
||||
|
||||
Reference in New Issue
Block a user