2 Commits

Author SHA1 Message Date
Matteo Sonaglioni
d8496f4cc7 tweak enviromentconfig 2026-04-29 11:01:07 +02:00
Matteo Sonaglioni
84538679f3 museum_map 2026-04-29 09:29:48 +02:00
220 changed files with 561 additions and 19589 deletions

13
.idea/.gitignore generated vendored
View File

@@ -1,13 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/contentModel.xml
/modules.xml
/projectSettingsUpdater.xml
/.idea.tgcc.iml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

4
.idea/encodings.xml generated
View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
</project>

8
.idea/indexLayout.xml generated
View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>

6
.idea/vcs.xml generated
View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@@ -1,51 +0,0 @@
extends CharacterBody3D
class_name AIBase
@export var speed: float = 4.0
var _enable_state_machine: bool = true
@export var enable_state_machine: bool:
set(value):
_enable_state_machine = value
toggle_enable_state_machine()
get:
return _enable_state_machine
@onready var patrol_radius_shape: CollisionShape3D = $%PatrolRadiusShape
@onready var nav_agent: NavigationAgent3D = $%NavigationAgent3D
@onready var state_machine: StateMachine = $%StateMachine
func _ready() -> void:
randomize()
toggle_enable_state_machine()
func toggle_enable_state_machine() -> void:
state_machine.enable = _enable_state_machine
func _physics_process(delta: float) -> void:
if !_enable_state_machine:
return
state_machine.physics_process(delta)
if nav_agent.is_navigation_finished():
velocity = Vector3.ZERO
move_and_slide()
return
var next_point = nav_agent.get_next_path_position()
var direction = global_position.direction_to(next_point)
velocity.x = direction.x * speed
velocity.z = direction.z * speed
move_and_slide()
func navigate_to_random_point() -> void:
var nav_map_rid = get_world_3d().get_navigation_map()
var patrol_radius = patrol_radius_shape.shape.radius
var target_point_in_space = global_position + Vector3(randf_range(-1, 1), 0, randf_range(-1, 1)).normalized() * randf_range(0, patrol_radius)
var closest_valid_point = NavigationServer3D.map_get_closest_point(nav_map_rid, target_point_in_space)
nav_agent.target_position = closest_valid_point

View File

@@ -1 +0,0 @@
uid://b30p1yqojbbbk

View File

@@ -1,44 +0,0 @@
[gd_scene format=3 uid="uid://clx701xdwelgx"]
[ext_resource type="Script" uid="uid://b30p1yqojbbbk" path="res://core/ai/agents/base/ai_base.gd" id="1_4d1nn"]
[ext_resource type="Script" uid="uid://ps3vlu2qvmop" path="res://core/ai/framework/state_machine.gd" id="2_q1hg3"]
[ext_resource type="Script" uid="uid://nga8qx56iwgu" path="res://core/ai/agents/base/idle_state.gd" id="3_26faq"]
[ext_resource type="Script" uid="uid://bngfthvt04ivv" path="res://core/ai/agents/base/patrol_state.gd" id="4_lim44"]
[sub_resource type="CapsuleMesh" id="CapsuleMesh_mh3lg"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_mh3lg"]
[sub_resource type="SphereShape3D" id="SphereShape3D_lim44"]
radius = 20.0
[node name="AiBase" type="CharacterBody3D" unique_id=1228675528]
script = ExtResource("1_4d1nn")
[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=214482161]
mesh = SubResource("CapsuleMesh_mh3lg")
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=92811823]
shape = SubResource("CapsuleShape3D_mh3lg")
[node name="NavigationAgent3D" type="NavigationAgent3D" parent="." unique_id=1370024449]
unique_name_in_owner = true
[node name="StateMachine" type="Node" parent="." unique_id=1286404264 node_paths=PackedStringArray("initial_state")]
unique_name_in_owner = true
script = ExtResource("2_q1hg3")
initial_state = NodePath("IdleState")
[node name="IdleState" type="Node" parent="StateMachine" unique_id=763668255]
script = ExtResource("3_26faq")
state_id = &"idle"
[node name="PatrolState" type="Node" parent="StateMachine" unique_id=2054606629]
script = ExtResource("4_lim44")
state_id = &"patrol"
[node name="PatrolRadiusShape" type="CollisionShape3D" parent="." unique_id=1379515938]
unique_name_in_owner = true
shape = SubResource("SphereShape3D_lim44")
disabled = true
debug_color = Color(1, 1, 0, 1)

View File

@@ -1,26 +0,0 @@
extends State
const PATROL_STATE_ID: StringName = &"patrol"
@export var wait_time: float = 3.0
var runtime_timer: Timer
func enter() -> void:
runtime_timer = Timer.new()
runtime_timer.name = "IdleTimer"
add_child(runtime_timer)
runtime_timer.one_shot = true
runtime_timer.timeout.connect(_on_timer_timeout)
runtime_timer.start(wait_time)
func exit() -> void:
if runtime_timer:
if runtime_timer.is_connected("timeout", _on_timer_timeout):
runtime_timer.timeout.disconnect(_on_timer_timeout)
runtime_timer.queue_free()
runtime_timer = null
func _on_timer_timeout() -> void:
transitioned.emit(self, PATROL_STATE_ID)

View File

@@ -1 +0,0 @@
uid://nga8qx56iwgu

View File

@@ -1,12 +0,0 @@
extends State
const IDLE_STATE_ID: StringName = &"idle"
@onready var agent: AIBase = owner
func enter() -> void:
agent.navigate_to_random_point()
func physics_update(_delta) -> void:
if agent.nav_agent.is_navigation_finished():
transitioned.emit(self, IDLE_STATE_ID)

View File

@@ -1 +0,0 @@
uid://bngfthvt04ivv

View File

@@ -1,20 +0,0 @@
extends Node
class_name State
@export var state_id: StringName = &""
@warning_ignore("unused_signal")
signal transitioned(state: State, new_state_id: StringName)
func enter() -> void:
pass
func exit() -> void:
pass
func update(_delta) -> void:
pass
func physics_update(_delta) -> void:
pass

View File

@@ -1 +0,0 @@
uid://dpso7abi5ftyw

View File

@@ -1,61 +0,0 @@
extends Node
class_name StateMachine
@export var initial_state: State
var current_state: State
var states: Dictionary[StringName, State] = {}
var is_initialized: bool = false
var _enabled: bool = true
var enable: bool:
set(value):
_enabled = value
_set_enabled(value)
get:
return _enabled
func _ready() -> void:
_initialize_states()
_set_enabled(enable)
func _initialize_states() -> void:
if is_initialized:
return
for state in get_children():
if state is State:
states[state.state_id] = state
state.transitioned.connect(_on_state_transition)
is_initialized = true
func _set_enabled(value: bool) -> void:
_enabled = value
if not _enabled:
return
_initialize_states()
if initial_state and current_state == null:
current_state = initial_state
current_state.enter()
func physics_process(delta) -> void:
if current_state and _enabled:
current_state.physics_update(delta)
func _on_state_transition(state: State, new_state_id: StringName) -> void:
if state != current_state:
return
var new_state = states.get(new_state_id)
if not new_state:
return
if current_state:
current_state.exit()
current_state = new_state
current_state.enter()

View File

@@ -1 +0,0 @@
uid://ps3vlu2qvmop

View File

@@ -1,31 +0,0 @@
extends Node
const MIN_VOLUME: float = 0.0
const MAX_VOLUME: float = 1.0
func _ready() -> void:
load_save_data()
func load_save_data() -> void:
for bus_name in GameState.save_data.audio_bus_volumes:
_apply_audio_bus_volume(bus_name, GameState.save_data.audio_bus_volumes[bus_name])
func set_audio_bus_volume(bus_name: StringName, linear_value: float) -> void:
var normalized_bus_name := str(bus_name)
var clamped_value := clampf(linear_value, MIN_VOLUME, MAX_VOLUME)
GameState.save_data.audio_bus_volumes[normalized_bus_name] = clamped_value
_apply_audio_bus_volume(normalized_bus_name, clamped_value)
GameState.save_game()
func get_audio_bus_volume(bus_name: StringName, default_value: float = 1.0) -> float:
return float(GameState.save_data.audio_bus_volumes.get(str(bus_name), default_value))
func _apply_audio_bus_volume(bus_name: String, linear_value: float) -> void:
var bus_index := AudioServer.get_bus_index(bus_name)
if bus_index == -1:
return
var clamped_value := clampf(linear_value, MIN_VOLUME, MAX_VOLUME)
AudioServer.set_bus_volume_db(bus_index, linear_to_db(clamped_value))
AudioServer.set_bus_mute(bus_index, is_zero_approx(clamped_value))

View File

@@ -1 +0,0 @@
uid://dcttbbavtwtsg

View File

@@ -1,56 +0,0 @@
extends VBoxContainer
class_name AudioOption
const MIN_VOLUME: float = 0.0
const MAX_VOLUME: float = 1.0
@export var bus_name: StringName = &"Master"
@export var label_text: String = "Master Volume"
@export_range(0.0, 1.0, 0.01) var default_volume: float = 1.0
@onready var label: Label = $Label
@onready var slider: HSlider = $HSlider
func _ready() -> void:
slider.min_value = MIN_VOLUME
slider.max_value = MAX_VOLUME
slider.step = 0.01
slider.value_changed.connect(_on_slider_value_changed)
refresh()
func refresh() -> void:
label.text = label_text
if not has_bus():
slider.set_value_no_signal(default_volume)
slider.editable = false
label.text = "%s (bus missing)" % label_text
return
slider.editable = true
var saved_volume := AudioManager.get_audio_bus_volume(bus_name, default_volume)
slider.set_value_no_signal(saved_volume)
apply_current_value()
func reset_to_default() -> void:
slider.value = default_volume
func apply_current_value() -> void:
_set_bus_volume(slider.value)
func has_bus() -> bool:
return get_bus_index() != -1
func get_bus_index() -> int:
return AudioServer.get_bus_index(bus_name)
func _set_bus_volume(linear_value: float) -> void:
if not has_bus():
return
var clamped_value := clampf(linear_value, MIN_VOLUME, MAX_VOLUME)
AudioManager.set_audio_bus_volume(bus_name, clamped_value)
func _on_slider_value_changed(value: float) -> void:
_set_bus_volume(value)

View File

@@ -1 +0,0 @@
uid://bnh1y560h55vc

View File

@@ -1,14 +0,0 @@
[gd_scene format=3 uid="uid://cescrovsjlwke"]
[ext_resource type="Script" uid="uid://bnh1y560h55vc" path="res://core/audio/settings/audio_option.gd" id="1_orafl"]
[node name="AudioOption" type="VBoxContainer" unique_id=1509773712]
custom_minimum_size = Vector2(300, 0)
script = ExtResource("1_orafl")
[node name="Label" type="Label" parent="." unique_id=781845786]
layout_mode = 2
text = "Master Volume"
[node name="HSlider" type="HSlider" parent="." unique_id=1286896253]
layout_mode = 2

View File

@@ -1,36 +0,0 @@
extends Control
class_name SettingsMenu
@onready var audio_options_container: VBoxContainer = $%AudioOptionsContainer
@onready var reset_button: Button = $%ResetToDefault_Button
@onready var close_button: Button = $%Close_Button
func _ready() -> void:
reset_button.pressed.connect(_on_reset_to_default_button_pressed)
close_button.pressed.connect(_on_close_button_pressed)
_refresh_audio_options()
func _get_audio_options() -> Array[AudioOption]:
var audio_options: Array[AudioOption] = []
for child in audio_options_container.get_children():
if child is AudioOption:
audio_options.append(child)
return audio_options
func _refresh_audio_options() -> void:
for audio_option in _get_audio_options():
audio_option.refresh()
func _apply_current_audio_values() -> void:
for audio_option in _get_audio_options():
audio_option.apply_current_value()
func _on_reset_to_default_button_pressed() -> void:
for audio_option in _get_audio_options():
audio_option.reset_to_default()
func _on_close_button_pressed() -> void:
visible = false

View File

@@ -1 +0,0 @@
uid://cvr25q1blyxg

View File

@@ -1,74 +0,0 @@
[gd_scene format=3 uid="uid://caqf471x0kttc"]
[ext_resource type="Script" uid="uid://cvr25q1blyxg" path="res://core/audio/settings/settings_menu.gd" id="1_4lekq"]
[ext_resource type="PackedScene" uid="uid://cescrovsjlwke" path="res://core/audio/settings/audio_option.tscn" id="1_hwcco"]
[node name="SettingsMenu" type="Control" unique_id=1639777294]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_4lekq")
[node name="PanelContainer" type="PanelContainer" parent="." unique_id=315821242]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -79.5
offset_top = -110.0
offset_right = 79.5
offset_bottom = 110.0
grow_horizontal = 2
grow_vertical = 2
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer" unique_id=648635784]
layout_mode = 2
size_flags_vertical = 0
theme_override_constants/margin_left = 12
theme_override_constants/margin_top = 12
theme_override_constants/margin_right = 12
theme_override_constants/margin_bottom = 12
[node name="AudioOptionsContainer" type="VBoxContainer" parent="PanelContainer/MarginContainer" unique_id=824023653]
unique_name_in_owner = true
layout_mode = 2
theme_override_constants/separation = 12
[node name="MasterVolume_AudioOption" parent="PanelContainer/MarginContainer/AudioOptionsContainer" unique_id=1509773712 instance=ExtResource("1_hwcco")]
layout_mode = 2
[node name="HSeparator" type="HSeparator" parent="PanelContainer/MarginContainer/AudioOptionsContainer" unique_id=1053430754]
layout_mode = 2
[node name="MusicVolume_AudioOption" parent="PanelContainer/MarginContainer/AudioOptionsContainer" unique_id=690924616 instance=ExtResource("1_hwcco")]
layout_mode = 2
bus_name = &"Music"
label_text = "Music Volume"
[node name="HSeparator2" type="HSeparator" parent="PanelContainer/MarginContainer/AudioOptionsContainer" unique_id=453716295]
layout_mode = 2
[node name="SFXVolume_AudioOption" parent="PanelContainer/MarginContainer/AudioOptionsContainer" unique_id=2096291127 instance=ExtResource("1_hwcco")]
layout_mode = 2
bus_name = &"SFX"
label_text = "SFX Volume"
[node name="HSeparator3" type="HSeparator" parent="PanelContainer/MarginContainer/AudioOptionsContainer" unique_id=498553283]
layout_mode = 2
[node name="ResetToDefault_Button" type="Button" parent="PanelContainer/MarginContainer/AudioOptionsContainer" unique_id=720420423]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 0
text = "Reset To Default"
[node name="Close_Button" type="Button" parent="PanelContainer/MarginContainer/AudioOptionsContainer" unique_id=1137906684]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 0
text = "Close"

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,6 @@ class_name ChunkInfo
@export_group("Set Piece Rules (Unique pieces)")
@export var exclusive_biome: String = "" # Es: "Forest"
@export_range(0, 5, 1) var uniqueness: int = 0 #0=common; 5=unique
@export_group("Base exit")
@export var north: bool = false
@@ -13,12 +12,6 @@ class_name ChunkInfo
@export var south: bool = false
@export var west: bool = false
@export_group("River exit")
@export var river_north: bool = false
@export var river_est: bool = false
@export var river_south: bool = false
@export var river_west: bool = false
@export_group("Margin heights (level 0, 1, 2)")
@export_range(0, 2, 1) var height_north: int = 0
@export_range(0, 2, 1) var height_est: int = 0
@@ -36,17 +29,14 @@ func _ready() -> void:
func get_rotated_data(steps_90: int) -> Dictionary:
var original_exit = [north, est, south, west]
var original_river_exit = [river_north, river_est, river_south, river_west]
var original_height = [height_north, height_est, height_south, height_west]
var calculated_exit = []
var calculated_river_exit = []
var calculated_height = []
for i in range(4):
var index = (i - steps_90 + 4) % 4
calculated_exit.append(original_exit[index])
calculated_river_exit.append(original_river_exit[index])
calculated_height.append(original_height[index])
return {
@@ -54,10 +44,6 @@ func get_rotated_data(steps_90: int) -> Dictionary:
"north": calculated_exit[0], "est": calculated_exit[1],
"south": calculated_exit[2], "west": calculated_exit[3]
},
"river_connections": {
"north": calculated_river_exit[0], "est": calculated_river_exit[1],
"south": calculated_river_exit[2], "west": calculated_river_exit[3]
},
"heights": {
"north": calculated_height[0], "est": calculated_height[1],
"south": calculated_height[2], "west": calculated_height[3]

View File

@@ -1,5 +0,0 @@
extends Marker3D
class_name PropInfo
@export var available_props: Array[PackedScene]
@export_range(0, 5, 1) var uniqueness: int = 0 #0=common; 5=unique

View File

@@ -1 +0,0 @@
uid://dg6ngy4pmtsyc

View File

@@ -1,7 +0,0 @@
[gd_resource type="NoiseTexture2D" format=3 uid="uid://b2xcpt2y8v32x"]
[sub_resource type="FastNoiseLite" id="FastNoiseLite_oqwsk"]
[resource]
noise = SubResource("FastNoiseLite_oqwsk")
seamless = true

View File

@@ -9,7 +9,6 @@
[ext_resource type="Material" uid="uid://codq5gx71rj4o" path="res://core/daynight/environment_dust_material.tres" id="8_amaf0"]
[ext_resource type="Shader" uid="uid://bkn6eqgbn37jx" path="res://core/daynight/blur.gdshader" id="9_amaf0"]
[ext_resource type="Shader" uid="uid://b5wa82soyhsqm" path="res://core/daynight/environment_shadows.gdshader" id="10_tuauy"]
[ext_resource type="Texture2D" uid="uid://b2xcpt2y8v32x" path="res://core/daynight/FogNoise.tres" id="11_tuauy"]
[ext_resource type="FastNoiseLite" uid="uid://c0mtwrkptjcuw" path="res://core/daynight/environment_shadows_noise_clouds.tres" id="11_yn8v8"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ruhh7"]
@@ -32,7 +31,6 @@ render_priority = 0
shader = ExtResource("2_r4tfj")
shader_parameter/use_red_as_alpha = true
shader_parameter/fog_color = Color(0.8, 0.85, 0.9, 0.5)
shader_parameter/fog_density = 0.25
shader_parameter/scroll_speed = Vector2(0.05, 0.01)
shader_parameter/texture_scale = Vector2(1, 1)
shader_parameter/edge_softness_y = 0.2
@@ -67,12 +65,12 @@ grad_intensity_morning = 0.05
grad_intensity_afternoon = 0.1
grad_intensity_night = 0.5
fog_color_morning = Color(0.7490196, 0.8509804, 0.9490196, 1)
fog_color_afternoon = Color(0.9823975, 0.8034449, 0.8778439, 1)
fog_color_night = Color(0.38409987, 0.28720453, 0.5907528, 1)
fog_color_afternoon = Color(0.9647059, 0.5882353, 0.7607843, 1)
fog_color_night = Color(0.14901961, 0.101960786, 0.2509804, 1)
fog_density_morning = 0.01
fog_density_afternoon = 0.02
glow_morning = 0.4
glow_night = 0.8
glow_night = 0.6
material_fog = SubResource("ShaderMaterial_b5atu")
material_drops = SubResource("StandardMaterial3D_r4tfj")
material_clouds = SubResource("ShaderMaterial_ruhh7")
@@ -81,7 +79,7 @@ lightning_min = 2
lightning_max = 4
lightning_scale_min = 2.0
lightning_scale_max = 5.0
godray_max_rain = 30
godray_max_rain = 60
godray_spawn_radius = 100.0
godray_spawn_offset = Vector3(20, 80, 20)
godray_rotation_degrees = Vector3(50, 30, 0)
@@ -91,9 +89,6 @@ wind_amount = 50
cloud_speed = 0.01
fireflies_amount = 550
fireflies_spawn_ray = 60.0
water_color_morning = Color(0.33333334, 0.654902, 0.5294118, 1)
water_color_afternoon = Color(0.5803922, 0.5137255, 0.2901961, 1)
water_color_night = Color(0.48235294, 0.45490196, 0.69411767, 1)
metadata/_custom_type_script = "uid://butda6k2tli3o"
[sub_resource type="Gradient" id="Gradient_i3hjl"]
@@ -253,24 +248,7 @@ shader_parameter/fade_end = 800.000035625
shader_parameter/height_fade_start = 10.0
shader_parameter/height_fade_end = 50.0
[sub_resource type="QuadMesh" id="QuadMesh_yn8v8"]
size = Vector2(2, 2)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_sxgg7"]
render_priority = 2
shader = ExtResource("2_r4tfj")
shader_parameter/fog_noise = ExtResource("11_tuauy")
shader_parameter/use_red_as_alpha = true
shader_parameter/fog_color = Color(0.8, 0.8509804, 0.9019608, 0.2509804)
shader_parameter/fog_density = 0.25
shader_parameter/scroll_speed = Vector2(0, 0.01)
shader_parameter/texture_scale = Vector2(1, 1)
shader_parameter/edge_softness_y = 0.16400000779
shader_parameter/edge_softness_x = 0.5
shader_parameter/night_intensity = 0.0
shader_parameter/sun_color = Color(1, 1, 1, 1)
[node name="EnvironmentManager" type="Node3D" unique_id=1611939731 node_paths=PackedStringArray("particles_wind", "particles_snow", "particles_fireflies", "particles_rain", "environment_dust", "blur", "environment_shadows", "fog")]
[node name="EnvironmentManager" type="Node3D" unique_id=1611939731 node_paths=PackedStringArray("particles_wind", "particles_snow", "particles_fireflies", "particles_rain", "environment_dust", "blur", "environment_shadows")]
script = ExtResource("1_wecen")
environment_config = SubResource("Resource_r4tfj")
particles_wind = NodePath("Particles_Wind")
@@ -281,7 +259,6 @@ godray = ExtResource("5_411rw")
environment_dust = NodePath("EnvironmentDust")
blur = NodePath("Blur")
environment_shadows = NodePath("EnvironmentCloudsShadows")
fog = NodePath("Fog")
[node name="Particles_Fireflies" type="GPUParticles3D" parent="." unique_id=947538133]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
@@ -294,7 +271,6 @@ draw_pass_1 = SubResource("QuadMesh_b5atu")
[node name="Particles_Wind" type="GPUParticles3D" parent="." unique_id=1238214694]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 50, 0)
cast_shadow = 0
emitting = false
amount = 25
lifetime = 3.0
fixed_fps = 60
@@ -342,15 +318,3 @@ mouse_filter = 2
extra_cull_margin = 16384.0
mesh = SubResource("QuadMesh_sxgg7")
surface_material_override/0 = SubResource("ShaderMaterial_oqt1s")
[node name="Fog" type="Node3D" parent="." unique_id=1626352238]
[node name="MeshInstance3D" type="MeshInstance3D" parent="Fog" unique_id=96635311]
transform = Transform3D(-42.075005, 7.553328e-06, 1.7196172e-13, 0, -3.7766642e-06, 45, 3.6783138e-06, 86.4, 1.9670128e-06, -41.926987, 14, 0)
mesh = SubResource("QuadMesh_yn8v8")
surface_material_override/0 = SubResource("ShaderMaterial_sxgg7")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="Fog" unique_id=10121049]
transform = Transform3D(-42.075005, 7.553328e-06, 1.7196172e-13, 0, -3.7766642e-06, 45, 3.6783138e-06, 86.4, 1.9670128e-06, 59.320038, 14, 0)
mesh = SubResource("QuadMesh_yn8v8")
surface_material_override/0 = SubResource("ShaderMaterial_sxgg7")

View File

@@ -3,7 +3,7 @@ extends Node3D
const NOISE_TEXTURE: Texture2D = preload("res://core/daynight/noise.tres")
const WEATHER_SHADER: Material = preload("res://core/daynight/weather_overlay.tres")
const DYNAMIC_ENVIRONMENT_UPDATES_PER_FRAME: int = 2 #how many update of the environment (apply materials) will be done per frame
const WEATHER_PLAIN_SHADER: Material = preload("res://core/daynight/weather_plain_shader.tres")
@export var environment_config: EnvironmentConfig
@@ -20,7 +20,6 @@ const DYNAMIC_ENVIRONMENT_UPDATES_PER_FRAME: int = 2 #how many update of the env
@export var environment_dust: ColorRect
@export var blur: ColorRect
@export var environment_shadows: MeshInstance3D
@export var fog: Node3D
@export_group("Sound")
@export var thunder_sounds: Array[AudioStream]
@@ -35,7 +34,6 @@ var weather_controller: WeatherController
var day_tween: Tween
var day_time: float = 0.0
var pending_environment_nodes: Dictionary = {}
func _ready() -> void:
@@ -64,7 +62,6 @@ func _ready() -> void:
godray,
environment_dust,
blur,
fog,
environment_shadows,
sun,
environment,
@@ -77,50 +74,9 @@ func _ready() -> void:
weather_controller.name = "WeatherController"
add_child(weather_controller)
func _process(_delta: float) -> void:
_process_pending_environment_nodes()
func _on_tree_node_added(node: Node) -> void:
if node.is_in_group("wind_node") or node.is_in_group("weather_node") or node.is_in_group("weather_vegetables_node"):
_queue_dynamic_environment_node(node)
func _queue_dynamic_environment_node(node: Node) -> void:
if not is_instance_valid(node):
return
var ancestor = node.get_parent()
while ancestor != null:
if pending_environment_nodes.has(ancestor.get_instance_id()):
return
ancestor = ancestor.get_parent()
var stale_ids: Array[int] = []
for node_id in pending_environment_nodes.keys():
var pending_node = pending_environment_nodes[node_id]
if not is_instance_valid(pending_node):
stale_ids.append(node_id)
continue
if node.is_ancestor_of(pending_node):
stale_ids.append(node_id)
for node_id in stale_ids:
pending_environment_nodes.erase(node_id)
pending_environment_nodes[node.get_instance_id()] = node
func _process_pending_environment_nodes() -> void:
var processed = 0
for node_id in pending_environment_nodes.keys():
if processed >= DYNAMIC_ENVIRONMENT_UPDATES_PER_FRAME:
break
var node = pending_environment_nodes[node_id]
pending_environment_nodes.erase(node_id)
if not is_instance_valid(node):
continue
_apply_dynamic_environment_materials(node)
processed += 1
call_deferred("_apply_dynamic_environment_materials", node)
func _apply_dynamic_environment_materials(node: Node) -> void:
if not is_instance_valid(node):
@@ -133,7 +89,7 @@ func _apply_dynamic_environment_materials(node: Node) -> void:
_apply_weather_overlay_to_node(node, WEATHER_SHADER)
if node.is_in_group("weather_vegetables_node"):
_clear_weather_overlay_from_node(node)
_apply_weather_overlay_to_node(node, WEATHER_PLAIN_SHADER)
func ApplyWindNoiseToMaterials():
for node in get_tree().get_nodes_in_group("wind_node"):
@@ -159,54 +115,15 @@ func ApplyWeatherShaderToMaterials():
_apply_weather_overlay_to_node(node, WEATHER_SHADER)
for node in get_tree().get_nodes_in_group("weather_vegetables_node"):
_clear_weather_overlay_from_node(node)
_apply_weather_overlay_to_node(node, WEATHER_PLAIN_SHADER)
func _apply_weather_overlay_to_node(node: Node, material: Material) -> void:
if node.is_in_group("weather_vegetables_node"):
_clear_weather_overlay_from_node(node)
return
if node is GeometryInstance3D:
if _geometry_uses_alpha_texture(node):
node.material_overlay = null
else:
node.material_overlay = material
node.material_overlay = material
for child in node.get_children():
_apply_weather_overlay_to_node(child, material)
func _clear_weather_overlay_from_node(node: Node) -> void:
if node is GeometryInstance3D:
node.material_overlay = null
for child in node.get_children():
_clear_weather_overlay_from_node(child)
func _geometry_uses_alpha_texture(node: GeometryInstance3D) -> bool:
var material_override := node.material_override as ShaderMaterial
if _shader_material_uses_alpha_texture(material_override):
return true
if node is MeshInstance3D:
for surface_index in node.get_surface_override_material_count():
var surface_material := node.get_surface_override_material(surface_index) as ShaderMaterial
if _shader_material_uses_alpha_texture(surface_material):
return true
if node.mesh:
for surface_index in node.mesh.get_surface_count():
var mesh_material := node.mesh.surface_get_material(surface_index) as ShaderMaterial
if _shader_material_uses_alpha_texture(mesh_material):
return true
return false
func _shader_material_uses_alpha_texture(material: ShaderMaterial) -> bool:
if material == null or material.shader == null:
return false
return material.shader.code.find("alpha_texture") != -1
func select_day_time(normalized_time: float) -> void:
#set show_day_time_debug = true to show debug on screen
#normalized_time is a value between 0 and 1; the time of the day is calculate as "normalized_time" * 1440; day_time is the step to pass from sunrise, to day, to sunset, to night

View File

@@ -67,6 +67,7 @@ void fragment() {
float is_center = step(center_sharpness, internal_n);
ALBEDO = shadow_color;
ALPHA = mix(opacity_edge, opacity_center, is_center) * final_fade;
}
}

View File

@@ -7,7 +7,6 @@ uniform bool use_red_as_alpha = true;
group_uniforms Settings;
uniform vec4 fog_color : source_color = vec4(0.8, 0.85, 0.9, 0.5);
uniform float fog_density : hint_range(0.0, 1.0) = 0.25;
uniform vec2 scroll_speed = vec2(0.05, 0.01);
uniform vec2 texture_scale = vec2(1.0, 1.0);
@@ -37,5 +36,5 @@ void fragment() {
vec3 dark_fog = tinted_fog * 0.5;
ALBEDO = mix(tinted_fog, dark_fog, night_intensity);
ALPHA = fog_color.a * fog_density * noise_alpha * edge_mask;
}
ALPHA = fog_color.a * noise_alpha * edge_mask;
}

View File

@@ -8,12 +8,10 @@ global uniform float global_wind_speed;
global uniform float global_wind_strength;
global uniform vec2 global_wind_direction;
//global uniform sampler2D global_wind_noise : filter_linear_mipmap;
global uniform float global_snow_start_time = -1.0;
global uniform float global_snow_accumulation_speed = 0.005;
global uniform float global_snow_melt_time = -1.0;
global uniform float global_snow_melt_speed = 0.1;
global uniform float global_snow_amount = 0.0;
global uniform float global_rain_intensity;
global uniform float global_snow_start_time;
global uniform float global_snow_accumulation_speed;
global uniform float global_snow_melt_time;
global uniform float global_snow_melt_speed;
// --- PARAMETRI ESTETICI ---
uniform bool billboard_enabled = true;
@@ -33,7 +31,6 @@ uniform vec4 variance_color : source_color = vec4(0.3, 0.5, 0.2, 1.0); // Colore
uniform float variance_intensity : hint_range(0.0, 1.0) = 0.4; // Quanto si vedono le chiazze
uniform vec4 snow_color : source_color = vec4(0.85, 0.9, 0.95, 1.0);
uniform float snow_visibility : hint_range(0.0, 1.0) = 1.0;
// --- CONTROLLO GRADIENTE E RANDOM ---
uniform float height_min = 0.0;
@@ -44,7 +41,6 @@ uniform float light_steps : hint_range(1.0, 10.0) = 4.0;
uniform float random_mix : hint_range(0.0, 1.0) = 0.3;
uniform float cast_shadow_strength : hint_range(0.0, 1.0) = 0.6;
uniform float wetness_darkening : hint_range(0.0, 0.5) = 0.25;
varying vec3 v_final_color;
varying float v_shade_factor;
@@ -56,21 +52,6 @@ float hash(vec3 p) {
return fract((p.x + p.y) * p.z);
}
float get_snow_progress() {
float snow_progress = clamp(global_snow_amount, 0.0, 1.0);
if (global_snow_start_time >= 0.0) {
float timed_progress = clamp((TIME - global_snow_start_time) * global_snow_accumulation_speed, 0.0, 1.0);
snow_progress = max(snow_progress, timed_progress);
}
if (global_snow_melt_time >= 0.0) {
float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0);
snow_progress = min(snow_progress, 1.0 - melt);
}
return snow_progress;
}
void vertex() {
vec3 instance_pos = MODEL_MATRIX[3].xyz;
v_world_pos = instance_pos; // Salviamo la posizione dell'istanza
@@ -132,10 +113,17 @@ void fragment() {
// Applichiamo la variazione al colore finale dell'erba
vec3 varied_grass_color = mix(v_final_color, variance_color.rgb, noise_sample * variance_intensity);
float snow_amount = smoothstep(0.0, 1.0, get_snow_progress());
float snow_amount = 0.0;
if (global_snow_start_time >= 0.0) {
snow_amount = clamp((TIME - global_snow_start_time) * global_snow_accumulation_speed, 0.0, 1.0);
}
if (global_snow_melt_time >= 0.0) {
float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0);
snow_amount *= (1.0 - melt);
}
float top_mask = 1.0 - shifted_uv.y;
float snow_mask = smoothstep(0.65, 1.0, top_mask) * snow_amount * snow_visibility;
float snow_mask = smoothstep(1.0 - snow_amount, 1.2 - snow_amount, top_mask);
snow_mask *= step(0.01, snow_amount);
vec3 dark_snow = snow_color.rgb * (1.0 - shadow_intensity);
@@ -143,15 +131,12 @@ void fragment() {
// Mescoliamo il colore variato con la neve
vec3 final_albedo = mix(varied_grass_color, shaded_snow, snow_mask);
float rain_int = clamp(global_rain_intensity, 0.0, 1.0);
final_albedo *= mix(1.0, 1.0 - wetness_darkening, rain_int);
float final_roughness = mix(0.02, 0.005, rain_int);
ALBEDO = final_albedo;
ALPHA = tex.r * opacity;
ALPHA_SCISSOR_THRESHOLD = 0.5;
ROUGHNESS = final_roughness;
ROUGHNESS = 0.02;
}
void light() {

View File

@@ -20,14 +20,17 @@ const SNOW_CAP_SHADER: Shader = preload("res://core/daynight/snow_cap.gdshader")
var _mesh_instance: MeshInstance3D
func _ready() -> void:
add_to_group("weather_overlay_ignore")
_ensure_mesh_instance()
_rebuild()
func rebuild() -> void:
_rebuild()
func _ensure_mesh_instance() -> void:
_mesh_instance = get_node_or_null("SnowCapMesh") as MeshInstance3D
if _mesh_instance != null:
@@ -38,6 +41,7 @@ func _ensure_mesh_instance() -> void:
_mesh_instance.add_to_group("weather_overlay_ignore")
add_child(_mesh_instance)
func _rebuild() -> void:
var cap_width: float = 0.0
var cap_depth: float = 0.0
@@ -74,6 +78,7 @@ func _rebuild() -> void:
_mesh_instance.material_override = _build_material(cap_width, cap_depth)
_mesh_instance.visible = true
func _build_material(cap_width: float, cap_depth: float) -> ShaderMaterial:
var material := ShaderMaterial.new()
material.shader = SNOW_CAP_SHADER
@@ -82,6 +87,7 @@ func _build_material(cap_width: float, cap_depth: float) -> ShaderMaterial:
material.set_shader_parameter("half_depth", cap_depth * 0.5)
return material
func _get_target_aabb(target_mesh: MeshInstance3D) -> AABB:
var points: Array[Vector3] = []
for point in _get_aabb_points(target_mesh.get_aabb()):
@@ -92,6 +98,7 @@ func _get_target_aabb(target_mesh: MeshInstance3D) -> AABB:
merged = merged.expand(point)
return merged
func _get_aabb_points(aabb: AABB) -> Array[Vector3]:
var p: Vector3 = aabb.position
var s: Vector3 = aabb.size

View File

@@ -2,10 +2,9 @@ shader_type spatial;
render_mode blend_mix, cull_back, depth_draw_opaque;
global uniform float global_snow_start_time = -1.0;
global uniform float global_snow_accumulation_speed = 0.005;
global uniform float global_snow_accumulation_speed = 0.1;
global uniform float global_snow_melt_time = -1.0;
global uniform float global_snow_melt_speed = 0.1;
global uniform float global_snow_amount = 0.0;
global uniform vec4 global_snow_color = vec4(0.92, 0.96, 1.0, 1.0);
uniform float max_height : hint_range(0.02, 1.0) = 0.2;
@@ -52,18 +51,17 @@ float fbm(vec2 p) {
}
float get_snow_amount() {
float snow_amount = clamp(global_snow_amount, 0.0, 1.0);
float snow_amount = 0.0;
if (global_snow_start_time >= 0.0) {
float timed_amount = clamp(
snow_amount = clamp(
(TIME - global_snow_start_time) * global_snow_accumulation_speed,
0.0,
1.0
);
snow_amount = max(snow_amount, timed_amount);
}
if (global_snow_melt_time >= 0.0) {
float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0);
snow_amount = min(snow_amount, 1.0 - melt);
snow_amount *= (1.0 - melt);
}
return snow_amount;
}

View File

@@ -6,12 +6,12 @@ global uniform vec2 global_wind_direction;
global uniform float global_wind_scale;
global uniform float global_wind_strength;
global uniform float global_wind_fade;
global uniform float global_snow_start_time = -1.0;
global uniform float global_snow_accumulation_speed = 0.005;
global uniform float global_snow_melt_time = -1.0;
global uniform float global_snow_melt_speed = 0.1;
global uniform float global_snow_amount = 0.0;
global uniform vec4 global_snow_color;
/*
global uniform float global_snow_start_time;
global uniform float global_snow_accumulation_speed;
global uniform float global_snow_melt_time;
global uniform float global_snow_melt_speed;
global uniform vec4 global_snow_color;*/
global uniform float global_rain_intensity;
uniform sampler2D wind_noise : filter_linear_mipmap;
@@ -31,7 +31,6 @@ uniform float light_steps : hint_range(1.0, 10.0) = 4.0;
uniform float random_mix : hint_range(0.0, 1.0) = 0.3;
uniform float cast_shadow_strength : hint_range(0.0, 1.0) = 0.6;
uniform float wetness_darkening : hint_range(0.0, 0.5) = 0.25;
uniform float snow_visibility : hint_range(0.0, 1.0) = 1.0;
varying vec3 v_final_color;
varying float v_shade_factor;
@@ -42,21 +41,6 @@ float hash(vec3 p) {
return fract((p.x + p.y) * p.z);
}
float get_snow_progress() {
float snow_progress = clamp(global_snow_amount, 0.0, 1.0);
if (global_snow_start_time >= 0.0) {
float timed_progress = clamp((TIME - global_snow_start_time) * global_snow_accumulation_speed, 0.0, 1.0);
snow_progress = max(snow_progress, timed_progress);
}
if (global_snow_melt_time >= 0.0) {
float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0);
snow_progress = min(snow_progress, 1.0 - melt);
}
return snow_progress;
}
void vertex() {
vec3 instance_pos = MODEL_MATRIX[3].xyz;
@@ -104,16 +88,24 @@ void fragment() {
vec2 shifted_uv = UV + texture_offset;
vec4 tex = texture(alpha_texture, shifted_uv);
// Snow accumulation
float snow_amount = pow(get_snow_progress(), 0.55);
//// Snow accumulation
//float snow_amount = 0.0;
//if (global_snow_start_time >= 0.0) {
//snow_amount = clamp((TIME - global_snow_start_time) * global_snow_accumulation_speed, 0.0, 1.0);
//}
//if (global_snow_melt_time >= 0.0) {
//float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0);
//snow_amount *= (1.0 - melt);
//}
//
//float top_mask = 1.0 - shifted_uv.y;
//float snow_mask = smoothstep(1.0 - snow_amount, 1.2 - snow_amount, top_mask);
//snow_mask *= step(0.01, snow_amount);
float top_mask = 1.0 - shifted_uv.y;
float snow_mask = smoothstep(1.0 - snow_amount * 1.35, 1.08 - snow_amount * 1.35, top_mask) * snow_visibility;
snow_mask *= step(0.01, snow_amount);
vec3 dark_snow = global_snow_color.rgb * (1.0 - shadow_intensity);
vec3 shaded_snow = mix(dark_snow, global_snow_color.rgb, v_shade_factor);
vec3 final_albedo = mix(v_final_color, shaded_snow, snow_mask);
//vec3 dark_snow = global_snow_color.rgb * (1.0 - shadow_intensity);
//vec3 shaded_snow = mix(dark_snow, global_snow_color.rgb, v_shade_factor);
//vec3 final_albedo = mix(v_final_color, shaded_snow, snow_mask);
vec3 final_albedo = v_final_color;
// Rain wetness: darken and make shinier
float rain_int = clamp(global_rain_intensity, 0.0, 1.0);

View File

@@ -2,13 +2,6 @@ shader_type spatial;
render_mode blend_mix, depth_draw_always;
global uniform float global_rain_intensity;
global uniform vec4 global_water_color = vec4(0.285, 0.534, 0.487, 1.0);
global uniform float global_snow_start_time = -1.0;
global uniform float global_snow_accumulation_speed = 0.005;
global uniform float global_snow_melt_time = -1.0;
global uniform float global_snow_melt_speed = 0.1;
global uniform float global_snow_amount = 0.0;
global uniform vec4 global_snow_color = vec4(0.92, 0.96, 1.0, 1.0);
//Water color
uniform vec4 deep_water_color : source_color = vec4(0.0, 0.1, 0.2, 1.0);
@@ -35,21 +28,6 @@ uniform sampler2D depth_texture : hint_depth_texture, filter_linear_mipmap;
varying vec2 world_pos_xz;
varying vec2 local_uv;
float get_snow_progress() {
float snow_progress = clamp(global_snow_amount, 0.0, 1.0);
if (global_snow_start_time >= 0.0) {
float timed_progress = clamp((TIME - global_snow_start_time) * global_snow_accumulation_speed, 0.0, 1.0);
snow_progress = max(snow_progress, timed_progress);
}
if (global_snow_melt_time >= 0.0) {
float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0);
snow_progress = min(snow_progress, 1.0 - melt);
}
return snow_progress;
}
void vertex() {
world_pos_xz = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xz;
local_uv = UV;
@@ -66,14 +44,12 @@ void fragment() {
float water_depth_gradient = exp(-depth_difference * beer_law_factor);
vec4 base_water = mix(deep_water_color, shallow_water_color, water_depth_gradient);
float rain_intensity = clamp(global_rain_intensity, 0.0, 1.0);
base_water.rgb = mix(base_water.rgb, global_water_color.rgb, 0.7);
vec2 pos = world_pos_xz * ripple_scale;
vec2 cell = floor(pos);
vec2 local_pos = fract(pos) - 0.5;
float random_val = fract(sin(dot(cell, vec2(12.9898, 78.233))) * 43758.5453);
float active_ripple_density = ripple_density * rain_intensity;
float is_active_cell = step(1.0 - active_ripple_density, random_val);
float is_active_cell = step(1.0 - ripple_density, random_val);
float ring = 0.0;
if (is_active_cell > 0.0) {
@@ -103,15 +79,8 @@ void fragment() {
float is_sky = step(ref_depth_raw, 0.00001); // Protezione anti-cielo
reflection_mask *= (1.0 - is_sky);
float snow_progress = get_snow_progress();
float active_snowfall = step(0.0, global_snow_start_time) * (1.0 - step(0.0, global_snow_melt_time));
float reflection_snow_damping = max(smoothstep(0.0, 0.08, snow_progress), active_snowfall * 0.75);
float effective_reflection_strength = reflection_strength * (1.0 - reflection_snow_damping * 0.85);
vec3 final_rgb = mix(base_water.rgb, screen_ref, effective_reflection_strength * reflection_mask);
vec3 final_rgb = mix(base_water.rgb, screen_ref, reflection_strength * reflection_mask);
final_rgb = mix(final_rgb, ripple_color.rgb, ring * ripple_color.a);
float water_snow_amount = smoothstep(0.15, 1.0, snow_progress) * 0.18;
final_rgb = mix(final_rgb, global_snow_color.rgb, water_snow_amount);
ALBEDO = final_rgb;

View File

@@ -1,241 +0,0 @@
#define USE_CAUSTICS 1
#define USE_REFRACTION 1
#define USE_DISPLACEMENT 1
#define USE_STYLIZED_LIGHTING 0
#define USE_UNSHADED 0
shader_type spatial;
#if USE_UNSHADED
render_mode unshaded, depth_draw_never;
#else
render_mode depth_draw_never;
#endif
uniform sampler2D DEPTH_TEXTURE: hint_depth_texture;
group_uniforms Color;
uniform vec4 surface_color : source_color = vec4(0.2,1.0,0.8,1.0);
uniform vec4 depth_color : source_color = vec4(0.08,0.2,0.4,1.0);
uniform vec4 foam_color : source_color = vec4(1.0);
uniform float depth_size = 12.0;
group_uniforms Roughness;
uniform float surface_roughness : hint_range(0.0, 1.0, 0.01) = 0.05;
uniform float foam_roughness : hint_range(0.0, 1.0, 0.01) = 0.05;
#if USE_CAUSTICS
group_uniforms Caustics;
uniform sampler2D caustics_texture;
uniform float caustics_strength = 2.0;
uniform vec2 caustics_scale = vec2(0.5);
#endif
group_uniforms Wave;
uniform sampler2D wave_texture;
uniform float wave_softness : hint_range(0.0, 10.0, 0.1) = 3.0;
uniform vec2 wave_scale = vec2(0.2);
uniform vec2 wave_layer_scale = vec2(1.5);
uniform float wave_highlight : hint_range(0.0, 1.0, 0.05) = 0.5;
group_uniforms Wave.Motion;
uniform vec2 wave_velocity = vec2(0.02);
instance uniform vec2 river_flow_direction = vec2(0.0, 0.0);
group_uniforms Foam;
uniform sampler2D foam_texture;
uniform float edge_foam_depth_size = 1.0;
uniform float wave_foam_amount : hint_range(0.0, 1.0, 0.01) = 0.8;
uniform float foam_start : hint_range(0.0, 1.0, 0.05) = 0.15;
uniform float foam_end : hint_range(0.0, 1.0, 0.05) = 0.3;
uniform float foam_exponent = 2.0;
#if USE_REFRACTION
group_uniforms Refraction;
uniform float refraction_amount = 0.5;
uniform float refraction_exponent = 0.5;
#endif
#if USE_DISPLACEMENT
group_uniforms Displacement;
uniform float displacement_amount = 0.3;
#endif
#if USE_STYLIZED_LIGHTING && !USE_UNSHADED
group_uniforms Lighting;
uniform float diffuse_steps = 12.0;
uniform float diffuse_smoothness : hint_range(0.0, 1.0, 0.01) = 0.2;
uniform float specular_steps = 12.0;
uniform float specular_smoothness : hint_range(0.0, 1.0, 0.01) = 0.2;
#endif
uniform sampler2D screen_texture : hint_screen_texture;
varying vec3 world_pos;
varying vec2 world_wave_velocity;
#if USE_CAUSTICS
vec3 sample_caustics(vec2 uv){
vec2 caustics_uv = uv * caustics_scale;
return vec3(
texture(caustics_texture, caustics_uv).r,
texture(caustics_texture, caustics_uv+vec2(0.02,0.02)).r,
texture(caustics_texture, caustics_uv+vec2(0.03,0.01)).r
);
}
#endif
vec4 sample_world_dpos(vec2 screen_uv, mat4 inv_proj_mat, mat4 inv_view_mat){
vec4 clip_pos = vec4(screen_uv * 2.0 - 1.0, texture(DEPTH_TEXTURE, screen_uv).r, 1.0);
vec4 view_pos = inv_proj_mat * clip_pos;
view_pos /= view_pos.w;
vec4 world_dpos = inv_view_mat * view_pos;
return world_dpos;
}
vec4 sample_wave(sampler2D tex, vec2 uv, vec2 velocity, float lod){
vec2 base_uv = uv * wave_scale;
vec2 wave_uv1 = (base_uv * wave_layer_scale) + (TIME * -velocity);
float wave1 = textureLod(tex, wave_uv1, lod).r;
vec2 wave_uv2 = base_uv + (TIME * velocity);
vec4 wave2 = textureLod(tex, wave_uv2 - (wave1 * 0.1), lod);
return wave2;
}
vec3 sample_wave_normal(vec2 uv, vec2 velocity, float center_wave) {
vec2 normal_offset = vec2(0.25, 0.0);
float wave_x = sample_wave(wave_texture, uv + normal_offset.xy, velocity, wave_softness).r;
float wave_z = sample_wave(wave_texture, uv + normal_offset.yx, velocity, wave_softness).r;
vec2 slope = vec2(center_wave - wave_x, center_wave - wave_z) * 0.35;
return normalize(vec3(slope, 1.0)) * 0.5 + 0.5;
}
vec2 get_world_wave_velocity(mat4 model_matrix) {
float velocity_length = length(wave_velocity);
if (velocity_length <= 0.0001) {
return vec2(0.0);
}
float flow_direction_length = length(river_flow_direction);
if (flow_direction_length > 0.0001) {
return (river_flow_direction / flow_direction_length) * velocity_length;
}
vec3 world_direction_3d = (model_matrix * vec4(0.0, 1.0, 0.0, 0.0)).xyz;
vec2 world_direction = world_direction_3d.xz;
float world_direction_length = length(world_direction);
if (world_direction_length <= 0.0001) {
return wave_velocity;
}
return (world_direction / world_direction_length) * velocity_length;
}
void vertex(){
world_pos = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
world_wave_velocity = get_world_wave_velocity(MODEL_MATRIX);
#if USE_DISPLACEMENT
float wave = sample_wave(wave_texture, world_pos.xz, world_wave_velocity, wave_softness).r;
VERTEX.y += wave*displacement_amount;
#endif
}
void fragment() {
float wave = sample_wave(wave_texture, world_pos.xz, world_wave_velocity, wave_softness).r;
wave = smoothstep(0.0,1.0,wave);
vec2 screen_uv = SCREEN_UV;
// Refraction
#if USE_REFRACTION
screen_uv += ((pow(wave, refraction_exponent)*2.0 - 0.5) * 0.01 * refraction_amount);
vec4 world_dpos = sample_world_dpos(screen_uv, INV_PROJECTION_MATRIX, INV_VIEW_MATRIX);
float pre_depth = pow(clamp((world_dpos.y - world_pos.y + depth_size)/depth_size, 0.0, 1.0), 4.0);
screen_uv = mix(screen_uv, SCREEN_UV, pre_depth);
if(world_dpos.y - world_pos.y > 0.0){
screen_uv = SCREEN_UV;
}
#else
vec4 world_dpos = sample_world_dpos(screen_uv, INV_PROJECTION_MATRIX, INV_VIEW_MATRIX);
#endif
world_dpos = sample_world_dpos(screen_uv, INV_PROJECTION_MATRIX, INV_VIEW_MATRIX);
vec2 surface_uv = world_dpos.xz * 0.2;
float depth = pow(clamp((world_dpos.y - world_pos.y + depth_size)/depth_size, 0.0, 1.0), 4.0);
// Caustics
#if USE_CAUSTICS
vec3 caustics1 = sample_caustics(surface_uv + (TIME * -world_wave_velocity));
vec3 caustics2 = sample_caustics((surface_uv + (caustics1.r*0.05)) + (TIME * (world_wave_velocity*0.5)));
vec3 caustics = caustics2 * (1.0 - depth);
#endif
// Edge Foam
float edge_foam_depth = clamp((world_dpos.y - world_pos.y + edge_foam_depth_size)/edge_foam_depth_size, 0.0, 1.0);
// Wave Foam
float wave_foam = wave;
float foam = max(edge_foam_depth, wave_foam * wave_foam_amount);
float foam_shape = 1.0 - texture(foam_texture, world_pos.xz* 0.5).r;
foam = clamp((foam - foam_start) / (foam_end - foam_start), 0.0, 1.0);
foam = clamp((foam - foam_shape) / (1.0 - foam_shape), 0.0, 1.0);
foam = pow(foam, foam_exponent);
vec3 flat_color = mix(depth_color, surface_color, depth).rgb;
vec4 screen = texture(screen_texture, screen_uv);
vec3 color = screen.rgb;
#if USE_CAUSTICS
color += vec3(pow(caustics * caustics_strength, vec3(2.0)));
#endif
color = mix(flat_color, color, 0.4 * depth);
color = mix(color, surface_color.rgb, wave * wave_highlight);
color = mix(color, foam_color.rgb, foam);
#if !USE_UNSHADED
vec3 wave_normal_map = sample_wave_normal(world_pos.xz, world_wave_velocity, wave);
NORMAL_MAP = wave_normal_map;
#endif
ROUGHNESS = mix(surface_roughness, foam_roughness, foam);
ALBEDO = color;
}
#if USE_STYLIZED_LIGHTING && !USE_UNSHADED
void light(){
float ndotl = dot(NORMAL, LIGHT) * ATTENUATION;
//ndotl = smoothstep(0.0,1.0-ROUGHNESS,ndotl);
float light = ndotl;
float light_mult = light * diffuse_steps;
float light_step_base = floor(light_mult);
float light_factor = light_mult - light_step_base;
light_factor = smoothstep(0.5 - diffuse_smoothness * 0.5, 0.5 + diffuse_smoothness * 0.5, light_factor);
light = (light_step_base + light_factor) / diffuse_steps;
DIFFUSE_LIGHT += (LIGHT_COLOR+ALBEDO) * light / PI;
float roughness = mix(0.01, 0.99, ROUGHNESS);
vec3 h = normalize(VIEW + LIGHT);
float ndoth = clamp(dot(NORMAL, h), 0.0, 1.0) * ATTENUATION;
float specular = clamp(pow(ndoth, 16.0/(roughness)), 0.1, 0.99);
specular = mix(pow(specular, 2.0-roughness),0.00,pow(roughness, 0.1));
float specular_mult = specular * specular_steps;
float specular_step_base = floor(specular_mult);
float specular_factor = specular_mult - specular_step_base;
specular_factor = smoothstep(0.5 - specular_smoothness * 0.5, 0.5 + specular_smoothness * 0.5, specular_factor);
specular = (specular_step_base + specular_factor) / specular_steps;
SPECULAR_LIGHT += (LIGHT_COLOR + ALBEDO) * specular;
}
#endif

View File

@@ -1 +0,0 @@
uid://cb12c2j8rfu6a

View File

@@ -14,7 +14,6 @@ var godray: PackedScene
var environment_dust: ColorRect
var blur: ColorRect
var environment_shadows: MeshInstance3D
var fog: Node3D
var sun: DirectionalLight3D
var environment: WorldEnvironment
@@ -34,15 +33,12 @@ var rain_tween: Tween
var rain_audio_tween: Tween
var puddle_tween: Tween
var puddle_amount: float = 0.0
var clouds_tween: Tween
var snow_tween: Tween
var snow_weather_tween: Tween
var snow_particles_tween: Tween
var is_snowing: bool = false
var is_snow_accumulated: bool = false
var actual_snow_amount: float = 0.0
var snow_weather_amount: float = 0.0
var is_storm: bool = false
var cold_tween: Tween
@@ -54,12 +50,10 @@ var current_wind_strength: float = 0.0
var current_wind_fade: float = 0.0
var max_wind_amount: int = 0
var random_weather_restore_tween: Tween
var random_event_remaining: float = 0.0
var random_event_label_seconds: int = -1
func _init(wind: GPUParticles3D, snow: GPUParticles3D,
fireflies: GPUParticles3D, rain: GPUParticles3D, ray: PackedScene,
dust: ColorRect, blurr: ColorRect, thefog: Node3D, envshadows: MeshInstance3D,
dust: ColorRect, blurr: ColorRect, envshadows: MeshInstance3D,
thesun: DirectionalLight3D, theenvironment: WorldEnvironment, environmentconfig: EnvironmentConfig,
thecamera: Camera3D, thecamerapivot: Node3D, thundersounds: Array[AudioStream], rainsounds: Array[AudioStream]) -> void:
particles_wind = wind
@@ -70,7 +64,6 @@ func _init(wind: GPUParticles3D, snow: GPUParticles3D,
sun = thesun
environment_dust = dust
blur = blurr
fog = thefog
environment_shadows = envshadows
environment = theenvironment
environment_config = environmentconfig
@@ -94,7 +87,6 @@ func _init(wind: GPUParticles3D, snow: GPUParticles3D,
toggle_dust(environment_config.enable_dust)
toggle_blur(environment_config.enable_blur)
toggle_fog(environment_config.enable_fog)
#set camera pivot if available
if camera_pivot:
@@ -112,12 +104,10 @@ func _ready() -> void:
UIEvents.toggle_storm.connect(toggle_storm)
UIEvents.toggle_dust.connect(toggle_dust)
UIEvents.toggle_blur.connect(toggle_blur)
UIEvents.toggle_fog.connect(toggle_fog)
UIEvents.toggle_shadows.connect(toggle_shadows)
_emit_weather_event_label()
func _process(delta: float) -> void:
_update_random_event_label(delta)
_follow_camera()
@@ -135,7 +125,6 @@ func _process(delta: float) -> void:
var base_grad_top: Color
var base_grad_bot: Color
var base_grad_intensity: float
var base_water_color: Color
var base_rotation_sun: Vector3
if is_raining:
@@ -163,7 +152,6 @@ func _process(delta: float) -> void:
base_grad_top = environment_config.grad_top_morning.lerp(environment_config.grad_top_afternoon, t)
base_grad_bot = environment_config.grad_top_morning.lerp(environment_config.grad_bot_afternoon, t)
base_grad_intensity = lerp(environment_config.grad_intensity_morning, environment_config.grad_intensity_afternoon, t)
base_water_color = environment_config.water_color_morning.lerp(environment_config.water_color_afternoon, t)
base_rotation_sun = environment_config.sun_rotation_morning.lerp(environment_config.sun_rotation_afternoon, t)
else:
var t = day_time - 2.0
@@ -177,7 +165,6 @@ func _process(delta: float) -> void:
base_grad_top = environment_config.grad_top_afternoon.lerp(environment_config.grad_top_night, t)
base_grad_bot = environment_config.grad_bot_afternoon.lerp(environment_config.grad_bot_night, t)
base_grad_intensity = lerp(environment_config.grad_intensity_afternoon, environment_config.grad_intensity_night, t)
base_water_color = environment_config.water_color_afternoon.lerp(environment_config.water_color_night, t)
base_rotation_sun = environment_config.sun_rotation_afternoon.lerp(environment_config.sun_rotation_night, t)
var weather_color = environment_config.rain_mode_color
@@ -189,12 +176,11 @@ func _process(delta: float) -> void:
var final_sky_horizon = base_sky_horizon.lerp(base_sky_horizon * weather_color, clamp(rain_intensity, 0.0, 1.0))
var final_fog_color = base_fog_color.lerp(base_fog_color * weather_color, clamp(rain_intensity, 0.0, 1.0))
var final_fog_density = lerp(base_fog_density, base_fog_density * 4.0, clamp(rain_intensity, 0.0, 1.0))
var final_water_color = base_water_color.darkened(clamp(environment_config.water_darkening_rain, 0.0, 1.0) * clamp(rain_intensity, 0.0, 1.0))
final_tint = final_tint.lerp(final_tint * environment_config.snow_mode_color, snow_weather_amount)
final_sky_top = final_sky_top.lerp(final_sky_top * environment_config.snow_mode_color, snow_weather_amount)
final_sky_horizon = final_sky_horizon.lerp(final_sky_horizon * environment_config.snow_mode_color, snow_weather_amount)
final_fog_color = final_fog_color.lerp(final_fog_color * environment_config.snow_mode_color, snow_weather_amount)
final_tint = final_tint.lerp(final_tint * environment_config.snow_mode_color, actual_snow_amount)
final_sky_top = final_sky_top.lerp(final_sky_top * environment_config.snow_mode_color, actual_snow_amount)
final_sky_horizon = final_sky_horizon.lerp(final_sky_horizon * environment_config.snow_mode_color, actual_snow_amount)
final_fog_color = final_fog_color.lerp(final_fog_color * environment_config.snow_mode_color, actual_snow_amount)
#Shader parameters for global trunk_shader
var final_grad_top = base_grad_top.lerp(base_grad_top * weather_color, clamp(rain_intensity, 0.0, 1.0))
@@ -203,13 +189,12 @@ func _process(delta: float) -> void:
RenderingServer.global_shader_parameter_set("global_gradient_color_top", final_grad_top)
RenderingServer.global_shader_parameter_set("global_gradient_color_bot", final_grad_bot)
RenderingServer.global_shader_parameter_set("global_gradient_intensity", base_grad_intensity)
RenderingServer.global_shader_parameter_set("global_water_color", final_water_color)
var night_val = clamp(day_time - 2.0, 0.0, 1.0)
#Snow exposure compensation
var snow_light_attenuation = lerp(1.0, 0.55, snow_weather_amount * (1.0 - night_val))
var snow_glow_attenuation = lerp(1.0, 0.5, snow_weather_amount)
var snow_light_attenuation = lerp(1.0, 0.55, actual_snow_amount * (1.0 - night_val))
var snow_glow_attenuation = lerp(1.0, 0.5, actual_snow_amount)
var final_bloom = lerp(base_bloom, base_bloom * 0.5, rain_intensity) * snow_glow_attenuation
# We calculate the final exposure by applying snow damping directly to the camera exposure
@@ -250,36 +235,15 @@ func _process(delta: float) -> void:
sky_mat.set_shader_parameter("sun_color", final_tint)
sky_mat.set_shader_parameter("night_intensity", night_val)
var cloud_density_amount: float = maxf(clamp(rain_intensity, 0.0, 1.0), clamp(snow_weather_amount, 0.0, 1.0))
var current_cloud_density: float = lerp(environment_config.base_cloud_density, environment_config.rain_cloud_density, cloud_density_amount)
if environment_config.material_clouds:
environment_config.material_clouds.set_shader_parameter("cloud_density", current_cloud_density)
var current_sharpness = lerp(0.14, 0.0, cloud_density_amount)
var current_density = lerp(0.4, 1.0, rain_intensity)
environment_config.material_clouds.set_shader_parameter("cloud_density", current_density)
var current_sharpness = lerp(0.14, 0.0, rain_intensity)
environment_config.material_clouds.set_shader_parameter("center_sharpness", current_sharpness)
var env_shadow_mat = environment_shadows.get_surface_override_material(0) if environment_shadows else null
if env_shadow_mat:
env_shadow_mat.set_shader_parameter("cloud_density", current_cloud_density)
if environment_config.material_fog:
environment_config.material_fog.set_shader_parameter("fog_color", final_fog_color)
environment_config.material_fog.set_shader_parameter("fog_density", clamp(final_fog_density * 25.0, 0.0, 1.0))
environment_config.material_fog.set_shader_parameter("night_intensity", night_val)
environment_config.material_fog.set_shader_parameter("sun_color", final_tint)
if fog:
for child in fog.get_children():
var fog_mesh := child as MeshInstance3D
if fog_mesh == null:
continue
var fog_material := fog_mesh.get_surface_override_material(0) as ShaderMaterial
if fog_material == null:
continue
fog_material.set_shader_parameter("fog_color", final_fog_color)
fog_material.set_shader_parameter("fog_density", clamp(final_fog_density * 25.0, 0.0, 1.0))
fog_material.set_shader_parameter("night_intensity", night_val)
fog_material.set_shader_parameter("sun_color", final_tint)
func create_sound_players():
rain_audio_player = AudioStreamPlayer.new()
@@ -304,23 +268,6 @@ func _get_weather_anchor_position() -> Variant:
return camera.global_position
return null
func _get_weather_anchor_basis() -> Variant:
var source_basis: Basis
if camera_pivot and is_instance_valid(camera_pivot):
source_basis = camera_pivot.global_basis
elif camera and is_instance_valid(camera):
source_basis = camera.global_basis
else:
return null
var forward := -source_basis.z
forward.y = 0.0
if forward.length_squared() <= 0.0001:
return Basis.IDENTITY
forward = forward.normalized()
var right := forward.cross(Vector3.UP).normalized()
return Basis(right, Vector3.UP, -forward)
func _follow_camera() -> void:
var cam_pos = _get_weather_anchor_position()
if cam_pos == null:
@@ -333,12 +280,6 @@ func _follow_camera() -> void:
particles_wind.global_position = Vector3(cam_pos.x, cam_pos.y, cam_pos.z)
if particles_fireflies:
particles_fireflies.global_position = Vector3(cam_pos.x, particles_fireflies.position.y, cam_pos.z)
if fog:
fog.global_position = Vector3(cam_pos.x, fog.global_position.y, cam_pos.z)
#used to follow camera pivot or camera
var anchor_basis = _get_weather_anchor_basis()
if anchor_basis != null:
fog.global_basis = anchor_basis
#endregion
#region Fireflies
@@ -476,8 +417,6 @@ func _update_wind_amount_from_strength(value: float) -> void:
func trigger_random_weather_event(duration: float = 0.0) -> void:
if random_weather_restore_tween and random_weather_restore_tween.is_valid():
random_weather_restore_tween.kill()
random_event_remaining = 0.0
random_event_label_seconds = -1
var previous_rain: bool = is_raining
var previous_snow: bool = is_snowing
@@ -495,26 +434,12 @@ func trigger_random_weather_event(duration: float = 0.0) -> void:
_apply_weather_event_state(true, false, false, true)
if duration > 0.0:
random_event_remaining = duration
_emit_weather_event_label()
random_weather_restore_tween = create_tween()
random_weather_restore_tween.tween_interval(duration)
random_weather_restore_tween.tween_callback(func():
random_event_remaining = 0.0
random_event_label_seconds = -1
_apply_weather_event_state(previous_rain, previous_snow, previous_wind, previous_storm)
)
func _update_random_event_label(delta: float) -> void:
if random_event_remaining <= 0.0:
return
random_event_remaining = maxf(random_event_remaining - delta, 0.0)
var display_seconds: int = ceili(random_event_remaining)
if display_seconds != random_event_label_seconds:
random_event_label_seconds = display_seconds
_emit_weather_event_label()
func _apply_weather_event_state(rain_enabled: bool, snow_enabled: bool, wind_enabled: bool, storm_enabled: bool = false) -> void:
if is_storm and not storm_enabled:
toggle_storm(false)
@@ -690,7 +615,7 @@ func toggle_rain(value: bool):
if puddle_tween and puddle_tween.is_valid():
puddle_tween.kill()
if is_raining:
particles_rain.amount_ratio = 0.0
particles_rain.emitting = true
@@ -810,23 +735,8 @@ func toggle_snow(value: bool):
var target_snow_amount: float = 1.0 if is_snowing else 0.0
if snow_tween and snow_tween.is_valid():
snow_tween.kill()
if snow_weather_tween and snow_weather_tween.is_valid():
snow_weather_tween.kill()
var snow_amount_transition_duration: float = _get_snow_amount_transition_duration(is_snowing)
snow_tween = create_tween()
snow_tween.tween_method(
init_snow_amount,
actual_snow_amount,
target_snow_amount,
snow_amount_transition_duration
)
snow_weather_tween = create_tween()
snow_weather_tween.tween_method(
init_snow_weather_amount,
snow_weather_amount,
target_snow_amount,
environment_config.snow_fade_time
)
snow_tween.tween_method(init_snow_amount, actual_snow_amount, target_snow_amount, environment_config.snow_transaction_time)
_emit_weather_event_label()
func _emit_weather_event_label() -> void:
@@ -843,14 +753,11 @@ func _emit_weather_event_label() -> void:
active_events.append("Wind")
if not active_events.is_empty():
weather_label = "Weather: %s" % " + ".join(active_events)
if random_event_remaining > 0.0:
weather_label += " (%s'')" % ceili(random_event_remaining)
UIEvents.weather_event_changed.emit(weather_label)
#disable snow and set default values and shader
func init_snow(value: float = 0.0):
actual_snow_amount = value
snow_weather_amount = value
RenderingServer.global_shader_parameter_set("global_snow_amount", value)
if particles_snow:
@@ -862,7 +769,7 @@ func init_snow(value: float = 0.0):
RenderingServer.global_shader_parameter_set("global_snow_accumulation_speed", environment_config.snow_accumulation_speed)
RenderingServer.global_shader_parameter_set("global_snow_melt_speed", environment_config.snow_melt_speed)
RenderingServer.global_shader_parameter_set("global_snow_max_accumulation", environment_config.snow_max_accumulation)
RenderingServer.global_shader_parameter_set("global_snow_cap_enabled", environment_config.show_snow_accumulation_volume)
RenderingServer.global_shader_parameter_set("global_snow_cap_enabled", 1.0 if environment_config.show_snow_accumulation_volume else 0.0)
RenderingServer.global_shader_parameter_set("global_snow_cap_height", environment_config.snow_cap_height)
RenderingServer.global_shader_parameter_set("global_snow_cap_flatness_start", environment_config.snow_cap_flatness_start)
RenderingServer.global_shader_parameter_set("global_snow_cap_flatness_end", environment_config.snow_cap_flatness_end)
@@ -875,9 +782,6 @@ func init_snow_amount(value: float):
actual_snow_amount = value
RenderingServer.global_shader_parameter_set("global_snow_amount", value)
func init_snow_weather_amount(value: float):
snow_weather_amount = value
func start_snow_accumulation() -> void:
RenderingServer.global_shader_parameter_set("global_snow_melt_time", -1.0)
RenderingServer.global_shader_parameter_set("global_snow_start_time", Time.get_ticks_msec() / 1000.0)
@@ -886,18 +790,6 @@ func start_snow_melt() -> void:
RenderingServer.global_shader_parameter_set("global_snow_melt_time", Time.get_ticks_msec() / 1000.0)
RenderingServer.global_shader_parameter_set("global_snow_melt_speed", environment_config.snow_melt_speed)
func _get_snow_amount_transition_duration(is_accumulating: bool) -> float:
if environment_config == null:
return 0.0
var speed: float = environment_config.snow_melt_speed
if is_accumulating:
speed = environment_config.snow_accumulation_speed
if speed <= 0.0:
return environment_config.snow_transaction_time
return 1.0 / speed
#endregion
#region Post-Process
@@ -912,10 +804,6 @@ func toggle_blur(value: bool) -> void:
ApplyPostProcessBlurConfig()
func toggle_fog(value: bool) -> void:
if fog:
fog.visible = value
func toggle_shadows(value: bool) -> void:
if environment_shadows:
environment_shadows.visible = value

View File

@@ -3,14 +3,13 @@ render_mode blend_mix, depth_draw_never;
//Snow globals
global uniform float global_snow_start_time = -1.0;
global uniform float global_snow_accumulation_speed = 0.005;
global uniform float global_snow_accumulation_speed = 0.1;
global uniform float global_snow_melt_time = -1.0;
global uniform float global_snow_melt_speed = 0.1;
global uniform float global_snow_amount = 0.0;
global uniform float global_snow_threshold = 0.5;
global uniform vec4 global_snow_color = vec4(0.92, 0.96, 1.0, 1.0);
global uniform float global_snow_max_accumulation = 0.72;
global uniform bool global_snow_cap_enabled = true;
global uniform float global_snow_cap_enabled = 1.0;
global uniform float global_snow_cap_height = 0.06;
global uniform float global_snow_cap_flatness_start = 0.72;
global uniform float global_snow_cap_flatness_end = 0.96;
@@ -71,19 +70,16 @@ float fbm(vec2 p) {
return clamp(value, 0.0, 1.0);
}
float get_snow_progress() {
float snow_progress = clamp(global_snow_amount, 0.0, 1.0);
float get_snow_amount() {
float snow_amount = 0.0;
if (global_snow_start_time >= 0.0) {
float timed_progress = clamp((TIME - global_snow_start_time) * global_snow_accumulation_speed, 0.0, 1.0);
snow_progress = max(snow_progress, timed_progress);
snow_amount = clamp((TIME - global_snow_start_time) * global_snow_accumulation_speed, 0.0, 1.0);
}
if (global_snow_melt_time >= 0.0) {
float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0);
snow_progress = min(snow_progress, 1.0 - melt);
snow_amount *= (1.0 - melt);
}
return snow_progress;
return snow_amount * global_snow_max_accumulation;
}
float ripple_ring(vec2 uv, float time_offset) {
@@ -94,24 +90,24 @@ float ripple_ring(vec2 uv, float time_offset) {
}
void vertex() {
float snow_progress = get_snow_progress();
float snow_accumulation = snow_progress * global_snow_max_accumulation;
float snow_amount = get_snow_amount();
vec3 world_pos = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
vec3 world_normal = normalize((MODEL_MATRIX * vec4(NORMAL, 0.0)).xyz);
float snow_cap_enabled = step(0.5, global_snow_cap_enabled);
float flat_surface = smoothstep(
max(global_snow_threshold, global_snow_cap_flatness_start),
global_snow_cap_flatness_end,
world_normal.y
);
float accumulation_growth = smoothstep(0.08, 0.65, snow_progress);
float accumulation_growth = smoothstep(0.08, 0.65, snow_amount);
float cap_noise = fbm(world_pos.xz * global_snow_cap_noise_scale + vec2(11.3, 4.7));
float cap_variation = mix(1.0 - global_snow_cap_noise_strength, 1.0 + global_snow_cap_noise_strength, cap_noise);
v_snow_amount = snow_progress;
v_snow_cap_mask = flat_surface * accumulation_growth * cap_variation * (global_snow_cap_enabled ? 1.0 : 0.0);
v_snow_amount = snow_amount;
v_snow_cap_mask = flat_surface * accumulation_growth * cap_variation * snow_cap_enabled;
VERTEX += NORMAL * (global_snow_cap_height * snow_accumulation * v_snow_cap_mask);
VERTEX += NORMAL * (global_snow_cap_height * snow_amount * v_snow_cap_mask);
}
void fragment() {
@@ -121,19 +117,17 @@ void fragment() {
float noise_val = texture(noise_texture, world_pos.xz * snow_noise_scale).r;
//Snow
float snow_progress = v_snow_amount;
float snow_accumulation = snow_progress * global_snow_max_accumulation;
float snow_amount = v_snow_amount;
float snow_edge = smoothstep(
global_snow_threshold - snow_edge_softness,
global_snow_threshold + snow_edge_softness,
facing_up
facing_up + (noise_val - 0.5) * 0.4
);
float flat_accumulation = smoothstep(0.0, 0.35, v_snow_cap_mask) * snow_accumulation;
float snow_variation = mix(0.75, 1.15, noise_val);
float snow_coverage = clamp(snow_progress * snow_variation + flat_accumulation * 0.25, 0.0, 1.0);
float snow_factor = max(snow_edge * snow_coverage, flat_accumulation);
float snow_opacity = clamp(snow_factor, 0.0, 1.0);
float flat_accumulation = smoothstep(0.0, 0.35, v_snow_cap_mask) * snow_amount;
float snow_coverage = smoothstep(0.0, 0.6, noise_val + snow_amount - 0.4 + flat_accumulation * 0.25);
float snow_factor = max(snow_edge * snow_coverage * snow_amount, flat_accumulation);
float snow_opacity = smoothstep(0.04, 0.28, snow_factor);
snow_opacity = max(snow_opacity, flat_accumulation * 0.9);
float shade = mix(-snow_color_variation, snow_color_variation, noise_val);

View File

@@ -5,17 +5,3 @@
[resource]
render_priority = 0
shader = ExtResource("1_weather")
shader_parameter/snow_noise_scale = 0.15
shader_parameter/snow_edge_softness = 0.2
shader_parameter/snow_roughness_variation = 0.15
shader_parameter/snow_color_variation = 0.05
shader_parameter/ripple_scale = 1.5
shader_parameter/ripple_speed = 2.0
shader_parameter/ripple_layers = 3.0
shader_parameter/streak_scale = 2.0
shader_parameter/streak_speed = 0.8
shader_parameter/wetness_darkening = 0.25
shader_parameter/wet_roughness = 0.05
shader_parameter/rain_normal_strength = 0.4
shader_parameter/puddle_noise_scale = 0.08
shader_parameter/puddle_threshold = 0.45

View File

@@ -2,11 +2,10 @@ shader_type spatial;
render_mode blend_mix, depth_draw_never, cull_disabled;
// Snow globals
global uniform float global_snow_start_time = -1.0;
global uniform float global_snow_accumulation_speed = 0.005;
global uniform float global_snow_melt_time = -1.0;
global uniform float global_snow_melt_speed = 0.1;
global uniform float global_snow_amount = 0.0;
global uniform float global_snow_start_time;
global uniform float global_snow_accumulation_speed;
global uniform float global_snow_melt_time;
global uniform float global_snow_melt_speed;
global uniform vec4 global_snow_color;
uniform float snow_edge_softness : hint_range(0.01, 0.5) = 0.15;
uniform float snow_color_variation : hint_range(0.0, 0.15) = 0.05;
@@ -35,21 +34,6 @@ float ripple_ring(vec2 uv, float time_offset) {
return ring * fade;
}
float get_snow_progress() {
float snow_progress = clamp(global_snow_amount, 0.0, 1.0);
if (global_snow_start_time >= 0.0) {
float timed_progress = clamp((TIME - global_snow_start_time) * global_snow_accumulation_speed, 0.0, 1.0);
snow_progress = max(snow_progress, timed_progress);
}
if (global_snow_melt_time >= 0.0) {
float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0);
snow_progress = min(snow_progress, 1.0 - melt);
}
return snow_progress;
}
void fragment() {
vec3 world_pos = (INV_VIEW_MATRIX * vec4(VERTEX, 1.0)).xyz;
@@ -57,10 +41,18 @@ void fragment() {
float facing_up = 1.0;
// Snow accumulation
float snow_amount = get_snow_progress();
float snow_amount = 0.0;
if (global_snow_start_time >= 0.0) {
snow_amount = clamp((TIME - global_snow_start_time) * global_snow_accumulation_speed, 0.0, 1.0);
}
if (global_snow_melt_time >= 0.0) {
float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0);
snow_amount *= (1.0 - melt);
}
// Plain surfaces fade in uniformly to avoid patchy strip-like accumulation.
float snow_mask = smoothstep(0.0, 1.0, snow_amount);
// UV-based snow mask: accumulates from the top of the quad
float top_mask = 1.0 - UV.y;
float snow_mask = smoothstep(1.0 - snow_amount, 1.0 - snow_amount + snow_edge_softness, top_mask);
snow_mask *= step(0.01, snow_amount);
// Snow color with slight variation

View File

@@ -1,21 +1,7 @@
[gd_resource type="ShaderMaterial" format=3 uid="uid://b34bnqbrtxktw"]
[gd_resource type="ShaderMaterial" format=3]
[ext_resource type="Shader" uid="uid://do8puw7u8dvry" path="res://core/daynight/weather_plain_shader.gdshader" id="1_weather_plain"]
[ext_resource type="Texture2D" uid="uid://bpswbjh4jj1ou" path="res://core/daynight/noise.tres" id="2_noise"]
[ext_resource type="Shader" path="res://core/daynight/weather_plain_shader.gdshader" id="1_weather_plain"]
[resource]
render_priority = 0
shader = ExtResource("1_weather_plain")
shader_parameter/snow_edge_softness = 0.15
shader_parameter/snow_color_variation = 0.05
shader_parameter/ripple_scale = 1.5
shader_parameter/ripple_speed = 2.0
shader_parameter/ripple_layers = 3.0
shader_parameter/streak_scale = 2.0
shader_parameter/streak_speed = 0.8
shader_parameter/wetness_darkening = 0.25
shader_parameter/wet_roughness = 0.05
shader_parameter/rain_normal_strength = 0.4
shader_parameter/puddle_noise_scale = 0.08
shader_parameter/puddle_threshold = 0.45
shader_parameter/noise_texture = ExtResource("2_noise")

View File

@@ -81,9 +81,8 @@ extends Resource
#Post-process effect toggles (initial values)
@export_group("Post Process")
@export var enable_dust: bool = false #Floating dust particles overlay
@export var enable_blur: bool = true #Screen blur effect
@export var enable_blur: bool = false #Screen blur effect
@export var enable_environment_shadows: bool = true #Cloud shadow projection on terrain
@export var enable_fog: bool = false #Enable fog around the train
@export var blur_amount: float = 0.6
@export_group("Dust")
@@ -98,7 +97,6 @@ extends Resource
@export var material_fog: ShaderMaterial #Fog overlay shader material
@export var material_drops: StandardMaterial3D #Rain drops material (albedo tinted by sky)
@export var material_clouds: ShaderMaterial #Cloud layer shader material
@export var base_cloud_density: float = 0.4 #default cloud density
#Rain weather settings
@export_group("Rain")
@@ -107,7 +105,6 @@ extends Resource
@export var rain_audio_volume_db: float = -10.0 #Target rain loop volume in decibels
@export var puddle_form_time: float = 15.0 #Seconds for puddles to fully form
@export var puddle_dry_time: float = 20.0 #Seconds for puddles to fully dry after rain stops
@export var rain_cloud_density: float = 1.0 #the cloud density when is rainy
#Storm settings (applied on top of rain when storm is active)
@export_group("Storm")
@@ -138,7 +135,7 @@ extends Resource
#Train start settings
@export_group("Train Start")
@export var train_start_from_random_position: bool = true #When enabled the train starts from a random offset on the rail curve instead of a stop
@export var train_start_from_random_position: bool = false #When enabled the train starts from a random offset on the rail curve instead of a stop
@export_range(0, 64, 1, "or_greater") var train_start_stop_index: int = 1 #Stop index used for the train start when random start is disabled
#Snow settings
@@ -147,7 +144,7 @@ extends Resource
@export var snow_transaction_time: float = 10.0 #Seconds for snow shader to fully transition in/out
@export var snow_fade_time: float = 5.0 #Seconds for snow particles to fade in/out
@export var snow_threshold: float = 0.4 #Normal Y threshold for snow accumulation on surfaces
@export var snow_accumulation_speed: float = 0.005 #Accumulation speed: 0.005 -> ~200s, 0.01 -> 100s, 0.02 -> 50s
@export var snow_accumulation_speed: float = 0.014 #Accumulation speed: 0.1 -> 10s, 0.05 -> 20s, 0.02 -> 50s, 0.012 -> ~83s
@export var snow_melt_speed: float = 0.05 #Speed at which accumulated snow melts away
@export var show_snow_accumulation_volume: bool = true #Enables vertex snow buildup; when false snow only changes surface color
@export var snow_max_accumulation: float = 0.25 #Maximum accumulated snow factor applied to coverage and thickness
@@ -179,14 +176,3 @@ extends Resource
@export var fireflies_amount: int = 60 #Number of firefly particles
@export var fireflies_spawn_ray: float = 20.0 #Horizontal spawn radius
@export var fireflies_spawn_height: float = 3.0 #Vertical spawn range
#Water settings
@export_group("Water")
@export var water_color_morning: Color = Color(0.285, 0.534, 0.487, 1.0) #Tint for morning
@export var water_color_afternoon: Color = Color(0.889, 0.733, 0.205, 1.0) #Tint for afternoon (sunset)
@export var water_color_night: Color = Color(0.728, 0.54, 0.986, 1.0); #Tint for night
@export var water_darkening_rain: float = 0.7 #Percentage of darkening when is rainy
#Random events
@export_group("Random Events")
@export var random_event_duration: float = 30.0 #Duration time for random event

View File

@@ -1,32 +0,0 @@
extends Node
const SAVE_PATH: String = "user://savegame.json"
var save_data: SaveGameData = SaveGameData.new()
var is_loaded: bool = false
func _ready() -> void:
load_game()
func save_game() -> void:
var save_file = FileAccess.open(SAVE_PATH, FileAccess.WRITE)
var json_string = JSON.stringify(save_data.to_dictionary())
save_file.store_line(json_string)
func load_game() -> void:
if not FileAccess.file_exists(SAVE_PATH):
save_data = SaveGameData.new()
is_loaded = true
return
var file = FileAccess.open(SAVE_PATH, FileAccess.READ)
var json_string = file.get_as_text()
var json = JSON.new()
var parse_result = json.parse(json_string)
save_data = SaveGameData.new()
if parse_result == OK and json.data is Dictionary:
save_data = SaveGameData.from_dictionary(json.data)
is_loaded = true

View File

@@ -1 +0,0 @@
uid://b17g2w2g101o6

View File

@@ -1,34 +0,0 @@
class_name SaveGameData
extends Resource
var unlocked_collectibles_ids: Array[StringName] = []
var saved_photos: Array[String] = []
var audio_bus_volumes: Dictionary[String, float] = {}
func to_dictionary() -> Dictionary:
var serialized_collectible_ids: Array[String] = []
for collectible_id in unlocked_collectibles_ids:
serialized_collectible_ids.append(str(collectible_id))
return {
"unlocked_collectibles_ids": serialized_collectible_ids,
"saved_photos": saved_photos,
"audio_bus_volumes": audio_bus_volumes,
}
static func from_dictionary(data: Dictionary) -> SaveGameData:
var save_game_data := SaveGameData.new()
if data.has("unlocked_collectibles_ids"):
for collectible_id in data["unlocked_collectibles_ids"]:
save_game_data.unlocked_collectibles_ids.append(StringName(str(collectible_id)))
if data.has("saved_photos"):
for photo_path in data["saved_photos"]:
save_game_data.saved_photos.append(str(photo_path))
if data.has("audio_bus_volumes") and data["audio_bus_volumes"] is Dictionary:
for bus_name in data["audio_bus_volumes"]:
save_game_data.audio_bus_volumes[str(bus_name)] = float(data["audio_bus_volumes"][bus_name])
return save_game_data

View File

@@ -1 +0,0 @@
uid://bxmvs842r82vl

View File

@@ -1,4 +0,0 @@
class_name CollectibleLibrary
extends Resource
@export var collectibles: Array[CollectibleResource]

View File

@@ -1 +0,0 @@
uid://hhuufh87skq5

View File

@@ -1,31 +0,0 @@
[gd_resource type="Resource" script_class="CollectibleLibrary" format=3 uid="uid://c6pkpvsvimafb"]
[ext_resource type="Script" uid="uid://bj34o0org55ei" path="res://core/photo_mode/data/collectible_resource.gd" id="1_3cgvf"]
[ext_resource type="Script" uid="uid://hhuufh87skq5" path="res://core/photo_mode/data/collectible_library.gd" id="2_ggu10"]
[ext_resource type="Texture2D" uid="uid://cx8d233y32kmu" path="res://icon.svg" id="2_pxmdy"]
[sub_resource type="Resource" id="Resource_3cgvf"]
script = ExtResource("1_3cgvf")
id = &"cane"
title = "Cane"
image = ExtResource("2_pxmdy")
metadata/_custom_type_script = "uid://bj34o0org55ei"
[sub_resource type="Resource" id="Resource_ggu10"]
script = ExtResource("1_3cgvf")
id = &"gatto"
title = "Gatto"
image = ExtResource("2_pxmdy")
metadata/_custom_type_script = "uid://bj34o0org55ei"
[sub_resource type="Resource" id="Resource_pxmdy"]
script = ExtResource("1_3cgvf")
id = &"farfalla"
title = "Farfalla"
image = ExtResource("2_pxmdy")
metadata/_custom_type_script = "uid://bj34o0org55ei"
[resource]
script = ExtResource("2_ggu10")
collectibles = Array[ExtResource("1_3cgvf")]([SubResource("Resource_3cgvf"), SubResource("Resource_ggu10"), SubResource("Resource_pxmdy")])
metadata/_custom_type_script = "uid://hhuufh87skq5"

View File

@@ -1,6 +0,0 @@
class_name CollectibleResource
extends Resource
@export var id: StringName
@export var title: String
@export var image: Texture2D

View File

@@ -1 +0,0 @@
uid://bj34o0org55ei

View File

@@ -1,60 +0,0 @@
extends Node
signal on_collectible_unlocked(collectible_id: StringName)
signal on_photo_saved(filePath: String)
var collectibles_library: CollectibleLibrary = preload("res://core/photo_mode/data/collectible_library.tres")
var unlocked_collectibles_ids: Array[StringName] = []
var saved_photos: Array[String] = []
func _ready() -> void:
load_save_data()
func unlock_collectible(collectible_id: StringName) -> void:
if not collectible_id in unlocked_collectibles_ids:
var new_collectible = get_collectible_by_id(collectible_id)
if new_collectible:
unlocked_collectibles_ids.append(collectible_id)
sync_save_data()
on_collectible_unlocked.emit(collectible_id)
func get_collectible_by_id(id: StringName) -> CollectibleResource:
for collectible in collectibles_library.collectibles:
if collectible.id == id:
return collectible
return null
func get_all_collectibles() -> Array[CollectibleResource]:
return collectibles_library.collectibles
func get_unlocked_collectible_ids() -> Array[StringName]:
return unlocked_collectibles_ids
func save_photo_to_disk_async() -> void:
await RenderingServer.frame_post_draw
var image = get_viewport().get_texture().get_image()
if not DirAccess.dir_exists_absolute("user://photos"):
DirAccess.make_dir_absolute("user://photos")
var timestamp = str(Time.get_unix_time_from_system())
var file_path = "user://photos/photo_" + timestamp + ".png"
image.save_png(file_path)
saved_photos.append(file_path)
sync_save_data()
on_photo_saved.emit(file_path)
func sync_save_data() -> void:
GameState.save_data.unlocked_collectibles_ids = unlocked_collectibles_ids.duplicate()
GameState.save_data.saved_photos = saved_photos.duplicate()
func load_save_data() -> void:
unlocked_collectibles_ids = GameState.save_data.unlocked_collectibles_ids.duplicate()
saved_photos = GameState.save_data.saved_photos.duplicate()
if unlocked_collectibles_ids.is_empty() and saved_photos.is_empty():
unlocked_collectibles_ids.append(&"cane")
sync_save_data()

View File

@@ -1 +0,0 @@
uid://c3kq1qddpm8tf

View File

@@ -1,6 +0,0 @@
extends Area3D
@export var collectible_data: CollectibleResource
func _ready() -> void:
add_to_group("collectible")

View File

@@ -1 +0,0 @@
uid://62d14boivr3g

View File

@@ -1,11 +0,0 @@
[gd_scene format=3 uid="uid://bmkxt6btcx8qr"]
[ext_resource type="Script" uid="uid://62d14boivr3g" path="res://core/photo_mode/runtime/collectible.gd" id="1_xse8c"]
[sub_resource type="BoxShape3D" id="BoxShape3D_xse8c"]
[node name="Collectible" type="Area3D" unique_id=1229019813]
script = ExtResource("1_xse8c")
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=1479480920]
shape = SubResource("BoxShape3D_xse8c")

View File

@@ -1,94 +0,0 @@
extends Node3D
@export_group("Speed")
@export var pan_speed: float = 5.0
@export var rotation_speed: float = 0.003
@export_group("Bounds")
@export var movement_bounds: AABB
@export_group("Ref")
@export var rotation_target: Node3D
@onready var camera: Camera3D = $%Camera3D
var total_yaw: float = 0.0
var total_pitch: float = 0.0
var orbit_distance: float = 0.0
var current_pan: Vector2 = Vector2.ZERO
var is_active: bool = false
func _ready() -> void:
total_yaw = global_rotation.y
total_pitch = global_rotation.x
if rotation_target:
orbit_distance = global_position.distance_to(rotation_target.global_position)
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("toggle_photo_mode"):
is_active = !is_active
get_tree().paused = is_active
if !is_active:
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
else:
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
if event is InputEventMouseMotion and is_active:
total_yaw -= event.relative.x * rotation_speed
if event.is_action_pressed("take_photo"):
take_photo_async()
func _process(delta: float) -> void:
if not rotation_target:
return
var pan_input = Input.get_vector("photo_pan_left", "photo_pan_right", "photo_pan_up", "photo_pan_down")
var rot_basis = Basis.from_euler(Vector3(total_pitch, total_yaw, 0))
if pan_input != Vector2.ZERO and is_active:
current_pan.x += pan_input.x * pan_speed * delta
current_pan.y += -pan_input.y * pan_speed * delta
if movement_bounds.size != Vector3.ZERO:
current_pan.x = clampf(current_pan.x, movement_bounds.position.x, movement_bounds.position.x + movement_bounds.size.x)
current_pan.y = clampf(current_pan.y, movement_bounds.position.y, movement_bounds.position.y + movement_bounds.size.y)
var right_dir = rot_basis.x.normalized()
var up_dir = rot_basis.y.normalized()
var final_pan_offset = (right_dir * current_pan.x) + (up_dir * current_pan.y)
var orbit_pos = rotation_target.global_position + (rot_basis * Vector3(0, 0, orbit_distance))
global_position = orbit_pos + final_pan_offset
global_basis = rot_basis
func take_photo_async() -> void:
if !is_active:
return
var targets = get_tree().get_nodes_in_group("collectible")
var space_state = get_world_3d().direct_space_state
await CollectionManager.save_photo_to_disk_async()
for target in targets:
if not target.collectible_data:
continue
if camera.is_position_in_frustum(target.global_position):
var query = PhysicsRayQueryParameters3D.create(camera.global_position, target.global_position)
query.collide_with_areas = true
query.collide_with_bodies = true
var result = space_state.intersect_ray(query)
if result and result.collider == target:
CollectionManager.unlock_collectible(target.collectible_data.id)
GameState.save_game()

View File

@@ -1 +0,0 @@
uid://d7ln6iru6mq6

View File

@@ -1,10 +0,0 @@
[gd_scene format=3 uid="uid://vni5kjalum6d"]
[ext_resource type="Script" uid="uid://d7ln6iru6mq6" path="res://core/photo_mode/runtime/photo_mode_controller.gd" id="1_uhpya"]
[node name="PhotoModeController" type="Node3D" unique_id=695158870]
process_mode = 3
script = ExtResource("1_uhpya")
[node name="Camera3D" type="Camera3D" parent="." unique_id=1369039645]
unique_name_in_owner = true

View File

@@ -1,34 +0,0 @@
extends Control
@export var collectible_ui_scene: PackedScene
@onready var grid_container: GridContainer = $%CollectibleGrid
func _ready() -> void:
CollectionManager.on_collectible_unlocked.connect(_unlock_collectible)
setup()
func setup() -> void:
var unlocked_collectible_ids = CollectionManager.get_unlocked_collectible_ids()
var collectibles = CollectionManager.get_all_collectibles()
for child in grid_container.get_children():
child.queue_free()
for collectible in collectibles:
_add_collectible(collectible)
if unlocked_collectible_ids.has(collectible.id):
_unlock_collectible(collectible.id)
func on_collectible_unlocked(collectible_id: StringName) -> void:
_unlock_collectible(collectible_id)
func _add_collectible(collectible: CollectibleResource) -> void:
var collectible_ui: CollectibleUI = collectible_ui_scene.instantiate()
collectible_ui.setup(collectible)
grid_container.add_child(collectible_ui)
func _unlock_collectible(collectible_id: StringName) -> void:
for collectible_ui in grid_container.get_children():
if collectible_ui.collectible_resource.id == collectible_id:
collectible_ui.unlock()

View File

@@ -1 +0,0 @@
uid://dq3qtcrdnikl7

View File

@@ -1,50 +0,0 @@
[gd_scene format=3 uid="uid://bvw086glfpcba"]
[ext_resource type="Script" uid="uid://dq3qtcrdnikl7" path="res://core/photo_mode/ui/collectible_gallery.gd" id="1_67tug"]
[ext_resource type="PackedScene" uid="uid://dp7dvfauh5rpx" path="res://core/photo_mode/ui/collectible_ui.tscn" id="2_or234"]
[node name="CollectibleGallery" type="Control" unique_id=354419843]
layout_mode = 3
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_67tug")
collectible_ui_scene = ExtResource("2_or234")
[node name="PanelContainer" type="PanelContainer" parent="." unique_id=640179265]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -350.0
offset_top = -350.0
offset_right = 350.0
offset_bottom = 350.0
grow_horizontal = 2
grow_vertical = 2
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer" unique_id=125147979]
layout_mode = 2
theme_override_constants/margin_left = 12
theme_override_constants/margin_top = 12
theme_override_constants/margin_right = 12
theme_override_constants/margin_bottom = 12
[node name="ScrollContainer" type="ScrollContainer" parent="PanelContainer/MarginContainer" unique_id=348576028]
layout_mode = 2
draw_focus_border = true
[node name="CollectibleGrid" type="GridContainer" parent="PanelContainer/MarginContainer/ScrollContainer" unique_id=1187865988]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 6
size_flags_vertical = 2
theme_override_constants/h_separation = 12
theme_override_constants/v_separation = 12
columns = 3

View File

@@ -1,22 +0,0 @@
extends Control
class_name CollectibleUI
@onready var label: Label = $%CollectibleName
@onready var texture_rect: TextureRect = $%CollectibleTexture
var collectible_resource: CollectibleResource
func setup(collectible: CollectibleResource) -> void:
collectible_resource = collectible
if !label:
label = $%CollectibleName
label.text = collectible_resource.title
if collectible.image:
if !texture_rect:
texture_rect = $%CollectibleTexture
texture_rect.texture = collectible_resource.image
func unlock() -> void:
if !texture_rect:
texture_rect = $%CollectibleTexture
texture_rect.set_modulate(Color(1,1,1,1))

View File

@@ -1 +0,0 @@
uid://dxh8e1n16qjpp

View File

@@ -1,49 +0,0 @@
[gd_scene format=3 uid="uid://dp7dvfauh5rpx"]
[ext_resource type="Script" uid="uid://dxh8e1n16qjpp" path="res://core/photo_mode/ui/collectible_ui.gd" id="1_tu5nx"]
[ext_resource type="Texture2D" uid="uid://cx8d233y32kmu" path="res://icon.svg" id="1_x3wje"]
[node name="CollectibleUI" type="Control" unique_id=201865221]
custom_minimum_size = Vector2(200, 200)
layout_mode = 3
anchors_preset = 0
offset_right = 200.0
offset_bottom = 200.0
script = ExtResource("1_tu5nx")
[node name="Panel" type="PanelContainer" parent="." unique_id=1372516531]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="MarginContainer" type="MarginContainer" parent="Panel" unique_id=1141643525]
layout_mode = 2
theme_override_constants/margin_left = 12
theme_override_constants/margin_top = 12
theme_override_constants/margin_right = 12
theme_override_constants/margin_bottom = 12
[node name="VBoxContainer" type="VBoxContainer" parent="Panel/MarginContainer" unique_id=1841409877]
layout_mode = 2
alignment = 1
[node name="CollectibleName" type="Label" parent="Panel/MarginContainer/VBoxContainer" unique_id=117774359]
unique_name_in_owner = true
layout_mode = 2
size_flags_vertical = 0
text = "Collectible"
horizontal_alignment = 1
[node name="HSeparator" type="HSeparator" parent="Panel/MarginContainer/VBoxContainer" unique_id=1345822244]
layout_mode = 2
[node name="CollectibleTexture" type="TextureRect" parent="Panel/MarginContainer/VBoxContainer" unique_id=506844785]
unique_name_in_owner = true
modulate = Color(0.16206557, 0.1620656, 0.16206557, 1)
layout_mode = 2
size_flags_vertical = 3
texture = ExtResource("1_x3wje")
stretch_mode = 3

View File

@@ -1,11 +0,0 @@
extends Control
class_name Photo
@onready var texture_rect: TextureRect = $%PhotoTexture
func setup(texture: Texture) -> void:
if texture:
if !texture_rect:
texture_rect = $%PhotoTexture
texture_rect.texture = texture

View File

@@ -1 +0,0 @@
uid://dsey5dvc11vpq

View File

@@ -1,38 +0,0 @@
[gd_scene format=3 uid="uid://cvus62qkop3qi"]
[ext_resource type="Script" uid="uid://dsey5dvc11vpq" path="res://core/photo_mode/ui/photo.gd" id="1_u0arp"]
[node name="Photo" type="Control" unique_id=201865221]
custom_minimum_size = Vector2(200, 200)
layout_mode = 3
anchors_preset = 0
offset_right = 200.0
offset_bottom = 200.0
script = ExtResource("1_u0arp")
[node name="ColorRect" type="ColorRect" parent="." unique_id=1208008621]
layout_mode = 0
offset_right = 200.0
offset_bottom = 200.0
[node name="MarginContainer" type="MarginContainer" parent="ColorRect" unique_id=1141643525]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 12
theme_override_constants/margin_top = 12
theme_override_constants/margin_right = 12
theme_override_constants/margin_bottom = 12
[node name="Panel" type="PanelContainer" parent="ColorRect/MarginContainer" unique_id=1372516531]
layout_mode = 2
[node name="PhotoTexture" type="TextureRect" parent="ColorRect/MarginContainer/Panel" unique_id=506844785]
unique_name_in_owner = true
layout_mode = 2
size_flags_vertical = 3
expand_mode = 1
stretch_mode = 6

View File

@@ -1,27 +0,0 @@
extends Control
@export var photo_scene: PackedScene
@onready var grid_container: GridContainer = $%PhotoGrid
func _ready() -> void:
CollectionManager.on_photo_saved.connect(_create_photo_thumbnail)
load_gallery()
func load_gallery() -> void:
for child in grid_container.get_children():
child.queue_free()
var saved_photos = CollectionManager.saved_photos
for file_path in saved_photos:
if FileAccess.file_exists(file_path):
_create_photo_thumbnail(file_path)
func _create_photo_thumbnail(file_path: String) -> void:
var image = Image.load_from_file(file_path)
if image:
var photo: Photo = photo_scene.instantiate()
var texture = ImageTexture.create_from_image(image)
photo.setup(texture)
grid_container.add_child(photo)

View File

@@ -1 +0,0 @@
uid://k4iqrlkbjppl

View File

@@ -1,50 +0,0 @@
[gd_scene format=3 uid="uid://b6r787sik5yil"]
[ext_resource type="Script" uid="uid://k4iqrlkbjppl" path="res://core/photo_mode/ui/photo_gallery.gd" id="1_bp5uf"]
[ext_resource type="PackedScene" uid="uid://cvus62qkop3qi" path="res://core/photo_mode/ui/photo.tscn" id="2_45wok"]
[node name="PhotoGallery" type="Control" unique_id=354419843]
layout_mode = 3
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_bp5uf")
photo_scene = ExtResource("2_45wok")
[node name="PanelContainer" type="PanelContainer" parent="." unique_id=640179265]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -350.0
offset_top = -350.0
offset_right = 350.0
offset_bottom = 350.0
grow_horizontal = 2
grow_vertical = 2
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer" unique_id=125147979]
layout_mode = 2
theme_override_constants/margin_left = 12
theme_override_constants/margin_top = 12
theme_override_constants/margin_right = 12
theme_override_constants/margin_bottom = 12
[node name="ScrollContainer" type="ScrollContainer" parent="PanelContainer/MarginContainer" unique_id=348576028]
layout_mode = 2
draw_focus_border = true
[node name="PhotoGrid" type="GridContainer" parent="PanelContainer/MarginContainer/ScrollContainer" unique_id=1187865988]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 6
size_flags_vertical = 2
theme_override_constants/h_separation = 12
theme_override_constants/v_separation = 12
columns = 3

View File

@@ -1,31 +0,0 @@
extends AudioStreamPlayer
class_name Radio
@export var playlist: Array[AudioStream] = []
var current_track_index: int = 0
func _ready():
finished.connect(next_track)
func play_track(index: int = current_track_index):
if playlist.is_empty():
return
current_track_index = posmod(index, playlist.size())
stream = playlist[current_track_index]
play()
stream_paused = false
func next_track():
play_track(current_track_index + 1)
func prev_track():
play_track(current_track_index - 1)
func toggle_pause():
stream_paused = !stream_paused
func stop_radio():
stop()
stream_paused = false

View File

@@ -1 +0,0 @@
uid://bwrgh6xlvhqch

View File

@@ -1,7 +0,0 @@
[gd_scene format=3 uid="uid://cpeyt1dgrtglc"]
[ext_resource type="Script" uid="uid://bwrgh6xlvhqch" path="res://core/radio/radio.gd" id="1_2akjj"]
[node name="Radio" type="AudioStreamPlayer" unique_id=1234112225]
bus = &"Music"
script = ExtResource("1_2akjj")

View File

@@ -27,12 +27,6 @@ signal toggle_dust(value: bool)
signal toggle_blur(value: bool)
@warning_ignore("unused_signal")
signal toggle_shadows(value: bool)
@warning_ignore("unused_signal")
signal toggle_fog(value: bool)
#railway signals
@warning_ignore("unused_signal")
signal update_rail_chunks()
#day cycle signals
@warning_ignore("unused_signal")

View File

@@ -1,15 +0,0 @@
[gd_resource type="AudioBusLayout" format=3 uid="uid://cqvx62pwvvboj"]
[resource]
bus/1/name = &"Music"
bus/1/solo = false
bus/1/mute = false
bus/1/bypass_fx = false
bus/1/volume_db = 0.0
bus/1/send = &"Master"
bus/2/name = &"SFX"
bus/2/solo = false
bus/2/mute = false
bus/2/bypass_fx = false
bus/2/volume_db = 0.0
bus/2/send = &"Master"

View File

@@ -1,92 +0,0 @@
[gd_scene format=3 uid="uid://dqvrhiqgkd3w1"]
[ext_resource type="PackedScene" uid="uid://clx701xdwelgx" path="res://core/ai/agents/base/ai_base.tscn" id="1_a2xtd"]
[sub_resource type="NavigationMesh" id="NavigationMesh_optuv"]
vertices = PackedVector3Array(10.984741, 0.25012434, -1.0140381, 11.234741, 0.25012434, 0.23596191, 19.484741, 0.25012434, 0.23596191, 19.484741, 0.25012434, -19.514038, 9.234741, 0.25012434, -1.0140381, -19.515259, 0.25012434, -19.514038, -19.515259, 0.25012434, -0.014038086, 8.984741, 0.25012434, -0.014038086, 10.984741, 0.25012434, 1.2359619, 19.484741, 0.25012434, 19.235962, 9.234741, 0.25012434, 1.2359619, -19.515259, 0.25012434, 19.235962)
polygons = [PackedInt32Array(1, 0, 2), PackedInt32Array(2, 0, 3), PackedInt32Array(6, 5, 4), PackedInt32Array(4, 5, 3), PackedInt32Array(3, 0, 4), PackedInt32Array(4, 7, 6), PackedInt32Array(1, 2, 8), PackedInt32Array(8, 2, 9), PackedInt32Array(6, 10, 11), PackedInt32Array(11, 10, 9), PackedInt32Array(10, 8, 9), PackedInt32Array(6, 7, 10)]
[sub_resource type="PlaneMesh" id="PlaneMesh_optuv"]
[sub_resource type="BoxShape3D" id="BoxShape3D_xtjak"]
size = Vector3(1.9942131, 0.09710693, 1.984024)
[sub_resource type="BoxMesh" id="BoxMesh_lmjyn"]
[sub_resource type="BoxShape3D" id="BoxShape3D_lmjyn"]
[sub_resource type="Environment" id="Environment_lmjyn"]
[node name="GymAI" type="Node3D" unique_id=868339787]
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="." unique_id=774907858]
navigation_mesh = SubResource("NavigationMesh_optuv")
[node name="Floor" type="MeshInstance3D" parent="NavigationRegion3D" unique_id=1976415311]
transform = Transform3D(20, 0, 0, 0, 20, 0, 0, 0, 20, 0, -0.83473957, 0)
mesh = SubResource("PlaneMesh_optuv")
[node name="StaticBody3D" type="StaticBody3D" parent="NavigationRegion3D/Floor" unique_id=2007477719]
[node name="CollisionShape3D" type="CollisionShape3D" parent="NavigationRegion3D/Floor/StaticBody3D" unique_id=1446628130]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0036563873, -0.009703338, -0.00868988)
shape = SubResource("BoxShape3D_xtjak")
[node name="Obstacle" type="MeshInstance3D" parent="NavigationRegion3D" unique_id=710701082]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.148018, 0.06508446, 0)
mesh = SubResource("BoxMesh_lmjyn")
[node name="StaticBody3D" type="StaticBody3D" parent="NavigationRegion3D/Obstacle" unique_id=67152580]
[node name="CollisionShape3D" type="CollisionShape3D" parent="NavigationRegion3D/Obstacle/StaticBody3D" unique_id=1663742898]
shape = SubResource("BoxShape3D_lmjyn")
[node name="AIBase" parent="." unique_id=1228675528 instance=ExtResource("1_a2xtd")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.48246834, 0.21202153, 0.11262059)
[node name="Camera3D" type="Camera3D" parent="." unique_id=1148396057]
transform = Transform3D(-2.0613477e-08, 0.8818225, -0.47158146, 3.854569e-08, 0.47158146, 0.8818225, 1, -3.5527137e-15, -4.371139e-08, -18.21907, 28.71355, 0)
[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=1772424900]
environment = SubResource("Environment_lmjyn")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="." unique_id=269230449]
transform = Transform3D(1, 0, 0, 0, 0.17952333, 0.98375374, 0, -0.98375374, 0.17952333, 0, 18.920979, 0)
[node name="Control" type="Control" parent="." unique_id=1072240389]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="PanelContainer" type="PanelContainer" parent="Control" unique_id=1647272132]
layout_mode = 0
offset_left = 50.0
offset_top = 50.0
offset_right = 400.0
offset_bottom = 827.0
[node name="Label" type="Label" parent="Control/PanelContainer" unique_id=272421245]
custom_minimum_size = Vector2(1, 1)
layout_mode = 2
size_flags_vertical = 1
text = "System Logic:
- The NPC uses a finite state machine to switch between behaviors.
- State logic runs during physics updates, while movement is handled by the agent through NavigationAgent3D.
AI States:
- IdleState: The agent waits in place for the duration defined by wait_time.
- PatrolState: The agent selects a valid random destination and moves toward it.
Core Components:
- NavigationAgent3D: Calculates the path and reports when the destination has been reached.
- PatrolRadiusShape: Defines the random movement area used when choosing the next patrol point.
- StateMachine: Initializes the available states and handles transitions between them.
Parameters:
- Speed: Movement speed of the agent.
- Wait Time: Delay in seconds on the IdleState node.
- Area Radius: Radius of the SphereShape3D used by PatrolRadiusShape."
autowrap_mode = 2

View File

@@ -1,7 +0,0 @@
extends Node3D
@onready var gallery: Control = $%Gallery
func _on_button_gallery_pressed() -> void:
gallery.visible = !gallery.visible

View File

@@ -1 +0,0 @@
uid://7oglx4br38d5

View File

@@ -1,138 +0,0 @@
[gd_scene format=3 uid="uid://bwc8slnbu7dmn"]
[ext_resource type="Script" uid="uid://7oglx4br38d5" path="res://docs/gyms/photo_mode/gym_photo_mode.gd" id="1_cl1h5"]
[ext_resource type="PackedScene" uid="uid://vni5kjalum6d" path="res://core/photo_mode/runtime/photo_mode_controller.tscn" id="2_q5kgc"]
[ext_resource type="PackedScene" uid="uid://bmkxt6btcx8qr" path="res://core/photo_mode/runtime/collectible.tscn" id="3_734hf"]
[ext_resource type="Texture2D" uid="uid://c3grftlmap4q5" path="res://tgcc/chunk/prop/tree/leaf1_alpha.png" id="4_00joj"]
[ext_resource type="Script" uid="uid://bj34o0org55ei" path="res://core/photo_mode/data/collectible_resource.gd" id="5_crfij"]
[ext_resource type="PackedScene" uid="uid://bvw086glfpcba" path="res://core/photo_mode/ui/collectible_gallery.tscn" id="6_6aab5"]
[ext_resource type="PackedScene" uid="uid://b6r787sik5yil" path="res://core/photo_mode/ui/photo_gallery.tscn" id="7_tb1ii"]
[sub_resource type="Environment" id="Environment_48mla"]
[sub_resource type="PlaneMesh" id="PlaneMesh_hh1ka"]
[sub_resource type="BoxShape3D" id="BoxShape3D_ynvi2"]
size = Vector3(1.9942131, 0.09710693, 1.984024)
[sub_resource type="Resource" id="Resource_ynvi2"]
script = ExtResource("5_crfij")
id = &"gatto"
title = "Gatto"
image = ExtResource("4_00joj")
metadata/_custom_type_script = "uid://bj34o0org55ei"
[sub_resource type="BoxMesh" id="BoxMesh_hh1ka"]
[node name="GymPhotoMode" type="Node3D" unique_id=1314600330]
script = ExtResource("1_cl1h5")
[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=213183287]
environment = SubResource("Environment_48mla")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="." unique_id=1274975837]
transform = Transform3D(1, 0, 0, 0, 0.17952333, 0.98375374, 0, -0.98375374, 0.17952333, 0, 18.920979, 0)
[node name="Floor" type="MeshInstance3D" parent="." unique_id=958865480]
transform = Transform3D(20, 0, 0, 0, 20, 0, 0, 0, 20, 0, -0.83473957, 0)
mesh = SubResource("PlaneMesh_hh1ka")
[node name="StaticBody3D" type="StaticBody3D" parent="Floor" unique_id=2096983240]
[node name="CollisionShape3D" type="CollisionShape3D" parent="Floor/StaticBody3D" unique_id=188185045]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0036563873, -0.009703338, -0.00868988)
shape = SubResource("BoxShape3D_ynvi2")
[node name="PhotoModeController" parent="." unique_id=695158870 node_paths=PackedStringArray("rotation_target") instance=ExtResource("2_q5kgc")]
transform = Transform3D(1, 0, 0, 0, 0.49999994, 0.8660254, 0, -0.8660254, 0.49999994, 0, 30, 20)
movement_bounds = AABB(-5, -5, -5, 10, 10, 10)
rotation_target = NodePath("../Node3D")
[node name="Node3D" type="Node3D" parent="." unique_id=570786250]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0)
[node name="Node3D2" type="Node3D" parent="." unique_id=15037296]
[node name="Collectible" parent="Node3D2" unique_id=1229019813 instance=ExtResource("3_734hf")]
collectible_data = SubResource("Resource_ynvi2")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Node3D2" unique_id=553040412]
mesh = SubResource("BoxMesh_hh1ka")
[node name="Control" type="Control" parent="." unique_id=1802496396]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
[node name="ButtonGallery" type="Button" parent="Control" unique_id=539195532]
layout_mode = 0
offset_left = 50.0
offset_top = 50.0
offset_right = 163.0
offset_bottom = 81.0
text = "Menu"
[node name="Gallery" type="HSplitContainer" parent="Control" unique_id=1388833682]
unique_name_in_owner = true
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 420.0
grow_horizontal = 2
grow_vertical = 2
[node name="CollectibleGallery" parent="Control/Gallery" unique_id=354419843 instance=ExtResource("6_6aab5")]
layout_mode = 2
size_flags_horizontal = 3
[node name="PhotoGallery" parent="Control/Gallery" unique_id=263414560 instance=ExtResource("7_tb1ii")]
layout_mode = 2
size_flags_horizontal = 3
[node name="PanelContainer" type="PanelContainer" parent="Control" unique_id=2015953740]
layout_mode = 0
offset_left = 50.0
offset_top = 150.0
offset_right = 400.0
offset_bottom = 927.0
[node name="ScrollContainer" type="ScrollContainer" parent="Control/PanelContainer" unique_id=1474258594]
layout_mode = 2
[node name="Label" type="Label" parent="Control/PanelContainer/ScrollContainer" unique_id=1982569320]
custom_minimum_size = Vector2(1, 1)
layout_mode = 2
size_flags_horizontal = 3
text = "System Logic:
- The system allows players to toggle a free camera mode to photograph and collect museum items.
- Game Pause: Activating the mode pauses the SceneTree, freezing the world while allowing the camera to remain functional.
- Taking a photo saves the captured image to disk and checks which collectibles are visible and unobstructed before unlocking them.
- CollectionManager acts as a global singleton that tracks unlocked collectibles, saved photos, and the data used by the UI.
Photo Mode Actions:
- Toggle Mode(P): Switches between normal gameplay and the photo camera, capturing or releasing the mouse, and toggles the global pause state.
- Rotate(Mouse): The camera orbits around the configured target while photo mode is active.
- Pan(Input Actions): The camera can be moved horizontally and vertically within the configured bounds.
- Capture(F): Saves the current frame and performs frustum and raycast checks against collectibles in view.
Core Components:
- PhotoModeController: Manages camera inputs, movement logic, and the photo-taking process.
- Collectible: An Area3D node placed on objects to make them identifiable by the camera.
- CollectionManager: Handles the logic for unlocking items and provides data to the UI.
- CollectibleGallery: Displays all collectibles and visually highlights the unlocked ones.
- PhotoGallery: Displays the photos saved by the player during the session.
Parameters:
- Pan & Rotation Speed: Defines how fast the camera moves and rotates.
- Movement Bounds: An AABB that restricts the camera's panning area.
- Collectible Data: Resource files containing the ID, title, and image for each item.
- Library: A central list of all CollectibleResources registered in the game."
autowrap_mode = 2
[connection signal="pressed" from="Control/ButtonGallery" to="." method="_on_button_gallery_pressed"]

View File

@@ -1,35 +0,0 @@
extends Node3D
@onready var radio: Radio = $%Radio
@onready var button_pause_resume: Button = $%Button_Pause_Resume
@onready var settings_menu: SettingsMenu = $%SettingsMenu
func _on_button_play_pressed() -> void:
if !radio.playing:
radio.play_track()
func _on_button_pause_pressed() -> void:
radio.toggle_pause()
if !button_pause_resume:
button_pause_resume = $%Button_Pause_Resume
if radio.stream_paused:
button_pause_resume.text = "Resume"
else:
button_pause_resume.text = "Pause"
func _on_button_stop_pressed() -> void:
radio.stop_radio()
func _on_button_next_pressed() -> void:
radio.next_track()
func _on_button_previous_pressed() -> void:
radio.prev_track()
func _on_button_settings_menu_pressed() -> void:
settings_menu.visible = !settings_menu.visible

View File

@@ -1 +0,0 @@
uid://ew4b78u5tkiu

View File

@@ -1,104 +0,0 @@
[gd_scene format=3 uid="uid://bdkdhn1oallke"]
[ext_resource type="PackedScene" uid="uid://cpeyt1dgrtglc" path="res://core/radio/radio.tscn" id="1_8yomj"]
[ext_resource type="Script" uid="uid://ew4b78u5tkiu" path="res://docs/gyms/radio/gym_radio.gd" id="1_h5r8c"]
[ext_resource type="AudioStream" uid="uid://70cc8she43re" path="res://docs/gyms/radio/lofi_01.ogg" id="3_ltpvc"]
[ext_resource type="PackedScene" uid="uid://caqf471x0kttc" path="res://core/audio/settings/settings_menu.tscn" id="4_8pw2j"]
[node name="GymRadio" type="Node3D" unique_id=204859062]
script = ExtResource("1_h5r8c")
[node name="Radio" parent="." unique_id=1234112225 instance=ExtResource("1_8yomj")]
unique_name_in_owner = true
playlist = Array[AudioStream]([ExtResource("3_ltpvc")])
[node name="Control" type="Control" parent="." unique_id=1232082176]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="SettingsMenu" parent="Control" unique_id=1639777294 instance=ExtResource("4_8pw2j")]
unique_name_in_owner = true
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
[node name="VBoxContainer2" type="VBoxContainer" parent="Control" unique_id=2092627240]
layout_mode = 1
anchors_preset = 9
anchor_bottom = 1.0
offset_right = 229.0
grow_vertical = 2
[node name="VBoxContainer" type="VBoxContainer" parent="Control/VBoxContainer2" unique_id=2097365775]
layout_mode = 2
[node name="Button_Play" type="Button" parent="Control/VBoxContainer2/VBoxContainer" unique_id=1422696340]
layout_mode = 2
text = "Play"
[node name="Button_Pause_Resume" type="Button" parent="Control/VBoxContainer2/VBoxContainer" unique_id=2016690081]
unique_name_in_owner = true
layout_mode = 2
text = "Pause"
[node name="Button_Stop" type="Button" parent="Control/VBoxContainer2/VBoxContainer" unique_id=61861870]
layout_mode = 2
text = "Stop"
[node name="Button_Next" type="Button" parent="Control/VBoxContainer2/VBoxContainer" unique_id=957606385]
layout_mode = 2
text = "Next"
[node name="Button_Previous" type="Button" parent="Control/VBoxContainer2/VBoxContainer" unique_id=929072518]
layout_mode = 2
text = "Previous"
[node name="Button_SettingsMenu" type="Button" parent="Control/VBoxContainer2/VBoxContainer" unique_id=431867154]
layout_mode = 2
text = "SettingsMenu"
[node name="PanelContainer" type="PanelContainer" parent="Control/VBoxContainer2" unique_id=1558442050]
layout_mode = 2
size_flags_vertical = 3
[node name="ScrollContainer" type="ScrollContainer" parent="Control/VBoxContainer2/PanelContainer" unique_id=7789304]
layout_mode = 2
[node name="Label" type="Label" parent="Control/VBoxContainer2/PanelContainer/ScrollContainer" unique_id=2043293564]
custom_minimum_size = Vector2(1, 1)
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
text = "System Logic:
- The system is an extension of AudioStreamPlayer designed to manage sequential audio playback.
- It automatically triggers the next track in the sequence when the current one finishes via the finished signal.
Core Functionality:
- Playlist Management: Stores a list of AudioStream resources and tracks the current song index.
- Track Navigation: Allows cycling forward and backward through the playlist with index wrapping (loops back to start/end).
- Playback Control: Supports jumping to specific tracks, toggling the pause state, and stopping the stream.
- Audio Settings: If the Music bus exists, the Settings menu can be used to test and adjust playback volume.
Key Methods:
- play_track: Loads a specific stream from the playlist and begins playback.
- next_track / prev_track: Increments or decrements the index to navigate the playlist.
- toggle_pause: Resumes or pauses the current stream without resetting its position.
Adjustable Parameters:
- Playlist: An Array in the inspector where you can assign one or more AudioStream resources."
autowrap_mode = 2
[connection signal="pressed" from="Control/VBoxContainer2/VBoxContainer/Button_Play" to="." method="_on_button_play_pressed"]
[connection signal="pressed" from="Control/VBoxContainer2/VBoxContainer/Button_Pause_Resume" to="." method="_on_button_pause_pressed"]
[connection signal="pressed" from="Control/VBoxContainer2/VBoxContainer/Button_Stop" to="." method="_on_button_stop_pressed"]
[connection signal="pressed" from="Control/VBoxContainer2/VBoxContainer/Button_Next" to="." method="_on_button_next_pressed"]
[connection signal="pressed" from="Control/VBoxContainer2/VBoxContainer/Button_Previous" to="." method="_on_button_previous_pressed"]
[connection signal="pressed" from="Control/VBoxContainer2/VBoxContainer/Button_SettingsMenu" to="." method="_on_button_settings_menu_pressed"]

Binary file not shown.

View File

@@ -1,19 +0,0 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://70cc8she43re"
path="res://.godot/imported/lofi_01.ogg-0aacd597266806080412021811923091.oggvorbisstr"
[deps]
source_file="res://docs/gyms/radio/lofi_01.ogg"
dest_files=["res://.godot/imported/lofi_01.ogg-0aacd597266806080412021811923091.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -9,9 +9,10 @@
[ext_resource type="PackedScene" uid="uid://crlk31ecl480n" path="res://tgcc/chunk/countryside/scene/chunk_country_corner_03.tscn" id="7_4elh6"]
[ext_resource type="PackedScene" uid="uid://b8blm6bwintf7" path="res://tgcc/chunk/countryside/scene/chunk_country_empty_01.tscn" id="7_xgfli"]
[ext_resource type="PackedScene" uid="uid://brpp7fe5noq8v" path="res://tgcc/chunk/countryside/scene/chunk_country_cross_3_01.tscn" id="8_hvd8d"]
[ext_resource type="PackedScene" uid="uid://cjv1e8pc6gde1" path="res://tgcc/chunk/countryside/scene/chunk_country_corner_01.tscn" id="8_nurqm"]
[ext_resource type="PackedScene" uid="uid://cu2chsjh8wuvp" path="res://tgcc/chunk/countryside/scene/chunk_country_straight_02.tscn" id="9_51cxd"]
[ext_resource type="PackedScene" uid="uid://dqoai3665vb0a" path="res://tgcc/chunk/countryside/scene/chunk_country_corner_02.tscn" id="9_q6kbb"]
[ext_resource type="PackedScene" uid="uid://cjv1e8pc6gde1" path="res://tgcc/chunk/countryside/scene/chunk_country_corner_01.tscn" id="10_ufarv"]
[ext_resource type="PackedScene" uid="uid://c73yk6858dmwn" path="res://tgcc/chunk/countryside/scene/chunk_country_cross_4_01.tscn" id="10_ufarv"]
[ext_resource type="PackedScene" uid="uid://cv5xmnow451kl" path="res://core/camera.tscn" id="11_o1bk6"]
[ext_resource type="Script" uid="uid://dboerd4a6dwj7" path="res://core/biome_generator/rails.gd" id="12_4is5r"]
[ext_resource type="PackedScene" uid="uid://qmt8bkiksgj3" path="res://tgcc/chunk/countryside/scene/chunk_country_cross_3_02.tscn" id="12_81wux"]
@@ -27,26 +28,11 @@
[ext_resource type="AudioStream" uid="uid://creenugno7hm" path="res://core/daynight/sounds/thunder_4.mp3" id="18_lfsx4"]
[ext_resource type="PackedScene" uid="uid://pxmcy0lhne5d" path="res://tgcc/chunk/countryside/scene/chunk_country_straight_03.tscn" id="19_ne4de"]
[ext_resource type="AudioStream" uid="uid://bm6dq4jwsbxf6" path="res://core/daynight/sounds/thunder_5.mp3" id="19_niwdr"]
[ext_resource type="PackedScene" uid="uid://bs3dkwcc8w2uk" path="res://tgcc/chunk/river/scene/chunk_river_curve_1.tscn" id="20_q6kbb"]
[ext_resource type="AudioStream" uid="uid://byuxpukhy72n8" path="res://core/daynight/sounds/rain_1.mp3" id="20_quqod"]
[ext_resource type="PackedScene" uid="uid://1c1ion0qnho4" path="res://tgcc/map/map_1/map_1.tscn" id="20_xkcqp"]
[ext_resource type="PackedScene" uid="uid://btipd6wev016d" path="res://tgcc/chunk/river/scene/chunk_river_straight_1.tscn" id="21_81wux"]
[ext_resource type="AudioStream" uid="uid://h5yhjn1x3f4j" path="res://core/daynight/sounds/rain_2.mp3" id="21_appab"]
[ext_resource type="PackedScene" uid="uid://deaxxlxdipqvx" path="res://tgcc/chunk/river/scene/chunk_river_end_1.tscn" id="21_ky1rt"]
[ext_resource type="PackedScene" uid="uid://ct3084nflycla" path="res://tgcc/chunk/river/scene/chunk_river_mix1_1.tscn" id="22_5g563"]
[ext_resource type="AudioStream" uid="uid://elrjw0smm0cj" path="res://core/daynight/sounds/rain_3.mp3" id="22_yime3"]
[ext_resource type="Script" uid="uid://cx2tlvxhvatj5" path="res://docs/museums/daynight/control.gd" id="23_ou3jn"]
[ext_resource type="PackedScene" uid="uid://bhvmmw8d8vns5" path="res://tgcc/chunk/river/scene/chunk_river_mix2_1.tscn" id="23_tbmwr"]
[ext_resource type="PackedScene" uid="uid://cqe4t842io22i" path="res://tgcc/chunk/river/scene/chunk_river_cross_1.tscn" id="24_ne4de"]
[ext_resource type="PackedScene" uid="uid://rjvefmcd4bpo" path="res://tgcc/chunk/river/scene/chunk_river_mix3_1.tscn" id="25_5g563"]
[ext_resource type="PackedScene" uid="uid://c6vpwol3k384y" path="res://tgcc/chunk/river/scene/chunk_river_mix4_1.tscn" id="26_7ykwn"]
[ext_resource type="PackedScene" uid="uid://cd3iyj71hkgcr" path="res://tgcc/chunk/river/scene/chunk_river_mix5_1.tscn" id="27_d1gyr"]
[ext_resource type="PackedScene" uid="uid://bh8kbw07bsu6n" path="res://tgcc/chunk/river/scene/chunk_river_mix6_1.tscn" id="28_3ldqx"]
[ext_resource type="PackedScene" uid="uid://ce6qvpb27fdpo" path="res://tgcc/chunk/river/scene/chunk_river_curve_2.tscn" id="29_d1gyr"]
[ext_resource type="PackedScene" uid="uid://7063xk3bwboc" path="res://tgcc/chunk/river/scene/chunk_river_straight_4.tscn" id="30_3ldqx"]
[ext_resource type="PackedScene" uid="uid://ccgd3uy68r88h" path="res://tgcc/chunk/river/scene/chunk_river_curve_3.tscn" id="31_dsw5k"]
[ext_resource type="PackedScene" uid="uid://mpgyaho52lii" path="res://tgcc/chunk/river/scene/chunk_river_straight_5.tscn" id="32_03yl6"]
[ext_resource type="PackedScene" uid="uid://q26mkh3cupic" path="res://tgcc/chunk/river/scene/chunk_river_cross_2.tscn" id="33_rlemp"]
[sub_resource type="FastNoiseLite" id="FastNoiseLite_wjpfq"]
fractal_lacunarity = 1.915
@@ -126,7 +112,7 @@ compositor_effects = Array[CompositorEffect]([SubResource("CompositorEffect_q52t
[sub_resource type="Resource" id="Resource_3qrd0"]
script = ExtResource("6_s3jnv")
name = "countryside"
available_chunks = Array[PackedScene]([ExtResource("7_xgfli"), ExtResource("10_ufarv"), ExtResource("9_q6kbb"), ExtResource("7_4elh6"), ExtResource("8_hvd8d"), ExtResource("12_81wux"), ExtResource("13_1ugwu"), ExtResource("10_ufarv"), ExtResource("15_ky1rt"), ExtResource("16_5g563"), ExtResource("17_tbmwr"), ExtResource("9_51cxd"), ExtResource("19_ne4de"), ExtResource("20_q6kbb"), ExtResource("21_81wux"), ExtResource("21_ky1rt"), ExtResource("22_5g563"), ExtResource("23_tbmwr"), ExtResource("24_ne4de"), ExtResource("25_5g563"), ExtResource("26_7ykwn"), ExtResource("27_d1gyr"), ExtResource("28_3ldqx"), ExtResource("29_d1gyr"), ExtResource("30_3ldqx"), ExtResource("31_dsw5k"), ExtResource("32_03yl6"), ExtResource("33_rlemp")])
available_chunks = Array[PackedScene]([ExtResource("7_xgfli"), ExtResource("8_nurqm"), ExtResource("9_q6kbb"), ExtResource("7_4elh6"), ExtResource("8_hvd8d"), ExtResource("12_81wux"), ExtResource("13_1ugwu"), ExtResource("10_ufarv"), ExtResource("15_ky1rt"), ExtResource("16_5g563"), ExtResource("17_tbmwr"), ExtResource("9_51cxd"), ExtResource("19_ne4de")])
metadata/_custom_type_script = "uid://wv6kcqkibium"
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_pypsn"]
@@ -185,30 +171,6 @@ shadow_blur = 0.5
directional_shadow_mode = 0
directional_shadow_max_distance = 200.0
[node name="MainMap" parent="." unique_id=1895741703 instance=ExtResource("20_xkcqp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 280, 0, 0)
[node name="rail" type="Path3D" parent="." unique_id=1795138464 node_paths=PackedStringArray("cameras")]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 270, 2, -0.101)
curve = SubResource("Curve3D_ndco5")
script = ExtResource("12_4is5r")
train_model = ExtResource("13_5rdtm")
cameras = NodePath("../cameras")
sleepers_model = ExtResource("14_ahang")
fireworks_scene = ExtResource("15_atdal")
[node name="Marker3D" type="Marker3D" parent="rail" unique_id=1460318018]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.7581053, -1.6046681, 59.658325)
[node name="Marker3D2" type="Marker3D" parent="rail" unique_id=131965864]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 127.14737, 0, 169.44846)
[node name="Marker3D3" type="Marker3D" parent="rail" unique_id=492991547]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -91.191925, 0, 539.03174)
[node name="Marker3D4" type="Marker3D" parent="rail" unique_id=1550097358]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -312.19193, 0, 349.03174)
[node name="Control" type="Control" parent="." unique_id=630650980]
layout_mode = 3
anchors_preset = 0
@@ -247,9 +209,9 @@ text = "Rain"
[node name="Wind" type="CheckButton" parent="Control" unique_id=1013004982]
layout_mode = 0
offset_left = 8.0
offset_top = 256.0
offset_top = 231.0
offset_right = 96.0
offset_bottom = 287.0
offset_bottom = 262.0
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
@@ -261,18 +223,18 @@ text = "Wind"
[node name="WindSlider" type="HSlider" parent="Control" unique_id=28050098]
layout_mode = 0
offset_left = 103.0
offset_top = 263.0
offset_top = 238.0
offset_right = 187.0
offset_bottom = 279.0
offset_bottom = 254.0
max_value = 1.0
step = 0.01
[node name="Fireflies" type="CheckButton" parent="Control" unique_id=1046228444]
layout_mode = 0
offset_left = 8.0
offset_top = 284.0
offset_top = 259.0
offset_right = 117.0
offset_bottom = 315.0
offset_bottom = 290.0
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
@@ -391,16 +353,16 @@ text = "Shadows"
[node name="RandomWeather" type="Button" parent="Control" unique_id=1047710802]
layout_mode = 0
offset_left = 12.0
offset_top = 314.0
offset_right = 195.0
offset_bottom = 345.0
offset_top = 289.0
offset_right = 157.0
offset_bottom = 320.0
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
theme_override_colors/font_hover_color = Color(1, 1, 1, 1)
theme_override_colors/font_hover_pressed_color = Color(1, 1, 1, 1)
theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
text = "Random Weather"
text = "Random Weather (10\")"
[node name="WeatherEventLabel" type="Label" parent="Control" unique_id=641424797]
layout_mode = 0
@@ -412,33 +374,29 @@ theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
text = "Weather: Clear"
[node name="Fog" type="CheckButton" parent="Control" unique_id=2101743368]
layout_mode = 0
offset_left = 7.0
offset_top = 228.0
offset_right = 97.0
offset_bottom = 259.0
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
theme_override_colors/font_hover_color = Color(1, 1, 1, 1)
theme_override_colors/font_hover_pressed_color = Color(1, 1, 1, 1)
theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
text = "Fog"
[node name="MainMap" parent="." unique_id=1895741703 instance=ExtResource("20_xkcqp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 280, 0, 0)
[node name="UpdateRails" type="Button" parent="Control" unique_id=267134156]
layout_mode = 0
offset_left = 12.0
offset_top = 351.0
offset_right = 195.0
offset_bottom = 382.0
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
theme_override_colors/font_hover_color = Color(1, 1, 1, 1)
theme_override_colors/font_hover_pressed_color = Color(1, 1, 1, 1)
theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
text = "Update Rails"
[node name="rail" type="Path3D" parent="." unique_id=1795138464 node_paths=PackedStringArray("cameras")]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 270, 2, -0.101)
curve = SubResource("Curve3D_ndco5")
script = ExtResource("12_4is5r")
train_model = ExtResource("13_5rdtm")
cameras = NodePath("../cameras")
sleepers_model = ExtResource("14_ahang")
fireworks_scene = ExtResource("15_atdal")
[node name="Marker3D" type="Marker3D" parent="rail" unique_id=1460318018]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.7581053, -1.6046681, 59.658325)
[node name="Marker3D2" type="Marker3D" parent="rail" unique_id=131965864]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 127.14737, 0, 169.44846)
[node name="Marker3D3" type="Marker3D" parent="rail" unique_id=492991547]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -91.191925, 0, 539.03174)
[node name="Marker3D4" type="Marker3D" parent="rail" unique_id=1550097358]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -312.19193, 0, 349.03174)
[connection signal="toggled" from="Control/Snow" to="Control" method="_on_snow_toggled"]
[connection signal="toggled" from="Control/Rain" to="Control" method="_on_rain_toggled"]
@@ -453,5 +411,3 @@ text = "Update Rails"
[connection signal="toggled" from="Control/Pause" to="Control" method="_on_pause_toggled"]
[connection signal="toggled" from="Control/Shadows" to="Control" method="_on_shadows_toggled"]
[connection signal="pressed" from="Control/RandomWeather" to="Control" method="_on_random_weather_pressed"]
[connection signal="toggled" from="Control/Fog" to="Control" method="_on_fog_toggled"]
[connection signal="pressed" from="Control/UpdateRails" to="Control" method="_on_update_rails_pressed"]

View File

@@ -7,8 +7,6 @@ extends Control
@onready var wind_slider: HSlider = $WindSlider
@onready var day_time_option: OptionButton = $DayTimeOptions
var default_random_event_duration: float = 10.0
func _ready() -> void:
UIEvents.day_time_changed.connect(_on_day_time_changed)
UIEvents.day_time_option_changed.connect(_on_day_time_option_changed)
@@ -31,10 +29,7 @@ func _on_wind_slider_value_changed(value: float) -> void:
UIEvents.wind_change.emit(value)
func _on_random_weather_pressed() -> void:
var duration: float = default_random_event_duration
if day_night != null and day_night.environment_config != null:
duration = day_night.environment_config.random_event_duration
UIEvents.trigger_random_weather.emit(duration)
UIEvents.trigger_random_weather.emit(10.0)
func _on_fireflies_toggled(toggled_on: bool) -> void:
UIEvents.toggle_fireflies.emit(toggled_on)
@@ -101,9 +96,3 @@ func _on_day_time_option_changed(index: int) -> void:
func _on_option_button_item_selected(index: int) -> void:
UIEvents.time_option_item_changed.emit(index)
func _on_fog_toggled(toggled_on: bool) -> void:
UIEvents.toggle_fog.emit(toggled_on)
func _on_update_rails_pressed() -> void:
UIEvents.update_rail_chunks.emit()

View File

@@ -206,9 +206,9 @@ text = "Fireflies"
[node name="RandomWeather" type="Button" parent="Control" unique_id=1114190563]
layout_mode = 0
offset_left = 24.0
offset_top = 157.0
offset_right = 207.0
offset_bottom = 188.0
offset_top = 121.0
offset_right = 169.0
offset_bottom = 152.0
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
@@ -244,9 +244,9 @@ text = "Storm"
[node name="DayTimeLabel" type="Label" parent="Control" unique_id=1673596218]
layout_mode = 0
offset_left = 26.0
offset_top = 211.0
offset_top = 170.0
offset_right = 360.0
offset_bottom = 234.0
offset_bottom = 193.0
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
text = "Time 00:00"
@@ -254,18 +254,18 @@ text = "Time 00:00"
[node name="DayTimeSlider" type="HSlider" parent="Control" unique_id=530788076]
layout_mode = 0
offset_left = 26.0
offset_top = 235.0
offset_top = 194.0
offset_right = 205.0
offset_bottom = 251.0
offset_bottom = 210.0
max_value = 1.0
step = 0.01
[node name="DayTimeOptions" type="OptionButton" parent="Control" unique_id=1354705309]
layout_mode = 0
offset_left = 25.0
offset_top = 258.0
offset_top = 217.0
offset_right = 136.0
offset_bottom = 289.0
offset_bottom = 248.0
selected = 1
item_count = 4
popup/item_0/text = "Sunrise"
@@ -280,9 +280,9 @@ popup/item_3/id = 4
[node name="Dust" type="CheckButton" parent="Control" unique_id=2023312048]
layout_mode = 0
offset_left = 21.0
offset_top = 293.0
offset_top = 252.0
offset_right = 150.0
offset_bottom = 324.0
offset_bottom = 283.0
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
@@ -295,9 +295,9 @@ text = "Dust"
[node name="Blur" type="CheckButton" parent="Control" unique_id=1758807681]
layout_mode = 0
offset_left = 21.0
offset_top = 321.0
offset_top = 280.0
offset_right = 150.0
offset_bottom = 352.0
offset_bottom = 311.0
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
@@ -310,9 +310,9 @@ text = "Blur"
[node name="Pause" type="CheckButton" parent="Control" unique_id=156986934]
layout_mode = 0
offset_left = 212.0
offset_top = 227.0
offset_top = 186.0
offset_right = 307.0
offset_bottom = 258.0
offset_bottom = 217.0
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
@@ -324,9 +324,9 @@ text = "Pause"
[node name="Shadows" type="CheckButton" parent="Control" unique_id=1751516495]
layout_mode = 0
offset_left = 21.0
offset_top = 345.0
offset_top = 304.0
offset_right = 150.0
offset_bottom = 376.0
offset_bottom = 335.0
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
@@ -345,20 +345,6 @@ offset_bottom = 90.0
max_value = 1.0
step = 0.01
[node name="Fog" type="CheckButton" parent="Control" unique_id=24312462]
layout_mode = 0
offset_left = 20.0
offset_top = 118.0
offset_right = 110.0
offset_bottom = 149.0
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
theme_override_colors/font_hover_color = Color(1, 1, 1, 1)
theme_override_colors/font_hover_pressed_color = Color(1, 1, 1, 1)
theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
text = "Fog"
[node name="Scene" type="Node" parent="." unique_id=701973010]
[node name="chunk_country_corner_01" parent="Scene" unique_id=200417581 instance=ExtResource("14_iu8wf")]
@@ -403,7 +389,6 @@ transform = Transform3D(-0.85, 0, -1.2834644e-07, 0, 0.85, 0, 1.2834644e-07, 0,
[connection signal="toggled" from="Control/Pause" to="Control" method="_on_pause_toggled"]
[connection signal="toggled" from="Control/Shadows" to="Control" method="_on_shadows_toggled"]
[connection signal="value_changed" from="Control/WindSlider" to="Control" method="_on_wind_slider_value_changed"]
[connection signal="toggled" from="Control/Fog" to="Control" method="_on_fog_toggled"]
[editable path="Scene/chunk_country_cross3_02/PaloLuce"]
[editable path="Scene/chunk_country_end_01/PaloLuce2"]

View File

@@ -2,7 +2,7 @@
[ext_resource type="PackedScene" uid="uid://cl2ast2tk7ifw" path="res://tgcc/chunk/railway/scene/chunk_railway_curve.tscn" id="14_ttcft"]
[ext_resource type="PackedScene" uid="uid://cewdxvcpqb53f" path="res://tgcc/chunk/railway/scene/chunk_railway_station_doubleside.tscn" id="15_oi62p"]
[ext_resource type="PackedScene" uid="uid://bup6gwlxos0w2" path="res://tgcc/chunk/railway/hero/chunk_railway_station_hero.tscn" id="16_birpm"]
[ext_resource type="PackedScene" uid="uid://bup6gwlxos0w2" path="res://tgcc/chunk/railway/scene/chunk_railway_station_hero.tscn" id="16_birpm"]
[ext_resource type="PackedScene" uid="uid://d3pcshw2bioic" path="res://tgcc/chunk/railway/scene/chunk_railway_station_oneside.tscn" id="17_esgqd"]
[ext_resource type="PackedScene" uid="uid://bqxpqhla2kogq" path="res://tgcc/chunk/railway/scene/chunk_railway_straight.tscn" id="18_5ivsh"]
[ext_resource type="PackedScene" uid="uid://c3ub6rj0tlt6q" path="res://tgcc/chunk/railway/scene/chunk_railway_straight_2.tscn" id="19_yd4l5"]

View File

@@ -11,7 +11,7 @@ config_version=5
[application]
config/name="tgcc"
run/main_scene="uid://38qpxwbpvd28"
run/main_scene="uid://cae0mnf353dy3"
config/features=PackedStringArray("4.6", "Forward Plus")
run/max_fps=60
config/icon="uid://bfar1kk3pgq8f"
@@ -19,15 +19,11 @@ config/icon="uid://bfar1kk3pgq8f"
[autoload]
UIEvents="*uid://dehu28iq27mbn"
GameState="*uid://b17g2w2g101o6"
CollectionManager="*uid://c3kq1qddpm8tf"
AudioManager="*uid://dcttbbavtwtsg"
[display]
window/size/viewport_width=1920
window/size/viewport_height=1080
window/size/mode=3
window/stretch/mode="canvas_items"
window/stretch/aspect="expand"
@@ -37,39 +33,6 @@ weather_vegetables_node=""
wind_node="Materials to apply wind"
weather_node=""
[input]
photo_pan_left={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":65,"location":0,"echo":false,"script":null)
]
}
photo_pan_right={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null)
]
}
photo_pan_up={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
]
}
photo_pan_down={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
]
}
take_photo={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":70,"key_label":0,"unicode":102,"location":0,"echo":false,"script":null)
]
}
toggle_photo_mode={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":80,"key_label":0,"unicode":112,"location":0,"echo":false,"script":null)
]
}
[physics]
3d/physics_engine="Jolt Physics"
@@ -178,7 +141,3 @@ global_snow_cap_enabled={
"type": "bool",
"value": false
}
global_water_color={
"type": "color",
"value": Color(0, 0, 0, 1)
}

View File

@@ -4,14 +4,11 @@
[ext_resource type="Script" uid="uid://dg2h4kbqe8j3m" path="res://core/biome_generator/chunk_info.gd" id="2_4d433"]
[ext_resource type="Material" uid="uid://blqelpjvdv23j" path="res://tgcc/chunk/material/grassflat_chunk.tres" id="2_ewqv4"]
[ext_resource type="Material" uid="uid://4xhpd6lust7w" path="res://tgcc/chunk/material/path_chunk.tres" id="3_4d433"]
[ext_resource type="Script" uid="uid://dg6ngy4pmtsyc" path="res://core/biome_generator/prop_info.gd" id="3_ckjyx"]
[ext_resource type="Material" uid="uid://ce0bdk3mx2xao" path="res://tgcc/chunk/material/water_chunk.tres" id="4_r06ll"]
[ext_resource type="Material" uid="uid://fnjxocmx16b7" path="res://tgcc/chunk/prop/grass/grass_chunk.tres" id="5_sddh0"]
[ext_resource type="PackedScene" uid="uid://d12t04rs47jq3" path="res://tgcc/chunk/prop/tree/tree_01.tscn" id="5_y2fk3"]
[ext_resource type="Material" uid="uid://jygb1hcokks5" path="res://tgcc/chunk/prop/grass/grass_bank.tres" id="6_ckjyx"]
[ext_resource type="Material" uid="uid://bjrb33qwp1p43" path="res://tgcc/chunk/prop/grass/grass_chunk_weeds.tres" id="7_y2fk3"]
[ext_resource type="Material" uid="uid://0x17mj2v807r" path="res://tgcc/chunk/prop/grass/grass_chunk_weeds2.tres" id="8_vtfy7"]
[ext_resource type="PackedScene" uid="uid://bgb4pfflokl5s" path="res://tgcc/chunk/prop/pylon/pylon.tscn" id="10_r06ll"]
[sub_resource type="PlaneMesh" id="PlaneMesh_mm7rq"]
size = Vector2(0.5, 0.5)
@@ -46,35 +43,27 @@ size = Vector2(1, 1)
[sub_resource type="PlaneMesh" id="PlaneMesh_oviqx"]
size = Vector2(1, 1)
[node name="chunk_country_corner_01" unique_id=200417581 node_paths=PackedStringArray("connection_left", "connection_right") instance=ExtResource("1_0ffx4")]
[node name="chunk_country_corner_01" unique_id=200417581 instance=ExtResource("1_0ffx4")]
script = ExtResource("2_4d433")
south = true
west = true
have_lamppost = true
connection_left = [NodePath("PaloLuce/sx")]
connection_right = [NodePath("PaloLuce/dx")]
[node name="Prop1" type="Marker3D" parent="." index="0" unique_id=1846012620]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 2.1078086, 4.588761, 4.5396976)
script = ExtResource("3_ckjyx")
available_props = Array[PackedScene]([ExtResource("10_r06ll"), ExtResource("5_y2fk3")])
[node name="Argini_001" parent="." index="1" unique_id=1474838784]
[node name="Argini_001" parent="." index="0" unique_id=1474838784]
surface_material_override/0 = ExtResource("2_ewqv4")
[node name="Chunk_005" parent="." index="2" unique_id=844192036]
[node name="Chunk_005" parent="." index="1" unique_id=844192036]
surface_material_override/0 = ExtResource("2_ewqv4")
[node name="Chunk_036" parent="." index="3" unique_id=1584066508 groups=["weather_node"]]
[node name="Chunk_036" parent="." index="2" unique_id=1584066508 groups=["weather_node"]]
surface_material_override/0 = ExtResource("3_4d433")
[node name="Chunk_037" parent="." index="4" unique_id=1100757609 groups=["weather_node"]]
[node name="Chunk_037" parent="." index="3" unique_id=1100757609 groups=["weather_node"]]
surface_material_override/0 = ExtResource("3_4d433")
[node name="Water_003" parent="." index="5" unique_id=1047599796]
[node name="Water_003" parent="." index="4" unique_id=1047599796]
surface_material_override/0 = ExtResource("4_r06ll")
[node name="grass" type="Node3D" parent="." index="6" unique_id=924191951 groups=["weather_vegetables_node", "wind_node"]]
[node name="grass" type="Node3D" parent="." index="5" unique_id=924191951 groups=["weather_vegetables_node", "wind_node"]]
[node name="grass_plane" type="MeshInstance3D" parent="grass" index="0" unique_id=1701437548]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0)
@@ -105,7 +94,7 @@ material_override = ExtResource("8_vtfy7")
cast_shadow = 0
multimesh = SubResource("MultiMesh_sddh0")
[node name="rice" type="Node3D" parent="." index="7" unique_id=318026795 groups=["weather_vegetables_node", "wind_node"]]
[node name="rice" type="Node3D" parent="." index="6" unique_id=318026795 groups=["weather_vegetables_node", "wind_node"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -86.08408, 0, 0)
[node name="rice_plane61" type="MeshInstance3D" parent="rice" index="0" unique_id=1796062490]
@@ -917,8 +906,3 @@ transform = Transform3D(-4.371139e-08, -1, 4.371139e-08, 0, -4.371139e-08, -1, 1
cast_shadow = 0
mesh = SubResource("PlaneMesh_oviqx")
surface_material_override/0 = ExtResource("7_y2fk3")
[node name="PaloLuce" parent="." index="8" unique_id=1607500596 instance=ExtResource("10_r06ll")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.4629593, 0, -1.4456635)
[editable path="PaloLuce"]

View File

@@ -9,7 +9,6 @@
[ext_resource type="Material" uid="uid://jygb1hcokks5" path="res://tgcc/chunk/prop/grass/grass_bank.tres" id="6_jqpht"]
[ext_resource type="Material" uid="uid://bjrb33qwp1p43" path="res://tgcc/chunk/prop/grass/grass_chunk_weeds.tres" id="7_sun4k"]
[ext_resource type="Material" uid="uid://0x17mj2v807r" path="res://tgcc/chunk/prop/grass/grass_chunk_weeds2.tres" id="8_xu1ds"]
[ext_resource type="PackedScene" uid="uid://c7hdw2g6sbygr" path="res://tgcc/chunk/prop/tree/bambù/bambù.tscn" id="10_x1bjv"]
[sub_resource type="PlaneMesh" id="PlaneMesh_wt3n1"]
size = Vector2(0.5, 0.5)
@@ -52,16 +51,16 @@ script = ExtResource("2_yfmnf")
south = true
west = true
[node name="Argini" parent="." index="0" unique_id=487109030]
[node name="Argini" parent="." index="0" unique_id=357182272]
surface_material_override/0 = ExtResource("2_02qm6")
[node name="Sentieri" parent="." index="1" unique_id=320924856 groups=["weather_node"]]
[node name="Sentieri" parent="." index="1" unique_id=1704203551 groups=["weather_node"]]
surface_material_override/0 = ExtResource("3_yfmnf")
[node name="Terreno" parent="." index="2" unique_id=1980435075]
[node name="Terreno" parent="." index="2" unique_id=1478648388]
surface_material_override/0 = ExtResource("2_02qm6")
[node name="Water" parent="." index="3" unique_id=424969495]
[node name="Water" parent="." index="3" unique_id=415433510]
surface_material_override/0 = ExtResource("4_x1bjv")
[node name="grass" type="Node3D" parent="." index="4" unique_id=543668848 groups=["weather_vegetables_node", "wind_node"]]
@@ -643,315 +642,3 @@ transform = Transform3D(-4.371139e-08, -1, 4.371139e-08, 0, -4.371139e-08, -1, 1
cast_shadow = 0
mesh = SubResource("PlaneMesh_h2iw8")
surface_material_override/0 = ExtResource("7_sun4k")
[node name="Bambu" type="Node3D" parent="." index="6" unique_id=1385527421]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 40.689186, 0, 3.7492359)
[node name="Bambù15" parent="Bambu" index="0" unique_id=514636059 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, -38.31033, 0, 3.3824284)
[node name="Bambù16" parent="Bambu" index="1" unique_id=1480420907 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, -38.31033, -0.2565055, 4.251465)
[node name="Bambù21" parent="Bambu" index="2" unique_id=152072695 instance=ExtResource("10_x1bjv")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, -38.31033, 0, 5.09443)
[node name="Bambù22" parent="Bambu" index="3" unique_id=779786550 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, -38.31033, -0.3562231, 1.5652707)
[node name="Bambù23" parent="Bambu" index="4" unique_id=497536429 instance=ExtResource("10_x1bjv")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, -38.31033, 0, 2.4082358)
[node name="Bambù24" parent="Bambu" index="5" unique_id=1708521479 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, -37.989388, 4.7683716e-07, 1.7301171)
[node name="Bambù25" parent="Bambu" index="6" unique_id=1732587367 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, -37.989388, 4.7683716e-07, 2.5991538)
[node name="Bambù41" parent="Bambu" index="7" unique_id=237404877 instance=ExtResource("10_x1bjv")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, -37.989388, -0.2763033, 3.442119)
[node name="Bambù42" parent="Bambu" index="8" unique_id=1628476712 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, -37.989388, 4.7683716e-07, 2.730117)
[node name="Bambù43" parent="Bambu" index="9" unique_id=1395253232 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, -37.989388, 0.26429868, 3.5991528)
[node name="Bambù44" parent="Bambu" index="10" unique_id=2129495332 instance=ExtResource("10_x1bjv")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, -37.989388, 4.7683716e-07, 4.4421186)
[node name="Bambù45" parent="Bambu" index="11" unique_id=862005943 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.6353606, 0.043886177, -0.77096754, 0.10135725, 0.99448574, -0.026919715, 0.76553476, -0.09524688, -0.6363053, -37.15841, -0.42294633, 5.3506317)
[node name="Bambù46" parent="Bambu" index="12" unique_id=1498068833 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.20654383, -0.019007795, -0.9782527, -0.09164066, 0.99579215, 0, 0.97413635, 0.089647725, -0.20741661, -35.881065, 0, 4.905528)
[node name="Bambù47" parent="Bambu" index="13" unique_id=804073666 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.20615207, -0.022868663, -0.9782527, -0.110254735, 0.99390334, 0, 0.9722886, 0.107857, -0.20741661, -36.7312, 0.32301903, 4.725275)
[node name="Bambù48" parent="Bambu" index="14" unique_id=637975928 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.88067085, -0.10227825, -0.46255592, 0.10135726, 0.9944858, -0.026919719, 0.46275857, -0.023175985, 0.88618135, -34.30868, -0.42294633, 5.2680883)
[node name="Bambù49" parent="Bambu" index="15" unique_id=1822564689 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.99579215, 0.09164066, 0, -0.09164066, 0.99579215, 0, 0, 0, 1, -35.009045, 0, 4.1108427)
[node name="Bambù50" parent="Bambu" index="16" unique_id=23861177 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.99390334, 0.110254735, 0, -0.110254735, 0.99390334, 0, 0, 0, 1, -35.009045, 0.32301903, 4.9798784)
[node name="Bambù17" parent="Bambu" index="17" unique_id=1649546931 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, -36.41784, 0, 1.697335)
[node name="Bambù18" parent="Bambu" index="18" unique_id=1162519719 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, -36.41784, -0.2565055, 2.5663717)
[node name="Bambù26" parent="Bambu" index="19" unique_id=748140647 instance=ExtResource("10_x1bjv")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, -36.41784, 0, 3.4093368)
[node name="Bambù27" parent="Bambu" index="20" unique_id=1515557362 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, -36.41784, -0.3562231, -0.11982274)
[node name="Bambù28" parent="Bambu" index="21" unique_id=1206347038 instance=ExtResource("10_x1bjv")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, -36.41784, 0, 0.7231424)
[node name="Bambù29" parent="Bambu" index="22" unique_id=1895500093 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, -36.096897, 4.7683716e-07, 0.04502368)
[node name="Bambù30" parent="Bambu" index="23" unique_id=1816904361 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, -36.096897, 4.7683716e-07, 0.91406035)
[node name="Bambù51" parent="Bambu" index="24" unique_id=461505508 instance=ExtResource("10_x1bjv")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, -36.096897, -0.2763033, 1.7570255)
[node name="Bambù52" parent="Bambu" index="25" unique_id=245194971 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, -36.096897, 4.7683716e-07, 1.0450237)
[node name="Bambù53" parent="Bambu" index="26" unique_id=372543990 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, -36.096897, 0.26429868, 1.9140594)
[node name="Bambù54" parent="Bambu" index="27" unique_id=1593384501 instance=ExtResource("10_x1bjv")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, -36.096897, 4.7683716e-07, 2.7570255)
[node name="Bambù55" parent="Bambu" index="28" unique_id=838851368 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.6353606, 0.043886177, -0.77096754, 0.10135725, 0.99448574, -0.026919715, 0.76553476, -0.09524688, -0.6363053, -35.26592, -0.42294633, 3.6655385)
[node name="Bambù56" parent="Bambu" index="29" unique_id=1421474514 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.20654383, -0.019007795, -0.9782527, -0.09164066, 0.99579215, 0, 0.97413635, 0.089647725, -0.20741661, -33.988575, 0, 3.220435)
[node name="Bambù57" parent="Bambu" index="30" unique_id=776582209 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.20615207, -0.022868663, -0.9782527, -0.110254735, 0.99390334, 0, 0.9722886, 0.107857, -0.20741661, -34.83871, 0.32301903, 3.0401819)
[node name="Bambù58" parent="Bambu" index="31" unique_id=1984571319 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.88067085, -0.10227825, -0.46255592, 0.10135726, 0.9944858, -0.026919719, 0.46275857, -0.023175985, 0.88618135, -32.41619, -0.42294633, 3.5829952)
[node name="Bambù59" parent="Bambu" index="32" unique_id=541762193 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.99579215, 0.09164066, 0, -0.09164066, 0.99579215, 0, 0, 0, 1, -33.116554, 0, 2.4257495)
[node name="Bambù60" parent="Bambu" index="33" unique_id=817390138 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.99390334, 0.110254735, 0, -0.110254735, 0.99390334, 0, 0, 0, 1, -33.116554, 0.32301903, 3.2947853)
[node name="Bambù19" parent="Bambu" index="34" unique_id=456023603 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99893546, -0.04613013, -8.7268496e-08, -0.046085197, 0.9979625, 0.044125043, -0.0020354062, 0.044078067, -0.999026, -34.58353, 0, -0.044016123)
[node name="Bambù20" parent="Bambu" index="35" unique_id=1236938691 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.9961887, -0.0872253, -8.7422784e-08, -0.0872253, 0.9961887, 0, 8.7089575e-08, 7.625477e-09, -1, -34.58353, -0.2565055, -0.9130528)
[node name="Bambù31" parent="Bambu" index="36" unique_id=1562537746 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-1, 1.1778938e-09, -8.741484e-08, 0, 0.9999092, 0.013473534, 8.742278e-08, 0.013473534, -0.9999092, -34.58353, 0, -1.7560179)
[node name="Bambù32" parent="Bambu" index="37" unique_id=1214045855 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.9961887, -0.0872253, -8.7422784e-08, -0.0872253, 0.9961887, 0, 8.7089575e-08, 7.625477e-09, -1, -34.58353, -0.3562231, 1.7731411)
[node name="Bambù33" parent="Bambu" index="38" unique_id=1403203384 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-1, 1.1778938e-09, -8.741484e-08, 0, 0.9999092, 0.013473534, 8.742278e-08, 0.013473534, -0.9999092, -34.58353, 0, 0.9301765)
[node name="Bambù34" parent="Bambu" index="39" unique_id=1850769055 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99893546, -0.04613013, -8.7268496e-08, -0.046085197, 0.9979625, 0.044125043, -0.0020354062, 0.044078067, -0.999026, -34.904472, 4.7683716e-07, 1.6082957)
[node name="Bambù35" parent="Bambu" index="40" unique_id=1905859107 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.9961887, -0.0872253, -8.7422784e-08, -0.0872253, 0.9961887, 0, 8.7089575e-08, 7.625477e-09, -1, -34.904472, 4.7683716e-07, 0.7392585)
[node name="Bambù61" parent="Bambu" index="41" unique_id=1672384904 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-1, 1.1778938e-09, -8.741484e-08, 0, 0.9999092, 0.013473534, 8.742278e-08, 0.013473534, -0.9999092, -34.904472, -0.2763033, -0.1037066)
[node name="Bambù62" parent="Bambu" index="42" unique_id=825326507 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99893546, -0.04613013, -8.7268496e-08, -0.046085197, 0.9979625, 0.044125043, -0.0020354062, 0.044078067, -0.999026, -34.904472, 4.7683716e-07, 0.6082952)
[node name="Bambù63" parent="Bambu" index="43" unique_id=1927852527 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.9961887, -0.0872253, -8.7422784e-08, -0.0872253, 0.9961887, 0, 8.7089575e-08, 7.625477e-09, -1, -34.904472, 0.26429868, -0.26074052)
[node name="Bambù64" parent="Bambu" index="44" unique_id=1393052564 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-1, 1.1778938e-09, -8.741484e-08, 0, 0.9999092, 0.013473534, 8.742278e-08, 0.013473534, -0.9999092, -34.904472, 4.7683716e-07, -1.1037066)
[node name="Bambù65" parent="Bambu" index="45" unique_id=218922169 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.63536054, -0.04388616, 0.7709676, 0.10135724, 0.9944857, -0.026919717, -0.76553476, 0.095246874, 0.63630515, -35.73545, -0.42294633, -2.0122197)
[node name="Bambù66" parent="Bambu" index="46" unique_id=1004212493 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.20654374, 0.019007787, 0.9782527, -0.09164065, 0.99579215, -1.5453742e-09, -0.97413635, -0.08964771, 0.20741652, -37.012794, 0, -1.567116)
[node name="Bambù67" parent="Bambu" index="47" unique_id=1582717696 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.20615196, 0.022868654, 0.9782527, -0.11025474, 0.99390346, -3.3675118e-09, -0.9722887, -0.10785699, 0.20741653, -36.16266, 0.32301903, -1.386863)
[node name="Bambù68" parent="Bambu" index="48" unique_id=973884661 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.8806709, 0.10227825, 0.46255583, 0.10135725, 0.99448574, -0.026919715, -0.46275845, 0.023175973, -0.88618135, -37.691097, -0.42294633, -0.72248435)
[node name="Bambù69" parent="Bambu" index="49" unique_id=499270978 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99579215, -0.09164066, -8.742278e-08, -0.09164066, 0.99579215, 0, 8.7054914e-08, 8.011481e-09, -1, -36.990734, 0, 0.4347608)
[node name="Bambù70" parent="Bambu" index="50" unique_id=26287663 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99390334, -0.110254735, -8.742278e-08, -0.110254735, 0.99390334, 0, 8.688979e-08, 9.638775e-09, -1, -36.990734, 0.32301903, -0.43427444)
[node name="Bambù100" parent="Bambu" index="51" unique_id=242552700 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.8806709, 0.10227825, 0.46255583, 0.10135725, 0.99448574, -0.026919715, -0.46275845, 0.023175973, -0.88618135, -34.035736, -0.42294633, 1.3774025)
[node name="Bambù101" parent="Bambu" index="52" unique_id=1626955951 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99579215, -0.09164066, -8.742278e-08, -0.09164066, 0.99579215, 0, 8.7054914e-08, 8.011481e-09, -1, -33.335373, 0, 2.5346477)
[node name="Bambù102" parent="Bambu" index="53" unique_id=1549413066 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99390334, -0.110254735, -8.742278e-08, -0.110254735, 0.99390334, 0, 8.688979e-08, 9.638775e-09, -1, -33.335373, 0.32301903, 1.6656125)
[node name="Bambù103" parent="Bambu" index="54" unique_id=1338645337 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.8806709, 0.10227825, 0.46255583, 0.10135725, 0.99448574, -0.026919715, -0.46275845, 0.023175973, -0.88618135, -34.06166, -0.42294633, 3.632837)
[node name="Bambù104" parent="Bambu" index="55" unique_id=1131209096 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99579215, -0.09164066, -8.742278e-08, -0.09164066, 0.99579215, 0, 8.7054914e-08, 8.011481e-09, -1, -33.361298, 0, 4.790082)
[node name="Bambù105" parent="Bambu" index="56" unique_id=1653167272 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99390334, -0.110254735, -8.742278e-08, -0.110254735, 0.99390334, 0, 8.688979e-08, 9.638775e-09, -1, -33.361298, 0.32301903, 3.921047)
[node name="Bambù106" parent="Bambu" index="57" unique_id=1671720951 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.8806709, 0.10227825, 0.46255583, 0.10135725, 0.99448574, -0.026919715, -0.46275845, 0.023175973, -0.88618135, -32.84321, -0.42294633, 0.65151525)
[node name="Bambù107" parent="Bambu" index="58" unique_id=221072840 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99579215, -0.09164066, -8.742278e-08, -0.09164066, 0.99579215, 0, 8.7054914e-08, 8.011481e-09, -1, -32.142845, 0, 1.8087604)
[node name="Bambù108" parent="Bambu" index="59" unique_id=1620976585 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99390334, -0.110254735, -8.742278e-08, -0.110254735, 0.99390334, 0, 8.688979e-08, 9.638775e-09, -1, -32.142845, 0.32301903, 0.93972516)
[node name="Bambù109" parent="Bambu" index="60" unique_id=836783603 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.8806709, 0.10227825, 0.46255583, 0.10135725, 0.99448574, -0.026919715, -0.46275845, 0.023175973, -0.88618135, -32.869133, -0.42294633, 4.0217037)
[node name="Bambù110" parent="Bambu" index="61" unique_id=251286294 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99579215, -0.09164066, -8.742278e-08, -0.09164066, 0.99579215, 0, 8.7054914e-08, 8.011481e-09, -1, -32.16877, 0, 5.1789484)
[node name="Bambù111" parent="Bambu" index="62" unique_id=196602680 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99390334, -0.110254735, -8.742278e-08, -0.110254735, 0.99390334, 0, 8.688979e-08, 9.638775e-09, -1, -32.16877, 0.32301903, 4.3099127)
[node name="Bambù112" parent="Bambu" index="63" unique_id=967443532 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.8806709, 0.10227825, 0.46255583, 0.10135725, 0.99448574, -0.026919715, -0.46275845, 0.023175973, -0.88618135, -32.869133, -0.42294633, -0.97829604)
[node name="Bambù113" parent="Bambu" index="64" unique_id=1482031422 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99579215, -0.09164066, -8.742278e-08, -0.09164066, 0.99579215, 0, 8.7054914e-08, 8.011481e-09, -1, -32.16877, 0, 0.17894864)
[node name="Bambù114" parent="Bambu" index="65" unique_id=1379389822 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99390334, -0.110254735, -8.742278e-08, -0.110254735, 0.99390334, 0, 8.688979e-08, 9.638775e-09, -1, -32.16877, 0.32301903, -0.6900871)
[node name="Bambù115" parent="Bambu" index="66" unique_id=975304912 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.015310675, 0.028615177, 0.9994732, 0.101357244, 0.9944857, -0.026919713, -0.99473214, 0.1008917, -0.018126577, -31.591593, -0.42294633, -2.9296694)
[node name="Bambù116" parent="Bambu" index="67" unique_id=2135974183 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.47670823, -0.043870457, 0.87796617, -0.09164066, 0.99579215, -8.881784e-16, -0.8742718, -0.0804574, -0.47872263, -32.272335, 0, -1.760775)
[node name="Bambù117" parent="Bambu" index="68" unique_id=478364536 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.47580403, -0.052781433, 0.87796617, -0.110254735, 0.99390334, 0, -0.8726135, -0.096799925, -0.47872263, -31.509352, 0.32301903, -2.1768017)
[node name="Bambù36" parent="Bambu" index="69" unique_id=758304427 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99893546, -0.04613013, -8.7268496e-08, -0.046085197, 0.9979625, 0.044125043, -0.0020354062, 0.044078067, -0.999026, -33.26138, 0, -1.4439404)
[node name="Bambù37" parent="Bambu" index="70" unique_id=1213919388 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.9961887, -0.0872253, -8.7422784e-08, -0.0872253, 0.9961887, 0, 8.7089575e-08, 7.625477e-09, -1, -33.26138, -0.2565055, -2.312977)
[node name="Bambù38" parent="Bambu" index="71" unique_id=986726857 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-1, 1.1778938e-09, -8.741484e-08, 0, 0.9999092, 0.013473534, 8.742278e-08, 0.013473534, -0.9999092, -33.26138, 0, -3.1559422)
[node name="Bambù39" parent="Bambu" index="72" unique_id=1350182591 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.9961887, -0.0872253, -8.7422784e-08, -0.0872253, 0.9961887, 0, 8.7089575e-08, 7.625477e-09, -1, -33.26138, -0.3562231, 0.37321687)
[node name="Bambù40" parent="Bambu" index="73" unique_id=100164560 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-1, 1.1778938e-09, -8.741484e-08, 0, 0.9999092, 0.013473534, 8.742278e-08, 0.013473534, -0.9999092, -33.26138, 0, -0.46974778)
[node name="Bambù71" parent="Bambu" index="74" unique_id=233601894 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99893546, -0.04613013, -8.7268496e-08, -0.046085197, 0.9979625, 0.044125043, -0.0020354062, 0.044078067, -0.999026, -33.58232, 4.7683716e-07, 0.2083714)
[node name="Bambù72" parent="Bambu" index="75" unique_id=1557143999 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.9961887, -0.0872253, -8.7422784e-08, -0.0872253, 0.9961887, 0, 8.7089575e-08, 7.625477e-09, -1, -33.58232, 4.7683716e-07, -0.66066575)
[node name="Bambù73" parent="Bambu" index="76" unique_id=1199352277 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-1, 1.1778938e-09, -8.741484e-08, 0, 0.9999092, 0.013473534, 8.742278e-08, 0.013473534, -0.9999092, -33.58232, -0.2763033, -1.5036309)
[node name="Bambù74" parent="Bambu" index="77" unique_id=962740386 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99893546, -0.04613013, -8.7268496e-08, -0.046085197, 0.9979625, 0.044125043, -0.0020354062, 0.044078067, -0.999026, -33.58232, 4.7683716e-07, -0.7916291)
[node name="Bambù75" parent="Bambu" index="78" unique_id=1175179469 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.9961887, -0.0872253, -8.7422784e-08, -0.0872253, 0.9961887, 0, 8.7089575e-08, 7.625477e-09, -1, -33.58232, 0.26429868, -1.6606648)
[node name="Bambù76" parent="Bambu" index="79" unique_id=1994616556 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-1, 1.1778938e-09, -8.741484e-08, 0, 0.9999092, 0.013473534, 8.742278e-08, 0.013473534, -0.9999092, -33.58232, 4.7683716e-07, -2.5036309)
[node name="Bambù77" parent="Bambu" index="80" unique_id=274474376 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.63536054, -0.04388616, 0.7709676, 0.10135724, 0.9944857, -0.026919717, -0.76553476, 0.095246874, 0.63630515, -34.4133, -0.42294633, -3.412144)
[node name="Bambù78" parent="Bambu" index="81" unique_id=99925458 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.20654374, 0.019007787, 0.9782527, -0.09164065, 0.99579215, -1.5453742e-09, -0.97413635, -0.08964771, 0.20741652, -35.690643, 0, -2.9670403)
[node name="Bambù79" parent="Bambu" index="82" unique_id=2061154476 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.20615196, 0.022868654, 0.9782527, -0.11025474, 0.99390346, -3.3675118e-09, -0.9722887, -0.10785699, 0.20741653, -34.840508, 0.32301903, -2.7867873)
[node name="Bambù80" parent="Bambu" index="83" unique_id=662645315 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.8806709, 0.10227825, 0.46255583, 0.10135725, 0.99448574, -0.026919715, -0.46275845, 0.023175973, -0.88618135, -37.263027, -0.42294633, -3.3296)
[node name="Bambù81" parent="Bambu" index="84" unique_id=1672022163 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99579215, -0.09164066, -8.742278e-08, -0.09164066, 0.99579215, 0, 8.7054914e-08, 8.011481e-09, -1, -36.562664, 0, -2.172355)
[node name="Bambù82" parent="Bambu" index="85" unique_id=1830293455 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99390334, -0.110254735, -8.742278e-08, -0.110254735, 0.99390334, 0, 8.688979e-08, 9.638775e-09, -1, -36.562664, 0.32301903, -3.0413902)
[node name="Bambù83" parent="Bambu" index="86" unique_id=1745614643 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99893546, -0.04613013, -8.7268496e-08, -0.046085197, 0.9979625, 0.044125043, -0.0020354062, 0.044078067, -0.999026, -32.40587, -0.15795898, -3.0512614)
[node name="Bambù84" parent="Bambu" index="87" unique_id=1417946289 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.9961887, -0.0872253, -8.7422784e-08, -0.0872253, 0.9961887, 0, 8.7089575e-08, 7.625477e-09, -1, -32.40587, -0.41446447, -3.920298)
[node name="Bambù85" parent="Bambu" index="88" unique_id=706143232 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-1, 1.1778938e-09, -8.741484e-08, 0, 0.9999092, 0.013473534, 8.742278e-08, 0.013473534, -0.9999092, -32.40587, -0.15795898, -4.763263)
[node name="Bambù86" parent="Bambu" index="89" unique_id=929818396 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.9961887, -0.0872253, -8.7422784e-08, -0.0872253, 0.9961887, 0, 8.7089575e-08, 7.625477e-09, -1, -32.40587, -0.5141821, -1.2341042)
[node name="Bambù87" parent="Bambu" index="90" unique_id=1421223174 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-1, 1.1778938e-09, -8.741484e-08, 0, 0.9999092, 0.013473534, 8.742278e-08, 0.013473534, -0.9999092, -32.40587, -0.15795898, -2.0770688)
[node name="Bambù88" parent="Bambu" index="91" unique_id=3127006 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99893546, -0.04613013, -8.7268496e-08, -0.046085197, 0.9979625, 0.044125043, -0.0020354062, 0.044078067, -0.999026, -32.726814, -0.15795851, -1.3989496)
[node name="Bambù89" parent="Bambu" index="92" unique_id=267111895 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.9961887, -0.0872253, -8.7422784e-08, -0.0872253, 0.9961887, 0, 8.7089575e-08, 7.625477e-09, -1, -32.726814, -0.15795851, -2.2679868)
[node name="Bambù90" parent="Bambu" index="93" unique_id=1039626904 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-1, 1.1778938e-09, -8.741484e-08, 0, 0.9999092, 0.013473534, 8.742278e-08, 0.013473534, -0.9999092, -32.726814, -0.43426228, -3.110952)
[node name="Bambù91" parent="Bambu" index="94" unique_id=1994168253 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99893546, -0.04613013, -8.7268496e-08, -0.046085197, 0.9979625, 0.044125043, -0.0020354062, 0.044078067, -0.999026, -32.726814, -0.15795851, -2.39895)
[node name="Bambù92" parent="Bambu" index="95" unique_id=187305983 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.9961887, -0.0872253, -8.7422784e-08, -0.0872253, 0.9961887, 0, 8.7089575e-08, 7.625477e-09, -1, -32.726814, 0.10633969, -3.2679858)
[node name="Bambù93" parent="Bambu" index="96" unique_id=1879946930 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-1, 1.1778938e-09, -8.741484e-08, 0, 0.9999092, 0.013473534, 8.742278e-08, 0.013473534, -0.9999092, -32.726814, -0.15795851, -4.110952)
[node name="Bambù94" parent="Bambu" index="97" unique_id=696009367 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.63536054, -0.04388616, 0.7709676, 0.10135724, 0.9944857, -0.026919717, -0.76553476, 0.095246874, 0.63630515, -33.557793, -0.5809053, -5.019465)
[node name="Bambù95" parent="Bambu" index="98" unique_id=1606460467 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.20654374, 0.019007787, 0.9782527, -0.09164065, 0.99579215, -1.5453742e-09, -0.97413635, -0.08964771, 0.20741652, -34.835136, -0.15795898, -4.5743613)
[node name="Bambù96" parent="Bambu" index="99" unique_id=602620642 instance=ExtResource("10_x1bjv")]
transform = Transform3D(0.20615196, 0.022868654, 0.9782527, -0.11025474, 0.99390346, -3.3675118e-09, -0.9722887, -0.10785699, 0.20741653, -33.985, 0.16506004, -4.3941083)
[node name="Bambù97" parent="Bambu" index="100" unique_id=1445277351 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.8806709, 0.10227825, 0.46255583, 0.10135725, 0.99448574, -0.026919715, -0.46275845, 0.023175973, -0.88618135, -36.407516, -0.5809053, -4.936921)
[node name="Bambù98" parent="Bambu" index="101" unique_id=421197506 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99579215, -0.09164066, -8.742278e-08, -0.09164066, 0.99579215, 0, 8.7054914e-08, 8.011481e-09, -1, -35.707153, -0.15795898, -3.779676)
[node name="Bambù99" parent="Bambu" index="102" unique_id=1720440871 instance=ExtResource("10_x1bjv")]
transform = Transform3D(-0.99390334, -0.110254735, -8.742278e-08, -0.110254735, 0.99390334, 0, 8.688979e-08, 9.638775e-09, -1, -35.707153, 0.16506004, -4.648711)

View File

@@ -18,9 +18,7 @@
[ext_resource type="Material" uid="uid://f5uoreickew7" path="res://tgcc/chunk/prop/flower/flower.tres" id="12_5yfr5"]
[ext_resource type="PackedScene" uid="uid://d12t04rs47jq3" path="res://tgcc/chunk/prop/tree/tree_01.tscn" id="18_fqrww"]
[ext_resource type="Shader" uid="uid://cs0xl7pc6e26h" path="res://core/daynight/tree_leaves.gdshader" id="19_s7klq"]
[ext_resource type="PackedScene" uid="uid://bgb4pfflokl5s" path="res://tgcc/chunk/prop/pylon/pylon.tscn" id="20_fqrww"]
[ext_resource type="Texture2D" uid="uid://c3grftlmap4q5" path="res://tgcc/chunk/prop/tree/leaf1_alpha.png" id="20_q66oc"]
[ext_resource type="PackedScene" uid="uid://5ap10ax3lnr7" path="res://tgcc/chunk/prop/vending machine/vending_machine_1.tscn" id="21_s7klq"]
[sub_resource type="PlaneMesh" id="PlaneMesh_fqrww"]
size = Vector2(0.5, 0.5)
@@ -74,84 +72,71 @@ shader_parameter/light_steps = 10.0
shader_parameter/random_mix = 0.0
shader_parameter/cast_shadow_strength = 0.0
shader_parameter/wetness_darkening = 0.25
shader_parameter/snow_visibility = 1.0
[sub_resource type="Gradient" id="Gradient_5yfr5"]
offsets = PackedFloat32Array(1, 1)
colors = PackedColorArray(0, 0, 0, 0.5882353, 0, 0, 0, 0)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_fqrww"]
gradient = SubResource("Gradient_5yfr5")
fill = 2
fill_from = Vector2(0.5, 0.5)
[node name="chunk_country_corner_03" unique_id=1046737870 node_paths=PackedStringArray("connection_left", "connection_right") instance=ExtResource("1_jemyf")]
[node name="chunk_country_corner_03" unique_id=1046737870 instance=ExtResource("1_jemyf")]
script = ExtResource("2_ejpey")
south = true
west = true
have_lamppost = true
connection_left = [NodePath("PaloLuce/sx")]
connection_right = [NodePath("PaloLuce/dx")]
[node name="Cavi_001" parent="." index="0" unique_id=1776585264]
[node name="Cavi_001" parent="." index="0" unique_id=1489236714]
surface_material_override/0 = ExtResource("2_skxxm")
[node name="Cube_227" parent="." index="1" unique_id=2133644431]
[node name="Cube_227" parent="." index="1" unique_id=1343854496]
surface_material_override/0 = ExtResource("3_xcce4")
surface_material_override/1 = ExtResource("4_w66q1")
[node name="Flower_003" parent="." index="2" unique_id=895385463]
[node name="Flower_003" parent="." index="2" unique_id=588414494]
visible = false
[node name="FlowerG" parent="." index="3" unique_id=271983880]
[node name="FlowerG" parent="." index="3" unique_id=1148144861]
visible = false
[node name="Grass_004" parent="." index="4" unique_id=433080384]
[node name="Grass_004" parent="." index="4" unique_id=1413022109]
surface_material_override/0 = ExtResource("5_rqsxa")
[node name="House_M_4" parent="." index="5" unique_id=1042574904 groups=["weather_node"]]
[node name="House_M_4" parent="." index="5" unique_id=846909534 groups=["weather_node"]]
[node name="House_M_4|Cube_357|Dupli|" parent="House_M_4" index="0" unique_id=374531053]
[node name="House_M_4|Cube_357|Dupli|" parent="House_M_4" index="0" unique_id=1022330799]
surface_material_override/0 = ExtResource("6_333a0")
surface_material_override/1 = ExtResource("4_w66q1")
[node name="House_M_4_001" parent="." index="6" unique_id=1658008130 groups=["weather_node"]]
[node name="House_M_4_001" parent="." index="6" unique_id=2014179807 groups=["weather_node"]]
[node name="House_M_4_001|Cube_357|Dupli|" parent="House_M_4_001" index="0" unique_id=2144242896]
[node name="House_M_4_001|Cube_357|Dupli|" parent="House_M_4_001" index="0" unique_id=1963982809]
surface_material_override/0 = ExtResource("6_333a0")
surface_material_override/1 = ExtResource("4_w66q1")
[node name="Lanterne_001" parent="." index="7" unique_id=267697647]
[node name="Lanterne_001" parent="." index="7" unique_id=877080306]
surface_material_override/0 = ExtResource("4_w66q1")
surface_material_override/1 = ExtResource("6_333a0")
[node name="MSH_Staccioanta_1_001" parent="." index="8" unique_id=1657352292]
[node name="MSH_Staccioanta_1_001" parent="." index="8" unique_id=2137478487]
surface_material_override/0 = ExtResource("7_333a0")
[node name="Palo_001" parent="." index="9" unique_id=910139738]
[node name="Palo_001" parent="." index="9" unique_id=1395117968]
visible = false
surface_material_override/0 = ExtResource("8_cbpyt")
surface_material_override/1 = ExtResource("8_tnnlv")
[node name="Panchine_001" parent="." index="10" unique_id=1603364499 groups=["weather_node"]]
[node name="Panchine_001" parent="." index="10" unique_id=1252724017 groups=["weather_node"]]
surface_material_override/0 = ExtResource("7_333a0")
[node name="Rocks" parent="." index="11" unique_id=533371511 groups=["weather_node"]]
[node name="Rocks" parent="." index="11" unique_id=395080391 groups=["weather_node"]]
surface_material_override/0 = ExtResource("8_cbpyt")
surface_material_override/1 = ExtResource("3_xcce4")
surface_material_override/2 = ExtResource("3_xcce4")
[node name="Santuario" parent="." index="12" unique_id=1486207544 groups=["weather_node"]]
[node name="Santuario" parent="." index="12" unique_id=1075151573 groups=["weather_node"]]
surface_material_override/0 = ExtResource("8_tnnlv")
surface_material_override/1 = ExtResource("3_xcce4")
[node name="Strada" parent="." index="13" unique_id=452244546 groups=["weather_node"]]
[node name="Strada" parent="." index="13" unique_id=1300376742 groups=["weather_node"]]
surface_material_override/0 = ExtResource("11_5yfr5")
[node name="Terreno_002" parent="." index="14" unique_id=1020879859 groups=["weather_node"]]
[node name="Terreno_002" parent="." index="14" unique_id=1672498777 groups=["weather_node"]]
surface_material_override/0 = ExtResource("11_5yfr5")
[node name="tree_PH" parent="." index="15" unique_id=1550954564 groups=["weather_node", "wind_node"]]
[node name="tree_PH" parent="." index="15" unique_id=850970876 groups=["weather_node", "wind_node"]]
visible = false
[node name="grass" type="Node3D" parent="." index="16" unique_id=607638887 groups=["weather_vegetables_node", "wind_node"]]
@@ -201,316 +186,21 @@ multimesh = SubResource("MultiMesh_mkuur")
[node name="TreeTest3" parent="." index="18" unique_id=1532527216 instance=ExtResource("18_fqrww")]
transform = Transform3D(-0.13587202, 0, -0.8694474, 0, 0.88, 0, 0.8694474, 0, -0.13587202, 5.7668495, -0.16967964, -8.851597)
[node name="MultiMeshInstance3D" parent="TreeTest3/Leaf" parent_id_path=PackedInt32Array(1532527216, 2098078578) index="0" unique_id=153924119]
[node name="MultiMeshInstance3D" parent="TreeTest3/Leaf" parent_id_path=PackedInt32Array(1532527216, 2028330452) index="0" unique_id=153924119]
material_override = SubResource("ShaderMaterial_mkuur")
[node name="TreeTest4" parent="." index="19" unique_id=523194273 instance=ExtResource("18_fqrww")]
transform = Transform3D(0.5726346, 0, 0.6681987, 0, 0.8800001, 0, -0.6681987, 0, 0.5726346, 8.081164, -0.16967964, -5.0532355)
[node name="MultiMeshInstance3D" parent="TreeTest4/Leaf" parent_id_path=PackedInt32Array(523194273, 2098078578) index="0" unique_id=153924119]
[node name="MultiMeshInstance3D" parent="TreeTest4/Leaf" parent_id_path=PackedInt32Array(523194273, 2028330452) index="0" unique_id=153924119]
material_override = SubResource("ShaderMaterial_mkuur")
[node name="TreeTest5" parent="." index="20" unique_id=1732926892 instance=ExtResource("18_fqrww")]
transform = Transform3D(0.65072113, 0, 0.7593168, 0, 1, 0, -0.7593168, 0, 0.65072113, -6.0227623, -0.16967964, 5.4480567)
[node name="MultiMeshInstance3D" parent="TreeTest5/Leaf" parent_id_path=PackedInt32Array(1732926892, 2098078578) index="0" unique_id=153924119]
[node name="MultiMeshInstance3D" parent="TreeTest5/Leaf" parent_id_path=PackedInt32Array(1732926892, 2028330452) index="0" unique_id=153924119]
material_override = SubResource("ShaderMaterial_mkuur")
[node name="shadow" type="Node3D" parent="." index="21" unique_id=889585033]
[node name="Decal" type="Decal" parent="shadow" index="0" unique_id=1397107284]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.330791, 0.118, 4.2886734)
size = Vector3(6.375206, 0.5, 10.401308)
texture_albedo = SubResource("GradientTexture2D_fqrww")
[node name="Decal2" type="Decal" parent="shadow" index="1" unique_id=1402560073]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -4.3971567, 0.118, -6.4218)
size = Vector3(6.375206, 0.5, 10.401308)
texture_albedo = SubResource("GradientTexture2D_fqrww")
[node name="light" type="Node3D" parent="." index="22" unique_id=2139897359]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -24.189697, 0, 26.182838)
[node name="OmniLight3D24" type="OmniLight3D" parent="light" index="0" unique_id=394427892]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 17.771463, 1.6665113, -30.424273)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D27" type="OmniLight3D" parent="light" index="1" unique_id=533010245]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 19.76046, 1.6665113, -30.424273)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D28" type="OmniLight3D" parent="light" index="2" unique_id=352589915]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 21.742308, 1.6665113, -30.424273)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D29" type="OmniLight3D" parent="light" index="3" unique_id=537871599]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 17.790565, 1.6665113, -34.74778)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D30" type="OmniLight3D" parent="light" index="4" unique_id=58886502]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 19.779562, 1.6665113, -34.74778)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D31" type="OmniLight3D" parent="light" index="5" unique_id=1729443245]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 21.76141, 1.6665113, -34.74778)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D25" type="OmniLight3D" parent="light" index="6" unique_id=1404898221]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 15.58135, 1.6665113, -32.59843)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D32" type="OmniLight3D" parent="light" index="7" unique_id=1722040258]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 24.014132, 1.6665113, -32.626106)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D37" type="OmniLight3D" parent="light" index="8" unique_id=725743884]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 28.33574, 1.6665113, -23.86904)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D38" type="OmniLight3D" parent="light" index="9" unique_id=1106424157]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 28.33574, 1.6665113, -21.880045)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D39" type="OmniLight3D" parent="light" index="10" unique_id=944788080]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 28.33574, 1.6665113, -19.898195)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D40" type="OmniLight3D" parent="light" index="11" unique_id=1308343844]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 32.65925, 1.6665113, -23.84994)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D41" type="OmniLight3D" parent="light" index="12" unique_id=1079966604]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 32.65925, 1.6665113, -21.86094)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D42" type="OmniLight3D" parent="light" index="13" unique_id=1988284193]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 32.65925, 1.6665113, -19.879095)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D43" type="OmniLight3D" parent="light" index="14" unique_id=1412545630]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 30.5099, 1.6665113, -26.059153)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D44" type="OmniLight3D" parent="light" index="15" unique_id=165754334]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 30.537575, 1.6665113, -17.626371)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D26" type="OmniLight3D" parent="light" index="16" unique_id=1767599228]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 25.238956, 1.5113132, -34.584232)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D36" type="OmniLight3D" parent="light" index="17" unique_id=1750047436]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 25.238956, 1.5113132, -30.585411)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D33" type="OmniLight3D" parent="light" index="18" unique_id=1648463917]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 24.95372, 3.3977997, -31.297941)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D34" type="OmniLight3D" parent="light" index="19" unique_id=896020992]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 29.219215, 3.3977997, -26.916061)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D35" type="OmniLight3D" parent="light" index="20" unique_id=918128049]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 27.051067, 3.3234632, -29.109875)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="PaloLuce" parent="." index="23" unique_id=1607500596 instance=ExtResource("20_fqrww")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.9962759, 0, -1.8516524)
[node name="VendingMachine_1" parent="." index="24" unique_id=1157270784 instance=ExtResource("21_s7klq")]
transform = Transform3D(-1, 0, 8.742278e-08, 0, 1, 0, -8.742278e-08, 0, -1, 0.91498923, 0, -0.5683732)
[editable path="TreeTest3"]
[editable path="TreeTest4"]
[editable path="TreeTest5"]
[editable path="PaloLuce"]

View File

@@ -10,10 +10,6 @@
[ext_resource type="Material" uid="uid://jygb1hcokks5" path="res://tgcc/chunk/prop/grass/grass_bank.tres" id="7_fspb5"]
[ext_resource type="Material" uid="uid://bjrb33qwp1p43" path="res://tgcc/chunk/prop/grass/grass_chunk_weeds.tres" id="8_uik3j"]
[ext_resource type="Material" uid="uid://0x17mj2v807r" path="res://tgcc/chunk/prop/grass/grass_chunk_weeds2.tres" id="9_52lxu"]
[ext_resource type="PackedScene" uid="uid://c7hdw2g6sbygr" path="res://tgcc/chunk/prop/tree/bambù/bambù.tscn" id="11_s0twx"]
[ext_resource type="PackedScene" uid="uid://dluogg3j2kcgs" path="res://tgcc/chunk/prop/Tori/tori.tscn" id="12_on7te"]
[ext_resource type="PackedScene" uid="uid://be1px5nxfr4hs" path="res://tgcc/chunk/prop/scarecrow/scarecrow.tscn" id="13_fspb5"]
[ext_resource type="Shader" uid="uid://d0ch5ofrgf7y6" path="res://core/daynight/trunk_shader.gdshader" id="14_uik3j"]
[sub_resource type="PlaneMesh" id="PlaneMesh_piek1"]
size = Vector2(0.5, 0.5)
@@ -51,68 +47,26 @@ size = Vector2(1, 1)
[sub_resource type="PlaneMesh" id="PlaneMesh_x3b0m"]
size = Vector2(1, 1)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_52lxu"]
render_priority = 0
shader = ExtResource("14_uik3j")
shader_parameter/albedo_color = Color(0.043069452, 0.26020306, 0.56825805, 1)
shader_parameter/use_texture = true
shader_parameter/uv_scale = Vector2(3, 3)
shader_parameter/palette_shift_y = 0.0
shader_parameter/gradient_start_y = 0.0
shader_parameter/gradient_end_y = 1.5
shader_parameter/light_steps = 3.0
shader_parameter/step_softness = 0.1
shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1)
shader_parameter/shadow_offset = 0.0
shader_parameter/cast_shadow_strength = 0.6
shader_parameter/use_ghibli_glint = true
shader_parameter/glint_color = Color(1, 0.95, 0.85, 1)
shader_parameter/glint_intensity = 1.0
shader_parameter/glint_sharpness = 32.0
shader_parameter/emission_color = Color(0, 0, 0, 1)
shader_parameter/emission_energy = 0.0
[sub_resource type="ShaderMaterial" id="ShaderMaterial_fspb5"]
render_priority = 0
shader = ExtResource("14_uik3j")
shader_parameter/albedo_color = Color(0.38076818, 0.0014618272, 0.61723346, 1)
shader_parameter/use_texture = true
shader_parameter/uv_scale = Vector2(3, 3)
shader_parameter/palette_shift_y = 0.0
shader_parameter/gradient_start_y = 0.0
shader_parameter/gradient_end_y = 1.5
shader_parameter/light_steps = 3.0
shader_parameter/step_softness = 0.1
shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1)
shader_parameter/shadow_offset = 0.0
shader_parameter/cast_shadow_strength = 0.6
shader_parameter/use_ghibli_glint = true
shader_parameter/glint_color = Color(1, 0.95, 0.85, 1)
shader_parameter/glint_intensity = 1.0
shader_parameter/glint_sharpness = 32.0
shader_parameter/emission_color = Color(0, 0, 0, 1)
shader_parameter/emission_energy = 0.0
[node name="chunk_country_cross3_01" unique_id=319840865 instance=ExtResource("1_d5ypx")]
script = ExtResource("2_wjrum")
north = true
est = true
south = true
[node name="Argini_006" parent="." index="0" unique_id=503381779]
[node name="Argini_006" parent="." index="0" unique_id=185713343]
surface_material_override/0 = ExtResource("2_6ig2p")
surface_material_override/1 = ExtResource("2_6ig2p")
[node name="Grass_009" parent="." index="1" unique_id=845457056]
[node name="Grass_009" parent="." index="1" unique_id=629886419]
surface_material_override/0 = ExtResource("2_6ig2p")
[node name="MSH_Staccioanta_1_009" parent="." index="2" unique_id=2079323499]
[node name="MSH_Staccioanta_1_009" parent="." index="2" unique_id=802806256]
surface_material_override/0 = ExtResource("3_wjrum")
[node name="Strada_007" parent="." index="3" unique_id=1254411007 groups=["weather_node"]]
[node name="Strada_007" parent="." index="3" unique_id=1200357449 groups=["weather_node"]]
surface_material_override/0 = ExtResource("4_s0twx")
[node name="Water_007" parent="." index="4" unique_id=403462512]
[node name="Water_007" parent="." index="4" unique_id=787518082]
surface_material_override/0 = ExtResource("5_on7te")
surface_material_override/1 = ExtResource("5_on7te")
@@ -749,216 +703,3 @@ transform = Transform3D(-4.371139e-08, -1, 4.371139e-08, 0, -4.371139e-08, -1, 1
cast_shadow = 0
mesh = SubResource("PlaneMesh_x3b0m")
surface_material_override/0 = ExtResource("8_uik3j")
[node name="Bambu" type="Node3D" parent="." index="7" unique_id=1999704083]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.7030029, 0, 0)
[node name="Bambù15" parent="Bambu" index="0" unique_id=514636059 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, -3.1835556, 0, 7.4614506)
[node name="Bambù16" parent="Bambu" index="1" unique_id=1954346093 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, -3.1835556, -0.2565055, 8.330488)
[node name="Bambù21" parent="Bambu" index="2" unique_id=42929277 instance=ExtResource("11_s0twx")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, -3.1835556, 0, 9.173452)
[node name="Bambù22" parent="Bambu" index="3" unique_id=361021749 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, -3.1835556, -0.3562231, 5.6442933)
[node name="Bambù23" parent="Bambu" index="4" unique_id=1847823683 instance=ExtResource("11_s0twx")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, -3.1835556, 0, 6.4872584)
[node name="Bambù24" parent="Bambu" index="5" unique_id=1958123839 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, -2.8626137, 4.7683716e-07, 5.8091397)
[node name="Bambù25" parent="Bambu" index="6" unique_id=1901573942 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, -2.8626137, 4.7683716e-07, 6.6781764)
[node name="Bambù41" parent="Bambu" index="7" unique_id=47805921 instance=ExtResource("11_s0twx")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, -2.8626137, -0.2763033, 7.521142)
[node name="Bambù42" parent="Bambu" index="8" unique_id=2054757941 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, -2.8626137, 4.7683716e-07, 6.8091397)
[node name="Bambù43" parent="Bambu" index="9" unique_id=453190292 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, -2.8626137, 0.26429868, 7.678176)
[node name="Bambù44" parent="Bambu" index="10" unique_id=1458581214 instance=ExtResource("11_s0twx")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, -2.8626137, 4.7683716e-07, 8.521141)
[node name="Bambù18" parent="Bambu" index="11" unique_id=1056403055 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, -3.2905903, 0, -7.497928)
[node name="Bambù19" parent="Bambu" index="12" unique_id=296595434 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, -3.2905903, -0.2565055, -6.6288905)
[node name="Bambù26" parent="Bambu" index="13" unique_id=1108181054 instance=ExtResource("11_s0twx")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, -3.2905903, 0, -5.7859263)
[node name="Bambù27" parent="Bambu" index="14" unique_id=1562603620 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, -3.2905903, -0.3562231, -9.315086)
[node name="Bambù28" parent="Bambu" index="15" unique_id=559053846 instance=ExtResource("11_s0twx")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, -3.2905903, 0, -8.47212)
[node name="Bambù29" parent="Bambu" index="16" unique_id=233163335 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, -2.9696484, 4.7683716e-07, -9.15024)
[node name="Bambù30" parent="Bambu" index="17" unique_id=1342879225 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, -2.9696484, 4.7683716e-07, -8.281202)
[node name="Bambù45" parent="Bambu" index="18" unique_id=703015624 instance=ExtResource("11_s0twx")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, -2.9696484, -0.2763033, -7.4382367)
[node name="Bambù46" parent="Bambu" index="19" unique_id=83558709 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, -2.9696484, 4.7683716e-07, -8.150239)
[node name="Bambù47" parent="Bambu" index="20" unique_id=891851311 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, -2.9696484, 0.26429868, -7.281203)
[node name="Bambù48" parent="Bambu" index="21" unique_id=1492062909 instance=ExtResource("11_s0twx")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, -2.9696484, 4.7683716e-07, -6.4382377)
[node name="Bambù20" parent="Bambu" index="22" unique_id=683004573 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, 8.239307, 0, -7.497928)
[node name="Bambù31" parent="Bambu" index="23" unique_id=1166075867 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 8.239307, -0.2565055, -6.6288905)
[node name="Bambù32" parent="Bambu" index="24" unique_id=1550621383 instance=ExtResource("11_s0twx")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, -2.917448, -0.22205257, -4.929665)
[node name="Bambù33" parent="Bambu" index="25" unique_id=1674656626 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 8.239307, -0.3562231, -9.315086)
[node name="Bambù34" parent="Bambu" index="26" unique_id=1669538331 instance=ExtResource("11_s0twx")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, 8.239307, 0, -8.47212)
[node name="Bambù35" parent="Bambu" index="27" unique_id=237385787 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, 8.560249, 4.7683716e-07, -9.15024)
[node name="Bambù36" parent="Bambu" index="28" unique_id=1170872764 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 8.560249, 4.7683716e-07, -8.281202)
[node name="Bambù49" parent="Bambu" index="29" unique_id=1849867240 instance=ExtResource("11_s0twx")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, 8.560249, -0.2763033, -7.4382367)
[node name="Bambù50" parent="Bambu" index="30" unique_id=1199584830 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, 8.560249, 4.7683716e-07, -8.150239)
[node name="Bambù51" parent="Bambu" index="31" unique_id=317685493 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 8.560249, 0.26429868, -7.281203)
[node name="Bambù52" parent="Bambu" index="32" unique_id=1345147511 instance=ExtResource("11_s0twx")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, 8.560249, 4.7683716e-07, -6.4382377)
[node name="Bambù37" parent="Bambu" index="33" unique_id=1071137497 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, 8.239307, 0, 8.218842)
[node name="Bambù38" parent="Bambu" index="34" unique_id=121212224 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 8.239307, -0.2565055, 9.087879)
[node name="Bambù39" parent="Bambu" index="35" unique_id=944682133 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 8.239307, -0.3562231, 6.401683)
[node name="Bambù40" parent="Bambu" index="36" unique_id=203551499 instance=ExtResource("11_s0twx")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, 8.239307, 0, 7.244649)
[node name="Bambù53" parent="Bambu" index="37" unique_id=2113808379 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, 8.560249, 4.7683716e-07, 6.5665293)
[node name="Bambù54" parent="Bambu" index="38" unique_id=293731974 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 8.560249, 4.7683716e-07, 7.435567)
[node name="Bambù55" parent="Bambu" index="39" unique_id=1241354453 instance=ExtResource("11_s0twx")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, 8.560249, -0.2763033, 8.278532)
[node name="Bambù56" parent="Bambu" index="40" unique_id=2015969748 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, 8.560249, 4.7683716e-07, 7.56653)
[node name="Bambù57" parent="Bambu" index="41" unique_id=2032587135 instance=ExtResource("11_s0twx")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 8.560249, 0.26429868, 8.435566)
[node name="Bambù58" parent="Bambu" index="42" unique_id=338271013 instance=ExtResource("11_s0twx")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, 8.560249, 4.7683716e-07, 9.278532)
[node name="Bambù59" parent="Bambu" index="43" unique_id=2135267736 instance=ExtResource("11_s0twx")]
transform = Transform3D(-0.0020355375, 0.044078063, -0.999026, -0.046085197, 0.9979625, 0.044125043, 0.99893546, 0.046130124, -4.3997797e-08, 5.7660995, 0, 8.747564)
[node name="Bambù60" parent="Bambu" index="44" unique_id=1996178166 instance=ExtResource("11_s0twx")]
transform = Transform3D(-4.354479e-08, -3.812739e-09, -1.0000001, -0.0872253, 0.9961887, 0, 0.9961886, 0.087225296, -4.371139e-08, 4.8970613, -0.2565055, 8.747564)
[node name="Bambù61" parent="Bambu" index="45" unique_id=1142314968 instance=ExtResource("11_s0twx")]
transform = Transform3D(-4.354479e-08, -3.812739e-09, -1.0000001, -0.0872253, 0.9961887, 0, 0.9961886, 0.087225296, -4.371139e-08, 7.5832577, -0.3562231, 8.747564)
[node name="Bambù62" parent="Bambu" index="46" unique_id=692230420 instance=ExtResource("11_s0twx")]
transform = Transform3D(-4.371139e-08, 0.013473534, -0.9999092, 0, 0.9999092, 0.013473534, 1, 5.889469e-10, -4.370742e-08, 6.740291, 0, 8.747564)
[node name="Bambù63" parent="Bambu" index="47" unique_id=1412502637 instance=ExtResource("11_s0twx")]
transform = Transform3D(-0.0020355375, 0.044078063, -0.999026, -0.046085197, 0.9979625, 0.044125043, 0.99893546, 0.046130124, -4.3997797e-08, 7.4184113, 4.7683716e-07, 9.068506)
[node name="Bambù64" parent="Bambu" index="48" unique_id=1439020299 instance=ExtResource("11_s0twx")]
transform = Transform3D(-4.354479e-08, -3.812739e-09, -1.0000001, -0.0872253, 0.9961887, 0, 0.9961886, 0.087225296, -4.371139e-08, 6.549373, 4.7683716e-07, 9.068506)
[node name="Bambù65" parent="Bambu" index="49" unique_id=1296643572 instance=ExtResource("11_s0twx")]
transform = Transform3D(-4.371139e-08, 0.013473534, -0.9999092, 0, 0.9999092, 0.013473534, 1, 5.889469e-10, -4.370742e-08, 5.706409, -0.2763033, 9.068506)
[node name="Bambù66" parent="Bambu" index="50" unique_id=1269906984 instance=ExtResource("11_s0twx")]
transform = Transform3D(-0.0020355375, 0.044078063, -0.999026, -0.046085197, 0.9979625, 0.044125043, 0.99893546, 0.046130124, -4.3997797e-08, 6.418411, 4.7683716e-07, 9.068506)
[node name="Bambù67" parent="Bambu" index="51" unique_id=1964373557 instance=ExtResource("11_s0twx")]
transform = Transform3D(-4.354479e-08, -3.812739e-09, -1.0000001, -0.0872253, 0.9961887, 0, 0.9961886, 0.087225296, -4.371139e-08, 5.549375, 0.26429868, 9.068506)
[node name="Bambù68" parent="Bambu" index="52" unique_id=2054959863 instance=ExtResource("11_s0twx")]
transform = Transform3D(-4.371139e-08, 0.013473534, -0.9999092, 0, 0.9999092, 0.013473534, 1, 5.889469e-10, -4.370742e-08, 4.7064085, 4.7683716e-07, 9.068506)
[node name="Bambù69" parent="Bambu" index="53" unique_id=41413912 instance=ExtResource("11_s0twx")]
transform = Transform3D(-0.0020355375, 0.044078063, -0.999026, -0.046085197, 0.9979625, 0.044125043, 0.99893546, 0.046130124, -4.3997797e-08, 5.7660995, 0, -9.709568)
[node name="Bambù70" parent="Bambu" index="54" unique_id=1098859020 instance=ExtResource("11_s0twx")]
transform = Transform3D(-4.354479e-08, -3.812739e-09, -1.0000001, -0.0872253, 0.9961887, 0, 0.9961886, 0.087225296, -4.371139e-08, 4.8970613, -0.2565055, -9.709568)
[node name="Bambù71" parent="Bambu" index="55" unique_id=1253907857 instance=ExtResource("11_s0twx")]
transform = Transform3D(-4.354479e-08, -3.812739e-09, -1.0000001, -0.0872253, 0.9961887, 0, 0.9961886, 0.087225296, -4.371139e-08, 7.5832577, -0.3562231, -9.709568)
[node name="Bambù72" parent="Bambu" index="56" unique_id=914925610 instance=ExtResource("11_s0twx")]
transform = Transform3D(-4.371139e-08, 0.013473534, -0.9999092, 0, 0.9999092, 0.013473534, 1, 5.889469e-10, -4.370742e-08, 6.740291, 0, -9.709568)
[node name="Bambù73" parent="Bambu" index="57" unique_id=61163812 instance=ExtResource("11_s0twx")]
transform = Transform3D(-0.0020355375, 0.044078063, -0.999026, -0.046085197, 0.9979625, 0.044125043, 0.99893546, 0.046130124, -4.3997797e-08, 7.4184113, 4.7683716e-07, -9.388626)
[node name="Bambù74" parent="Bambu" index="58" unique_id=1746505929 instance=ExtResource("11_s0twx")]
transform = Transform3D(-4.354479e-08, -3.812739e-09, -1.0000001, -0.0872253, 0.9961887, 0, 0.9961886, 0.087225296, -4.371139e-08, 6.549373, 4.7683716e-07, -9.388626)
[node name="Bambù75" parent="Bambu" index="59" unique_id=880897283 instance=ExtResource("11_s0twx")]
transform = Transform3D(-4.371139e-08, 0.013473534, -0.9999092, 0, 0.9999092, 0.013473534, 1, 5.889469e-10, -4.370742e-08, 5.706409, -0.2763033, -9.388626)
[node name="Bambù76" parent="Bambu" index="60" unique_id=2038811179 instance=ExtResource("11_s0twx")]
transform = Transform3D(-0.0020355375, 0.044078063, -0.999026, -0.046085197, 0.9979625, 0.044125043, 0.99893546, 0.046130124, -4.3997797e-08, 6.418411, 4.7683716e-07, -9.388626)
[node name="Bambù77" parent="Bambu" index="61" unique_id=1694847279 instance=ExtResource("11_s0twx")]
transform = Transform3D(-4.354479e-08, -3.812739e-09, -1.0000001, -0.0872253, 0.9961887, 0, 0.9961886, 0.087225296, -4.371139e-08, 5.549375, 0.26429868, -9.388626)
[node name="Bambù78" parent="Bambu" index="62" unique_id=1492632391 instance=ExtResource("11_s0twx")]
transform = Transform3D(-4.371139e-08, 0.013473534, -0.9999092, 0, 0.9999092, 0.013473534, 1, 5.889469e-10, -4.370742e-08, 4.7064085, 4.7683716e-07, -9.388626)
[node name="Tori" parent="." index="8" unique_id=426190097 instance=ExtResource("12_on7te")]
transform = Transform3D(-2.6226832e-08, 0, -0.59999996, 0, 0.59999996, 0, 0.59999996, 0, -2.6226832e-08, 8.541672, 0, 0)
[node name="scarecrow" parent="." index="9" unique_id=1320042610 instance=ExtResource("13_fspb5")]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -6.283793, 0, -0.20404291)
[node name="scarecrow2" parent="." index="10" unique_id=1524877194 instance=ExtResource("13_fspb5")]
transform = Transform3D(-0.9989745, 0, 0.04527591, 0, 1, 0, -0.04527591, 0, -0.9989745, 5.994306, 0, -6.070919)
[node name="shirt" parent="scarecrow2" index="2" unique_id=1648916125]
surface_material_override/0 = SubResource("ShaderMaterial_52lxu")
[node name="scarecrow3" parent="." index="11" unique_id=1017203169 instance=ExtResource("13_fspb5")]
transform = Transform3D(-0.055246323, 0, 0.99847275, 0, 1, 0, -0.99847275, 0, -0.055246323, 5.994306, 0, 5.935006)
[node name="shirt" parent="scarecrow3" index="2" unique_id=1648916125]
surface_material_override/0 = SubResource("ShaderMaterial_fspb5")
[editable path="scarecrow2"]
[editable path="scarecrow3"]

View File

@@ -16,8 +16,6 @@
[ext_resource type="Material" uid="uid://ce0bdk3mx2xao" path="res://tgcc/chunk/material/water_chunk.tres" id="9_gqoia"]
[ext_resource type="Material" uid="uid://baot4vy3fqrdw" path="res://tgcc/chunk/prop/flower/bush.tres" id="10_uvq4s"]
[ext_resource type="Material" uid="uid://f5uoreickew7" path="res://tgcc/chunk/prop/flower/flower.tres" id="11_w75rp"]
[ext_resource type="PackedScene" uid="uid://c7hdw2g6sbygr" path="res://tgcc/chunk/prop/tree/bambù/bambù.tscn" id="17_rr5ye"]
[ext_resource type="PackedScene" uid="uid://5ap10ax3lnr7" path="res://tgcc/chunk/prop/vending machine/vending_machine_1.tscn" id="18_18gw6"]
[sub_resource type="PlaneMesh" id="PlaneMesh_kiycf"]
size = Vector2(0.5, 0.5)
@@ -64,64 +62,55 @@ buffer = PackedFloat32Array(-0.8020725, 0.5500147, -0.23699094, 3.4572377, -0.28
[sub_resource type="PlaneMesh" id="PlaneMesh_1bb53"]
size = Vector2(1, 1)
[sub_resource type="Gradient" id="Gradient_aoxux"]
offsets = PackedFloat32Array(1, 1)
colors = PackedColorArray(0, 0, 0, 0.5882353, 0, 0, 0, 0)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_rr5ye"]
gradient = SubResource("Gradient_aoxux")
fill = 2
fill_from = Vector2(0.5, 0.5)
[node name="chunk_country_cross3_02" unique_id=1492245999 instance=ExtResource("1_2emma")]
script = ExtResource("2_aoxux")
north = true
est = true
south = true
[node name="Argini_008" parent="." index="0" unique_id=506700048]
[node name="Argini_008" parent="." index="0" unique_id=1970392493]
surface_material_override/0 = ExtResource("2_jaet5")
[node name="Cavi_004" parent="." index="1" unique_id=253539518]
[node name="Cavi_004" parent="." index="1" unique_id=1226786589]
surface_material_override/0 = ExtResource("3_k52wx")
surface_material_override/1 = ExtResource("3_k52wx")
[node name="Flower_008" parent="." index="2" unique_id=992129707]
[node name="Flower_008" parent="." index="2" unique_id=8446212]
visible = false
[node name="FlowerG_005" parent="." index="3" unique_id=1721720069]
[node name="FlowerG_005" parent="." index="3" unique_id=2045663830]
visible = false
[node name="Grass_010" parent="." index="4" unique_id=2049316115]
[node name="Grass_010" parent="." index="4" unique_id=1977147069]
surface_material_override/0 = ExtResource("2_jaet5")
[node name="House_C_1_002" parent="." index="5" unique_id=1344987535 groups=["weather_node"]]
[node name="House_C_1_002" parent="." index="5" unique_id=628395080 groups=["weather_node"]]
[node name="House_C_1_002|Cube_330|Dupli|" parent="House_C_1_002" index="0" unique_id=141290732]
[node name="House_C_1_002|Cube_330|Dupli|" parent="House_C_1_002" index="0" unique_id=1454139767]
surface_material_override/0 = ExtResource("4_yg4ko")
surface_material_override/1 = ExtResource("5_yk001")
[node name="House_C_1_003" parent="." index="6" unique_id=5893163 groups=["weather_node"]]
[node name="House_C_1_003" parent="." index="6" unique_id=224251697 groups=["weather_node"]]
[node name="House_C_1_003|Cube_330|Dupli|" parent="House_C_1_003" index="0" unique_id=1916361483]
[node name="House_C_1_003|Cube_330|Dupli|" parent="House_C_1_003" index="0" unique_id=682134143]
surface_material_override/0 = ExtResource("4_yg4ko")
surface_material_override/1 = ExtResource("5_yk001")
[node name="Lanterne_002" parent="." index="7" unique_id=174576336]
[node name="Lanterne_002" parent="." index="7" unique_id=584972425]
surface_material_override/0 = ExtResource("5_yk001")
surface_material_override/1 = ExtResource("4_yg4ko")
[node name="MSH_Staccioanta_1_007" parent="." index="8" unique_id=914751003]
[node name="MSH_Staccioanta_1_007" parent="." index="8" unique_id=166305032]
surface_material_override/0 = ExtResource("6_k52wx")
[node name="PaliLuci_003" parent="." index="9" unique_id=860093688 groups=["weather_node"]]
[node name="PaliLuci_003" parent="." index="9" unique_id=718749193 groups=["weather_node"]]
surface_material_override/0 = ExtResource("7_yg4ko")
surface_material_override/1 = ExtResource("7_yg4ko")
[node name="Strada_008" parent="." index="10" unique_id=1328236486 groups=["weather_node"]]
[node name="Strada_008" parent="." index="10" unique_id=1129336513 groups=["weather_node"]]
surface_material_override/0 = ExtResource("8_yk001")
[node name="Water_009" parent="." index="11" unique_id=803608688]
[node name="Water_009" parent="." index="11" unique_id=764825976]
surface_material_override/0 = ExtResource("9_gqoia")
[node name="grass" type="Node3D" parent="." index="12" unique_id=902068161 groups=["weather_vegetables_node", "wind_node"]]
@@ -536,245 +525,3 @@ transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 59.7
cast_shadow = 0
mesh = SubResource("PlaneMesh_1bb53")
surface_material_override/0 = ExtResource("8_rr5ye")
[node name="shadow" type="Node3D" parent="." index="15" unique_id=670702032]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.361658, 0, 0)
[node name="Decal2" type="Decal" parent="shadow" index="0" unique_id=922189540]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.7440257, 0.118, -6.3402376)
size = Vector3(6.375206, 0.5, 6.4011083)
texture_albedo = SubResource("GradientTexture2D_rr5ye")
[node name="Decal3" type="Decal" parent="shadow" index="1" unique_id=638863692]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.7588773, 0.118, 6.374588)
size = Vector3(6.375206, 0.5, 6.4011083)
texture_albedo = SubResource("GradientTexture2D_rr5ye")
[node name="light" type="Node3D" parent="." index="16" unique_id=855839615]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22.554989, 0, 26.182838)
[node name="OmniLight3D23" type="OmniLight3D" parent="light" index="0" unique_id=1012201040]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 29.203798, 1.6665113, -34.696262)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D24" type="OmniLight3D" parent="light" index="1" unique_id=1909029879]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 29.203798, 1.6665113, -30.344786)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D25" type="OmniLight3D" parent="light" index="2" unique_id=1402698870]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 27.006886, 1.6665113, -32.461475)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D26" type="OmniLight3D" parent="light" index="3" unique_id=193646632]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 31.41166, 1.6665113, -32.461475)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D34" type="OmniLight3D" parent="light" index="4" unique_id=353951548]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 29.203798, 1.6665113, -21.9785)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D35" type="OmniLight3D" parent="light" index="5" unique_id=801665921]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 29.203798, 1.6665113, -17.627022)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D36" type="OmniLight3D" parent="light" index="6" unique_id=51976869]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 27.006886, 1.6665113, -19.743713)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D37" type="OmniLight3D" parent="light" index="7" unique_id=1086881090]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 31.41166, 1.6665113, -19.743713)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D33" type="OmniLight3D" parent="light" index="8" unique_id=149597706]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 24.405659, 3.161872, -26.186796)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="OmniLight3D38" type="OmniLight3D" parent="light" index="9" unique_id=1165412202]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 32.378895, 3.161872, -26.186796)
light_color = Color(0.9372549, 0.49411765, 0.14509805, 1)
light_energy = 0.5
light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.0
light_specular = 0.0
light_bake_mode = 1
shadow_enabled = true
shadow_opacity = 0.96
omni_range = 10.0
omni_attenuation = 2.0
[node name="Bambu" type="Node3D" parent="." index="17" unique_id=448001558]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.1752586, 0, 0)
[node name="Bambù15" parent="Bambu" index="0" unique_id=514636059 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, 4.710951, 0, 7.851448)
[node name="Bambù16" parent="Bambu" index="1" unique_id=1113199509 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 4.710951, -0.2565055, 8.720485)
[node name="Bambù21" parent="Bambu" index="2" unique_id=323411216 instance=ExtResource("17_rr5ye")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, 4.710951, 0, 9.56345)
[node name="Bambù22" parent="Bambu" index="3" unique_id=223818623 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 4.710951, -0.3562231, 6.0342903)
[node name="Bambù23" parent="Bambu" index="4" unique_id=1662355034 instance=ExtResource("17_rr5ye")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, 4.710951, 0, 6.8772554)
[node name="Bambù24" parent="Bambu" index="5" unique_id=818989877 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, 5.031893, 4.7683716e-07, 6.1991367)
[node name="Bambù25" parent="Bambu" index="6" unique_id=1715691457 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 5.031893, 4.7683716e-07, 7.0681734)
[node name="Bambù41" parent="Bambu" index="7" unique_id=285888953 instance=ExtResource("17_rr5ye")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, 5.031893, -0.2763033, 7.9111385)
[node name="Bambù42" parent="Bambu" index="8" unique_id=1243079673 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, 5.031893, 4.7683716e-07, 7.1991367)
[node name="Bambù43" parent="Bambu" index="9" unique_id=174399751 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 5.031893, 0.26429868, 8.068173)
[node name="Bambù44" parent="Bambu" index="10" unique_id=1664765048 instance=ExtResource("17_rr5ye")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, 5.031893, 4.7683716e-07, 8.911139)
[node name="Bambù18" parent="Bambu" index="11" unique_id=1559539851 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, 4.710951, 0, -4.343957)
[node name="Bambù19" parent="Bambu" index="12" unique_id=642406394 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 4.710951, -0.2565055, -3.4749203)
[node name="Bambù26" parent="Bambu" index="13" unique_id=706839361 instance=ExtResource("17_rr5ye")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, 4.710951, 0, -2.6319551)
[node name="Bambù27" parent="Bambu" index="14" unique_id=1638985970 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 4.710951, -0.3562231, -6.1611147)
[node name="Bambù28" parent="Bambu" index="15" unique_id=978144063 instance=ExtResource("17_rr5ye")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, 4.710951, 0, -5.3181496)
[node name="Bambù29" parent="Bambu" index="16" unique_id=2141305470 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, 5.031893, 4.7683716e-07, -5.9962683)
[node name="Bambù30" parent="Bambu" index="17" unique_id=888892362 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 5.031893, 4.7683716e-07, -5.1272316)
[node name="Bambù51" parent="Bambu" index="18" unique_id=140566295 instance=ExtResource("17_rr5ye")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, 5.031893, -0.2763033, -4.2842665)
[node name="Bambù52" parent="Bambu" index="19" unique_id=1699837022 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, 5.031893, 4.7683716e-07, -4.9962683)
[node name="Bambù53" parent="Bambu" index="20" unique_id=798441618 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 5.031893, 0.26429868, -4.1272316)
[node name="Bambù54" parent="Bambu" index="21" unique_id=966882354 instance=ExtResource("17_rr5ye")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, 5.031893, 4.7683716e-07, -3.2842665)
[node name="Bambù33" parent="Bambu" index="22" unique_id=1874865938 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 4.8432164, -0.3562231, -8.338741)
[node name="Bambù34" parent="Bambu" index="23" unique_id=1925300029 instance=ExtResource("17_rr5ye")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, 4.8432164, 0, -7.4957776)
[node name="Bambù35" parent="Bambu" index="24" unique_id=739573115 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, 5.1641583, 4.7683716e-07, -8.173897)
[node name="Bambù56" parent="Bambu" index="25" unique_id=1231729508 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, 5.1641583, 4.7683716e-07, -7.1738963)
[node name="Bambù37" parent="Bambu" index="26" unique_id=536233487 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.9961886, 0.087225296, 0, -0.087225296, 0.9961886, 0, 0, 0, 1, 4.8120065, -0.3562231, 3.8334446)
[node name="Bambù38" parent="Bambu" index="27" unique_id=87092145 instance=ExtResource("17_rr5ye")]
transform = Transform3D(1, 0, 0, 0, 0.9999092, 0.013473534, 0, -0.013473534, 0.9999092, 4.8120065, 0, 4.6764083)
[node name="Bambù39" parent="Bambu" index="28" unique_id=1707806049 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, 5.1329484, 4.7683716e-07, 3.998289)
[node name="Bambù59" parent="Bambu" index="29" unique_id=510984514 instance=ExtResource("17_rr5ye")]
transform = Transform3D(0.99893546, 0.04613013, 0, -0.046085197, 0.9979625, 0.044125047, 0.002035494, -0.044078074, 0.999026, 5.1329484, 4.7683716e-07, 4.9982896)
[node name="VendingMachine_1" parent="." index="18" unique_id=1157270784 instance=ExtResource("18_18gw6")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.6109447, 0, 1.013597)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More