Доработка. Добавление отображения сектора запрета от КАПСРПБ
This commit is contained in:
@@ -37,14 +37,48 @@ func set_band_colors(val: Array): material.set('shader_parameter/ant_band_c', va
|
||||
|
||||
|
||||
## Добавляет сектор запрета[br]
|
||||
## [param fc] - Центральная частота[br]
|
||||
## [param fw] - Ширина диапазона[br]
|
||||
## [param ac] - Угол центра[br]
|
||||
## [param aw] - Ширина по углу[br]
|
||||
func add_seczap(id: int, fc: float, fw: float, ac: float, aw: float):
|
||||
var sec_zap = SecZap.instantiate()
|
||||
sec_zap.name = 'SECZAP%d' % id
|
||||
add_child(sec_zap)
|
||||
## [param id] - Индекс сектора запрета.[br]
|
||||
## [param szv.x] - Центральная частота (198...546).[br]
|
||||
## [param szv.w] - Ширина диапазона (198...546).[br]
|
||||
## [param szv.y] - Угол центра (0...360).[br]
|
||||
## [param szv.z] - Ширина по углу (0...360).[br]
|
||||
func add_seczap(id: int, szv: Vector4):
|
||||
var seczap: = SecZap.instantiate()
|
||||
seczap.name = StringName('SECZAP%d' % id)
|
||||
seczap.position = $строб.position
|
||||
seczap.set_instance_shader_parameter('dir', szv.y - 90.0)
|
||||
seczap.set_instance_shader_parameter('width', szv.z)
|
||||
seczap.set_instance_shader_parameter('band', sv(szv.w))
|
||||
seczap.set_instance_shader_parameter('radius', sv(szv.x))
|
||||
add_child(seczap)
|
||||
|
||||
|
||||
## Удаляет сектор запрета[br]
|
||||
## [param id] - Индекс сектора запрета[br]
|
||||
func remove_seczap(id: int):
|
||||
var seczap: = get_node_or_null('SECZAP%d' % id)
|
||||
if not seczap: return
|
||||
remove_child(seczap)
|
||||
seczap.queue_free()
|
||||
|
||||
|
||||
## Изменяет сектор запрета[br]
|
||||
## [param id] - Индекс сектора запрета[br]
|
||||
## [param szv.x] - Центральная частота[br]
|
||||
## [param szv.w] - Ширина диапазона[br]
|
||||
## [param szv.y] - Угол центра[br]
|
||||
## [param szv.z] - Ширина по углу[br]
|
||||
func set_seczap(id: int, szv: Vector4):
|
||||
var seczap: = get_node('SECZAP%d' % id)
|
||||
seczap.set_instance_shader_parameter('dir', szv.y)
|
||||
seczap.set_instance_shader_parameter('width', szv.z)
|
||||
seczap.set_instance_shader_parameter('band', sv(szv.w))
|
||||
seczap.set_instance_shader_parameter('radius', sv(szv.x))
|
||||
|
||||
|
||||
func set_seczap_color(id: int, color: Color):
|
||||
var seczap: = get_node('SECZAP%d' % id)
|
||||
seczap.set_instance_shader_parameter('color', color)
|
||||
|
||||
|
||||
func set_view_mode(val: int):
|
||||
|
||||
@@ -154,7 +154,6 @@ func on_full_auto() -> void: auto_enabled = true
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var ecms: Dictionary = {} ## Словарь помех.
|
||||
for i in ID_INTERFERS_LEN: # Заполняет массив ID целей
|
||||
id_array.append(i + 1)
|
||||
var unit_caps = network.get_unit_instance('уарэп-капсрпб')
|
||||
@@ -162,9 +161,11 @@ func _ready() -> void:
|
||||
var timer_check_state: = Timer.new()
|
||||
add_child(timer_check_state)
|
||||
var resend_timeout = ProjectSettings.get_setting('application/interfer/resend_timeout', 1000.0)
|
||||
var ecms: Dictionary = {} ## Словарь помех.
|
||||
var seczaps: Dictionary = {} ## Словарь секторов запрета
|
||||
timer_check_state.connect('timeout', Callable(self, 'on_timer_check_state').bind(unit_caps, ecms, resend_timeout))
|
||||
timer_check_state.start(resend_timeout / 1000.0)
|
||||
unit_caps.connect('data_received', Callable(self, 'on_data_capsrpb_received').bind(ecms))
|
||||
unit_caps.connect('data_received', Callable(self, 'on_data_capsrpb_received').bind(ecms, seczaps))
|
||||
unit_5p28.connect('get_interfers', Callable(self, 'on_get_interfers').bind(unit_5p28, ecms))
|
||||
signaller.connect('interfer_create', Callable(self, 'on_interfer_create').bind(unit_caps, ecms))
|
||||
signaller.connect('interfer_rcv', Callable(self, 'on_interfer_rcv').bind(unit_5p28, ecms))
|
||||
@@ -238,12 +239,12 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit_instance) -> v
|
||||
|
||||
|
||||
## Производит приём состояния помех. [param unit] -> [param ecms].
|
||||
func on_data_capsrpb_received(unit_instance: capsrpb.CapsRpb, ecms: Dictionary) -> void:
|
||||
if not unit_instance.json_dic.has('ts'): return
|
||||
if not (unit_instance.json_dic['ts'] is float): return
|
||||
if unit_instance.json_dic['ts'] != 5: return
|
||||
func on_data_capsrpb_received(unit_instance: capsrpb.CapsRpb, ecms: Dictionary, seczaps: Dictionary) -> void:
|
||||
if not unit_instance.json_dic.has('ts'): return
|
||||
if not tools.type_is_num(unit_instance.json_dic['ts']): return
|
||||
if unit_instance.json_dic['ts'] != 5: return
|
||||
map_msvk_to_ecms(unit_instance, ecms)
|
||||
map_mpchf_to_view(unit_instance)
|
||||
map_mpchf_to_seczaps(unit_instance, seczaps)
|
||||
|
||||
|
||||
## Извлекает массив состояний выполнения команды
|
||||
@@ -270,11 +271,16 @@ func map_msvk_to_ecms(unit_instance: unit.Unit, ecms: Dictionary):
|
||||
|
||||
|
||||
## Извлекает массив пространственно-частотных фильтров
|
||||
func map_mpchf_to_view(unit_instance: unit.Unit):
|
||||
var json_dic = unit_instance.json_dic
|
||||
if not json_dic.has('mpchf'): return
|
||||
var mpchf = json_dic['mpchf']
|
||||
func map_mpchf_to_seczaps(unit_instance: unit.Unit, seczaps: Dictionary):
|
||||
var json_dic: = unit_instance.json_dic as Dictionary
|
||||
var mpchf = json_dic.get('mpchf', [])
|
||||
if mpchf is not Array: return
|
||||
for item in mpchf:
|
||||
if item is not Dictionary: continue
|
||||
var id = item.get('index', -1)
|
||||
if id < 0: continue
|
||||
var freq = item.get('freq', 0)
|
||||
if freq == 0: continue
|
||||
|
||||
|
||||
## Вызыватся, когда пользователь выбрал помеху и выбраны цели.
|
||||
|
||||
Reference in New Issue
Block a user