diff --git a/Scenes/Play.tscn b/Scenes/Play.tscn index 7cad8e6..6dfecee 100644 --- a/Scenes/Play.tscn +++ b/Scenes/Play.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=19 format=3 uid="uid://bqh00ot0csqmk"] +[gd_scene load_steps=20 format=3 uid="uid://bqh00ot0csqmk"] [ext_resource type="Script" path="res://Scripts/Scenes/Play/Play.cs" id="1_asytu"] [ext_resource type="PackedScene" uid="uid://cyetvgmwnoy8l" path="res://Things/Background.tscn" id="2_8g6gv"] [ext_resource type="Texture2D" uid="uid://cfvv520hv5lss" path="res://_Assets/Textures/background-placeholder.jpg" id="2_k05nq"] [ext_resource type="Shader" path="res://Shaders/Cutout2D.gdshader" id="3_rjbyl"] [ext_resource type="Script" path="res://Scripts/Scenes/Play/Audio/BGM.cs" id="4_c2dke"] +[ext_resource type="PackedScene" uid="uid://wk634bobe32k" path="res://Things/TunnelObjects/Notes/NoteSwipeCW.tscn" id="5_bea86"] [ext_resource type="Script" path="res://Scripts/Scenes/Play/Audio/SFX.cs" id="5_owrd5"] [sub_resource type="Environment" id="Environment_nefjb"] @@ -63,7 +64,7 @@ uv1_scale = Vector3(-1, 1, 1) [sub_resource type="ViewportTexture" id="ViewportTexture_w20vk"] viewport_path = NodePath("Mask") -[sub_resource type="ShaderMaterial" id="ShaderMaterial_a4jpv"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_5dbep"] resource_local_to_scene = true shader = ExtResource("3_rjbyl") shader_parameter/mask = SubResource("ViewportTexture_w20vk") @@ -161,7 +162,7 @@ anchor_mode = 0 editor_draw_screen = false [node name="Background" parent="2D Viewport/Viewport Control" instance=ExtResource("2_8g6gv")] -material = SubResource("ShaderMaterial_a4jpv") +material = SubResource("ShaderMaterial_5dbep") layout_mode = 1 offset_top = -1920.0 offset_right = 1920.0 @@ -269,6 +270,8 @@ anchor_top = 1.0 anchor_bottom = 1.0 grow_vertical = 0 +[node name="NoteSwipeCW" parent="2D Viewport/Viewport Control/Scroll Anchor/Notes Scroll" instance=ExtResource("5_bea86")] + [node name="AudioStreamPlayer BGM" type="AudioStreamPlayer" parent="."] script = ExtResource("4_c2dke") diff --git a/Scripts/Scenes/Play/Play.cs b/Scripts/Scenes/Play/Play.cs index b21f77a..e8baef9 100644 --- a/Scripts/Scenes/Play/Play.cs +++ b/Scripts/Scenes/Play/Play.cs @@ -132,11 +132,11 @@ namespace WacK.Scenes default: continue; } + noteDisplay.AddChild(nNote); nNote.Init(note); var nPos = nNote.Position; nPos.Y = msNote.Key * -ScrollPxPerSec; nNote.Position = nPos; - noteDisplay.AddChild(nNote); } } } diff --git a/Scripts/Things/TunnelObjects/SwipeArrow.cs b/Scripts/Things/TunnelObjects/SwipeArrow.cs new file mode 100644 index 0000000..9688759 --- /dev/null +++ b/Scripts/Things/TunnelObjects/SwipeArrow.cs @@ -0,0 +1,37 @@ +using Godot; +using System; + +namespace WacK.Things.TunnelObjects +{ + [Tool] + public partial class SwipeArrow : Control + { + public readonly Color COLOR_CW = new("#FF8000"); + public readonly Color COLOR_CCW = new("#00FF00"); + + private ShaderMaterial shader; + + public override void _EnterTree() + { + shader = (ShaderMaterial) Material; + } + + public void SetCW(bool isCW) + { + shader.SetShaderParameter("ArrowColor", isCW ? COLOR_CW : COLOR_CCW); + shader.SetShaderParameter("isCwShape", isCW); + } + + public void SetPosSize(int pos, int size) + { + var p = Position; + p.X = Constants.BASE_2D_RESOLUTION / 60 * pos; + Position = p; + + var s = Size; + s.Y = Constants.BASE_2D_RESOLUTION / 60 * size; + Size = s; + shader.SetShaderParameter("TileMult", s.Y / 64); + } + } +} \ No newline at end of file diff --git a/Scripts/Things/TunnelObjects/THNotePlay.cs b/Scripts/Things/TunnelObjects/THNotePlay.cs index 30880a7..4d606f6 100644 --- a/Scripts/Things/TunnelObjects/THNotePlay.cs +++ b/Scripts/Things/TunnelObjects/THNotePlay.cs @@ -9,34 +9,54 @@ namespace WacK.Things.TunnelObjects private NinePatchRect noteBase; public NotePlay noteData; - public void Init(NotePlay noteData) + public async void Init(NotePlay noteData) { + await ToSignal(GetTree(), SceneTree.SignalName.ProcessFrame); + this.noteData = noteData; - SetSizePos((int)noteData.pos, (int)noteData.size); + SetPosSize((int)noteData.pos, (int)noteData.size); + + // handle swipe arrow color + if (noteData.type == NotePlayType.SwipeCW) + { + var n = (SwipeArrow) FindChild("SwipeArrow"); + n.SetCW(noteData.type == NotePlayType.SwipeCW); + } } - public void SetSizePos(int pos, int size) + public void SetPosSize(int pos, int size) { + var nbPos = pos; + var nbSize = size; + // TODO: end caps peak into bounds if (3 <= size && size <= 59) { - pos += 1; - size -= 2; + nbPos += 1; + nbSize -= 2; } else if (size >= 60) { size = 60; + nbSize = 60; noteBase.RegionRect = new Rect2(12, 0, new Vector2(488, 36)); noteBase.PatchMarginLeft = 0; noteBase.PatchMarginRight = 0; } - var nPos = Position; - nPos.X = pos * (Constants.BASE_2D_RESOLUTION/60) - 12; - Position = nPos; + var nPos = noteBase.Position; + nPos.X = nbPos * (Constants.BASE_2D_RESOLUTION/60) - 12; + noteBase.Position = nPos; - var nSize = Size; - nSize.X = size * (Constants.BASE_2D_RESOLUTION/60) + 24; - Size = nSize; + var nSize = noteBase.Size; + nSize.X = nbSize * (Constants.BASE_2D_RESOLUTION/60) + 24; + noteBase.Size = nSize; + + // handle swipe arrow size + if (noteData.type == NotePlayType.SwipeCW || noteData.type == NotePlayType.SwipeCCW) + { + var n = (SwipeArrow) FindChild("SwipeArrow"); + n.SetPosSize(pos, size); + } } } } \ No newline at end of file diff --git a/Shaders/SwipeArrow.tres b/Shaders/SwipeArrow.tres index cfc44f1..3dc4c3c 100644 --- a/Shaders/SwipeArrow.tres +++ b/Shaders/SwipeArrow.tres @@ -1,4 +1,4 @@ -[gd_resource type="VisualShader" load_steps=22 format=3 uid="uid://dm5rgp78v61ha"] +[gd_resource type="VisualShader" load_steps=27 format=3 uid="uid://dm5rgp78v61ha"] [ext_resource type="Texture2D" uid="uid://cmaq66vbi80ug" path="res://_Assets/Textures/Notes/SlideArrow_Texture.png" id="1_cj2ec"] [ext_resource type="Texture2D" uid="uid://kjoqem41xatr" path="res://_Assets/Textures/Notes/SlideArrow_Mask.png" id="2_p52jd"] @@ -39,7 +39,7 @@ operator = 2 input_name = "uv" [sub_resource type="VisualShaderNodeMultiplyAdd" id="VisualShaderNodeMultiplyAdd_fd4l7"] -default_input_values = [0, Vector2(0, 0), 1, Vector2(1, 4), 2, Vector2(0, 0)] +default_input_values = [0, Vector2(0, 0), 1, Vector2(1, 6), 2, Vector2(0, 0)] op_type = 1 [sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_o1o8t"] @@ -65,7 +65,7 @@ default_value_enabled = true default_value = 1.0 [sub_resource type="VisualShaderNodeColorParameter" id="VisualShaderNodeColorParameter_u0ner"] -parameter_name = "Color" +parameter_name = "ArrowColor" default_value_enabled = true default_value = Color(0, 1, 0, 1) @@ -76,6 +76,28 @@ parameter_name = "mask" color_default = 2 texture_filter = 4 +[sub_resource type="VisualShaderNodeVectorCompose" id="VisualShaderNodeVectorCompose_3w723"] +default_input_values = [0, 1.0, 1, 0.0, 2, 0.0] +op_type = 0 + +[sub_resource type="VisualShaderNodeBooleanParameter" id="VisualShaderNodeBooleanParameter_3hrni"] +parameter_name = "isCwShape" +default_value_enabled = true + +[sub_resource type="VisualShaderNodeVectorFunc" id="VisualShaderNodeVectorFunc_sy3w3"] +default_input_values = [0, Vector2(0, 0)] +op_type = 0 +function = 32 + +[sub_resource type="VisualShaderNodeSwitch" id="VisualShaderNodeSwitch_si863"] +default_input_values = [0, false, 1, Vector3(1, 1, 1), 2, Vector3(0, 0, 0)] +op_type = 4 + +[sub_resource type="VisualShaderNodeFloatParameter" id="VisualShaderNodeFloatParameter_2lm10"] +parameter_name = "TileMult" +default_value_enabled = true +default_value = 6.0 + [sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_13pou"] default_input_values = [0, Quaternion(0, 0, 0, 0), 1, Quaternion(0, 0, 0, 0)] op_type = 2 @@ -90,7 +112,9 @@ operator = 2 code = "shader_type canvas_item; render_mode blend_mix; -uniform vec4 Color : source_color = vec4(0.000000, 1.000000, 0.000000, 1.000000); +uniform vec4 ArrowColor : source_color = vec4(0.000000, 1.000000, 0.000000, 1.000000); +uniform bool isCwShape = false; +uniform float TileMult = 6; uniform float scrollMultiplier = 1; uniform sampler2D arrow : filter_linear, repeat_enable; uniform sampler2D mask : hint_default_transparent, filter_linear_mipmap; @@ -99,7 +123,7 @@ uniform sampler2D mask : hint_default_transparent, filter_linear_mipmap; void fragment() { // ColorParameter:29 - vec4 n_out29p0 = Color; + vec4 n_out29p0 = ArrowColor; // VectorOp:13 @@ -107,10 +131,32 @@ void fragment() { vec4 n_out13p0 = n_out29p0 * n_in13p1; +// BooleanParameter:35 + bool n_out35p0 = isCwShape; + + // Input:20 vec2 n_out20p0 = UV; +// VectorFunc:36 + vec2 n_out36p0 = vec2(1.0) - n_out20p0; + + + vec3 n_out37p0; +// Switch:37 + n_out37p0 = mix(vec3(n_out20p0, 0.0), vec3(n_out36p0, 0.0), float(n_out35p0)); + + +// FloatParameter:38 + float n_out38p0 = TileMult; + + +// VectorCompose:32 + float n_in32p0 = 1.00000; + vec2 n_out32p0 = vec2(n_in32p0, n_out38p0); + + // Input:23 float n_out23p0 = TIME; @@ -129,8 +175,7 @@ void fragment() { // MultiplyAdd:22 - vec2 n_in22p1 = vec2(1.00000, 4.00000); - vec2 n_out22p0 = fma(n_out20p0, n_in22p1, n_out24p0); + vec2 n_out22p0 = fma(vec2(n_out37p0.xy), n_out32p0, n_out24p0); vec4 n_out14p0; @@ -151,7 +196,7 @@ void fragment() { vec4 n_out16p0; // Texture2D:16 - n_out16p0 = texture(mask, UV); + n_out16p0 = texture(mask, vec2(n_out37p0.xy)); float n_out16p1 = n_out16p0.r; float n_out16p2 = n_out16p0.g; float n_out16p3 = n_out16p0.b; @@ -185,7 +230,7 @@ void fragment() { } " -graph_offset = Vector2(-894.996, 674.464) +graph_offset = Vector2(-782.772, -216.243) mode = 1 flags/light_only = false nodes/fragment/0/position = Vector2(1500, 460) @@ -210,21 +255,31 @@ nodes/fragment/16/position = Vector2(-60, 520) nodes/fragment/17/node = SubResource("VisualShaderNodeFloatOp_d62au") nodes/fragment/17/position = Vector2(540, 620) nodes/fragment/20/node = SubResource("VisualShaderNodeInput_8jykx") -nodes/fragment/20/position = Vector2(-1520, 240) +nodes/fragment/20/position = Vector2(-1760, 60) nodes/fragment/22/node = SubResource("VisualShaderNodeMultiplyAdd_fd4l7") nodes/fragment/22/position = Vector2(-680, 260) nodes/fragment/23/node = SubResource("VisualShaderNodeInput_o1o8t") -nodes/fragment/23/position = Vector2(-1540, 440) +nodes/fragment/23/position = Vector2(-1580, 500) nodes/fragment/24/node = SubResource("VisualShaderNodeVectorOp_81kov") nodes/fragment/24/position = Vector2(-1000, 480) nodes/fragment/26/node = SubResource("VisualShaderNodeTexture2DParameter_ypqau") nodes/fragment/26/position = Vector2(-460, 140) nodes/fragment/27/node = SubResource("VisualShaderNodeFloatOp_jbtne") -nodes/fragment/27/position = Vector2(-1220, 540) +nodes/fragment/27/position = Vector2(-1260, 600) nodes/fragment/28/node = SubResource("VisualShaderNodeFloatParameter_k4kjf") -nodes/fragment/28/position = Vector2(-1520, 580) +nodes/fragment/28/position = Vector2(-1560, 640) nodes/fragment/29/node = SubResource("VisualShaderNodeColorParameter_u0ner") nodes/fragment/29/position = Vector2(-380, -260) nodes/fragment/30/node = SubResource("VisualShaderNodeTexture2DParameter_anrqj") nodes/fragment/30/position = Vector2(-520, 480) -nodes/fragment/connections = PackedInt32Array(7, 0, 8, 0, 11, 0, 10, 0, 10, 0, 7, 0, 13, 0, 11, 0, 15, 0, 7, 1, 16, 1, 17, 1, 16, 3, 15, 1, 16, 2, 3, 2, 8, 0, 0, 0, 20, 0, 22, 0, 22, 0, 14, 0, 3, 0, 8, 1, 17, 0, 0, 1, 14, 1, 11, 1, 14, 1, 15, 0, 14, 2, 3, 0, 26, 0, 14, 2, 24, 0, 22, 2, 23, 0, 27, 0, 27, 0, 24, 1, 28, 0, 27, 1, 29, 0, 13, 0, 29, 0, 10, 1, 14, 3, 17, 0, 30, 0, 16, 2) +nodes/fragment/32/node = SubResource("VisualShaderNodeVectorCompose_3w723") +nodes/fragment/32/position = Vector2(-960, 280) +nodes/fragment/35/node = SubResource("VisualShaderNodeBooleanParameter_3hrni") +nodes/fragment/35/position = Vector2(-1500, -280) +nodes/fragment/36/node = SubResource("VisualShaderNodeVectorFunc_sy3w3") +nodes/fragment/36/position = Vector2(-1300, -60) +nodes/fragment/37/node = SubResource("VisualShaderNodeSwitch_si863") +nodes/fragment/37/position = Vector2(-1020, -20) +nodes/fragment/38/node = SubResource("VisualShaderNodeFloatParameter_2lm10") +nodes/fragment/38/position = Vector2(-1380, 280) +nodes/fragment/connections = PackedInt32Array(7, 0, 8, 0, 11, 0, 10, 0, 10, 0, 7, 0, 13, 0, 11, 0, 15, 0, 7, 1, 16, 1, 17, 1, 16, 3, 15, 1, 16, 2, 3, 2, 8, 0, 0, 0, 22, 0, 14, 0, 3, 0, 8, 1, 17, 0, 0, 1, 14, 1, 11, 1, 14, 1, 15, 0, 14, 2, 3, 0, 26, 0, 14, 2, 27, 0, 24, 1, 28, 0, 27, 1, 29, 0, 13, 0, 29, 0, 10, 1, 14, 3, 17, 0, 30, 0, 16, 2, 23, 0, 27, 0, 32, 0, 22, 1, 24, 0, 22, 2, 20, 0, 36, 0, 35, 0, 37, 0, 37, 0, 22, 0, 37, 0, 16, 0, 38, 0, 32, 1, 36, 0, 37, 1, 20, 0, 37, 2) diff --git a/Things/TunnelObjects/Notes/NoteSwipeCCW.tscn b/Things/TunnelObjects/Notes/NoteSwipeCCW.tscn index ce9b24e..4b46096 100644 --- a/Things/TunnelObjects/Notes/NoteSwipeCCW.tscn +++ b/Things/TunnelObjects/Notes/NoteSwipeCCW.tscn @@ -1,8 +1,21 @@ -[gd_scene load_steps=4 format=3 uid="uid://bcindeb5bakb3"] +[gd_scene load_steps=8 format=3 uid="uid://bcindeb5bakb3"] [ext_resource type="Script" path="res://Scripts/Things/TunnelObjects/THNotePlay.cs" id="1_e4xxi"] [ext_resource type="Texture2D" uid="uid://cfm2r0ha81eum" path="res://_Assets/Textures/Notes/SwipeCCW.png" id="2_yb0qd"] +[ext_resource type="Shader" uid="uid://dm5rgp78v61ha" path="res://Shaders/SwipeArrow.tres" id="3_k16x0"] [ext_resource type="PackedScene" uid="uid://jn0eb8txbjro" path="res://Things/TunnelObjects/Notes/SwipeArrow.tscn" id="3_smdjm"] +[ext_resource type="Texture2D" uid="uid://cmaq66vbi80ug" path="res://_Assets/Textures/Notes/SlideArrow_Texture.png" id="4_rv322"] +[ext_resource type="Texture2D" uid="uid://kjoqem41xatr" path="res://_Assets/Textures/Notes/SlideArrow_Mask.png" id="6_o3u8k"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_u2bbd"] +resource_local_to_scene = true +shader = ExtResource("3_k16x0") +shader_parameter/ArrowColor = Color(0, 1, 0, 1) +shader_parameter/isCwShape = false +shader_parameter/TileMult = 6.0 +shader_parameter/scrollMultiplier = 2.0 +shader_parameter/arrow = ExtResource("4_rv322") +shader_parameter/mask = ExtResource("6_o3u8k") [node name="NoteSwipeCCW" type="Control" node_paths=PackedStringArray("noteBase")] layout_mode = 3 @@ -25,5 +38,8 @@ texture = ExtResource("2_yb0qd") patch_margin_left = 12 patch_margin_right = 12 -[node name="Control" parent="." instance=ExtResource("3_smdjm")] +[node name="SwipeArrow" parent="." instance=ExtResource("3_smdjm")] +material = SubResource("ShaderMaterial_u2bbd") layout_mode = 0 +offset_top = -75.0 +offset_bottom = 693.0 diff --git a/Things/TunnelObjects/Notes/NoteSwipeCW.tscn b/Things/TunnelObjects/Notes/NoteSwipeCW.tscn index c73b8e3..cea30e0 100644 --- a/Things/TunnelObjects/Notes/NoteSwipeCW.tscn +++ b/Things/TunnelObjects/Notes/NoteSwipeCW.tscn @@ -2,20 +2,21 @@ [ext_resource type="Script" path="res://Scripts/Things/TunnelObjects/THNotePlay.cs" id="1_aasqx"] [ext_resource type="Texture2D" uid="uid://rrwjokjt4jb8" path="res://_Assets/Textures/Notes/SwipeCW.png" id="2_ttxox"] +[ext_resource type="PackedScene" uid="uid://jn0eb8txbjro" path="res://Things/TunnelObjects/Notes/SwipeArrow.tscn" id="3_b1dle"] [ext_resource type="Shader" uid="uid://dm5rgp78v61ha" path="res://Shaders/SwipeArrow.tres" id="3_de2t7"] [ext_resource type="Texture2D" uid="uid://cmaq66vbi80ug" path="res://_Assets/Textures/Notes/SlideArrow_Texture.png" id="4_v0t51"] [ext_resource type="Texture2D" uid="uid://kjoqem41xatr" path="res://_Assets/Textures/Notes/SlideArrow_Mask.png" id="5_dafyh"] -[sub_resource type="ShaderMaterial" id="ShaderMaterial_kk13m"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_52amd"] +resource_local_to_scene = true shader = ExtResource("3_de2t7") -shader_parameter/Color = Color(1, 0.235294, 0, 1) -shader_parameter/scrollMultiplier = 1.0 +shader_parameter/ArrowColor = Color(0, 1, 0, 1) +shader_parameter/isCwShape = false +shader_parameter/TileMult = 6.0 +shader_parameter/scrollMultiplier = 2.0 shader_parameter/arrow = ExtResource("4_v0t51") shader_parameter/mask = ExtResource("5_dafyh") -[sub_resource type="GradientTexture1D" id="GradientTexture1D_fa8y1"] -width = 1 - [node name="NoteSwipeCW" type="Control" node_paths=PackedStringArray("noteBase")] layout_mode = 3 anchors_preset = 0 @@ -30,6 +31,7 @@ anchors_preset = -1 anchor_right = 1.0 anchor_bottom = 1.0 offset_top = -36.0 +offset_right = 120.0 offset_bottom = -24.0 grow_horizontal = 2 grow_vertical = 2 @@ -37,12 +39,8 @@ texture = ExtResource("2_ttxox") patch_margin_left = 12 patch_margin_right = 12 -[node name="Control" type="TextureRect" parent="."] -material = SubResource("ShaderMaterial_kk13m") +[node name="SwipeArrow" parent="." instance=ExtResource("3_b1dle")] +material = SubResource("ShaderMaterial_52amd") layout_mode = 0 -offset_left = 200.0 -offset_top = -198.0 -offset_right = 351.0 -offset_bottom = 2.0 -rotation = 1.5708 -texture = SubResource("GradientTexture1D_fa8y1") +offset_top = -75.0 +offset_bottom = 693.0 diff --git a/Things/TunnelObjects/Notes/SwipeArrow.tscn b/Things/TunnelObjects/Notes/SwipeArrow.tscn index 9b74fd4..58e717f 100644 --- a/Things/TunnelObjects/Notes/SwipeArrow.tscn +++ b/Things/TunnelObjects/Notes/SwipeArrow.tscn @@ -1,12 +1,16 @@ -[gd_scene load_steps=6 format=3 uid="uid://jn0eb8txbjro"] +[gd_scene load_steps=7 format=3 uid="uid://jn0eb8txbjro"] [ext_resource type="Shader" uid="uid://dm5rgp78v61ha" path="res://Shaders/SwipeArrow.tres" id="1_3a7c4"] [ext_resource type="Texture2D" uid="uid://cmaq66vbi80ug" path="res://_Assets/Textures/Notes/SlideArrow_Texture.png" id="2_nviet"] [ext_resource type="Texture2D" uid="uid://kjoqem41xatr" path="res://_Assets/Textures/Notes/SlideArrow_Mask.png" id="3_qcc22"] +[ext_resource type="Script" path="res://Scripts/Things/TunnelObjects/SwipeArrow.cs" id="4_ep8x4"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_hasp1"] +resource_local_to_scene = true shader = ExtResource("1_3a7c4") -shader_parameter/Color = Color(0, 1, 0, 1) +shader_parameter/ArrowColor = Color(0, 1, 0, 1) +shader_parameter/isCwShape = false +shader_parameter/TileMult = 6.0 shader_parameter/scrollMultiplier = 2.0 shader_parameter/arrow = ExtResource("2_nviet") shader_parameter/mask = ExtResource("3_qcc22") @@ -14,9 +18,11 @@ shader_parameter/mask = ExtResource("3_qcc22") [sub_resource type="GradientTexture1D" id="GradientTexture1D_afqg4"] width = 1 -[node name="Control" type="TextureRect"] +[node name="SwipeArrow" type="TextureRect"] material = SubResource("ShaderMaterial_hasp1") -offset_right = 275.0 -offset_bottom = 1920.0 +offset_top = -70.0 +offset_right = 175.0 +offset_bottom = 698.0 rotation = -1.5708 texture = SubResource("GradientTexture1D_afqg4") +script = ExtResource("4_ep8x4")