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 set_band_colors(val: Array): material.set('shader_parameter/ant_band_c', 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 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)) 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)