diff --git a/scenes/diagram/diagram.gd b/scenes/diagram/diagram.gd index 008dcd31..0116c167 100644 --- a/scenes/diagram/diagram.gd +++ b/scenes/diagram/diagram.gd @@ -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') diff --git a/scenes/diagram/diagram.tscn b/scenes/diagram/diagram.tscn index 5e8dffd5..e48a68b4 100644 --- a/scenes/diagram/diagram.tscn +++ b/scenes/diagram/diagram.tscn @@ -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") diff --git a/scenes/diagram/sector.tscn b/scenes/diagram/sector.tscn index 07b8a30c..4edb09b8 100644 --- a/scenes/diagram/sector.tscn +++ b/scenes/diagram/sector.tscn @@ -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") diff --git a/shaders/sector.gdshader b/shaders/sector.gdshader index 1fd8d166..08e31432 100644 --- a/shaders/sector.gdshader +++ b/shaders/sector.gdshader @@ -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), но это не так */