[gd_scene format=3 uid="uid://bcx1d8kvp7o0h"] [ext_resource type="Texture2D" uid="uid://bhdecga15imvk" path="res://Assets/Spritesheets/Trees/Big_Spruce_tree.png" id="1_xun88"] [ext_resource type="PackedScene" uid="uid://d24gcv3umq60k" path="res://Entities/Characters/Utility/Occlusion/occlusion_culler.tscn" id="2_45i4c"] [ext_resource type="PackedScene" uid="uid://dpwm1tn0mbr3l" path="res://Entities/Map Objects/Trees/Effects/leaf_spawner.tscn" id="3_nua4y"] [ext_resource type="Texture2D" uid="uid://ckvfo6bl606hp" path="res://Assets/Spritesheets/Trees/Spruce_Needle_Particle.png" id="4_34ibr"] [sub_resource type="CircleShape2D" id="CircleShape2D_13veg"] radius = 15.033297 [sub_resource type="CircleShape2D" id="CircleShape2D_34ibr"] radius = 8.0 [sub_resource type="CircleShape2D" id="CircleShape2D_bbkr4"] radius = 3.0 [sub_resource type="Shader" id="Shader_34ibr"] code = "shader_type canvas_item; uniform bool render_noise = false; uniform sampler2D noise_texture : repeat_enable; // set in inspector uniform float amplitude : hint_range(0.0, 0.5, 0.01) = 0.2; uniform float time_scale : hint_range(0.0, 5.0, 0.01) = 0.04; uniform float noise_scale : hint_range(0.0, 2.0, 0.0001) = 0.001; uniform float rotation_strength : hint_range(0.0, 5.0, 0.1) = 1; uniform vec2 rotation_pivot = vec2(0.5, 1); varying vec2 world_position; void vertex(){ world_position = (MODEL_MATRIX * vec4(VERTEX, 0.0, 1.0)).xy; } vec2 get_sample_pos(vec2 pos, float scale, float offset) { pos *= scale; pos += offset; return pos; } vec2 rotate_vec(vec2 vec, vec2 pivot, float rotation) { float cosa = cos(rotation); float sina = sin(rotation); vec -= pivot; return vec2( cosa * vec.x - sina * vec.y, cosa * vec.y + sina * vec.x ) + pivot; } void fragment() { // get noise from texture vec2 noise_sample_pos = get_sample_pos(world_position, noise_scale, TIME * time_scale); float noise_amount = texture(noise_texture, noise_sample_pos).r - 0.5f; // get rotation position around a pivot float rotation = amplitude * noise_amount; vec2 rotated_uvs = rotate_vec(UV, rotation_pivot, rotation); // blend original uvs and rotated uvs based on distance to pivot float dist = distance(UV, rotation_pivot) * rotation_strength; vec2 result_uvs = mix(UV, rotated_uvs, dist); // output color COLOR = texture(TEXTURE, result_uvs); // optional, preview noise texture for debugging if (render_noise) { vec4 noise_color = texture(noise_texture, noise_sample_pos); COLOR = noise_color; } }" [sub_resource type="NoiseTexture2D" id="NoiseTexture2D_bbkr4"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_b4y2c"] shader = SubResource("Shader_34ibr") shader_parameter/render_noise = false shader_parameter/noise_texture = SubResource("NoiseTexture2D_bbkr4") shader_parameter/amplitude = 0.03999999910592 shader_parameter/time_scale = 0.04 shader_parameter/noise_scale = 0.001 shader_parameter/rotation_strength = 1.0 shader_parameter/rotation_pivot = Vector2(0.5, 1) [sub_resource type="AtlasTexture" id="AtlasTexture_5otsd"] atlas = ExtResource("1_xun88") region = Rect2(64, 0, 64, 80) [sub_resource type="RectangleShape2D" id="RectangleShape2D_0srx6"] size = Vector2(16, 10) [node name="Tree 03" type="StaticBody2D" unique_id=2046930104] y_sort_enabled = true [node name="Occlusion Culler" parent="." unique_id=1362480066 node_paths=PackedStringArray("nodes_to_occlude") instance=ExtResource("2_45i4c")] nodes_to_occlude = [NodePath("../Sprite2D")] [node name="CollisionShape2D" type="CollisionShape2D" parent="Occlusion Culler" unique_id=585236031] shape = SubResource("CircleShape2D_13veg") [node name="CollisionShape2D2" type="CollisionShape2D" parent="Occlusion Culler" unique_id=1731688944] position = Vector2(0, -18) shape = SubResource("CircleShape2D_34ibr") [node name="CollisionShape2D3" type="CollisionShape2D" parent="Occlusion Culler" unique_id=424659978] position = Vector2(0, -32) shape = SubResource("CircleShape2D_bbkr4") [node name="Sprite2D" type="Sprite2D" parent="." unique_id=1420512565] y_sort_enabled = true material = SubResource("ShaderMaterial_b4y2c") position = Vector2(0, 24) texture = SubResource("AtlasTexture_5otsd") offset = Vector2(0, -24) [node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=870152657] position = Vector2(0, 19) shape = SubResource("RectangleShape2D_0srx6") [node name="Leaf Spawner" parent="." unique_id=986945632 node_paths=PackedStringArray("spawn_markers", "destination_markers") instance=ExtResource("3_nua4y")] leaf_texture = ExtResource("4_34ibr") spawn_markers = NodePath("Spawn Markers") destination_markers = NodePath("Destination Markers") [node name="Spawn Markers" type="Node2D" parent="Leaf Spawner" unique_id=992261793] [node name="Marker2D" type="Marker2D" parent="Leaf Spawner/Spawn Markers" unique_id=1312492144] position = Vector2(-14, 5) [node name="Marker2D2" type="Marker2D" parent="Leaf Spawner/Spawn Markers" unique_id=1942462835] position = Vector2(-11, -4) [node name="Marker2D3" type="Marker2D" parent="Leaf Spawner/Spawn Markers" unique_id=810574820] position = Vector2(-7, -15) [node name="Marker2D4" type="Marker2D" parent="Leaf Spawner/Spawn Markers" unique_id=291879085] position = Vector2(-3, -29) [node name="Marker2D5" type="Marker2D" parent="Leaf Spawner/Spawn Markers" unique_id=1559139972] position = Vector2(4, -30) [node name="Marker2D6" type="Marker2D" parent="Leaf Spawner/Spawn Markers" unique_id=842452431] position = Vector2(7, -22) [node name="Marker2D7" type="Marker2D" parent="Leaf Spawner/Spawn Markers" unique_id=947896890] position = Vector2(10, -12) [node name="Marker2D8" type="Marker2D" parent="Leaf Spawner/Spawn Markers" unique_id=1254697051] position = Vector2(11, 1) [node name="Marker2D9" type="Marker2D" parent="Leaf Spawner/Spawn Markers" unique_id=598463156] position = Vector2(13, 12) [node name="Marker2D10" type="Marker2D" parent="Leaf Spawner/Spawn Markers" unique_id=1632041472] position = Vector2(7, 14) [node name="Marker2D11" type="Marker2D" parent="Leaf Spawner/Spawn Markers" unique_id=705248658] position = Vector2(-7, 14) [node name="Destination Markers" type="Node2D" parent="Leaf Spawner" unique_id=1084196582] [node name="Marker2D" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=1434626655] position = Vector2(-17, 19) [node name="Marker2D2" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=1985496050] position = Vector2(-32, 27) [node name="Marker2D3" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=612599198] position = Vector2(-30, 15) [node name="Marker2D4" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=1750692117] position = Vector2(-19, 33) [node name="Marker2D5" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=1637274691] position = Vector2(-7, 38) [node name="Marker2D6" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=270534968] position = Vector2(-1, 30) [node name="Marker2D7" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=1580580484] position = Vector2(-8, 27) [node name="Marker2D8" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=1666879158] position = Vector2(14, 38) [node name="Marker2D9" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=33388155] position = Vector2(12, 30) [node name="Marker2D10" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=1245617655] position = Vector2(24, 25) [node name="Marker2D11" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=709006321] position = Vector2(19, 20) [node name="Marker2D12" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=602455411] position = Vector2(28, 14) [node name="Marker2D13" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=264453249] position = Vector2(35, 28) [node name="Marker2D14" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=2036567999] position = Vector2(28, 36) [node name="Marker2D15" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=1663646612] position = Vector2(-26, 34) [node name="Marker2D16" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=1858656621] position = Vector2(-26, 34)