beta-1.3/restructure-files (#2)
Reviewed-on: #2
This commit was merged in pull request #2.
This commit is contained in:
78
Entities/Map Objects/Trees/Effects/Scripts/leaf_spawner.gd
Normal file
78
Entities/Map Objects/Trees/Effects/Scripts/leaf_spawner.gd
Normal file
@@ -0,0 +1,78 @@
|
||||
extends Node2D
|
||||
|
||||
@export var leaf_texture: Texture2D
|
||||
@export var spawn_markers: Node2D
|
||||
@export var destination_markers: Node2D
|
||||
|
||||
@export_range(0.0, 60.0) var minimum_schedule_gap := 20.0
|
||||
@export_range(1.0, 61.0) var maximum_schedule_gap := 60.0
|
||||
|
||||
var _spawn_markers: Array[Marker2D] = []
|
||||
var _destination_markers: Array[Marker2D] = []
|
||||
var _spawn_schedule := 0.0
|
||||
var _spawn_timer := 0.0
|
||||
|
||||
# Private Methods
|
||||
func _ready() -> void:
|
||||
for child in spawn_markers.get_children():
|
||||
_spawn_markers.append(child)
|
||||
|
||||
for child in destination_markers.get_children():
|
||||
_destination_markers.append(child)
|
||||
|
||||
_set_random_spawn_schedule()
|
||||
|
||||
# At spawn, we might want to spawn some leaves sooner...
|
||||
_spawn_schedule -= randf_range(0.0, _spawn_schedule)
|
||||
_spawn_schedule = max(0, _spawn_schedule)
|
||||
print("%s - Leaf Spawn Schedule: %f" % [get_parent().name, _spawn_schedule])
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
_spawn_timer += delta
|
||||
if _spawn_timer >= _spawn_schedule:
|
||||
_spawn_timer = 0.0
|
||||
_set_random_spawn_schedule()
|
||||
|
||||
var spawn := _get_random_spawn_point()
|
||||
var destination := _get_random_destination_point()
|
||||
|
||||
# TODO Refactor this into scene
|
||||
var sprite := Sprite2D.new()
|
||||
sprite.texture = leaf_texture
|
||||
sprite.position = spawn
|
||||
sprite.rotate(deg_to_rad(randf_range(0, 360)))
|
||||
var tween := get_tree().create_tween().tween_property(sprite, "position", destination, randf_range(2.0, 3.0))
|
||||
tween.finished.connect(
|
||||
func():
|
||||
var timer := get_tree().create_timer(randf_range(8.0, 15.0))
|
||||
timer.timeout.connect(
|
||||
func():
|
||||
if !sprite: return
|
||||
var tween2 := get_tree().create_tween().tween_property(sprite, "self_modulate:a", 0.0, randf_range(4.0, 6.0))
|
||||
tween2.finished.connect(
|
||||
func():
|
||||
if !sprite: return
|
||||
sprite.queue_free()
|
||||
)
|
||||
)
|
||||
)
|
||||
add_child(sprite)
|
||||
|
||||
|
||||
func _set_random_spawn_schedule() -> void:
|
||||
_spawn_schedule = randf_range(minimum_schedule_gap, maximum_schedule_gap)
|
||||
|
||||
|
||||
func _get_random_spawn_point() -> Vector2:
|
||||
var idx := randi_range(0, len(_spawn_markers) - 1)
|
||||
var marker := _spawn_markers[idx]
|
||||
return marker.position
|
||||
|
||||
|
||||
func _get_random_destination_point() -> Vector2:
|
||||
var idx := randi_range(0, len(_destination_markers) - 1)
|
||||
var marker := _destination_markers[idx]
|
||||
var offset := Vector2(randf_range(-5.0, 5.0), randf_range(-5.0, 5.0))
|
||||
|
||||
return marker.position + offset
|
||||
@@ -0,0 +1 @@
|
||||
uid://vmyfl4obus88
|
||||
7
Entities/Map Objects/Trees/Effects/leaf_spawner.tscn
Normal file
7
Entities/Map Objects/Trees/Effects/leaf_spawner.tscn
Normal file
@@ -0,0 +1,7 @@
|
||||
[gd_scene format=3 uid="uid://dpwm1tn0mbr3l"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://vmyfl4obus88" path="res://Entities/Map Objects/Trees/Effects/Scripts/leaf_spawner.gd" id="1_l7yxv"]
|
||||
|
||||
[node name="Leaf Spawner" type="Node2D" unique_id=986945632]
|
||||
y_sort_enabled = true
|
||||
script = ExtResource("1_l7yxv")
|
||||
102
Entities/Map Objects/Trees/tree_01.tscn
Normal file
102
Entities/Map Objects/Trees/tree_01.tscn
Normal file
@@ -0,0 +1,102 @@
|
||||
[gd_scene format=3 uid="uid://cc3qat6un2323"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://xygpf7c886pj" path="res://Assets/Spritesheets/Trees/Medium_Oak_Tree.png" id="1_i2ia5"]
|
||||
[ext_resource type="PackedScene" uid="uid://d24gcv3umq60k" path="res://Entities/Characters/Utility/Occlusion/occlusion_culler.tscn" id="1_jbed0"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_jbed0"]
|
||||
radius = 12.0
|
||||
|
||||
[sub_resource type="Shader" id="Shader_jbed0"]
|
||||
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_o0u4i"]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_b23hf"]
|
||||
shader = SubResource("Shader_jbed0")
|
||||
shader_parameter/render_noise = false
|
||||
shader_parameter/noise_texture = SubResource("NoiseTexture2D_o0u4i")
|
||||
shader_parameter/amplitude = 0.05999999865888
|
||||
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_i2ia5")
|
||||
region = Rect2(32, 0, 32, 48)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_0srx6"]
|
||||
size = Vector2(6, 3)
|
||||
|
||||
[node name="Tree 01" 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_jbed0")]
|
||||
nodes_to_occlude = [NodePath("../Sprite2D")]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Occlusion Culler" unique_id=731605527]
|
||||
position = Vector2(0, -10)
|
||||
shape = SubResource("CircleShape2D_jbed0")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1420512565]
|
||||
y_sort_enabled = true
|
||||
material = SubResource("ShaderMaterial_b23hf")
|
||||
position = Vector2(0, 8)
|
||||
texture = SubResource("AtlasTexture_5otsd")
|
||||
offset = Vector2(0, -8)
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=870152657]
|
||||
position = Vector2(0, 6.5)
|
||||
shape = SubResource("RectangleShape2D_0srx6")
|
||||
157
Entities/Map Objects/Trees/tree_02.tscn
Normal file
157
Entities/Map Objects/Trees/tree_02.tscn
Normal file
@@ -0,0 +1,157 @@
|
||||
[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)
|
||||
207
Entities/Map Objects/Trees/tree_03.tscn
Normal file
207
Entities/Map Objects/Trees/tree_03.tscn
Normal file
@@ -0,0 +1,207 @@
|
||||
[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)
|
||||
Reference in New Issue
Block a user