Files
uarep-ctl/scenes/diagram/diagram.gd

117 lines
5.2 KiB
GDScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

class_name Diagram extends Sprite2D
const NUM_OF_RANGE = 7
const NUM_OF_DIRECTIONS = 4
var fs_default_colors: Array[Color] ## Цвета по умолчанию для блоков ФС.
@export var SecZap: PackedScene
func _ready() -> void:
signaller.connect('map_mode_changed', Callable(self, 'set_view_mode'))
set_def_colors()
func sv(val: float) -> float: return val / ($строб.scale.x / 2.0) * 0.125
func set_canvas_rotation(val: float) -> void: material.set('shader_parameter/rotation', val)
func set_strob_visible(val: bool): $строб.visible = val
func set_strob_center(val: Vector2): $строб.position = val
func set_strob_dir(val: float): $строб.set_instance_shader_parameter('dir', val)
func set_strob_width(val: float): $строб.set_instance_shader_parameter('width', val)
func set_strob_band(val: float): $строб.set_instance_shader_parameter('band', val / 125.0)
func set_strob_radius(val: float): $строб.set_instance_shader_parameter('radius', sv(val))
func set_strob_color(val: Color): $строб.set_instance_shader_parameter('color', val)
func get_strob_center() -> Vector2: return $строб.position
func get_strob_visible() -> bool: return $строб.visible
func get_strob_dir() -> float: return $строб.get_instance_shader_parameter('dir')
func get_strob_width() -> float: return $строб.get_instance_shader_parameter('width')
func get_strob_band() -> float: return $строб.get_instance_shader_parameter('band') * 125.0
func get_strob_radius() -> float: return $строб.get_instance_shader_parameter('radius') * 125.0
func get_strob_color() -> float: return $строб.get_instance_shader_parameter('color')
func get_canvas_rotation() -> float: return material.get('shader_parameter/rotation')
func get_radius_outter() -> float: return material.get('shader_parameter/radius_outter')
func get_radius_inner_0() -> float: return material.get('shader_parameter/radius_inner_0')
func get_radius_inner_1() -> float: return material.get('shader_parameter/radius_inner_1')
func get_band_colors(val: Array): return material.get('shader_parameter/ant_band_c')
func get_band_failures(val: Array): return material.get('shader_parameter/ant_band_m')
func set_band_colors(val: Array): material.set('shader_parameter/ant_band_c', val)
func set_band_failures(val: Array): material.set('shader_parameter/ant_band_m', val)
## Добавляет сектор запрета[br]
## [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 clear_all_seczap():
for child in get_children():
if child.name.begins_with("SECZAP"):
remove_child(child)
child.queue_free()
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):
if val == 1:
$строб.hide()
else:
$строб.show()
material.set('shader_parameter/mode', val)
## Закрашивание по умолчанию блоков ФС цветами из настроек.
func set_def_colors():
var color0: Color = ProjectSettings.get_setting('application/interfer/default_color0', Color(0.38, 0.47, 0.51, 1.0))
var color1: Color = ProjectSettings.get_setting('application/interfer/default_color1', Color(0.39, 0.44, 0.50, 1.0))
color0 *= Color(1.0, 1.0, 1.0, 0.0)
color1 *= Color(1.0, 1.0, 1.0, 0.0)
var col_arr: Array = [color0, color1]
var col = false
for i in NUM_OF_RANGE:
for j in NUM_OF_DIRECTIONS:
fs_default_colors.append(col_arr[int(col)])
col = not col
col = not col
set_band_colors(fs_default_colors)