Доработка. Теперь параметры сектора у каждого экземпляра будут свои

This commit is contained in:
sasha80
2025-09-20 16:47:40 +03:00
parent 57a6d21fba
commit 05f49778d5
4 changed files with 20 additions and 29 deletions

View File

@@ -13,17 +13,17 @@ func sv(val: float) -> float: return val / ($строб.scale.x / 2.0) * 0.125
func set_strob_visible(val: bool): $строб.visible = val
func set_strob_center(val: Vector2): $строб.position = val
func set_strob_dir(val: float): $строб.material.set('shader_parameter/dir', val)
func set_strob_color(val: Color): $строб.material.set('shader_parameter/color', val)
func set_strob_width(val: float): $строб.material.set('shader_parameter/width', val)
func set_strob_band(val: float): $строб.material.set('shader_parameter/band', val / 125.0)
func set_strob_radius(val: float): $строб.material.set('shader_parameter/radius', sv(val))
func set_strob_dir(val: float): $строб.set_instance_shader_parameter('dir', val)
func set_strob_color(val: Color): $строб.set_instance_shader_parameter('color', 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 get_strob_center() -> Vector2: return $строб.position
func get_strob_visible() -> bool: return $строб.visible
func get_strob_width() -> float: return $строб.material.get('shader_parameter/width')
func get_strob_band() -> float: return $строб.material.get('shader_parameter/band') * 125.0
func get_strob_radius() -> float: return $строб.material.get('shader_parameter/radius') * 125.0
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_radius_outter() -> float: return material.get('shader_parameter/radius_outter')
func get_radius_inner_0() -> float: return material.get('shader_parameter/radius_inner_0')

View File

@@ -11,13 +11,6 @@ size = Vector2(1600, 1200)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_lniyv"]
resource_local_to_scene = true
shader = ExtResource("4_obn6s")
shader_parameter/color = Color(1, 1, 1, 0.168627)
shader_parameter/clip_color = Color(1, 0.5, 0.5, 1)
shader_parameter/width = 45.0
shader_parameter/band = 0.02
shader_parameter/radius = 0.08
shader_parameter/dir = 0.0
shader_parameter/inner_clip = 0.045
[node name="canvas" type="Sprite2D"]
material = ExtResource("1_newdt")

View File

@@ -5,18 +5,16 @@
[sub_resource type="ShaderMaterial" id="ShaderMaterial_xo5or"]
resource_local_to_scene = true
shader = ExtResource("1_e0gfn")
shader_parameter/color = Color(1, 1, 1, 0.168627)
shader_parameter/clip_color = Color(1, 0.5, 0.5, 1)
shader_parameter/width = 45.0
shader_parameter/band = 0.02
shader_parameter/radius = 0.08
shader_parameter/dir = 0.0
shader_parameter/inner_clip = 0.045
[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_2lkm8"]
[node name="sector" type="Sprite2D"]
material = SubResource("ShaderMaterial_xo5or")
instance_shader_parameters/band = 0.02
instance_shader_parameters/color = Color(1, 1, 1, 0.188235)
instance_shader_parameters/inner_clip = 0.045
instance_shader_parameters/radius = 0.08
instance_shader_parameters/width = 45.0
position = Vector2(610, 600)
scale = Vector2(1108, 1108)
texture = SubResource("PlaceholderTexture2D_2lkm8")

View File

@@ -4,13 +4,13 @@ shader_type canvas_item;
/* Закрашенный сектор окружности ограниченный угловым сектором и радиусами */
uniform vec4 color: source_color = vec4(1, 1, 1, 1);
uniform vec4 clip_color: source_color = vec4(1.0, 0.5, 0.5, 1.0);
uniform float width: hint_range(0.0, 360.0, 0.1) = 45.0;
uniform float band: hint_range(0.0, 0.125) = 0.02;
uniform float radius: hint_range(0.0, 0.125) = 0.08;
uniform float dir: hint_range(0.0, 360.0) = 0.0;
uniform float inner_clip: hint_range(0.0, 0.125) = 0.045;
instance uniform vec4 color: source_color = vec4(1, 1, 1, 1);
instance uniform vec4 clip_color: source_color = vec4(1.0, 0.5, 0.5, 1.0);
instance uniform float width: hint_range(0.0, 360.0, 0.1) = 45.0;
instance uniform float band: hint_range(0.0, 0.125) = 0.02;
instance uniform float radius: hint_range(0.0, 0.125) = 0.08;
instance uniform float dir: hint_range(0.0, 360.0) = 0.0;
instance uniform float inner_clip: hint_range(0.0, 0.125) = 0.045;
const vec2 center = vec2(0.125, 0.125); /* Центр. Должен быть в (0.5, 0.5), но это не так */