Files
Archipelago-Game/Entities/Map Objects/Trees/tree_02.tscn
2026-03-17 13:45:35 -06:00

158 lines
6.1 KiB
Plaintext

[gd_scene format=3 uid="uid://be6xfndyj4ckx"]
[ext_resource type="PackedScene" uid="uid://d24gcv3umq60k" path="res://Entities/Characters/Utility/Occlusion/occlusion_culler.tscn" id="1_ijlg6"]
[ext_resource type="Texture2D" uid="uid://c6cddkuevr4hl" path="res://Assets/Spritesheets/Trees/Big_Oak_Tree-Isolated.png" id="2_mxye4"]
[ext_resource type="PackedScene" uid="uid://dpwm1tn0mbr3l" path="res://Entities/Map Objects/Trees/Effects/leaf_spawner.tscn" id="3_n7ubj"]
[ext_resource type="Texture2D" uid="uid://dv2qcpyn2rk5s" path="res://Assets/Spritesheets/Trees/Oak_Leaf_Particle.png" id="4_xq3h5"]
[sub_resource type="CircleShape2D" id="CircleShape2D_ijlg6"]
radius = 23.021729
[sub_resource type="Shader" id="Shader_mxye4"]
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_pv2vp"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ocj51"]
shader = SubResource("Shader_mxye4")
shader_parameter/render_noise = false
shader_parameter/noise_texture = SubResource("NoiseTexture2D_pv2vp")
shader_parameter/amplitude = 0.1999999955296
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="RectangleShape2D" id="RectangleShape2D_0srx6"]
size = Vector2(16, 10)
[node name="Tree 02" 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("1_ijlg6")]
nodes_to_occlude = [NodePath("../Sprite2D")]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Occlusion Culler" unique_id=1085880925]
position = Vector2(0, -10)
shape = SubResource("CircleShape2D_ijlg6")
[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1420512565]
y_sort_enabled = true
material = SubResource("ShaderMaterial_ocj51")
position = Vector2(0, 24)
texture = ExtResource("2_mxye4")
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_n7ubj")]
leaf_texture = ExtResource("4_xq3h5")
spawn_markers = NodePath("Spawn Markers")
destination_markers = NodePath("Destination Markers")
[node name="Spawn Markers" type="Node2D" parent="Leaf Spawner" unique_id=718423149]
[node name="Marker2D" type="Marker2D" parent="Leaf Spawner/Spawn Markers" unique_id=110047229]
position = Vector2(-10, -19)
[node name="Marker2D2" type="Marker2D" parent="Leaf Spawner/Spawn Markers" unique_id=1030089042]
position = Vector2(-15, -2)
[node name="Marker2D3" type="Marker2D" parent="Leaf Spawner/Spawn Markers" unique_id=1530367987]
position = Vector2(9, 4)
[node name="Marker2D4" type="Marker2D" parent="Leaf Spawner/Spawn Markers" unique_id=2042975279]
position = Vector2(15, -10)
[node name="Marker2D5" type="Marker2D" parent="Leaf Spawner/Spawn Markers" unique_id=712311756]
position = Vector2(8, -24)
[node name="Destination Markers" type="Node2D" parent="Leaf Spawner" unique_id=1860944141]
[node name="Marker2D" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=608985314]
position = Vector2(-23, 14)
[node name="Marker2D2" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=860056803]
position = Vector2(-27, 25)
[node name="Marker2D3" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=457722512]
position = Vector2(-15, 21)
[node name="Marker2D4" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=1184860371]
position = Vector2(-5, 30)
[node name="Marker2D5" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=181196191]
position = Vector2(6, 26)
[node name="Marker2D6" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=1185929582]
position = Vector2(18, 34)
[node name="Marker2D7" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=180258159]
position = Vector2(25, 18)
[node name="Marker2D8" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=1566992504]
position = Vector2(14, 20)
[node name="Marker2D9" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=1862213394]
position = Vector2(16, 11)
[node name="Marker2D10" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=489682641]
position = Vector2(30, 8)
[node name="Marker2D11" type="Marker2D" parent="Leaf Spawner/Destination Markers" unique_id=495586307]
position = Vector2(-34, 12)