3 Commits

Author SHA1 Message Date
Matteo Sonaglioni
75286521d1 railway chunk 2026-04-23 15:41:28 +02:00
Matteo Sonaglioni
b975e13c8d Merge branch 'Chunk' of https://gitea.jmpgames.it/jmp-games/tgcc into Chunk 2026-04-21 23:37:06 +02:00
Matteo Sonaglioni
ae9b75cc53 nomenclatura chunk rotaie 2026-04-21 23:34:41 +02:00
60 changed files with 911 additions and 2897 deletions

View File

@@ -1,9 +1,5 @@
extends Node3D
const CHUNK_GENERATION_STEPS_PER_FRAME: int = 2
const CHUNK_CLEANUP_STEPS_PER_FRAME: int = 4
const LAMPPOST_WIRE_STEPS_PER_FRAME: int = 1
@export_group("Rails")
@export var rail_path: Path3D
@@ -24,12 +20,6 @@ var last_pos_train: Vector2i = Vector2i(999999, 999999)
var noise_generator: FastNoiseLite
var altitude_generator: FastNoiseLite
var wire_connections: Dictionary = {}
var chunk_candidate_cache: Dictionary = {}
var pending_generation_cells: Array[Vector2i] = []
var pending_cleanup_cells: Array[Vector2i] = []
var pending_wire_cells: Array[Vector2i] = []
var pending_wire_lookup: Dictionary = {}
var pending_radar_update: bool = false
var manual_biome: Biome = null
@@ -46,7 +36,6 @@ func _ready() -> void:
altitude_generator.seed = randi()
altitude_generator.frequency = district_scale * 0.5
_warm_chunk_candidate_cache()
_update_set_pieces()
func _update_set_pieces() -> void:
@@ -78,18 +67,15 @@ func _update_set_pieces() -> void:
print(" ❌ Temple is an invisible ghost.")
func _destroy_and_regenrate_world() -> void:
_warm_chunk_candidate_cache()
_clear_pending_world_work()
#Turn off old temples
_update_set_pieces()
#Destroy all models
for pos in board.keys():
var cella = board[pos]
if cella["type"] != "obstacle":
if cella.has("node") and is_instance_valid(cella["node"]):
cella["node"].queue_free()
if cella["tipo"] == "bioma":
if cella.has("nodo") and is_instance_valid(cella["nodo"]):
cella["nodo"].queue_free()
#Clean board and wire connections
board.clear()
@@ -97,19 +83,8 @@ func _destroy_and_regenrate_world() -> void:
#Create train
last_pos_train = Vector2i(999999, 999999)
if rail_path != null and rail_path.train_instance != null:
var train_pos = rail_path.train_instance.global_position
var current_pos = Vector2i(roundi(train_pos.x / chunk_size), roundi(train_pos.z / chunk_size))
_refresh_world_work(current_pos)
pending_radar_update = true
func _process(_delta: float) -> void:
_drain_cleanup_queue()
_drain_generation_queue()
_drain_wire_queue()
if pending_radar_update:
pending_radar_update = false
_train_radar()
last_pos_train = Vector2i(999999, 999999)
_train_radar()
func _physics_process(_delta: float) -> void:
@@ -122,8 +97,9 @@ func _physics_process(_delta: float) -> void:
if current_pos != last_pos_train:
last_pos_train = current_pos
_refresh_world_work(current_pos)
pending_radar_update = true
_generate_pieces_around_train(current_pos)
_clean_far_chunks(current_pos)
_train_radar()
func collect_all_chunkinfo(root: Node, list: Array[Node]) -> void:
if root == null: return
@@ -134,168 +110,6 @@ func collect_all_chunkinfo(root: Node, list: Array[Node]) -> void:
for child in root.get_children():
collect_all_chunkinfo(child, list)
func _warm_chunk_candidate_cache() -> void:
var unique_scenes: Dictionary = {}
for biome in biome_list:
if biome == null:
continue
for scene in biome.available_chunks:
if scene == null:
continue
unique_scenes[_get_chunk_scene_cache_key(scene)] = scene
if manual_biome != null:
for scene in manual_biome.available_chunks:
if scene == null:
continue
unique_scenes[_get_chunk_scene_cache_key(scene)] = scene
for scene in unique_scenes.values():
_get_chunk_scene_metadata(scene)
func _get_chunk_scene_cache_key(scene: PackedScene) -> String:
if scene == null:
return ""
if scene.resource_path != "":
return scene.resource_path
return "scene_%s" % scene.get_instance_id()
func _get_chunk_scene_metadata(scene: PackedScene) -> Dictionary:
if scene == null:
return {}
var key = _get_chunk_scene_cache_key(scene)
if chunk_candidate_cache.has(key):
return chunk_candidate_cache[key]
var preview_chunk = scene.instantiate()
var info_list: Array[Node] = []
collect_all_chunkinfo(preview_chunk, info_list)
var info_node = info_list[0] if info_list.size() > 0 else null
if info_node == null or not info_node.has_method("get_rotated_data"):
preview_chunk.queue_free()
chunk_candidate_cache[key] = {}
return {}
var info_path: NodePath = NodePath(".")
if info_node != preview_chunk:
info_path = preview_chunk.get_path_to(info_node)
var rotations = []
for rot in range(4):
rotations.append({
"rotation": rot,
"data": info_node.get_rotated_data(rot)
})
var metadata = {
"info_path": info_path,
"rotations": rotations,
"has_lamppost": "have_lamppost" in info_node and info_node.have_lamppost,
}
preview_chunk.queue_free()
chunk_candidate_cache[key] = metadata
return metadata
func _get_cached_chunk_info(instance: Node, scene: PackedScene) -> Node:
var metadata = _get_chunk_scene_metadata(scene)
if metadata.is_empty():
return null
var info_path: NodePath = metadata["info_path"]
if String(info_path) == ".":
return instance
return instance.get_node_or_null(info_path)
func _clear_pending_world_work() -> void:
pending_generation_cells.clear()
pending_cleanup_cells.clear()
pending_wire_cells.clear()
pending_wire_lookup.clear()
pending_radar_update = false
func _refresh_world_work(center: Vector2i) -> void:
_rebuild_generation_queue(center)
_rebuild_cleanup_queue(center)
func _rebuild_generation_queue(center: Vector2i) -> void:
pending_generation_cells.clear()
for radius in range(eye_line + 1):
for x in range(-radius, radius + 1):
for z in range(-radius, radius + 1):
if maxi(abs(x), abs(z)) != radius:
continue
var grid_pos = center + Vector2i(x, z)
if board.has(grid_pos):
continue
pending_generation_cells.append(grid_pos)
func _rebuild_cleanup_queue(center: Vector2i) -> void:
pending_cleanup_cells.clear()
var safe_margin = 2
for grid_pos in board.keys():
var cell = board[grid_pos]
if cell["type"] == "obstacle":
continue
var dist_x = abs(grid_pos.x - center.x)
var dist_z = abs(grid_pos.y - center.y)
if dist_x > eye_line + safe_margin or dist_z > eye_line + safe_margin:
pending_cleanup_cells.append(grid_pos)
func _drain_generation_queue() -> void:
var processed = 0
while processed < CHUNK_GENERATION_STEPS_PER_FRAME and not pending_generation_cells.is_empty():
var grid_pos = pending_generation_cells.pop_front()
if board.has(grid_pos):
continue
var is_obstacle = _register_cell_with_ray(grid_pos)
if not is_obstacle:
_add_compatible_biome(grid_pos)
processed += 1
func _drain_cleanup_queue() -> void:
var processed = 0
while processed < CHUNK_CLEANUP_STEPS_PER_FRAME and not pending_cleanup_cells.is_empty():
var grid_pos = pending_cleanup_cells.pop_front()
if not board.has(grid_pos):
continue
var cell = board[grid_pos]
if cell["type"] == "obstacle":
continue
if cell.has("node") and is_instance_valid(cell["node"]):
cell["node"].queue_free()
board.erase(grid_pos)
processed += 1
func _queue_lamppost_wire_connection(grid_pos: Vector2i) -> void:
if pending_wire_lookup.has(grid_pos):
return
pending_wire_lookup[grid_pos] = true
pending_wire_cells.append(grid_pos)
func _drain_wire_queue() -> void:
var processed = 0
while processed < LAMPPOST_WIRE_STEPS_PER_FRAME and not pending_wire_cells.is_empty():
var grid_pos = pending_wire_cells.pop_front()
pending_wire_lookup.erase(grid_pos)
if not board.has(grid_pos):
continue
if not board[grid_pos].get("have_lamppost", false):
continue
_connect_lamppost_wires(grid_pos)
processed += 1
func _generate_pieces_around_train(center: Vector2i) -> void:
for x in range(-eye_line, eye_line + 1):
for z in range(-eye_line, eye_line + 1):
@@ -392,7 +206,7 @@ func _register_cell_with_ray(grid_pos: Vector2i) -> bool:
}
if have_lamppost:
_queue_lamppost_wire_connection(grid_pos)
_connect_lamppost_wires(grid_pos)
return true
return false
@@ -415,13 +229,14 @@ func _add_compatible_biome(grid_pos: Vector2i) -> void:
var valid_candidates = []
for scene in zone_catalogue:
var metadata = _get_chunk_scene_metadata(scene)
if metadata.is_empty():
continue
var test_chunk = scene.instantiate()
var test_list: Array[Node] = []
collect_all_chunkinfo(test_chunk, test_list)
var info_test = test_list[0] if test_list.size() > 0 else null
for candidate in metadata["rotations"]:
var rot = candidate["rotation"]
var data = candidate["data"]
if info_test != null and info_test.has_method("get_rotated_data"):
for rot in range(4):
var data = test_chunk.get_rotated_data(rot)
var u_conn = data["connections"]
var u_height = data["heights"]
@@ -450,6 +265,8 @@ func _add_compatible_biome(grid_pos: Vector2i) -> void:
valid_candidates.append({"scene": scene, "rotation": rot, "data": data, "score": score})
test_chunk.queue_free()
if valid_candidates.size() > 0:
var max_score = -1
for c in valid_candidates:
@@ -461,14 +278,16 @@ func _add_compatible_biome(grid_pos: Vector2i) -> void:
var choise = best_candidate.pick_random()
var new_chunk = choise.scene.instantiate()
add_child(new_chunk)
new_chunk.position = Vector3(grid_pos.x * chunk_size, 0, grid_pos.y * chunk_size)
new_chunk.rotation.y = choise.rotation * (-PI / 2.0)
add_child(new_chunk)
var info_new = _get_cached_chunk_info(new_chunk, choise.scene)
var new_list: Array[Node] = []
collect_all_chunkinfo(new_chunk, new_list)
var info_new = new_list[0] if new_list.size() > 0 else null
var have_lamppost = false
if info_new != null and "have_lamppost" in info_new:
if info_new != null and "have_lamppost" in new_chunk:
have_lamppost = info_new.have_lamppost
board[grid_pos] = {
@@ -481,14 +300,16 @@ func _add_compatible_biome(grid_pos: Vector2i) -> void:
}
if have_lamppost:
_queue_lamppost_wire_connection(grid_pos)
_connect_lamppost_wires(grid_pos)
else:
var backup = zone_catalogue[0].instantiate()
backup.position = Vector3(grid_pos.x * chunk_size, 0, grid_pos.y * chunk_size)
add_child(backup)
backup.position = Vector3(grid_pos.x * chunk_size, 0, grid_pos.y * chunk_size)
var info_backup = _get_cached_chunk_info(backup, zone_catalogue[0])
var backup_list: Array[Node] = []
collect_all_chunkinfo(backup, backup_list)
var info_backup = backup_list[0] if backup_list.size() > 0 else null
var safe_heights = {
"north": req_height_north if req_height_north != -1 else height_target,
@@ -530,6 +351,8 @@ func _train_radar() -> void:
var current_progress = rail_path.train_progress
var total_length = rail_path.curve.get_baked_length()
#var exchange_distance = 0.0
#var next_biome = ""
for step in range(1, 31):
var next_progress = wrapf(current_progress + (step * chunk_size), 0.0, total_length)
@@ -541,18 +364,44 @@ func _train_radar() -> void:
var future_biome = _get_procedural_biome_name(noise_generator.get_noise_2d(f_x, f_z))
if future_biome != current_biome:
#exchange_distance = step * chunk_size
#next_biome = future_biome
break
func _clean_far_chunks(centro_attuale: Vector2i) -> void:
var cells_to_remove = []
var safe_margin = 2
for grid_pos in board.keys():
var cell = board[grid_pos]
if cell["type"] == "obstacle": continue
var dist_x = abs(grid_pos.x - centro_attuale.x)
var dist_z = abs(grid_pos.y - centro_attuale.y)
if dist_x > eye_line + safe_margin or dist_z > eye_line + safe_margin:
if cell.has("node") and is_instance_valid(cell["node"]):
cell["node"].queue_free()
cells_to_remove.append(grid_pos)
for pos in cells_to_remove:
board.erase(pos)
func _get_lampposts(info_node: Node, side: String) -> Array[Node3D]:
var lampposts: Array[Node3D] = []
if side == "sx":
if "connection_left" in info_node and info_node.connection_left != null:
for p in info_node.connection_left:
if is_instance_valid(p): lampposts.append(p)
#if lampposts.is_empty() and "nodo_attacco_sx" in nodo_info and is_instance_valid(nodo_info.get("nodo_attacco_sx")):
# lampposts.append(nodo_info.get("nodo_attacco_sx"))
else:
if "connection_right" in info_node and info_node.connection_right != null:
for p in info_node.connection_right:
if is_instance_valid(p): lampposts.append(p)
#if lampposts.is_empty() and "nodo_attacco_dx" in nodo_info and is_instance_valid(nodo_info.get("nodo_attacco_dx")):
# lampposts.append(nodo_info.get("nodo_attacco_dx"))
return lampposts
func _connect_lamppost_wires(new_board_pos: Vector2i) -> void:

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

@@ -1,17 +1,9 @@
shader_type canvas_item;
// Cattura tutto quello che c'è sotto questo nodo
uniform sampler2D screen_texture : hint_screen_texture, filter_linear_mipmap;
uniform float blur_amount : hint_range(0.0, 5.0) = 2.5;
uniform float focus_size : hint_range(0.0, 1.0) = 0.4;
uniform float transition_softness : hint_range(0.01, 1.0) = 0.3;
void fragment() {
float dist_from_center = abs(SCREEN_UV.y - 0.5);
float mask = smoothstep(focus_size / 2.0, (focus_size / 2.0) + transition_softness, dist_from_center);
// Applica il blur
vec4 blurred_screen = textureLod(screen_texture, SCREEN_UV, blur_amount * mask);
COLOR = blurred_screen;
COLOR = textureLod(screen_texture, SCREEN_UV, blur_amount);
}

View File

@@ -1,21 +1,16 @@
class_name DayNightController
extends Node
const TIME_OPTION_SUNRISE: int = 0
const TIME_OPTION_DAY: int = 1
const TIME_OPTION_SUNSET: int = 2
const TIME_OPTION_NIGHT: int = 3
var environment_config: EnvironmentConfig
#Multiply for debug
@export var time_scale: float = 1.0
@export var paused: bool = false
signal time_changed(time: float)
var current_time: float = 0.0
var _current_time_option_index: int = -1
func _init(environmentconfig: EnvironmentConfig) -> void:
environment_config = environmentconfig
@@ -24,7 +19,6 @@ func _ready() -> void:
#connect events
UIEvents.set_day_time.connect(_on_set_day_time)
UIEvents.toggle_pause_daytime.connect(_on_toggle_pause_daytime)
UIEvents.time_option_item_changed.connect(_time_option_changed)
current_time = environment_config.start_time
update_time(current_time)
@@ -50,34 +44,9 @@ func set_time(t: float) -> void:
update_time(current_time)
func update_time(currtime: float) -> void:
var time_option_index: int = get_time_option_index(currtime)
if time_option_index != _current_time_option_index:
_current_time_option_index = time_option_index
UIEvents.day_time_option_changed.emit(time_option_index)
emit_signal("time_changed", currtime)
UIEvents.day_time_changed.emit(currtime, get_time_string())
func get_time_option_index(currtime: float) -> int:
if currtime >= environment_config.night or currtime < environment_config.sunrise:
return TIME_OPTION_NIGHT
if currtime < environment_config.day:
return TIME_OPTION_SUNRISE
if currtime < environment_config.sunset:
return TIME_OPTION_DAY
return TIME_OPTION_SUNSET
func _time_option_changed(index: int) -> void:
match index:
TIME_OPTION_SUNRISE:
set_time(environment_config.sunrise)
TIME_OPTION_DAY:
set_time(environment_config.day)
TIME_OPTION_SUNSET:
set_time(environment_config.sunset)
TIME_OPTION_NIGHT:
set_time(environment_config.night)
func _on_set_day_time(value: float) -> void:
set_time(value)

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"]
@@ -41,55 +40,9 @@ shader_parameter/sun_color = Color(0.2841828, 0.2023238, 0.27953526, 1)
[sub_resource type="Resource" id="Resource_r4tfj"]
script = ExtResource("2_h6hjk")
morning_color = Color(0.93333334, 0.78039217, 0.6039216, 1)
afternoon_color = Color(0.9490196, 0.62352943, 0.38039216, 1)
night_color = Color(0.18431373, 0.18431373, 0.4862745, 1)
sun_rotation_morning = Vector3(-50, -90, 0)
sun_rotation_afternoon = Vector3(-120, -90, 0)
sun_rotation_night = Vector3(-130, -90, 0)
night_light_energy = 1.0
exposure_morning = 0.8
exposure_afternoon = 0.7
exposure_night = 0.7
sky_top_morning = Color(0.11764706, 0.35686275, 0.5411765, 1)
sky_top_afternoon = Color(0.7019608, 0.4509804, 0.2, 1)
sky_top_night = Color(0.050980393, 0.050980393, 0.14901961, 1)
sky_horizon_morning = Color(0.4627451, 0.6745098, 0.8627451, 1)
sky_horizon_afternoon = Color(0.93333334, 0.6, 0.8039216, 1)
sky_horizon_night = Color(0.14901961, 0.101960786, 0.2509804, 1)
grad_top_morning = Color(0.7921569, 0.8784314, 0.95686275, 1)
grad_top_afternoon = Color(0.8627451, 0.24313726, 0.5411765, 1)
grad_top_night = Color(0.16470589, 0.16470589, 0.26666668, 1)
grad_bot_morning = Color(0.05882353, 0.078431375, 0.21568628, 1)
grad_bot_afternoon = Color(0.2509804, 0.019607844, 0.043137256, 1)
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.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.6
material_fog = SubResource("ShaderMaterial_b5atu")
material_drops = SubResource("StandardMaterial3D_r4tfj")
material_clouds = SubResource("ShaderMaterial_ruhh7")
lightning_color = Color(1, 0.9843137, 0.4627451, 1)
lightning_min = 2
lightning_max = 4
lightning_scale_min = 2.0
lightning_scale_max = 5.0
godray_max_rain = 60
godray_spawn_radius = 100.0
godray_spawn_offset = Vector3(20, 80, 20)
godray_rotation_degrees = Vector3(50, 30, 0)
godray_scale = Vector3(2, 25, 50)
snow_amount = 2000.0
wind_amount = 50
cloud_speed = 0.01
fireflies_amount = 550
fireflies_spawn_ray = 60.0
metadata/_custom_type_script = "uid://butda6k2tli3o"
[sub_resource type="Gradient" id="Gradient_i3hjl"]
@@ -132,7 +85,7 @@ gradient = SubResource("Gradient_djqkg")
lifetime_randomness = 0.5
emission_shape_scale = Vector3(5, 5, 5)
emission_shape = 3
emission_box_extents = Vector3(1, 1, 1)
emission_box_extents = Vector3(25, 5, 25)
direction = Vector3(0, 1, 0)
initial_velocity_min = 6.0
initial_velocity_max = 6.0
@@ -146,9 +99,10 @@ point_count = 3
[sub_resource type="ShaderMaterial" id="ShaderMaterial_cer0u"]
render_priority = 0
shader = ExtResource("5_djqkg")
shader_parameter/time_scale = 3.065
shader_parameter/wave_amplitude = 0.3
shader_parameter/wave_frequency = 0.25
shader_parameter/wave_frequency = 1.0
shader_parameter/base_amplitude = 0.5
shader_parameter/secondary_ratio = 0.6
shader_parameter/time_scale_base = 3.0
[sub_resource type="TubeTrailMesh" id="TubeTrailMesh_vo82p"]
material = SubResource("ShaderMaterial_cer0u")
@@ -220,9 +174,7 @@ size = Vector2(0.05, 0.8)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_kavln"]
shader = ExtResource("9_amaf0")
shader_parameter/blur_amount = 0.50000002375
shader_parameter/focus_size = 0.54400002584
shader_parameter/transition_softness = 0.00999999977648
shader_parameter/blur_amount = 0.6000000285
[sub_resource type="QuadMesh" id="QuadMesh_sxgg7"]
size = Vector2(2, 2)
@@ -232,12 +184,12 @@ noise = ExtResource("11_yn8v8")
seamless = true
[sub_resource type="ShaderMaterial" id="ShaderMaterial_oqt1s"]
render_priority = -1
render_priority = 0
shader = ExtResource("10_tuauy")
shader_parameter/noise_texture = SubResource("NoiseTexture2D_0fcg4")
shader_parameter/cloud_scale = 0.0070000003325
shader_parameter/cloud_speed = 0.0030000001425
shader_parameter/direction = Vector2(0.1, 0.025)
shader_parameter/direction = Vector2(0.5, 0.2)
shader_parameter/sun_angle = Vector2(0.5, 0.5)
shader_parameter/cloud_density = 0.400000019
shader_parameter/center_sharpness = 0.138000006555
@@ -249,23 +201,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/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")
@@ -276,7 +212,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)
@@ -287,10 +222,9 @@ process_material = SubResource("ParticleProcessMaterial_i3hjl")
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
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 0)
emitting = false
amount = 25
amount = 100
lifetime = 3.0
fixed_fps = 60
process_material = SubResource("ParticleProcessMaterial_ruhh7")
@@ -337,15 +271,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

@@ -1,11 +1,6 @@
class_name EnvironmentManagerRoot
extends Node3D
const NOISE_TEXTURE: Texture2D = preload("res://core/daynight/noise.tres")
const WEATHER_SHADER: Material = preload("res://core/daynight/weather_overlay.tres")
const WEATHER_PLAIN_SHADER: Material = preload("res://core/daynight/weather_plain_shader.tres")
const DYNAMIC_ENVIRONMENT_UPDATES_PER_FRAME: int = 2 #how many update of the environment (apply materials) will be done per frame
@export var environment_config: EnvironmentConfig
@export_group("Camera")
@@ -21,7 +16,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]
@@ -36,13 +30,9 @@ var weather_controller: WeatherController
var day_tween: Tween
var day_time: float = 0.0
var pending_environment_nodes: Dictionary = {}
func _ready() -> void:
#connect shader when new node is added
get_tree().node_added.connect(_on_tree_node_added)
#set noise texture 2d to materials in special group
ApplyWindNoiseToMaterials()
#set weather overlay (snow + rain) to materials in special group
@@ -65,7 +55,6 @@ func _ready() -> void:
godray,
environment_dust,
blur,
fog,
environment_shadows,
sun,
environment,
@@ -78,67 +67,10 @@ 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
func _apply_dynamic_environment_materials(node: Node) -> void:
if not is_instance_valid(node):
return
if node.is_in_group("wind_node"):
_apply_wind_noise_to_node(node, NOISE_TEXTURE)
if node.is_in_group("weather_node"):
_apply_weather_overlay_to_node(node, WEATHER_SHADER)
if node.is_in_group("weather_vegetables_node"):
_apply_weather_overlay_to_node(node, WEATHER_PLAIN_SHADER)
func ApplyWindNoiseToMaterials():
var noise_tex = preload("res://core/daynight/noise.tres")
for node in get_tree().get_nodes_in_group("wind_node"):
_apply_wind_noise_to_node(node, NOISE_TEXTURE)
_apply_wind_noise_to_node(node, noise_tex)
func _apply_wind_noise_to_node(node: Node, noise_tex: Texture2D) -> void:
if node is GeometryInstance3D:
@@ -156,18 +88,15 @@ func _apply_wind_noise_to_node(node: Node, noise_tex: Texture2D) -> void:
_apply_wind_noise_to_node(child, noise_tex)
func ApplyWeatherShaderToMaterials():
var weather_shader = preload("res://core/daynight/weather_overlay.tres")
for node in get_tree().get_nodes_in_group("weather_node"):
_apply_weather_overlay_to_node(node, WEATHER_SHADER)
for node in get_tree().get_nodes_in_group("weather_vegetables_node"):
_apply_weather_overlay_to_node(node, WEATHER_PLAIN_SHADER)
func _apply_weather_overlay_to_node(node: Node, material: Material) -> void:
if node is GeometryInstance3D:
node.material_overlay = material
node.material_overlay = weather_shader
else:
for child in node.get_children():
_apply_weather_overlay_to_node(child, material)
if child is GeometryInstance3D:
child.material_overlay = weather_shader
func select_day_time(normalized_time: float) -> void:
#set show_day_time_debug = true to show debug on screen

View File

@@ -8,10 +8,7 @@ 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;
global uniform float global_snow_accumulation_speed;
global uniform float global_snow_melt_time;
global uniform float global_snow_melt_speed;
global uniform float global_snow_amount;
// --- PARAMETRI ESTETICI ---
uniform bool billboard_enabled = true;
@@ -113,18 +110,9 @@ 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 = 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 snow_mask = smoothstep(1.0 - global_snow_amount, 1.2 - global_snow_amount, top_mask);
snow_mask *= step(0.01, global_snow_amount);
vec3 dark_snow = snow_color.rgb * (1.0 - shadow_intensity);
vec3 shaded_snow = mix(dark_snow, snow_color.rgb, v_shade_factor);

View File

@@ -1,114 +0,0 @@
## Procedural snow cap geometry for flat roofs and vehicles.
extends Node3D
enum PlacementMode {
AUTO_TARGET_AABB,
MANUAL_SURFACE,
}
const SNOW_CAP_SHADER: Shader = preload("res://core/daynight/snow_cap.gdshader")
@export var placement_mode: PlacementMode = PlacementMode.AUTO_TARGET_AABB
@export var target_path: NodePath
@export var size_inset: Vector2 = Vector2(0.25, 1.0)
@export var position_offset: Vector3 = Vector3(0.0, -0.08, 0.0)
@export var max_snow_height: float = 0.2
@export_range(1, 24) var subdivide_width: int = 6
@export_range(1, 24) var subdivide_depth: int = 18
@export var manual_surface_center: Vector3 = Vector3.ZERO
@export var manual_surface_size: Vector2 = Vector2(2.0, 6.0)
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:
return
_mesh_instance = MeshInstance3D.new()
_mesh_instance.name = "SnowCapMesh"
_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
var cap_surface_center := Vector3.ZERO
if placement_mode == PlacementMode.MANUAL_SURFACE:
cap_width = manual_surface_size.x
cap_depth = manual_surface_size.y
cap_surface_center = manual_surface_center
else:
var target_mesh: MeshInstance3D = get_node_or_null(target_path) as MeshInstance3D
if target_mesh == null:
if _mesh_instance:
_mesh_instance.visible = false
return
var target_aabb: AABB = _get_target_aabb(target_mesh)
cap_width = max(target_aabb.size.x - size_inset.x, 0.1)
cap_depth = max(target_aabb.size.z - size_inset.y, 0.1)
cap_surface_center = Vector3(
target_aabb.position.x + target_aabb.size.x * 0.5,
target_aabb.position.y + target_aabb.size.y,
target_aabb.position.z + target_aabb.size.z * 0.5
)
var cap_center := cap_surface_center + Vector3(0.0, max_snow_height * 0.5, 0.0)
var box_mesh := BoxMesh.new()
box_mesh.size = Vector3(cap_width, max_snow_height, cap_depth)
box_mesh.subdivide_width = subdivide_width
box_mesh.subdivide_depth = subdivide_depth
_mesh_instance.mesh = box_mesh
_mesh_instance.position = cap_center + position_offset
_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
material.set_shader_parameter("max_height", max_snow_height)
material.set_shader_parameter("half_width", cap_width * 0.5)
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()):
points.append(target_mesh.transform * point)
var merged := AABB(points[0], Vector3.ZERO)
for point in points:
merged = merged.expand(point)
return merged
func _get_aabb_points(aabb: AABB) -> Array[Vector3]:
var p: Vector3 = aabb.position
var s: Vector3 = aabb.size
return [
p,
p + Vector3(s.x, 0.0, 0.0),
p + Vector3(0.0, s.y, 0.0),
p + Vector3(0.0, 0.0, s.z),
p + Vector3(s.x, s.y, 0.0),
p + Vector3(s.x, 0.0, s.z),
p + Vector3(0.0, s.y, s.z),
p + s,
]

View File

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

View File

@@ -1,114 +0,0 @@
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.1;
global uniform float global_snow_melt_time = -1.0;
global uniform float global_snow_melt_speed = 0.1;
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;
uniform float half_width : hint_range(0.01, 20.0) = 1.0;
uniform float half_depth : hint_range(0.01, 20.0) = 1.0;
uniform float noise_scale : hint_range(0.05, 2.0) = 0.35;
uniform float noise_strength : hint_range(0.0, 0.4) = 0.18;
uniform float edge_rounding : hint_range(0.0, 0.3) = 0.12;
uniform float side_shade : hint_range(0.2, 1.0) = 0.82;
uniform float sparkle_strength : hint_range(0.0, 0.1) = 0.03;
varying float v_snow_amount;
varying float v_noise;
float hash(vec2 p) {
return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123);
}
float value_noise(vec2 p) {
vec2 i = floor(p);
vec2 f = fract(p);
vec2 u = f * f * (3.0 - 2.0 * f);
float a = hash(i);
float b = hash(i + vec2(1.0, 0.0));
float c = hash(i + vec2(0.0, 1.0));
float d = hash(i + vec2(1.0, 1.0));
return mix(mix(a, b, u.x), mix(c, d, u.x), u.y);
}
float fbm(vec2 p) {
float value = 0.0;
float amplitude = 0.5;
float frequency = 1.0;
for (int i = 0; i < 4; i++) {
value += value_noise(p * frequency) * amplitude;
frequency *= 2.0;
amplitude *= 0.5;
}
return clamp(value, 0.0, 1.0);
}
float get_snow_amount() {
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);
}
return snow_amount;
}
void vertex() {
vec3 base_vertex = VERTEX;
vec3 world_pos = (MODEL_MATRIX * vec4(base_vertex, 1.0)).xyz;
float snow_amount = get_snow_amount();
float noise_val = fbm(world_pos.xz * noise_scale);
float thickness = max_height * snow_amount * mix(
1.0 - noise_strength,
1.0 + noise_strength,
noise_val
);
float footprint_growth = smoothstep(0.0, 0.35, snow_amount);
float from_bottom = clamp((base_vertex.y + max_height * 0.5) / max_height, 0.0, 1.0);
VERTEX.y = -max_height * 0.5 + thickness * from_bottom;
VERTEX.x *= mix(0.92, 1.0, footprint_growth);
VERTEX.z *= mix(0.94, 1.0, footprint_growth);
float edge_x = abs(base_vertex.x) / max(half_width, 0.001);
float edge_z = abs(base_vertex.z) / max(half_depth, 0.001);
float edge_mask = smoothstep(0.55, 1.0, max(edge_x, edge_z));
float top_mask = smoothstep(0.6, 1.0, from_bottom) * snow_amount;
float round_factor = edge_rounding * edge_mask * top_mask;
VERTEX.x *= 1.0 - round_factor;
VERTEX.z *= 1.0 - round_factor;
v_snow_amount = snow_amount;
v_noise = noise_val;
}
void fragment() {
if (v_snow_amount <= 0.001) {
ALPHA = 0.0;
ALBEDO = global_snow_color.rgb;
ROUGHNESS = 1.0;
SPECULAR = 0.0;
} else {
float facing_up = clamp(NORMAL.y, 0.0, 1.0);
float shade = mix(-sparkle_strength, sparkle_strength, v_noise);
vec3 snow_albedo = clamp(global_snow_color.rgb + vec3(shade), 0.0, 1.0);
ALBEDO = mix(snow_albedo * side_shade, snow_albedo, facing_up);
ROUGHNESS = mix(0.95, 0.72, facing_up);
SPECULAR = 0.18;
ALPHA = smoothstep(0.0, 0.28, v_snow_amount);
}
}

View File

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

View File

@@ -6,12 +6,11 @@ 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;
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 vec4 global_snow_color;
global uniform float global_rain_intensity;
uniform sampler2D wind_noise : filter_linear_mipmap;
@@ -88,24 +87,23 @@ void fragment() {
vec2 shifted_uv = UV + texture_offset;
vec4 tex = texture(alpha_texture, shifted_uv);
//// 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);
// 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);
}
//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;
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);
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);
// Rain wetness: darken and make shinier
float rain_int = clamp(global_rain_intensity, 0.0, 1.0);

View File

@@ -1,9 +1,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);
//Water color
uniform vec4 deep_water_color : source_color = vec4(0.0, 0.1, 0.2, 1.0);
uniform vec4 shallow_water_color : source_color = vec4(0.0, 0.4, 0.7, 1.0);
@@ -44,15 +41,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) {
@@ -62,7 +56,6 @@ void fragment() {
- smoothstep(local_time, local_time + ripple_thickness, dist);
ring *= (1.0 - local_time);
}
ring *= rain_intensity;
vec2 ref_uv = SCREEN_UV;

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
@@ -50,11 +49,10 @@ var current_wind_speed: float = 0.0
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
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
@@ -65,7 +63,6 @@ func _init(wind: GPUParticles3D, snow: GPUParticles3D,
sun = thesun
environment_dust = dust
blur = blurr
fog = thefog
environment_shadows = envshadows
environment = theenvironment
environment_config = environmentconfig
@@ -89,7 +86,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:
@@ -102,14 +98,11 @@ func _ready() -> void:
UIEvents.toggle_snow.connect(toggle_snow)
UIEvents.toggle_wind.connect(toggle_wind)
UIEvents.wind_change.connect(change_wind_strength)
UIEvents.trigger_random_weather.connect(trigger_random_weather_event)
UIEvents.toggle_fireflies.connect(toggle_fireflies)
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:
@@ -129,7 +122,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:
@@ -157,7 +149,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
@@ -171,7 +162,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
@@ -183,7 +173,6 @@ 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, actual_snow_amount)
final_sky_top = final_sky_top.lerp(final_sky_top * environment_config.snow_mode_color, actual_snow_amount)
@@ -197,7 +186,6 @@ 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)
@@ -277,23 +265,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:
@@ -306,12 +277,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
@@ -342,7 +307,6 @@ func toggle_wind(value: bool):
particles_wind.emitting = is_windy
_apply_wind_state()
_emit_weather_event_label()
#disable wind and set default values and materials
func init_wind():
@@ -446,51 +410,6 @@ func _update_wind_amount_from_strength(value: float) -> void:
environment_config.wind_amount = roundi(max_wind_amount * amount_ratio)
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()
var previous_rain: bool = is_raining
var previous_snow: bool = is_snowing
var previous_wind: bool = is_windy
var previous_storm: bool = is_storm
var random_event_index: int = randi_range(0, 3)
match random_event_index:
0:
_apply_weather_event_state(false, true, false, false)
1:
_apply_weather_event_state(true, false, false, false)
2:
_apply_weather_event_state(false, false, true, false)
_:
_apply_weather_event_state(true, false, false, true)
if duration > 0.0:
random_weather_restore_tween = create_tween()
random_weather_restore_tween.tween_interval(duration)
random_weather_restore_tween.tween_callback(func():
_apply_weather_event_state(previous_rain, previous_snow, previous_wind, previous_storm)
)
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)
if is_raining and not rain_enabled:
toggle_rain(false)
if is_snowing and not snow_enabled:
toggle_snow(false)
if is_windy and not wind_enabled:
toggle_wind(false)
if not is_raining and rain_enabled:
toggle_rain(true)
if not is_snowing and snow_enabled:
toggle_snow(true)
if not is_windy and wind_enabled:
toggle_wind(true)
if not is_storm and storm_enabled:
toggle_storm(true)
func _apply_cloud_config() -> void:
var dir = environment_config.wind_direction
var cloud_scale = environment_config.cloud_scale
@@ -522,7 +441,6 @@ func _apply_cloud_config() -> void:
func toggle_storm(value: bool):
is_storm = value
_emit_weather_event_label()
#set lightning
func init_lightning():
@@ -636,7 +554,6 @@ func toggle_rain(value: bool):
is_raining = value
if not particles_rain:
_emit_weather_event_label()
return
if is_raining and is_snowing:
@@ -670,7 +587,6 @@ func toggle_rain(value: bool):
trigger_after_rain())
puddle_tween = create_tween()
puddle_tween.tween_method(set_puddle_amount, puddle_amount, 0.0, environment_config.puddle_dry_time)
_emit_weather_event_label()
func trigger_morning() -> void:
spawn_single_godray()
@@ -769,23 +685,6 @@ func toggle_snow(value: bool):
snow_tween.kill()
snow_tween = create_tween()
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:
var weather_label := "Weather: Clear"
if is_storm:
weather_label = "Weather: Storm"
else:
var active_events: Array[String] = []
if is_snowing:
active_events.append("Snow")
if is_raining:
active_events.append("Rain")
if is_windy:
active_events.append("Wind")
if not active_events.is_empty():
weather_label = "Weather: %s" % " + ".join(active_events)
UIEvents.weather_event_changed.emit(weather_label)
#disable snow and set default values and shader
func init_snow(value: float = 0.0):
@@ -800,13 +699,6 @@ func init_snow(value: float = 0.0):
RenderingServer.global_shader_parameter_set("global_snow_color", environment_config.snow_color)
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_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)
RenderingServer.global_shader_parameter_set("global_snow_cap_noise_scale", environment_config.snow_cap_noise_scale)
RenderingServer.global_shader_parameter_set("global_snow_cap_noise_strength", environment_config.snow_cap_noise_strength)
RenderingServer.global_shader_parameter_set("global_snow_start_time", -1.0)
RenderingServer.global_shader_parameter_set("global_snow_melt_time", -1.0)
@@ -836,10 +728,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

@@ -6,16 +6,8 @@ global uniform float global_snow_start_time = -1.0;
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_height = 0.06;
global uniform float global_snow_cap_flatness_start = 0.72;
global uniform float global_snow_cap_flatness_end = 0.96;
global uniform float global_snow_cap_noise_scale = 0.22;
global uniform float global_snow_cap_noise_strength = 0.18;
uniform float snow_noise_scale : hint_range(0.01, 1.0) = 0.15;
uniform float snow_edge_softness : hint_range(0.01, 0.5) = 0.2;
uniform float snow_roughness_variation : hint_range(0.0, 0.3) = 0.15;
@@ -37,58 +29,6 @@ uniform float puddle_threshold : hint_range(0.0, 0.8) = 0.45;
uniform sampler2D noise_texture : filter_linear_mipmap, repeat_enable;
varying float v_snow_amount;
varying float v_snow_cap_mask;
float hash(vec2 p) {
return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123);
}
float value_noise(vec2 p) {
vec2 i = floor(p);
vec2 f = fract(p);
vec2 u = f * f * (3.0 - 2.0 * f);
float a = hash(i);
float b = hash(i + vec2(1.0, 0.0));
float c = hash(i + vec2(0.0, 1.0));
float d = hash(i + vec2(1.0, 1.0));
return mix(mix(a, b, u.x), mix(c, d, u.x), u.y);
}
float fbm(vec2 p) {
float value = 0.0;
float amplitude = 0.5;
float frequency = 1.0;
for (int i = 0; i < 3; i++) {
value += value_noise(p * frequency) * amplitude;
frequency *= 2.0;
amplitude *= 0.5;
}
return clamp(value, 0.0, 1.0);
}
float get_snow_progress() {
bool has_snow_timeline = global_snow_start_time >= 0.0 || global_snow_melt_time >= 0.0;
float snow_progress = clamp(global_snow_amount, 0.0, 1.0);
if (has_snow_timeline) {
snow_progress = 0.0;
if (global_snow_start_time >= 0.0) {
snow_progress = 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 *= (1.0 - melt);
}
}
return snow_progress;
}
float ripple_ring(vec2 uv, float time_offset) {
float d = length(uv);
float ring = sin(d * 30.0 - TIME * ripple_speed + time_offset) * 0.5 + 0.5;
@@ -96,27 +36,6 @@ float ripple_ring(vec2 uv, float time_offset) {
return ring * fade;
}
void vertex() {
float snow_progress = get_snow_progress();
float snow_accumulation = snow_progress * global_snow_max_accumulation;
vec3 world_pos = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
vec3 world_normal = normalize((MODEL_MATRIX * vec4(NORMAL, 0.0)).xyz);
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 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);
VERTEX += NORMAL * (global_snow_cap_height * snow_accumulation * v_snow_cap_mask);
}
void fragment() {
vec3 world_pos = (INV_VIEW_MATRIX * vec4(VERTEX, 1.0)).xyz;
vec3 world_normal = normalize((INV_VIEW_MATRIX * vec4(NORMAL, 0.0)).xyz);
@@ -124,23 +43,25 @@ 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 = 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 snow_edge = smoothstep(
global_snow_threshold - snow_edge_softness,
global_snow_threshold + snow_edge_softness,
facing_up + (noise_val - 0.5) * 0.4
);
float flat_accumulation = smoothstep(0.0, 0.35, v_snow_cap_mask) * snow_accumulation;
float snow_coverage = smoothstep(0.0, 0.6, noise_val + snow_progress - 0.4 + flat_accumulation * 0.25);
float snow_factor = max(snow_edge * snow_coverage * snow_progress, flat_accumulation);
float snow_opacity = smoothstep(0.04, 0.28, snow_factor);
snow_opacity = max(snow_opacity, flat_accumulation * 0.9);
float snow_coverage = smoothstep(0.0, 0.6, noise_val + snow_amount - 0.4);
float snow_factor = snow_edge * snow_coverage * snow_amount;
float shade = mix(-snow_color_variation, snow_color_variation, noise_val);
vec3 snow_albedo = clamp(global_snow_color.rgb + vec3(shade), 0.0, 1.0);
snow_albedo = mix(snow_albedo, vec3(1.0), 0.18 + snow_opacity * 0.12);
float snow_rough = mix(0.15 - snow_roughness_variation, 0.15 + snow_roughness_variation, noise_val);
//Rain
@@ -252,7 +173,7 @@ void fragment() {
ALBEDO = snow_albedo;
ROUGHNESS = snow_rough;
METALLIC = 0.0;
ALPHA = snow_opacity;
ALPHA = snow_factor;
} else {
ALBEDO = rain_albedo;
ROUGHNESS = rain_rough;

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

@@ -7,13 +7,16 @@ 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;
// Rain globals
global uniform float global_rain_intensity;
global uniform float global_rain_puddle_amount;
// Snow parameters
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;
// Rain wetness parameters
global uniform float global_rain_intensity;
global uniform float global_rain_puddle_amount;
uniform float ripple_scale : hint_range(0.1, 5.0) = 1.5;
uniform float ripple_speed : hint_range(0.5, 5.0) = 2.0;
uniform float ripple_layers : hint_range(1.0, 4.0) = 3.0;

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

@@ -1,26 +1,31 @@
shader_type spatial;
render_mode unshaded;
// --- PARAMETRI ---
uniform float time_scale = 3.0;
uniform float wave_amplitude = 0.5; // Quanto curva a destra/sinistra
uniform float wave_frequency = 1.0; // Ogni quanto fa la curva
global uniform float global_wind_speed = 1.0; //0.0 = calm, 1.0 = normal, 2.0+ = strong
global uniform vec2 global_wind_direction = vec2(1.0, 0.0);
uniform float wave_frequency = 1.0;
uniform float base_amplitude = 0.5;
uniform float secondary_ratio = 0.6;
uniform float time_scale_base = 3.0;
void vertex() {
// Creiamo un offset unico per ogni particella in modo che non si muovano tutte uguali
float random_seed_offset = INSTANCE_CUSTOM.x * 100.0;
float scaled_time = (TIME + random_seed_offset) * time_scale;
float scaled_time = (TIME + random_seed_offset) * (time_scale_base * global_wind_speed);
float amplitude = base_amplitude * global_wind_speed;
// Applichiamo SOLO la curva morbida all'asse X (o Z, a seconda di come orienti la scena)
// Usiamo VERTEX.y per far sì che la curva si propaghi lungo tutta la lunghezza della scia
VERTEX.x += sin(VERTEX.y * wave_frequency + scaled_time) * wave_amplitude;
vec2 wind_dir = normalize(global_wind_direction);
vec2 wind_perp = vec2(-wind_dir.y, wind_dir.x); //90° perpendicular
// Niente più "VERTEX.y += t;", quindi niente più teletrasporti!
float primary_sway = sin(VERTEX.y * wave_frequency + scaled_time) * amplitude;
float secondary_sway = sin(VERTEX.y * wave_frequency * 1.3 + scaled_time * 0.7 + 1.57)
* (amplitude * secondary_ratio);
VERTEX.x += primary_sway * wind_dir.x + secondary_sway * wind_perp.x;
VERTEX.z += primary_sway * wind_dir.y + secondary_sway * wind_perp.y;
}
void fragment() {
// Il colore e l'alpha (per lo spawn dolce e la morte lenta)
// vengono comandati dalla Color Ramp del GPUParticles3D!
ALBEDO = COLOR.rgb;
ALPHA = COLOR.a;
}

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")
@@ -101,7 +100,7 @@ extends Resource
#Rain weather settings
@export_group("Rain")
@export var rain_mode_color: Color = Color(0.85, 0.89, 0.93, 1.0) #Sky/light darkening color during rain
@export var rain_mode_color: Color = Color(0.5, 0.6, 0.7, 1.0) #Sky/light darkening color during rain
@export var rain_fade_time: float = 5.0 #Seconds for rain particles to fade in/out
@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
@@ -110,7 +109,7 @@ extends Resource
#Storm settings (applied on top of rain when storm is active)
@export_group("Storm")
@export var storm_rain_intensity_multiplier: float = 1.5 #Rain intensity target during storm (1.0 = normal rain)
@export var storm_mode_color: Color = Color(0.78, 0.83, 0.89, 1.0) #Additional sky darkening color during storm
@export var storm_mode_color: Color = Color(0.476, 0.531, 0.639, 1.0) #Additional sky darkening color during storm
#Lightning and thunder configuration
@export_group("Lightning and Thunders")
@@ -134,27 +133,15 @@ extends Resource
@export var godray_spawn_height: float = 5.0 #Y world position where god rays spawn
@export var godray_scale: Vector3 = Vector3(2.0, 6.0, 2.0) #Scale of the god ray mesh
#Train start settings
@export_group("Train Start")
@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
@export_group("Snow")
@export var snow_amount: float = 0.0 #Initial snow coverage amount (0.0 = none, 1.0 = full)
@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.014 #Accumulation speed: 0.1 -> 10s, 0.05 -> 20s, 0.02 -> 50s, 0.012 -> ~83s
@export var snow_accumulation_speed: float = 0.02 #Accumulation speed: 0.1 -> 10s, 0.05 -> 20s, 0.02 -> 50s, 0.2 -> 5s
@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
@export var snow_color: Color = Color(0.9, 0.95, 1.0) #Albedo color of snow on surfaces
@export var snow_cap_height: float = 0.03 #Maximum snow thickness extruded on flat surfaces
@export var snow_cap_flatness_start: float = 0.85 #Surface normal Y where cap buildup starts
@export var snow_cap_flatness_end: float = 0.96 #Surface normal Y where cap buildup reaches full effect
@export var snow_cap_noise_scale: float = 0.22 #Noise scale used to vary the snow cap silhouette
@export var snow_cap_noise_strength: float = 0.12 #How much the cap noise changes the accumulated thickness
@export var snow_mode_color: Color = Color(0.556, 0.62, 0.683, 1.0) #Sky/light darkening color during snow
#Wind settings
@@ -165,7 +152,7 @@ extends Resource
@export var wind_direction: Vector2 = Vector2(0.5, 0.4) #Global wind direction (XZ)
@export var wind_speed: float = 0.2 #Global wind animation speed
@export var wind_scale: float = 0.025 #Global wind noise scale
@export var wind_strength: float = 0.3 #Global wind displacement strength
@export var wind_strength: float = 0.6 #Global wind displacement strength
@export var cloud_scale: float = 0.5 #Cloud noise scale in sky shader
@export var cloud_speed: float = 0.05 #Cloud movement speed in sky shader
@export_range(0.01, 1.0) var cloud_scale_envshadows_rate: float = 0.01 #Cloud scale multiplier for environment shadows
@@ -177,10 +164,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

View File

@@ -10,10 +10,6 @@ signal toggle_wind(value: bool)
@warning_ignore("unused_signal")
signal wind_change(value: float)
@warning_ignore("unused_signal")
signal trigger_random_weather(duration: float)
@warning_ignore("unused_signal")
signal weather_event_changed(description: String)
@warning_ignore("unused_signal")
signal toggle_fireflies(value: bool)
@warning_ignore("unused_signal")
signal toggle_storm(value: bool)
@@ -27,15 +23,9 @@ 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)
#day cycle signals
@warning_ignore("unused_signal")
signal toggle_pause_daytime(value: bool)
@warning_ignore("unused_signal")
signal day_time_changed(value: float, time_string: String)
@warning_ignore("unused_signal")
signal time_option_item_changed(index: int)
@warning_ignore("unused_signal")
signal day_time_option_changed(index: int)

View File

@@ -8,13 +8,12 @@
[ext_resource type="Script" uid="uid://wv6kcqkibium" path="res://core/biome_generator/biome.gd" id="5_2wjys"]
[ext_resource type="PackedScene" uid="uid://cv5xmnow451kl" path="res://core/camera.tscn" id="5_8tojn"]
[ext_resource type="PackedScene" uid="uid://crlk31ecl480n" path="res://tgcc/chunk/countryside/scene/chunk_country_corner_03.tscn" id="6_21usy"]
[ext_resource type="Script" uid="uid://dboerd4a6dwj7" path="res://core/biome_generator/rails.gd" id="6_pypsn"]
[ext_resource type="Script" uid="uid://dboerd4a6dwj7" path="res://docs/museums/biome_generator/rails.gd" id="6_pypsn"]
[ext_resource type="PackedScene" uid="uid://dvk3bytqn3m5s" path="res://tgcc/train/main_train.tscn" id="6_wjpfq"]
[ext_resource type="PackedScene" uid="uid://brpp7fe5noq8v" path="res://tgcc/chunk/countryside/scene/chunk_country_cross_3_01.tscn" id="7_qe84w"]
[ext_resource type="PackedScene" uid="uid://0kgjaqijaqku" path="res://docs/museums/biome_generator/rails.tscn" id="8_mb5yv"]
[ext_resource type="PackedScene" uid="uid://dn1btv0e0ses7" path="res://core/fireworks.tscn" id="8_xtogr"]
[ext_resource type="PackedScene" uid="uid://cu2chsjh8wuvp" path="res://tgcc/chunk/countryside/scene/chunk_country_straight_02.tscn" id="9_sw7bt"]
[ext_resource type="PackedScene" uid="uid://c73yk6858dmwn" path="res://tgcc/chunk/countryside/scene/chunk_country_cross_4_01.tscn" id="10_c7mkj"]
[ext_resource type="PackedScene" uid="uid://cmuvmmp7xam4o" path="res://core/daynight/environment_management.tscn" id="16_c7mkj"]
[ext_resource type="AudioStream" uid="uid://dvabvoqyya0g5" path="res://core/daynight/sounds/thunder_3.mp3" id="17_sw7bt"]
[ext_resource type="AudioStream" uid="uid://creenugno7hm" path="res://core/daynight/sounds/thunder_4.mp3" id="18_2l6dd"]
@@ -101,7 +100,7 @@ compositor_effects = Array[CompositorEffect]([SubResource("CompositorEffect_q52t
[sub_resource type="Resource" id="Resource_3qrd0"]
script = ExtResource("5_2wjys")
name = "countryside"
available_chunks = Array[PackedScene]([ExtResource("6_21usy"), ExtResource("7_qe84w"), ExtResource("9_sw7bt"), ExtResource("10_c7mkj")])
available_chunks = Array[PackedScene]([ExtResource("6_21usy"), ExtResource("7_qe84w"), ExtResource("9_sw7bt")])
metadata/_custom_type_script = "uid://wv6kcqkibium"
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_pypsn"]
@@ -179,10 +178,10 @@ script = ExtResource("23_27ile")
[node name="Snow" type="CheckButton" parent="Control" unique_id=454394427]
layout_mode = 0
offset_left = 8.0
offset_top = 173.0
offset_right = 98.0
offset_bottom = 204.0
offset_left = 21.0
offset_top = 13.0
offset_right = 109.0
offset_bottom = 44.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)
@@ -193,10 +192,10 @@ text = "Snow"
[node name="Rain" type="CheckButton" parent="Control" unique_id=837805524]
layout_mode = 0
offset_left = 8.0
offset_top = 201.0
offset_right = 96.0
offset_bottom = 232.0
offset_left = 21.0
offset_top = 41.0
offset_right = 109.0
offset_bottom = 72.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)
@@ -207,10 +206,10 @@ text = "Rain"
[node name="Wind" type="CheckButton" parent="Control" unique_id=1013004982]
layout_mode = 0
offset_left = 8.0
offset_top = 231.0
offset_right = 96.0
offset_bottom = 262.0
offset_left = 21.0
offset_top = 91.0
offset_right = 109.0
offset_bottom = 122.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)
@@ -221,19 +220,19 @@ text = "Wind"
[node name="WindSlider" type="HSlider" parent="Control" unique_id=28050098]
layout_mode = 0
offset_left = 103.0
offset_top = 238.0
offset_right = 187.0
offset_bottom = 254.0
offset_left = 26.0
offset_top = 124.0
offset_right = 205.0
offset_bottom = 140.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 = 259.0
offset_right = 117.0
offset_bottom = 290.0
offset_left = 21.0
offset_top = 169.0
offset_right = 130.0
offset_bottom = 200.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,10 +243,10 @@ text = "Fireflies"
[node name="Storm" type="CheckButton" parent="Control" unique_id=1792625744]
layout_mode = 0
offset_left = 98.0
offset_top = 201.0
offset_right = 194.0
offset_bottom = 232.0
offset_left = 21.0
offset_top = 66.0
offset_right = 117.0
offset_bottom = 97.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)
@@ -258,88 +257,73 @@ text = "Storm"
[node name="DayTimeLabel" type="Label" parent="Control" unique_id=1124935856]
layout_mode = 0
offset_left = 13.0
offset_top = 15.0
offset_right = 347.0
offset_bottom = 38.0
offset_left = 26.0
offset_top = 150.0
offset_right = 360.0
offset_bottom = 173.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"
[node name="DayTimeSlider" type="HSlider" parent="Control" unique_id=1865778345]
layout_mode = 0
offset_left = 13.0
offset_top = 40.0
offset_right = 138.0
offset_bottom = 56.0
offset_left = 26.0
offset_top = 228.0
offset_right = 205.0
offset_bottom = 244.0
max_value = 1.0
step = 0.01
[node name="DayTimeOptions" type="OptionButton" parent="Control" unique_id=928646468]
layout_mode = 0
offset_left = 13.0
offset_top = 59.0
offset_right = 124.0
offset_bottom = 90.0
selected = 1
item_count = 4
popup/item_0/text = "Sunrise"
popup/item_0/id = 1
popup/item_1/text = "Day"
popup/item_1/id = 2
popup/item_2/text = "Sunset"
popup/item_2/id = 3
popup/item_3/text = "Night"
popup/item_3/id = 4
[node name="Dust" type="CheckButton" parent="Control" unique_id=760281365]
layout_mode = 0
offset_left = 8.0
offset_top = 91.0
offset_right = 137.0
offset_bottom = 122.0
offset_left = 21.0
offset_top = 304.0
offset_right = 150.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)
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)
button_pressed = true
text = "Dust"
[node name="Blur" type="CheckButton" parent="Control" unique_id=1083708100]
layout_mode = 0
offset_left = 8.0
offset_top = 118.0
offset_right = 137.0
offset_bottom = 149.0
offset_left = 21.0
offset_top = 332.0
offset_right = 150.0
offset_bottom = 363.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)
button_pressed = true
text = "Blur"
[node name="Pause" type="CheckButton" parent="Control" unique_id=1587043871]
layout_mode = 0
offset_left = 143.0
offset_top = 31.0
offset_right = 238.0
offset_bottom = 62.0
offset_left = 21.0
offset_top = 243.0
offset_right = 158.0
offset_bottom = 274.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 = "Pause"
text = "Pause Time"
[node name="Shadows" type="CheckButton" parent="Control" unique_id=283354318]
layout_mode = 0
offset_left = 8.0
offset_top = 145.0
offset_right = 137.0
offset_bottom = 176.0
offset_left = 21.0
offset_top = 356.0
offset_right = 150.0
offset_bottom = 387.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)
@@ -349,29 +333,20 @@ theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
button_pressed = true
text = "Shadows"
[node name="RandomWeather" type="Button" parent="Control" unique_id=1047710802]
[node name="Guide" type="Label" parent="Control" unique_id=2121474959]
layout_mode = 0
offset_left = 12.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 (10\")"
[node name="WeatherEventLabel" type="Label" parent="Control" unique_id=641424797]
layout_mode = 0
offset_left = 1656.0
offset_top = 11.0
offset_right = 1908.0
offset_bottom = 34.0
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
text = "Weather: Clear"
offset_left = 26.0
offset_top = 401.0
offset_right = 339.0
offset_bottom = 606.0
text = "R-> Reset isometric camera
C-> Toggle cinematic mode
Z-> soft zoom
Manual controls (1-5)
T -> go to next stop
F -> fireworks
BACKSPACE -> stop train
ARROW UP/DOWN -> change train speed"
[connection signal="toggled" from="Control/Snow" to="Control" method="_on_snow_toggled"]
[connection signal="toggled" from="Control/Rain" to="Control" method="_on_rain_toggled"]
@@ -380,9 +355,7 @@ text = "Weather: Clear"
[connection signal="toggled" from="Control/Fireflies" to="Control" method="_on_fireflies_toggled"]
[connection signal="toggled" from="Control/Storm" to="Control" method="_on_storm_toggled"]
[connection signal="value_changed" from="Control/DayTimeSlider" to="Control" method="_on_day_time_slider_value_changed"]
[connection signal="item_selected" from="Control/DayTimeOptions" to="Control" method="_on_option_button_item_selected"]
[connection signal="toggled" from="Control/Dust" to="Control" method="_on_dust_toggled"]
[connection signal="toggled" from="Control/Blur" to="Control" method="_on_blur_toggled"]
[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"]

File diff suppressed because one or more lines are too long

View File

@@ -47,112 +47,15 @@ var next_stop_index: int = 0
var stop_multiply: float = 1.0
var is_restarting: bool = false
var tween_restart: Tween
var environment_config: EnvironmentConfig
func _ready() -> void:
_cache_environment_config()
if curve != null and curve.get_baked_length() > 0:
build_rails()
build_train()
_plan_stops()
_apply_initial_train_start()
else:
print("WARNING: Draw Path3D for rails!")
func _cache_environment_config() -> void:
var parent_node: Node = get_parent()
if parent_node != null:
var day_night_node := parent_node.get_node_or_null("DayNight") as EnvironmentManagerRoot
if day_night_node != null:
environment_config = day_night_node.environment_config
return
var current_scene: Node = get_tree().current_scene
if current_scene == null:
return
for child in current_scene.get_children():
var environment_manager := child as EnvironmentManagerRoot
if environment_manager != null:
environment_config = environment_manager.environment_config
return
func _apply_initial_train_start() -> void:
if train_instance == null or curve == null:
return
var total_length: float = curve.get_baked_length()
if total_length <= 0.0:
return
#start from a random position
if environment_config != null and environment_config.train_start_from_random_position:
train_progress = randf() * total_length
_update_next_stop_index_from_progress()
elif environment_config != null and not stop_offset.is_empty():
#start from a specific stop
var stop_index: int = clampi(environment_config.train_start_stop_index, 0, stop_offset.size() - 1)
train_progress = stop_offset[stop_index]
_set_next_stop_index_from_current(stop_index)
else:
train_progress = wrapf(train_progress, 0.0, total_length)
_update_next_stop_index_from_progress()
_snap_train_to_progress()
func _set_next_stop_index_from_current(current_stop_index: int) -> void:
if stop_offset.is_empty():
next_stop_index = 0
return
if train_speed >= 0.0:
next_stop_index = (current_stop_index + 1) % stop_offset.size()
else:
next_stop_index = current_stop_index - 1
if next_stop_index < 0:
next_stop_index = stop_offset.size() - 1
func _update_next_stop_index_from_progress() -> void:
if stop_offset.is_empty():
next_stop_index = 0
return
if train_speed >= 0.0:
next_stop_index = 0
for i in range(stop_offset.size()):
if stop_offset[i] > train_progress + 0.001:
next_stop_index = i
return
return
next_stop_index = stop_offset.size() - 1
for i in range(stop_offset.size() - 1, -1, -1):
if stop_offset[i] < train_progress - 0.001:
next_stop_index = i
return
func _snap_train_to_progress() -> void:
if train_instance == null or curve == null:
return
var total_length: float = curve.get_baked_length()
if total_length <= 0.0:
return
train_progress = wrapf(train_progress, 0.0, total_length)
var center_position: Vector3 = to_global(curve.sample_baked(train_progress, true))
var prog_forward: float = wrapf(train_progress + 2.0, 0.0, total_length)
var forward_position: Vector3 = to_global(curve.sample_baked(prog_forward, true))
train_instance.global_position = center_position
if center_position.distance_to(forward_position) > 0.01:
train_instance.look_at(forward_position, Vector3.UP)
train_instance.rotate_y(PI)
if cameras:
cameras.global_position = center_position
cameras.global_basis = train_instance.global_basis
func build_rails() -> void:
var mat_wood = StandardMaterial3D.new()
mat_wood.albedo_color = Color(0.35, 0.2, 0.1)

View File

@@ -1,20 +1,16 @@
extends Control
@onready var day_night: EnvironmentManagerRoot = $"../DayNight"
@onready var weather_event_label: Label = $WeatherEventLabel
@onready var day_night: EnvironmentManagerRoot = get_node_or_null("../DayNight") as EnvironmentManagerRoot
@onready var day_time_label: Label = $DayTimeLabel
@onready var day_time_slider: HSlider = $DayTimeSlider
@onready var wind_slider: HSlider = $WindSlider
@onready var day_time_option: OptionButton = $DayTimeOptions
@onready var wind_slider: HSlider = get_node_or_null("WindSlider") as HSlider
func _ready() -> void:
UIEvents.day_time_changed.connect(_on_day_time_changed)
UIEvents.day_time_option_changed.connect(_on_day_time_option_changed)
UIEvents.weather_event_changed.connect(_on_weather_event_changed)
if day_night != null and day_night.environment_config != null and wind_slider != null:
wind_slider.set_value_no_signal(day_night.environment_config.wind_strength)
_sync_day_time_ui()
_on_weather_event_changed("Weather: Clear")
func _on_rain_toggled(toggled_on: bool) -> void:
UIEvents.toggle_rain.emit(toggled_on)
@@ -28,9 +24,6 @@ func _on_wind_toggled(toggled_on: bool) -> void:
func _on_wind_slider_value_changed(value: float) -> void:
UIEvents.wind_change.emit(value)
func _on_random_weather_pressed() -> void:
UIEvents.trigger_random_weather.emit(10.0)
func _on_fireflies_toggled(toggled_on: bool) -> void:
UIEvents.toggle_fireflies.emit(toggled_on)
@@ -51,10 +44,6 @@ func _on_day_time_changed(value: float, time_string: String) -> void:
label_text = "Time %s | nt %.3f | dt %.3f" % [time_string, value, day_night.day_time]
day_time_label.text = label_text
func _on_weather_event_changed(description: String) -> void:
if weather_event_label:
weather_event_label.text = description
func _on_fog_overlay_toggled(toggled_on: bool) -> void:
UIEvents.toggle_fog_overlay.emit(toggled_on)
@@ -85,17 +74,3 @@ func _sync_day_time_ui() -> void:
day_night_controller.current_time,
day_night_controller.get_time_string()
)
_on_day_time_option_changed(
day_night_controller.get_time_option_index(day_night_controller.current_time)
)
func _on_day_time_option_changed(index: int) -> void:
if day_time_option == null:
return
day_time_option.select(index)
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)

File diff suppressed because one or more lines are too long

View File

@@ -1,57 +0,0 @@
[gd_scene format=3 uid="uid://b7rhqxsyv87r1"]
[ext_resource type="PackedScene" uid="uid://cjv1e8pc6gde1" path="res://tgcc/chunk/countryside/scene/chunk_country_corner_01.tscn" id="1_eexnc"]
[ext_resource type="PackedScene" uid="uid://dqoai3665vb0a" path="res://tgcc/chunk/countryside/scene/chunk_country_corner_02.tscn" id="2_jh6kr"]
[ext_resource type="PackedScene" uid="uid://crlk31ecl480n" path="res://tgcc/chunk/countryside/scene/chunk_country_corner_03.tscn" id="3_pftht"]
[ext_resource type="PackedScene" uid="uid://brpp7fe5noq8v" path="res://tgcc/chunk/countryside/scene/chunk_country_cross_3_01.tscn" id="4_jexg3"]
[ext_resource type="PackedScene" uid="uid://qmt8bkiksgj3" path="res://tgcc/chunk/countryside/scene/chunk_country_cross_3_02.tscn" id="5_hieqo"]
[ext_resource type="PackedScene" uid="uid://d1tfkhuktwthn" path="res://tgcc/chunk/countryside/scene/chunk_country_cross_3_03.tscn" id="6_re3ik"]
[ext_resource type="PackedScene" uid="uid://c73yk6858dmwn" path="res://tgcc/chunk/countryside/scene/chunk_country_cross_4_01.tscn" id="7_v47u4"]
[ext_resource type="PackedScene" uid="uid://b8blm6bwintf7" path="res://tgcc/chunk/countryside/scene/chunk_country_empty_01.tscn" id="8_bag0j"]
[ext_resource type="PackedScene" uid="uid://b002wu5ltuqi4" path="res://tgcc/chunk/countryside/scene/chunk_country_end_01.tscn" id="9_1vyrv"]
[ext_resource type="PackedScene" uid="uid://dtfmvcbninrcu" path="res://tgcc/chunk/countryside/scene/chunk_country_end_02.tscn" id="10_sdnjr"]
[ext_resource type="PackedScene" uid="uid://h6xj43vo84uf" path="res://tgcc/chunk/countryside/scene/chunk_country_straight_01.tscn" id="11_arwwt"]
[ext_resource type="PackedScene" uid="uid://cu2chsjh8wuvp" path="res://tgcc/chunk/countryside/scene/chunk_country_straight_02.tscn" id="12_l62i2"]
[ext_resource type="PackedScene" uid="uid://pxmcy0lhne5d" path="res://tgcc/chunk/countryside/scene/chunk_country_straight_03.tscn" id="13_f3g5s"]
[node name="ZooCountryside" type="Node3D" unique_id=1742985179]
[node name="country" type="Node3D" parent="." unique_id=672430814]
[node name="chunk_country_corner_01" parent="country" unique_id=200417581 instance=ExtResource("1_eexnc")]
[node name="chunk_country_corner_02" parent="country" unique_id=85657005 instance=ExtResource("2_jh6kr")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 22.5)
[node name="chunk_country_corner_03" parent="country" unique_id=1046737870 instance=ExtResource("3_pftht")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 45)
[node name="chunk_country_cross3_01" parent="country" unique_id=319840865 instance=ExtResource("4_jexg3")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22.5, 0, 0)
[node name="chunk_country_cross3_02" parent="country" unique_id=1492245999 instance=ExtResource("5_hieqo")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22.5, 0, 22.5)
[node name="chunk_country_cross3_03" parent="country" unique_id=643218732 instance=ExtResource("6_re3ik")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22.5, 0, 45)
[node name="chunk_country_cross4_01" parent="country" unique_id=680431911 instance=ExtResource("7_v47u4")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -45, 0, 0)
[node name="chunk_country_empty_01" parent="country" unique_id=385761952 instance=ExtResource("8_bag0j")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -67.5, 0, 0)
[node name="chunk_country_end_01" parent="country" unique_id=913263516 instance=ExtResource("9_1vyrv")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -90, 0, 0)
[node name="chunk_country_end_02" parent="country" unique_id=1712924087 instance=ExtResource("10_sdnjr")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -90, 0, 22.5)
[node name="chunk_country_straight_01" parent="country" unique_id=926368352 instance=ExtResource("11_arwwt")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -113, 0, 0)
[node name="chunk_country_straight_02" parent="country" unique_id=1847746456 instance=ExtResource("12_l62i2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -113, 0, 22.5)
[node name="chunk_country_straight_03" parent="country" unique_id=626808879 instance=ExtResource("13_f3g5s")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -113, 0, 45)

View File

@@ -1,36 +0,0 @@
[gd_scene format=3 uid="uid://bvjiqu363c15p"]
[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/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"]
[ext_resource type="PackedScene" uid="uid://f53hfrjaxkwa" path="res://tgcc/chunk/railway/scene/chunk_railway_straight_bridge.tscn" id="20_h1ucl"]
[node name="ZooCountryside" type="Node3D" unique_id=1742985179]
[node name="country" type="Node3D" parent="." unique_id=672430814]
[node name="railway" type="Node3D" parent="." unique_id=1626602327]
[node name="chunk_railway_curve" parent="railway" unique_id=238887300 instance=ExtResource("14_ttcft")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14, 0, -20)
[node name="chunk_railway_station_doubleside" parent="railway" unique_id=1591869611 instance=ExtResource("15_oi62p")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16, 0, 46)
[node name="chunk_railway_station_hero" parent="railway" unique_id=1050909298 instance=ExtResource("16_birpm")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 29, 0, 25)
[node name="chunk_railway_station_oneside" parent="railway" unique_id=310632835 instance=ExtResource("17_esgqd")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16, 0, 24)
[node name="chunk_railway_straight" parent="railway" unique_id=1509029322 instance=ExtResource("18_5ivsh")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 29, 0, 0)
[node name="chunk_railway_straight_2" parent="railway" unique_id=476549215 instance=ExtResource("19_yd4l5")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 29, 0, -23)
[node name="chunk_railway_straight_bridge" parent="railway" unique_id=1049036234 instance=ExtResource("20_h1ucl")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 29, 0, -46)

View File

@@ -11,9 +11,8 @@ config_version=5
[application]
config/name="tgcc"
run/main_scene="uid://38qpxwbpvd28"
run/main_scene="uid://bjkhawylawqof"
config/features=PackedStringArray("4.6", "Forward Plus")
run/max_fps=60
config/icon="uid://bfar1kk3pgq8f"
[autoload]
@@ -24,7 +23,6 @@ UIEvents="*uid://dehu28iq27mbn"
window/size/viewport_width=1920
window/size/viewport_height=1080
window/size/mode=3
window/stretch/mode="canvas_items"
window/stretch/aspect="expand"
@@ -114,35 +112,3 @@ global_wind_fade={
"type": "float",
"value": 1.2
}
global_snow_cap_height={
"type": "float",
"value": 0.0
}
global_snow_cap_flatness_start={
"type": "float",
"value": 0.0
}
global_snow_cap_flatness_end={
"type": "float",
"value": 0.0
}
global_snow_cap_noise_scale={
"type": "float",
"value": 0.0
}
global_snow_cap_noise_strength={
"type": "float",
"value": 0.0
}
global_snow_max_accumulation={
"type": "float",
"value": 0.0
}
global_snow_cap_enabled={
"type": "bool",
"value": false
}
global_water_color={
"type": "color",
"value": Color(0, 0, 0, 1)
}

View File

@@ -43,7 +43,7 @@ size = Vector2(1, 1)
[sub_resource type="PlaneMesh" id="PlaneMesh_oviqx"]
size = Vector2(1, 1)
[node name="chunk_country_corner_01" unique_id=200417581 instance=ExtResource("1_0ffx4")]
[node name="chunk_country_corner_01" unique_id=200417581 groups=["weather_vegetables_node", "wind_node"] instance=ExtResource("1_0ffx4")]
script = ExtResource("2_4d433")
south = true
west = true
@@ -54,16 +54,16 @@ surface_material_override/0 = ExtResource("2_ewqv4")
[node name="Chunk_005" parent="." index="1" unique_id=844192036]
surface_material_override/0 = ExtResource("2_ewqv4")
[node name="Chunk_036" parent="." index="2" unique_id=1584066508 groups=["weather_node"]]
[node name="Chunk_036" parent="." index="2" unique_id=1584066508]
surface_material_override/0 = ExtResource("3_4d433")
[node name="Chunk_037" parent="." index="3" unique_id=1100757609 groups=["weather_node"]]
[node name="Chunk_037" parent="." index="3" unique_id=1100757609]
surface_material_override/0 = ExtResource("3_4d433")
[node name="Water_003" parent="." index="4" unique_id=1047599796]
surface_material_override/0 = ExtResource("4_r06ll")
[node name="grass" type="Node3D" parent="." index="5" unique_id=924191951 groups=["weather_vegetables_node", "wind_node"]]
[node name="grass" type="Node3D" parent="." index="5" unique_id=924191951]
[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)
@@ -94,7 +94,7 @@ material_override = ExtResource("8_vtfy7")
cast_shadow = 0
multimesh = SubResource("MultiMesh_sddh0")
[node name="rice" type="Node3D" parent="." index="6" unique_id=318026795 groups=["weather_vegetables_node", "wind_node"]]
[node name="rice" type="Node3D" parent="." index="6" unique_id=318026795]
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]

View File

@@ -46,7 +46,7 @@ size = Vector2(1, 1)
[sub_resource type="PlaneMesh" id="PlaneMesh_h2iw8"]
size = Vector2(1, 1)
[node name="chunk_country_corner_02" unique_id=85657005 instance=ExtResource("1_r82s4")]
[node name="chunk_country_corner_02" unique_id=85657005 groups=["weather_vegetables_node", "wind_node"] instance=ExtResource("1_r82s4")]
script = ExtResource("2_yfmnf")
south = true
west = true
@@ -54,7 +54,7 @@ west = true
[node name="Argini" parent="." index="0" unique_id=357182272]
surface_material_override/0 = ExtResource("2_02qm6")
[node name="Sentieri" parent="." index="1" unique_id=1704203551 groups=["weather_node"]]
[node name="Sentieri" parent="." index="1" unique_id=1704203551]
surface_material_override/0 = ExtResource("3_yfmnf")
[node name="Terreno" parent="." index="2" unique_id=1478648388]
@@ -63,7 +63,7 @@ surface_material_override/0 = ExtResource("2_02qm6")
[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"]]
[node name="grass" type="Node3D" parent="." index="4" unique_id=543668848]
[node name="grass_plane" type="MeshInstance3D" parent="grass" index="0" unique_id=235424245]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0)
@@ -94,7 +94,7 @@ material_override = ExtResource("8_xu1ds")
cast_shadow = 0
multimesh = SubResource("MultiMesh_6jtv6")
[node name="rice" type="Node3D" parent="." index="5" unique_id=768586320 groups=["weather_vegetables_node", "wind_node"]]
[node name="rice" type="Node3D" parent="." index="5" unique_id=768586320]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -65.14392, 0, 0)
[node name="rice_plane61" type="MeshInstance3D" parent="rice" index="0" unique_id=137429418]

View File

@@ -73,7 +73,7 @@ shader_parameter/random_mix = 0.0
shader_parameter/cast_shadow_strength = 0.0
shader_parameter/wetness_darkening = 0.25
[node name="chunk_country_corner_03" unique_id=1046737870 instance=ExtResource("1_jemyf")]
[node name="chunk_country_corner_03" unique_id=1046737870 groups=["weather_node", "wind_node"] instance=ExtResource("1_jemyf")]
script = ExtResource("2_ejpey")
south = true
west = true
@@ -94,15 +94,11 @@ visible = false
[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=846909534 groups=["weather_node"]]
[node name="House_M_4|Cube_357|Dupli|" parent="House_M_4" index="0" unique_id=1022330799]
[node name="House_M_4|Cube_357|Dupli|" parent="House_M_4" parent_id_path=PackedInt32Array(846909534) 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=2014179807 groups=["weather_node"]]
[node name="House_M_4_001|Cube_357|Dupli|" parent="House_M_4_001" index="0" unique_id=1963982809]
[node name="House_M_4_001|Cube_357|Dupli|" parent="House_M_4_001" parent_id_path=PackedInt32Array(2014179807) index="0" unique_id=1963982809]
surface_material_override/0 = ExtResource("6_333a0")
surface_material_override/1 = ExtResource("4_w66q1")
@@ -110,7 +106,7 @@ surface_material_override/1 = ExtResource("4_w66q1")
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=2137478487 groups=["weather_node"]]
[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=1395117968]
@@ -118,28 +114,28 @@ 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=1252724017 groups=["weather_node"]]
[node name="Panchine_001" parent="." index="10" unique_id=1252724017]
surface_material_override/0 = ExtResource("7_333a0")
[node name="Rocks" parent="." index="11" unique_id=395080391 groups=["weather_node"]]
[node name="Rocks" parent="." index="11" unique_id=395080391]
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=1075151573 groups=["weather_node"]]
[node name="Santuario" parent="." index="12" unique_id=1075151573]
surface_material_override/0 = ExtResource("8_tnnlv")
surface_material_override/1 = ExtResource("3_xcce4")
[node name="Strada" parent="." index="13" unique_id=1300376742 groups=["weather_node"]]
[node name="Strada" parent="." index="13" unique_id=1300376742]
surface_material_override/0 = ExtResource("11_5yfr5")
[node name="Terreno_002" parent="." index="14" unique_id=1672498777 groups=["weather_node"]]
[node name="Terreno_002" parent="." index="14" unique_id=1672498777]
surface_material_override/0 = ExtResource("11_5yfr5")
[node name="tree_PH" parent="." index="15" unique_id=850970876 groups=["weather_node", "wind_node"]]
[node name="tree_PH" parent="." index="15" unique_id=850970876]
visible = false
[node name="grass" type="Node3D" parent="." index="16" unique_id=607638887 groups=["weather_vegetables_node", "wind_node"]]
[node name="grass" type="Node3D" parent="." index="16" unique_id=607638887]
[node name="grass_plane" type="MeshInstance3D" parent="grass" index="0" unique_id=1706761739]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0)
@@ -164,7 +160,7 @@ material_override = ExtResource("10_ejpey")
cast_shadow = 0
multimesh = SubResource("MultiMesh_s7klq")
[node name="flower" type="Node3D" parent="." index="17" unique_id=1207699654 groups=["weather_vegetables_node", "wind_node"]]
[node name="flower" type="Node3D" parent="." index="17" unique_id=1207699654]
[node name="flower_plane" type="MeshInstance3D" parent="flower" index="0" unique_id=1189559649]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0)

View File

@@ -47,7 +47,7 @@ size = Vector2(1, 1)
[sub_resource type="PlaneMesh" id="PlaneMesh_x3b0m"]
size = Vector2(1, 1)
[node name="chunk_country_cross3_01" unique_id=319840865 instance=ExtResource("1_d5ypx")]
[node name="chunk_country_cross3_01" unique_id=319840865 groups=["weather_vegetables_node", "wind_node"] instance=ExtResource("1_d5ypx")]
script = ExtResource("2_wjrum")
north = true
est = true
@@ -60,17 +60,17 @@ surface_material_override/1 = ExtResource("2_6ig2p")
[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=802806256 groups=["weather_node"]]
[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=1200357449 groups=["weather_node"]]
[node name="Strada_007" parent="." index="3" unique_id=1200357449]
surface_material_override/0 = ExtResource("4_s0twx")
[node name="Water_007" parent="." index="4" unique_id=787518082]
surface_material_override/0 = ExtResource("5_on7te")
surface_material_override/1 = ExtResource("5_on7te")
[node name="grass" type="Node3D" parent="." index="5" unique_id=973979211 groups=["weather_vegetables_node", "wind_node"]]
[node name="grass" type="Node3D" parent="." index="5" unique_id=973979211]
[node name="grass_plane" type="MeshInstance3D" parent="grass" index="0" unique_id=146863909]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0)
@@ -101,7 +101,7 @@ material_override = ExtResource("9_52lxu")
cast_shadow = 0
multimesh = SubResource("MultiMesh_on7te")
[node name="rice" type="Node3D" parent="." index="6" unique_id=1355130919 groups=["weather_vegetables_node", "wind_node"]]
[node name="rice" type="Node3D" parent="." index="6" unique_id=1355130919]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -65.14392, 0, 0)
[node name="rice_plane61" type="MeshInstance3D" parent="rice" index="0" unique_id=1212069363]

View File

@@ -62,7 +62,7 @@ buffer = PackedFloat32Array(-0.8020725, 0.5500147, -0.23699094, 3.4572377, -0.28
[sub_resource type="PlaneMesh" id="PlaneMesh_1bb53"]
size = Vector2(1, 1)
[node name="chunk_country_cross3_02" unique_id=1492245999 instance=ExtResource("1_2emma")]
[node name="chunk_country_cross3_02" unique_id=1492245999 groups=["weather_node", "wind_node"] instance=ExtResource("1_2emma")]
script = ExtResource("2_aoxux")
north = true
est = true
@@ -84,15 +84,11 @@ visible = false
[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=628395080 groups=["weather_node"]]
[node name="House_C_1_002|Cube_330|Dupli|" parent="House_C_1_002" index="0" unique_id=1454139767]
[node name="House_C_1_002|Cube_330|Dupli|" parent="House_C_1_002" parent_id_path=PackedInt32Array(628395080) 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=224251697 groups=["weather_node"]]
[node name="House_C_1_003|Cube_330|Dupli|" parent="House_C_1_003" index="0" unique_id=682134143]
[node name="House_C_1_003|Cube_330|Dupli|" parent="House_C_1_003" parent_id_path=PackedInt32Array(224251697) index="0" unique_id=682134143]
surface_material_override/0 = ExtResource("4_yg4ko")
surface_material_override/1 = ExtResource("5_yk001")
@@ -103,17 +99,17 @@ surface_material_override/1 = ExtResource("4_yg4ko")
[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=718749193 groups=["weather_node"]]
[node name="PaliLuci_003" parent="." index="9" unique_id=718749193]
surface_material_override/0 = ExtResource("7_yg4ko")
surface_material_override/1 = ExtResource("7_yg4ko")
[node name="Strada_008" parent="." index="10" unique_id=1129336513 groups=["weather_node"]]
[node name="Strada_008" parent="." index="10" unique_id=1129336513]
surface_material_override/0 = ExtResource("8_yk001")
[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"]]
[node name="grass" type="Node3D" parent="." index="12" unique_id=902068161]
[node name="grass_plane" type="MeshInstance3D" parent="grass" index="0" unique_id=1918482206]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0)
@@ -144,7 +140,7 @@ material_override = ExtResource("9_18gw6")
cast_shadow = 0
multimesh = SubResource("MultiMesh_18gw6")
[node name="flower" type="Node3D" parent="." index="13" unique_id=1748399781 groups=["weather_vegetables_node", "wind_node"]]
[node name="flower" type="Node3D" parent="." index="13" unique_id=1748399781]
[node name="flower_plane" type="MeshInstance3D" parent="flower" index="0" unique_id=530008207]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0)
@@ -163,7 +159,7 @@ material_override = ExtResource("11_w75rp")
cast_shadow = 0
multimesh = SubResource("MultiMesh_w75rp")
[node name="rice" type="Node3D" parent="." index="14" unique_id=1573887230 groups=["weather_vegetables_node", "wind_node"]]
[node name="rice" type="Node3D" parent="." index="14" unique_id=1573887230]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -64.08334, 0, 0)
[node name="rice_plane61" type="MeshInstance3D" parent="rice" index="0" unique_id=526289283]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -45,7 +45,7 @@ size = Vector2(1, 1)
[sub_resource type="PlaneMesh" id="PlaneMesh_hqb6i"]
size = Vector2(1, 1)
[node name="chunk_country_empty_01" unique_id=385761952 instance=ExtResource("1_xc6vo")]
[node name="chunk_country_empty_01" unique_id=385761952 groups=["weather_vegetables_node", "wind_node"] instance=ExtResource("1_xc6vo")]
script = ExtResource("2_mfq5p")
[node name="Argini_002" parent="." index="0" unique_id=1558358546]
@@ -58,7 +58,7 @@ surface_material_override/0 = ExtResource("2_w0lad")
surface_material_override/0 = ExtResource("3_mfq5p")
surface_material_override/1 = ExtResource("3_mfq5p")
[node name="grass" type="Node3D" parent="." index="3" unique_id=146158338 groups=["weather_vegetables_node", "wind_node"]]
[node name="grass" type="Node3D" parent="." index="3" unique_id=146158338]
[node name="grass_plane" type="MeshInstance3D" parent="grass" index="0" unique_id=1720701245]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0)
@@ -89,7 +89,7 @@ material_override = ExtResource("7_3q5r1")
cast_shadow = 0
multimesh = SubResource("MultiMesh_1yov0")
[node name="rice" type="Node3D" parent="." index="4" unique_id=1018338927 groups=["weather_vegetables_node", "wind_node"]]
[node name="rice" type="Node3D" parent="." index="4" unique_id=1018338927]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -43.691254, 0, 0)
[node name="rice_plane61" type="MeshInstance3D" parent="rice" index="0" unique_id=1975724187]

View File

@@ -66,7 +66,7 @@ buffer = PackedFloat32Array(-0.57898194, -0.039031368, -0.81563324, 0.4136602, -
[sub_resource type="PlaneMesh" id="PlaneMesh_2qvfo"]
size = Vector2(1, 1)
[node name="chunk_country_end_01" unique_id=913263516 instance=ExtResource("1_hoyg3")]
[node name="chunk_country_end_01" unique_id=913263516 groups=["weather_node", "wind_node"] instance=ExtResource("1_hoyg3")]
script = ExtResource("2_mekjb")
west = true
@@ -82,21 +82,19 @@ surface_material_override/2 = ExtResource("5_ygc8c")
surface_material_override/0 = ExtResource("4_nugyy")
surface_material_override/1 = ExtResource("4_nugyy")
[node name="Cortile_002" parent="." index="3" unique_id=267016892 groups=["weather_node"]]
[node name="Cortile_002" parent="." index="3" unique_id=267016892]
surface_material_override/0 = ExtResource("5_ygc8c")
[node name="Flower_005" parent="." index="4" unique_id=1549966189 groups=["weather_node", "wind_node"]]
[node name="Flower_005" parent="." index="4" unique_id=1549966189]
visible = false
[node name="FlowerG_003" parent="." index="5" unique_id=65871813 groups=["weather_node", "wind_node"]]
[node name="FlowerG_003" parent="." index="5" unique_id=65871813]
visible = false
[node name="Grass_008" parent="." index="6" unique_id=1853173495]
surface_material_override/0 = ExtResource("2_cltnj")
[node name="House_M_3" parent="." index="7" unique_id=155596536 groups=["weather_node"]]
[node name="House_M_3|Cube_212|Dupli|" parent="House_M_3" index="0" unique_id=1321014561]
[node name="House_M_3|Cube_212|Dupli|" parent="House_M_3" parent_id_path=PackedInt32Array(155596536) index="0" unique_id=1321014561]
surface_material_override/0 = ExtResource("6_pjysl")
surface_material_override/1 = ExtResource("7_0r8cm")
@@ -104,28 +102,28 @@ surface_material_override/1 = ExtResource("7_0r8cm")
surface_material_override/0 = ExtResource("7_0r8cm")
surface_material_override/1 = ExtResource("6_pjysl")
[node name="MSH_Staccioanta_1_005" parent="." index="9" unique_id=1042751383 groups=["weather_node"]]
[node name="MSH_Staccioanta_1_005" parent="." index="9" unique_id=1042751383]
surface_material_override/0 = ExtResource("8_hmdr4")
[node name="PaliLuci_002" parent="." index="10" unique_id=1504995410]
surface_material_override/0 = ExtResource("3_aj7xj")
surface_material_override/1 = ExtResource("3_aj7xj")
[node name="Panchina_002" parent="." index="11" unique_id=876085859 groups=["weather_node"]]
[node name="Panchina_002" parent="." index="11" unique_id=876085859]
surface_material_override/0 = ExtResource("8_hmdr4")
[node name="Strada_006" parent="." index="12" unique_id=76888486 groups=["weather_node"]]
[node name="Strada_006" parent="." index="12" unique_id=76888486]
surface_material_override/0 = ExtResource("5_ygc8c")
[node name="Water_005" parent="." index="13" unique_id=425747200]
surface_material_override/0 = ExtResource("9_mekjb")
[node name="WoodPile_003" parent="." index="14" unique_id=1314797412 groups=["weather_node"]]
[node name="WoodPile_003" parent="." index="14" unique_id=1314797412]
surface_material_override/0 = ExtResource("3_aj7xj")
surface_material_override/1 = ExtResource("10_0ehik")
surface_material_override/2 = ExtResource("4_nugyy")
[node name="grass" type="Node3D" parent="." index="15" unique_id=1300999061 groups=["weather_vegetables_node", "wind_node"]]
[node name="grass" type="Node3D" parent="." index="15" unique_id=1300999061]
[node name="grass_plane" type="MeshInstance3D" parent="grass" index="0" unique_id=1396676607]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0)
@@ -156,7 +154,7 @@ material_override = ExtResource("14_j41gr")
cast_shadow = 0
multimesh = SubResource("MultiMesh_j41gr")
[node name="flower" type="Node3D" parent="." index="16" unique_id=1920026518 groups=["weather_vegetables_node", "wind_node"]]
[node name="flower" type="Node3D" parent="." index="16" unique_id=1920026518]
[node name="flower_plane" type="MeshInstance3D" parent="flower" index="0" unique_id=1851791775]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0)
@@ -175,7 +173,7 @@ material_override = ExtResource("16_ubhkt")
cast_shadow = 0
multimesh = SubResource("MultiMesh_ubhkt")
[node name="rice" type="Node3D" parent="." index="17" unique_id=1607516177 groups=["weather_vegetables_node", "wind_node"]]
[node name="rice" type="Node3D" parent="." index="17" unique_id=1607516177]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -43.663548, 0, 0)
[node name="rice_plane61" type="MeshInstance3D" parent="rice" index="0" unique_id=318301579]

View File

@@ -58,7 +58,7 @@ size = Vector2(1, 1)
[sub_resource type="PlaneMesh" id="PlaneMesh_dmw3x"]
size = Vector2(1, 1)
[node name="chunk_country_end_02" unique_id=1712924087 instance=ExtResource("1_k5c0x")]
[node name="chunk_country_end_02" unique_id=1712924087 groups=["weather_vegetables_node", "wind_node"] instance=ExtResource("1_k5c0x")]
script = ExtResource("2_dmw3x")
west = true
@@ -69,13 +69,13 @@ surface_material_override/1 = ExtResource("2_25r6y")
[node name="Chunk_012" parent="." index="1" unique_id=1078763244]
surface_material_override/0 = ExtResource("2_25r6y")
[node name="Chunk_041" parent="." index="2" unique_id=632981721 groups=["weather_node"]]
[node name="Chunk_041" parent="." index="2" unique_id=632981721]
surface_material_override/0 = ExtResource("3_gelvl")
[node name="Flower_006" parent="." index="3" unique_id=909770430 groups=["weather_node", "wind_node"]]
[node name="Flower_006" parent="." index="3" unique_id=909770430]
visible = false
[node name="FlowerG_004" parent="." index="4" unique_id=381594965 groups=["weather_node", "wind_node"]]
[node name="FlowerG_004" parent="." index="4" unique_id=381594965]
visible = false
[node name="MSH_Staccioanta_1_006" parent="." index="5" unique_id=337379290]
@@ -85,7 +85,7 @@ surface_material_override/0 = ExtResource("4_t26nr")
surface_material_override/0 = ExtResource("5_5xj2s")
surface_material_override/1 = ExtResource("5_5xj2s")
[node name="grass" type="Node3D" parent="." index="7" unique_id=2026701592 groups=["weather_vegetables_node", "wind_node"]]
[node name="grass" type="Node3D" parent="." index="7" unique_id=2026701592]
[node name="grass_plane" type="MeshInstance3D" parent="grass" index="0" unique_id=1366309139]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0)
@@ -116,7 +116,7 @@ material_override = ExtResource("9_15guu")
cast_shadow = 0
multimesh = SubResource("MultiMesh_i5qpy")
[node name="flower" type="Node3D" parent="." index="8" unique_id=1929046466 groups=["weather_vegetables_node", "wind_node"]]
[node name="flower" type="Node3D" parent="." index="8" unique_id=1929046466]
[node name="flower_plane" type="MeshInstance3D" parent="flower" index="0" unique_id=2041831035]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0)
@@ -135,7 +135,7 @@ material_override = ExtResource("11_7l6eg")
cast_shadow = 0
multimesh = SubResource("MultiMesh_qv1gu")
[node name="rice" type="Node3D" parent="." index="9" unique_id=1332831028 groups=["weather_vegetables_node", "wind_node"]]
[node name="rice" type="Node3D" parent="." index="9" unique_id=1332831028]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -21.24793, 0, 0)
[node name="rice_plane61" type="MeshInstance3D" parent="rice" index="0" unique_id=1243973490]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -41,7 +41,7 @@ instance_count = 32
mesh = SubResource("PlaneMesh_qbybq")
buffer = PackedFloat32Array(4.37551e-08, -1.001, 0, 1.4436365, -1.001, -4.37551e-08, -1.193285e-07, 5.90925e-07, 1.193285e-07, 5.2160145e-15, -1.001, 4.957038, 4.37551e-08, -1.001, 0, 2.3548617, -1.001, -4.37551e-08, -1.193285e-07, -1.0941294e-06, 1.193285e-07, 5.2160145e-15, -1.001, -9.178222, -4.37551e-08, 1.001, 0, -2.1539469, -1.001, -4.37551e-08, 1.193285e-07, 6.764908e-07, 1.193285e-07, 5.2160145e-15, 1.001, 5.6748157, 0, 0, 1.001, -3.522233, -1.001, -1.6308341e-07, 0, 1.1598428e-06, 1.6308341e-07, -1.001, 0, 9.7294655, 4.37551e-08, -1.001, 0, -2.3750048, -1.001, -4.37551e-08, -1.193285e-07, -8.002526e-07, 1.193285e-07, 5.2160145e-15, -1.001, -6.713005, 4.37551e-08, -1.001, 0, 2.2656145, -1.001, -4.37551e-08, -1.193285e-07, -8.30627e-07, 1.193285e-07, 5.2160145e-15, -1.001, -6.967804, 4.37551e-08, -1.001, 0, 9.983301, -1.001, -4.37551e-08, -1.193285e-07, -1.0638838e-06, 1.193285e-07, 5.2160145e-15, -1.001, -8.924504, 4.37551e-08, -1.001, 0, 9.870501, -1.001, -4.37551e-08, -1.193285e-07, -7.065843e-07, 1.193285e-07, 5.2160145e-15, -1.001, -5.927258, 4.37551e-08, -1.001, 0, 9.777409, -1.001, -4.37551e-08, -1.1932852e-07, -2.2159094e-07, 1.1932852e-07, 5.216015e-15, -1.001, -1.858839, 0, 0, -1.001, -7.2809563, -1.001, 7.557322e-08, 0, 1.1515594e-06, 7.557322e-08, 1.001, 0, 9.659981, 4.37551e-08, -1.001, 0, 1.5753043, -1.001, -4.37551e-08, -1.193285e-07, -7.415571e-07, 1.193285e-07, 5.2160145e-15, -1.001, -6.2206306, -4.37551e-08, 1.001, 0, -1.6459117, -1.001, -4.37551e-08, 1.1932852e-07, 2.0994337e-07, 1.1932852e-07, 5.216015e-15, 1.001, 1.7611322, -4.37551e-08, 1.001, 0, -1.6573532, -1.001, -4.37551e-08, 1.193285e-07, 5.4281963e-07, 1.193285e-07, 5.2160145e-15, 1.001, 4.553501, 4.37551e-08, -1.001, 0, -9.666366, -1.001, -4.37551e-08, -1.193285e-07, -6.3433015e-07, 1.193285e-07, 5.2160145e-15, -1.001, -5.321146, 4.37551e-08, -1.001, 0, 1.7112222, -1.001, -4.37551e-08, -1.1932852e-07, -4.0534985e-08, 1.1932852e-07, 5.216015e-15, -1.001, -0.3400321, 0, 0, -1.001, -6.320602, -1.001, 7.557317e-08, 0, -1.1410427e-06, 7.557317e-08, 1.001, 0, -9.57176, 4.37551e-08, -1.001, 0, -9.633287, -1.001, -4.37551e-08, -1.193285e-07, -6.835893e-07, 1.193285e-07, 5.2160145e-15, -1.001, -5.734362, 4.37551e-08, -1.001, 0, 9.493034, -1.001, -4.37551e-08, -1.193285e-07, -5.125066e-07, 1.193285e-07, 5.2160145e-15, -1.001, -4.2992167, 4.37551e-08, -1.001, 0, -2.1895092, -1.001, -4.37551e-08, -1.1932852e-07, -1.44122225e-08, 1.1932852e-07, 5.216015e-15, -1.001, -0.120898485, 4.37551e-08, -1.001, 0, 1.496448, -1.001, -4.37551e-08, -1.193285e-07, -8.960085e-07, 1.193285e-07, 5.2160145e-15, -1.001, -7.516263, 4.37551e-08, -1.001, 0, 9.70562, -1.001, -4.37551e-08, -1.1932852e-07, 8.5078625e-08, 1.1932852e-07, 5.216015e-15, -1.001, 0.71369076, 4.37551e-08, -1.001, 0, -2.4011462, -1.001, -4.37551e-08, -1.193285e-07, -5.77504e-07, 1.193285e-07, 5.2160145e-15, -1.001, -4.8444543, -4.37551e-08, 1.001, 0, 1.6878386, -1.001, -4.37551e-08, 1.193285e-07, 9.986915e-07, 1.193285e-07, 5.2160145e-15, 1.001, 8.37763, 4.37551e-08, -1.001, 0, -2.3136365, -1.001, -4.37551e-08, -1.193285e-07, -6.1744095e-07, 1.193285e-07, 5.2160145e-15, -1.001, -5.1794696, 4.37551e-08, -1.001, 0, 1.636618, -1.001, -4.37551e-08, -1.193285e-07, -9.449608e-07, 1.193285e-07, 5.2160145e-15, -1.001, -7.9269047, 4.37551e-08, -1.001, 0, -2.0947156, -1.001, -4.37551e-08, -1.1932852e-07, -1.478395e-07, 1.1932852e-07, 5.216015e-15, -1.001, -1.2401676, -4.37551e-08, 1.001, 0, 2.3230088, -1.001, -4.37551e-08, 1.1932852e-07, 7.131021e-09, 1.1932852e-07, 5.216015e-15, 1.001, 0.05981946, 4.37551e-08, -1.001, 0, -9.901721, -1.001, -4.37551e-08, -1.1932848e-07, 4.759366e-07, 1.1932848e-07, 5.2160132e-15, -1.001, 3.9924448, 4.37551e-08, -1.001, 0, 1.684428, -1.001, -4.37551e-08, -1.1932853e-07, 1.2612915e-07, 1.1932853e-07, 5.2160158e-15, -1.001, 1.0580478, 0, 0, -1.001, -8.30739, -1.001, 7.557322e-08, 0, 1.1448899e-06, 7.557322e-08, 1.001, 0, 9.604031, -4.37551e-08, 1.001, 0, -1.9201362, -1.001, -4.37551e-08, 1.1932852e-07, 1.6153854e-07, 1.1932852e-07, 5.216015e-15, 1.001, 1.3550835, -4.37551e-08, 1.001, 0, 2.1781456, -1.001, -4.37551e-08, 1.193285e-07, 6.70996e-07, 1.193285e-07, 5.2160145e-15, 1.001, 5.628721)
[node name="chunk_country_straight_03" unique_id=626808879 instance=ExtResource("1_3g8xx")]
[node name="chunk_country_straight_03" unique_id=626808879 groups=["weather_vegetables_node", "wind_node"] instance=ExtResource("1_3g8xx")]
script = ExtResource("2_e417f")
north = true
south = true
@@ -49,19 +49,19 @@ south = true
[node name="Argini_003" parent="." index="0" unique_id=509439881]
surface_material_override/0 = ExtResource("2_8tada")
[node name="Grass_005" parent="." index="1" unique_id=188609017 groups=["weather_vegetables_node", "wind_node"]]
[node name="Grass_005" parent="." index="1" unique_id=188609017]
surface_material_override/0 = ExtResource("2_8tada")
[node name="MSH_Staccioanta_1_002" parent="." index="2" unique_id=746941179]
surface_material_override/0 = ExtResource("2_vjhke")
[node name="Strada_004" parent="." index="3" unique_id=604168900 groups=["weather_node"]]
[node name="Strada_004" parent="." index="3" unique_id=604168900]
surface_material_override/0 = ExtResource("3_bdsn7")
[node name="Water_004" parent="." index="4" unique_id=244513747]
surface_material_override/0 = ExtResource("5_uf7g8")
[node name="grass" type="Node3D" parent="." index="5" unique_id=1540226859 groups=["weather_vegetables_node", "wind_node"]]
[node name="grass" type="Node3D" parent="." index="5" unique_id=1540226859]
[node name="grass_plane" type="MeshInstance3D" parent="grass" index="0" unique_id=1909807516]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0)
@@ -92,7 +92,7 @@ material_override = ExtResource("9_5s0jh")
cast_shadow = 0
multimesh = SubResource("MultiMesh_e417f")
[node name="rice" type="Node3D" parent="." index="6" unique_id=1524870522 groups=["weather_vegetables_node", "wind_node"]]
[node name="rice" type="Node3D" parent="." index="6" unique_id=1524870522]
[node name="rice_plane" type="MeshInstance3D" parent="rice" index="0" unique_id=629743434]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, -7.7446303, 0.1751585, 7.767477)

View File

@@ -1,24 +0,0 @@
[gd_resource type="ShaderMaterial" format=3 uid="uid://xrxl0d5h6f6s"]
[ext_resource type="Shader" uid="uid://d0ch5ofrgf7y6" path="res://core/daynight/trunk_shader.gdshader" id="1_rl1n5"]
[resource]
render_priority = 0
shader = ExtResource("1_rl1n5")
shader_parameter/albedo_color = Color(0.74859685, 0.72101974, 0.57504904, 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

View File

@@ -1,24 +0,0 @@
[gd_resource type="ShaderMaterial" format=3 uid="uid://chppialx3cyph"]
[ext_resource type="Shader" uid="uid://d0ch5ofrgf7y6" path="res://core/daynight/trunk_shader.gdshader" id="1_vresk"]
[resource]
render_priority = 0
shader = ExtResource("1_vresk")
shader_parameter/albedo_color = Color(0.48413807, 0.37183177, 0.06357419, 1)
shader_parameter/use_texture = true
shader_parameter/uv_scale = Vector2(1, 1)
shader_parameter/palette_shift_y = 0.0
shader_parameter/gradient_start_y = 0.0
shader_parameter/gradient_end_y = 10.0
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

View File

@@ -1,24 +0,0 @@
[gd_resource type="ShaderMaterial" format=3 uid="uid://c8fkccysike5l"]
[ext_resource type="Shader" uid="uid://d0ch5ofrgf7y6" path="res://core/daynight/trunk_shader.gdshader" id="1_ndadq"]
[resource]
render_priority = 0
shader = ExtResource("1_ndadq")
shader_parameter/albedo_color = Color(0.49797475, 0.22462493, 0.1484783, 1)
shader_parameter/use_texture = true
shader_parameter/uv_scale = Vector2(1, 1)
shader_parameter/palette_shift_y = 0.0
shader_parameter/gradient_start_y = 0.0
shader_parameter/gradient_end_y = 10.0
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

View File

@@ -2,13 +2,13 @@
[ext_resource type="Shader" uid="uid://8l8glwvvs7fb" path="res://core/daynight/grass_leaves.gdshader" id="1_yw70r"]
[ext_resource type="Texture2D" uid="uid://bm0roy74xo3ce" path="res://tgcc/chunk/prop/flower/bush_alpha.png" id="2_rv6bf"]
[ext_resource type="Texture2D" uid="uid://bkuv31yvqmqr2" path="res://tgcc/chunk/prop/flower/bush_colornoise.tres" id="3_t3pfi"]
[ext_resource type="Texture2D" path="res://tgcc/chunk/prop/flower/bush_colornoise.tres" id="3_t3pfi"]
[resource]
render_priority = 0
shader = ExtResource("1_yw70r")
shader_parameter/billboard_enabled = true
shader_parameter/wind_enabled = true
shader_parameter/wind_enabled = false
shader_parameter/base_color = Color(0.2509804, 0.44705883, 0.20392157, 1)
shader_parameter/alpha_texture = ExtResource("2_rv6bf")
shader_parameter/leaves_scale = 0.65

View File

@@ -8,7 +8,7 @@
render_priority = 0
shader = ExtResource("1_28e45")
shader_parameter/billboard_enabled = true
shader_parameter/wind_enabled = true
shader_parameter/wind_enabled = false
shader_parameter/base_color = Color(0, 0.42745098, 0.9843137, 1)
shader_parameter/alpha_texture = ExtResource("2_4kf4f")
shader_parameter/leaves_scale = 0.365

View File

@@ -16,7 +16,7 @@ seamless = true
render_priority = 0
shader = ExtResource("1_a5yde")
shader_parameter/billboard_enabled = true
shader_parameter/wind_enabled = true
shader_parameter/wind_enabled = false
shader_parameter/base_color = Color(0.3882353, 0.52156866, 0.20784314, 1)
shader_parameter/alpha_texture = ExtResource("2_4hc02")
shader_parameter/leaves_scale = 0.65
@@ -24,13 +24,13 @@ shader_parameter/rotation_degrees = 180.0
shader_parameter/texture_offset = Vector2(0, 0)
shader_parameter/opacity = 1.0
shader_parameter/color_variance_noise = SubResource("NoiseTexture2D_4hc02")
shader_parameter/variance_scale = 0.06
shader_parameter/variance_scale = 0.15
shader_parameter/variance_color = Color(0.3, 0.5, 0.2, 1)
shader_parameter/variance_intensity = 0.350000016625
shader_parameter/variance_intensity = 0.750000035625
shader_parameter/snow_color = Color(0.85, 0.9, 0.95, 1)
shader_parameter/height_min = 0.0
shader_parameter/height_max = 5.0
shader_parameter/shadow_intensity = 0.6000000285
shader_parameter/shadow_intensity = 0.70000003325
shader_parameter/highlight_intensity = 0.10000000475
shader_parameter/light_steps = 8.600000361
shader_parameter/random_mix = 0.0150000007125

View File

@@ -7,7 +7,7 @@
render_priority = 0
shader = ExtResource("1_0cuwq")
shader_parameter/billboard_enabled = true
shader_parameter/wind_enabled = true
shader_parameter/wind_enabled = false
shader_parameter/base_color = Color(0.103467666, 0.34917185, 0.14285779, 1)
shader_parameter/alpha_texture = ExtResource("2_ldsj3")
shader_parameter/leaves_scale = 0.92

View File

@@ -7,7 +7,7 @@
render_priority = 0
shader = ExtResource("1_vpd27")
shader_parameter/billboard_enabled = true
shader_parameter/wind_enabled = true
shader_parameter/wind_enabled = false
shader_parameter/base_color = Color(0.14700681, 0.45590013, 0.22758594, 1)
shader_parameter/alpha_texture = ExtResource("2_wl0p2")
shader_parameter/leaves_scale = 0.46
@@ -21,4 +21,3 @@ shader_parameter/highlight_intensity = 0.0
shader_parameter/light_steps = 10.0
shader_parameter/random_mix = 0.010000000475
shader_parameter/cast_shadow_strength = 0.6
shader_parameter/wetness_darkening = 0.25

View File

@@ -1,24 +0,0 @@
[gd_resource type="ShaderMaterial" format=3 uid="uid://bamlo2a2cen7j"]
[ext_resource type="Shader" uid="uid://cs0xl7pc6e26h" path="res://core/daynight/tree_leaves.gdshader" id="1_1pbmj"]
[ext_resource type="Texture2D" uid="uid://c3grftlmap4q5" path="res://tgcc/chunk/prop/tree/leaf1_alpha.png" id="2_iw3ik"]
[resource]
render_priority = 0
shader = ExtResource("1_1pbmj")
shader_parameter/billboard_enabled = true
shader_parameter/wind_enabled = true
shader_parameter/base_color = Color(0.9549616, 0.54784274, 0.71385026, 1)
shader_parameter/alpha_texture = ExtResource("2_iw3ik")
shader_parameter/leaves_scale = 0.5
shader_parameter/rotation_degrees = 180.0
shader_parameter/texture_offset = Vector2(0, 0)
shader_parameter/opacity = 1.0
shader_parameter/height_min = 3.1
shader_parameter/height_max = 5.43
shader_parameter/shadow_intensity = 0.800000038
shader_parameter/highlight_intensity = 0.0
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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,205 +1,3 @@
[gd_scene format=3 uid="uid://1c1ion0qnho4"]
[gd_scene format=3 uid="uid://cm1ts0kkpbret"]
[ext_resource type="PackedScene" uid="uid://cl2ast2tk7ifw" path="res://tgcc/chunk/railway/scene/chunk_railway_curve.tscn" id="1_p62h3"]
[ext_resource type="PackedScene" uid="uid://bqxpqhla2kogq" path="res://tgcc/chunk/railway/scene/chunk_railway_straight.tscn" id="2_e76ix"]
[ext_resource type="PackedScene" uid="uid://c3ub6rj0tlt6q" path="res://tgcc/chunk/railway/scene/chunk_railway_straight_2.tscn" id="3_wf82y"]
[ext_resource type="PackedScene" uid="uid://f53hfrjaxkwa" path="res://tgcc/chunk/railway/scene/chunk_railway_straight_bridge.tscn" id="4_l8ggx"]
[ext_resource type="PackedScene" uid="uid://d3pcshw2bioic" path="res://tgcc/chunk/railway/scene/chunk_railway_station_oneside.tscn" id="5_bn4ba"]
[ext_resource type="PackedScene" uid="uid://cewdxvcpqb53f" path="res://tgcc/chunk/railway/scene/chunk_railway_station_doubleside.tscn" id="6_t5p8i"]
[ext_resource type="PackedScene" uid="uid://bup6gwlxos0w2" path="res://tgcc/chunk/railway/scene/chunk_railway_station_hero.tscn" id="7_8nm7p"]
[ext_resource type="Script" uid="uid://dboerd4a6dwj7" path="res://core/biome_generator/rails.gd" id="8_w775f"]
[ext_resource type="PackedScene" uid="uid://dvk3bytqn3m5s" path="res://tgcc/train/main_train.tscn" id="9_haiv3"]
[sub_resource type="Curve3D" id="Curve3D_rfork"]
closed = true
bake_interval = 150.82
_data = {
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, -4.372, 0, 140, 0, 0, 0, 0, 0, 0, -20.963, 0, 160, 0, 0, 0, 0, 0, 0, -40.62518, 0, 168.52754, 0, 0, 0, 0, 0, 0, -60, 0, 170, 0, 0, 0, 0, 0, 0, -80, 0, 170, 0, 0, 0, 0, 0, 0, -100, 0, 170, 0, 0, 0, 0, 0, 0, -120.42937, 0, 171.50279, 0, 0, 0, 0, 0, 0, -141.41747, 7.6293945e-06, 180.5982, 0, 0, 0, 0, 0, 0, -155.77005, 7.6293945e-06, 198.35184, 0, 0, 0, 0, 0, 0, -160.14105, 7.6293945e-06, 219.80951, 0, 0, 0, 0, 0, 0, -163.99007, 7.6293945e-06, 239.36005, 0, 0, 0, 0, 0, 0, -175.77509, 7.6293945e-06, 256.16028, 0, 0, 0, 0, 0, 0, -195.62283, 7.6293945e-06, 267.46912, 0, 0, 0, 0, 0, 0, -219.9999, 7.6293945e-06, 270.11758, 0, 0, 0, 0, 0, 0, -240, 0, 270.118, 0, 0, 0, 0, 0, 0, -260, 0, 270.118, 0, 0, 0, 0, 0, 0, -275.19666, 7.6293945e-06, 270.55228, 0, 0, 0, 0, 0, 0, -294.2925, 7.6293945e-06, 276.05307, 0, 0, 0, 0, 0, 0, -307.19006, 7.6293945e-06, 286.9095, 0, 0, 0, 0, 0, 0, -317.32443, 7.6293945e-06, 303.14682, 0, 0, 0, 0, 0, 0, -320, 0, 320, 0, 0, 0, 0, 0, 0, -320, 0, 340, 0, 0, 0, 0, 0, 0, -320, 0, 360, 0, 0, 0, 0, 0, 0, -320, 0, 380, 0, 0, 0, 0, 0, 0, -316.78876, 7.6293945e-06, 396.91193, 0, 0, 0, 0, 0, 0, -307.68207, 7.6293945e-06, 412.70596, 0, 0, 0, 0, 0, 0, -291.08273, 7.6293945e-06, 424.7491, 0, 0, 0, 0, 0, 0, -270, 0, 429.994, 0, 0, 0, 0, 0, 0, -250, 0, 429.994, 0, 0, 0, 0, 0, 0, -229.90146, 7.6293945e-06, 433.90823, 0, 0, 0, 0, 0, 0, -217.15442, 7.6293945e-06, 442.98242, 0, 0, 0, 0, 0, 0, -204.60803, 7.6293945e-06, 459.93704, 0, 0, 0, 0, 0, 0, -200, 0, 480, 0, 0, 0, 0, 0, 0, -200, 0, 500, 0, 0, 0, 0, 0, 0, -195.5338, 7.6293945e-06, 520.0368, 0, 0, 0, 0, 0, 0, -184.9173, 7.6293945e-06, 535.07776, 0, 0, 0, 0, 0, 0, -170.36423, 7.6293945e-06, 545.0799, 0, 0, 0, 0, 0, 0, -150.56184, 0, 549.8127, 0, 0, 0, 0, 0, 0, -130, 0, 550, 0, 0, 0, 0, 0, 0, -110, 0, 550, 0, 0, 0, 0, 0, 0, -90, 0, 550, 0, 0, 0, 0, 0, 0, -70, 0, 550, 0, 0, 0, 0, 0, 0, -50, 0, 550, 0, 0, 0, 0, 0, 0, -29.862535, 7.6293945e-06, 545.3371, 0, 0, 0, 0, 0, 0, -13.215244, 7.6293945e-06, 533.0626, 0, 0, 0, 0, 0, 0, -4.098665, 7.6293945e-06, 519.6814, 0, 0, 0, 0, 0, 0, -0.048213482, 7.6293945e-06, 500.107, 0, 0, 0, 0, 0, 0, 3.7920675, 7.6293945e-06, 480.64902, 0, 0, 0, 0, 0, 0, 13.513225, 7.6293945e-06, 465.9133, 0, 0, 0, 0, 0, 0, 29.76715, 7.6293945e-06, 454.41486, 0, 0, 0, 0, 0, 0, 49.711926, 7.6293945e-06, 450.12488, 0, 0, 0, 0, 0, 0, 70, 0, 450, 0, 0, 0, 0, 0, 0, 90, 0, 450, 0, 0, 0, 0, 0, 0, 110.055405, 7.6293945e-06, 445.42627, 0, 0, 0, 0, 0, 0, 126.975784, 7.6293945e-06, 432.8683, 0, 0, 0, 0, 0, 0, 136.95703, 7.6293945e-06, 417.5506, 0, 0, 0, 0, 0, 0, 140, 0, 400, 0, 0, 0, 0, 0, 0, 140, 0, 380, 0, 0, 0, 0, 0, 0, 140, 0, 360, 0, 0, 0, 0, 0, 0, 140, 0, 340, 0, 0, 0, 0, 0, 0, 140, 0, 320, 0, 0, 0, 0, 0, 0, 140, 0, 300, 0, 0, 0, 0, 0, 0, 140, 0, 280, 0, 0, 0, 0, 0, 0, 140, 0, 260, 0, 0, 0, 0, 0, 0, 140, 0, 240, 0, 0, 0, 0, 0, 0, 140, 0, 220, 0, 0, 0, 0, 0, 0, 140, 0, 200, 0, 0, 0, 0, 0, 0, 140, 0, 180, 0, 0, 0, 0, 0, 0, 140, 0, 160, 0, 0, 0, 0, 0, 0, 140, 0, 140, 0, 0, 0, 0, 0, 0, 140, 0, 120, 0, 0, 0, 0, 0, 0, 140, 0, 100, 0, 0, 0, 0, 0, 0, 140, 0, 80, 0, 0, 0, 0, 0, 0, 140, 0, 60, 0, 0, 0, 0, 0, 0, 140, 0, 40, 0, 0, 0, 0, 0, 0, 140, 0, 20, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 136.2151, 7.6293945e-06, -18.930761, 0, 0, 0, 0, 0, 0, 124.47424, 7.6293945e-06, -35.771675, 0, 0, 0, 0, 0, 0, 109.556854, 7.6293945e-06, -45.911987, 0, 0, 0, 0, 0, 0, 90, 0, -50, 0, 0, 0, 0, 0, 0, 70, 0, -50, 0, 0, 0, 0, 0, 0, 50, 0, -50, 0, 0, 0, 0, 0, 0, 30.626865, 7.6293945e-06, -46.35706, 0, 0, 0, 0, 0, 0, 14.519331, 7.6293945e-06, -35.468895, 0, 0, 0, 0, 0, 0, 3.52941, 7.6293945e-06, -19.590664),
"tilts": PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
}
point_count = 93
[node name="MainMap" type="Node3D" unique_id=1895741703]
[node name="Chunk_Rettilineo_1" parent="." unique_id=1071973766 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -20, 0, 0)
[node name="Chunk_Rettilineo_7" parent="." unique_id=1975081224 instance=ExtResource("2_e76ix")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -180, 0, -60)
[node name="Chunk_Rettilineo_8" parent="." unique_id=1509029322 instance=ExtResource("2_e76ix")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -180, 0, -80)
[node name="Chunk_Rettilineo_9" parent="." unique_id=943097880 instance=ExtResource("2_e76ix")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -180, 0, -100)
[node name="Chunk_Rettilineo_23" parent="." unique_id=822048833 instance=ExtResource("2_e76ix")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 40, 0, 80)
[node name="Chunk_Rettilineo_10" parent="." unique_id=1524384646 instance=ExtResource("2_e76ix")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -280, 0, -220)
[node name="Chunk_Rettilineo_12" parent="." unique_id=353270627 instance=ExtResource("2_e76ix")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -280, 0, -260)
[node name="Chunk_Rettilineo_2" parent="." unique_id=1793918166 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -40, 0, 0)
[node name="Chunk_Rettilineo_3" parent="." unique_id=543135047 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -120, 0, 0)
[node name="Chunk_Rettilineo_13" parent="." unique_id=961447101 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -340, 0, -320)
[node name="Chunk_Rettilineo_15" parent="." unique_id=1577793966 instance=ExtResource("2_e76ix")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -560, 0, -60)
[node name="Chunk_Rettilineo_41" parent="." unique_id=419871232 instance=ExtResource("2_e76ix")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -460, 0, 60)
[node name="Chunk_Rettilineo_42" parent="." unique_id=655667034 instance=ExtResource("2_e76ix")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -460, 0, 80)
[node name="Chunk_Rettilineo_18" parent="." unique_id=1807861125 instance=ExtResource("2_e76ix")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -560, 0, -120)
[node name="Chunk_Rettilineo_19" parent="." unique_id=393889196 instance=ExtResource("2_e76ix")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -560, 0, -140)
[node name="Chunk_Rettilineo_20" parent="." unique_id=2020455059 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -380, 0, -320)
[node name="Chunk_Rettilineo_22" parent="." unique_id=1449864588 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -500, 0, -200)
[node name="Chunk_Rettilineo_25" parent="." unique_id=333148847 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -20, 0, 140)
[node name="Chunk_Rettilineo_26" parent="." unique_id=252365188 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -40, 0, 140)
[node name="Chunk_Rettilineo_27" parent="." unique_id=1581441361 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -60, 0, 140)
[node name="Chunk_Rettilineo_28" parent="." unique_id=1771140547 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -80, 0, 140)
[node name="Chunk_Rettilineo_29" parent="." unique_id=54905051 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -100, 0, 140)
[node name="Chunk_Rettilineo_30" parent="." unique_id=703827150 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -120, 0, 140)
[node name="Chunk_Rettilineo_31" parent="." unique_id=900124592 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -140, 0, 140)
[node name="Chunk_Rettilineo_32" parent="." unique_id=1947969458 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -160, 0, 140)
[node name="Chunk_Rettilineo_34" parent="." unique_id=80065513 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -200, 0, 140)
[node name="Chunk_Rettilineo_35" parent="." unique_id=334693195 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -220, 0, 140)
[node name="Chunk_Rettilineo_36" parent="." unique_id=2090559410 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -240, 0, 140)
[node name="Chunk_Rettilineo_37" parent="." unique_id=1722039130 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -260, 0, 140)
[node name="Chunk_Rettilineo_38" parent="." unique_id=1907313452 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -280, 0, 140)
[node name="Chunk_Rettilineo_39" parent="." unique_id=1432572710 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -300, 0, 140)
[node name="Chunk_Rettilineo_43" parent="." unique_id=618705912 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -400, 0, 140)
[node name="Chunk_Rettilineo_44" parent="." unique_id=1635344020 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -380, 0, 140)
[node name="Chunk_Rettilineo_45" parent="." unique_id=1080549903 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -360, 0, 140)
[node name="Chunk_Rettilineo_46" parent="." unique_id=1463785184 instance=ExtResource("2_e76ix")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -340, 0, 140)
[node name="Chunk_Curva_1" parent="." unique_id=217311849 instance=ExtResource("1_p62h3")]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -160, 0, -20)
[node name="Chunk_Curva_2" parent="." unique_id=1726282883 instance=ExtResource("1_p62h3")]
transform = Transform3D(1.1924881e-08, 0, 1, 0, 1, 0, -1, 0, 1.1924881e-08, -200, 0, -140)
[node name="Chunk_Curva_4" parent="." unique_id=1502775253 instance=ExtResource("1_p62h3")]
transform = Transform3D(1.1924881e-08, 0, 1, 0, 1, 0, -1, 0, 1.1924881e-08, -300, 0, -300)
[node name="Chunk_Curva_5" parent="." unique_id=1702985674 instance=ExtResource("1_p62h3")]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -420, 0, -300)
[node name="Chunk_Curva_7" parent="." unique_id=900475946 instance=ExtResource("1_p62h3")]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -540, 0, -180)
[node name="Chunk_Curva_8" parent="." unique_id=1373490401 instance=ExtResource("1_p62h3")]
transform = Transform3D(1.3113416e-07, 0, -1, 0, 1, 0, 1, 0, 1.3113416e-07, -540, 0, -20)
[node name="Chunk_Curva_9" parent="." unique_id=416011584 instance=ExtResource("1_p62h3")]
transform = Transform3D(-4.371138e-08, 0, 1, 0, 1, 0, -1, 0, -4.371138e-08, -480, 0, 20)
[node name="Chunk_Curva_12" parent="." unique_id=1152394557 instance=ExtResource("1_p62h3")]
transform = Transform3D(-4.3711395e-08, 0, -1, 0, 1, 0, 1, 0, -4.3711395e-08, -440, 0, 120)
[node name="Chunk_Curva_10" parent="." unique_id=1111805374 instance=ExtResource("1_p62h3")]
transform = Transform3D(-4.371138e-08, 0, 1, 0, 1, 0, -1, 0, -4.371138e-08, 20, 0, 20)
[node name="Chunk_Curva_11" parent="." unique_id=621280730 instance=ExtResource("1_p62h3")]
transform = Transform3D(1, 0, -7.1054274e-15, 0, 1, 0, 7.1054274e-15, 0, 1, 20, 0, 120)
[node name="Chunk_Curva_6" parent="." unique_id=1027826232 instance=ExtResource("1_p62h3")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -460, 0, -220)
[node name="Chunk_Curva_3" parent="." unique_id=37751000 instance=ExtResource("1_p62h3")]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -260, 0, -180)
[node name="Chunk_Rettilineo_F3" parent="." unique_id=1719977594 instance=ExtResource("3_wf82y")]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -280, 0, -240)
[node name="Chunk_Rettilineo_Ponte" parent="." unique_id=1180892866 instance=ExtResource("4_l8ggx")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -320, 0, 140)
[node name="Chunk_Rettilineo_Ponte2" parent="." unique_id=1304906338 instance=ExtResource("4_l8ggx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 40, 0, 60)
[node name="Chunk_Rettilineo_Ponte4" parent="." unique_id=503627087 instance=ExtResource("4_l8ggx")]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -100, 0, 0)
[node name="Chunk_Rettilineo_Ponte3" parent="." unique_id=1295432069 instance=ExtResource("4_l8ggx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -440, 0, -260)
[node name="Blockout_Stazione2" parent="." unique_id=987402604 instance=ExtResource("5_bn4ba")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -360, 0, -320)
[node name="Blockout_Stazione4" parent="." unique_id=401626378 instance=ExtResource("6_t5p8i")]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -180, 0, 140)
[node name="Blockout_Stazione3Hero" parent="." unique_id=149959015 instance=ExtResource("7_8nm7p")]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -60, 0, 0)
[node name="Blockout_Stazione3Hero2" parent="." unique_id=1050909298 instance=ExtResource("7_8nm7p")]
transform = Transform3D(-1, 0, 8.742278e-08, 0, 1, 0, -8.742278e-08, 0, -1, -560, 0, -80)
[node name="Path3D" type="Path3D" parent="." unique_id=1199296875]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -10, 2, -0.10099983)
curve = SubResource("Curve3D_rfork")
script = ExtResource("8_w775f")
train_model = ExtResource("9_haiv3")
[node name="Marker3D" type="Marker3D" parent="Path3D" unique_id=1654492319]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -79.7581, -1.6046681, 162.65833)
[node name="Marker3D2" type="Marker3D" parent="Path3D" unique_id=1991094419]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.8526325, 0, 109.44846)
[node name="Marker3D3" type="Marker3D" parent="Path3D" unique_id=1964527552]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 154.80806, 0, 230.03177)
[node name="Map1" type="Node3D" unique_id=636684781]