5 Commits

Author SHA1 Message Date
Matteo Sonaglioni
e211f89fca revamp pylon 2026-04-30 17:48:08 +02:00
Matteo Sonaglioni
d709d9236c Merge branch 'main' into polish1 2026-04-30 11:24:50 +02:00
ff93a7ab2c add fog 2026-04-30 07:13:34 +02:00
122ec189eb fix water colors 2026-04-30 06:55:28 +02:00
889334e7a3 fix snow and water ripples + add water colors 2026-04-30 06:53:54 +02:00
16 changed files with 211 additions and 107 deletions

View File

@@ -90,6 +90,9 @@ wind_amount = 50
cloud_speed = 0.01 cloud_speed = 0.01
fireflies_amount = 550 fireflies_amount = 550
fireflies_spawn_ray = 60.0 fireflies_spawn_ray = 60.0
water_color_morning = Color(0.33333334, 0.654902, 0.5294118, 1)
water_color_afternoon = Color(0.5803922, 0.5137255, 0.2901961, 1)
water_color_night = Color(0.48235294, 0.45490196, 0.69411767, 1)
metadata/_custom_type_script = "uid://butda6k2tli3o" metadata/_custom_type_script = "uid://butda6k2tli3o"
[sub_resource type="Gradient" id="Gradient_i3hjl"] [sub_resource type="Gradient" id="Gradient_i3hjl"]

View File

@@ -28,6 +28,7 @@ const WEATHER_PLAIN_SHADER: Material = preload("res://core/daynight/weather_plai
#environment nodes #environment nodes
@onready var sun: DirectionalLight3D = $"../DirectionalLight3D" @onready var sun: DirectionalLight3D = $"../DirectionalLight3D"
@onready var environment: WorldEnvironment = $"../WorldEnvironment" @onready var environment: WorldEnvironment = $"../WorldEnvironment"
@onready var fog_node: Node3D = $Fog
var day_night_controller: DayNightController var day_night_controller: DayNightController
var weather_controller: WeatherController var weather_controller: WeatherController
@@ -39,6 +40,7 @@ func _ready() -> void:
#connect shader when new node is added #connect shader when new node is added
get_tree().node_added.connect(_on_tree_node_added) get_tree().node_added.connect(_on_tree_node_added)
UIEvents.toggle_fog.connect(toggle_fog)
#set noise texture 2d to materials in special group #set noise texture 2d to materials in special group
ApplyWindNoiseToMaterials() ApplyWindNoiseToMaterials()
@@ -158,3 +160,7 @@ func select_day_time(normalized_time: float) -> void:
if weather_controller: if weather_controller:
weather_controller.day_time = day_time weather_controller.day_time = day_time
func toggle_fog(value: bool) -> void:
if fog_node:
fog_node.visible = value

View File

@@ -2,6 +2,7 @@ shader_type spatial;
render_mode blend_mix, depth_draw_always; render_mode blend_mix, depth_draw_always;
global uniform float global_rain_intensity; global uniform float global_rain_intensity;
global uniform vec4 global_water_color = vec4(0.285, 0.534, 0.487, 1.0);
//Water color //Water color
uniform vec4 deep_water_color : source_color = vec4(0.0, 0.1, 0.2, 1.0); uniform vec4 deep_water_color : source_color = vec4(0.0, 0.1, 0.2, 1.0);
@@ -44,12 +45,14 @@ void fragment() {
float water_depth_gradient = exp(-depth_difference * beer_law_factor); float water_depth_gradient = exp(-depth_difference * beer_law_factor);
vec4 base_water = mix(deep_water_color, shallow_water_color, water_depth_gradient); vec4 base_water = mix(deep_water_color, shallow_water_color, water_depth_gradient);
float rain_intensity = clamp(global_rain_intensity, 0.0, 1.0); 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 pos = world_pos_xz * ripple_scale;
vec2 cell = floor(pos); vec2 cell = floor(pos);
vec2 local_pos = fract(pos) - 0.5; vec2 local_pos = fract(pos) - 0.5;
float random_val = fract(sin(dot(cell, vec2(12.9898, 78.233))) * 43758.5453); float random_val = fract(sin(dot(cell, vec2(12.9898, 78.233))) * 43758.5453);
float is_active_cell = step(1.0 - ripple_density, random_val); float active_ripple_density = ripple_density * rain_intensity;
float is_active_cell = step(1.0 - active_ripple_density, random_val);
float ring = 0.0; float ring = 0.0;
if (is_active_cell > 0.0) { if (is_active_cell > 0.0) {

View File

@@ -125,6 +125,7 @@ func _process(delta: float) -> void:
var base_grad_top: Color var base_grad_top: Color
var base_grad_bot: Color var base_grad_bot: Color
var base_grad_intensity: float var base_grad_intensity: float
var base_water_color: Color
var base_rotation_sun: Vector3 var base_rotation_sun: Vector3
if is_raining: if is_raining:
@@ -152,6 +153,7 @@ func _process(delta: float) -> void:
base_grad_top = environment_config.grad_top_morning.lerp(environment_config.grad_top_afternoon, t) 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_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_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) base_rotation_sun = environment_config.sun_rotation_morning.lerp(environment_config.sun_rotation_afternoon, t)
else: else:
var t = day_time - 2.0 var t = day_time - 2.0
@@ -165,6 +167,7 @@ func _process(delta: float) -> void:
base_grad_top = environment_config.grad_top_afternoon.lerp(environment_config.grad_top_night, t) 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_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_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) base_rotation_sun = environment_config.sun_rotation_afternoon.lerp(environment_config.sun_rotation_night, t)
var weather_color = environment_config.rain_mode_color var weather_color = environment_config.rain_mode_color
@@ -176,6 +179,7 @@ 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_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_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_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_tint = final_tint.lerp(final_tint * environment_config.snow_mode_color, actual_snow_amount)
final_sky_top = final_sky_top.lerp(final_sky_top * environment_config.snow_mode_color, actual_snow_amount) final_sky_top = final_sky_top.lerp(final_sky_top * environment_config.snow_mode_color, actual_snow_amount)
@@ -189,6 +193,7 @@ 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_top", final_grad_top)
RenderingServer.global_shader_parameter_set("global_gradient_color_bot", final_grad_bot) 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_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) var night_val = clamp(day_time - 2.0, 0.0, 1.0)
@@ -769,7 +774,7 @@ func init_snow(value: float = 0.0):
RenderingServer.global_shader_parameter_set("global_snow_accumulation_speed", environment_config.snow_accumulation_speed) RenderingServer.global_shader_parameter_set("global_snow_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_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_max_accumulation", environment_config.snow_max_accumulation)
RenderingServer.global_shader_parameter_set("global_snow_cap_enabled", 1.0 if environment_config.show_snow_accumulation_volume else 0.0) RenderingServer.global_shader_parameter_set("global_snow_cap_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_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_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_flatness_end", environment_config.snow_cap_flatness_end)

View File

@@ -6,10 +6,11 @@ global uniform float global_snow_start_time = -1.0;
global uniform float global_snow_accumulation_speed = 0.1; global uniform float global_snow_accumulation_speed = 0.1;
global uniform float global_snow_melt_time = -1.0; global uniform float global_snow_melt_time = -1.0;
global uniform float global_snow_melt_speed = 0.1; 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 float global_snow_threshold = 0.5;
global uniform vec4 global_snow_color = vec4(0.92, 0.96, 1.0, 1.0); 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 float global_snow_max_accumulation = 0.72;
global uniform float global_snow_cap_enabled = 1.0; global uniform bool global_snow_cap_enabled = true;
global uniform float global_snow_cap_height = 0.06; 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_start = 0.72;
global uniform float global_snow_cap_flatness_end = 0.96; global uniform float global_snow_cap_flatness_end = 0.96;
@@ -70,16 +71,22 @@ float fbm(vec2 p) {
return clamp(value, 0.0, 1.0); return clamp(value, 0.0, 1.0);
} }
float get_snow_amount() { float get_snow_progress() {
float snow_amount = 0.0; bool has_snow_timeline = global_snow_start_time >= 0.0 || global_snow_melt_time >= 0.0;
if (global_snow_start_time >= 0.0) { float snow_progress = clamp(global_snow_amount, 0.0, 1.0);
snow_amount = clamp((TIME - global_snow_start_time) * global_snow_accumulation_speed, 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);
}
} }
if (global_snow_melt_time >= 0.0) {
float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0); return snow_progress;
snow_amount *= (1.0 - melt);
}
return snow_amount * global_snow_max_accumulation;
} }
float ripple_ring(vec2 uv, float time_offset) { float ripple_ring(vec2 uv, float time_offset) {
@@ -90,24 +97,24 @@ float ripple_ring(vec2 uv, float time_offset) {
} }
void vertex() { void vertex() {
float snow_amount = get_snow_amount(); 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_pos = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
vec3 world_normal = normalize((MODEL_MATRIX * vec4(NORMAL, 0.0)).xyz); vec3 world_normal = normalize((MODEL_MATRIX * vec4(NORMAL, 0.0)).xyz);
float snow_cap_enabled = step(0.5, global_snow_cap_enabled);
float flat_surface = smoothstep( float flat_surface = smoothstep(
max(global_snow_threshold, global_snow_cap_flatness_start), max(global_snow_threshold, global_snow_cap_flatness_start),
global_snow_cap_flatness_end, global_snow_cap_flatness_end,
world_normal.y world_normal.y
); );
float accumulation_growth = smoothstep(0.08, 0.65, snow_amount); 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_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); float cap_variation = mix(1.0 - global_snow_cap_noise_strength, 1.0 + global_snow_cap_noise_strength, cap_noise);
v_snow_amount = snow_amount; v_snow_amount = snow_progress;
v_snow_cap_mask = flat_surface * accumulation_growth * cap_variation * snow_cap_enabled; 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_amount * v_snow_cap_mask); VERTEX += NORMAL * (global_snow_cap_height * snow_accumulation * v_snow_cap_mask);
} }
void fragment() { void fragment() {
@@ -117,16 +124,17 @@ void fragment() {
float noise_val = texture(noise_texture, world_pos.xz * snow_noise_scale).r; float noise_val = texture(noise_texture, world_pos.xz * snow_noise_scale).r;
//Snow //Snow
float snow_amount = v_snow_amount; float snow_progress = v_snow_amount;
float snow_accumulation = snow_progress * global_snow_max_accumulation;
float snow_edge = smoothstep( float snow_edge = smoothstep(
global_snow_threshold - snow_edge_softness, global_snow_threshold - snow_edge_softness,
global_snow_threshold + snow_edge_softness, global_snow_threshold + snow_edge_softness,
facing_up + (noise_val - 0.5) * 0.4 facing_up + (noise_val - 0.5) * 0.4
); );
float flat_accumulation = smoothstep(0.0, 0.35, v_snow_cap_mask) * snow_amount; 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_amount - 0.4 + flat_accumulation * 0.25); 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_amount, flat_accumulation); float snow_factor = max(snow_edge * snow_coverage * snow_progress, flat_accumulation);
float snow_opacity = smoothstep(0.04, 0.28, snow_factor); float snow_opacity = smoothstep(0.04, 0.28, snow_factor);
snow_opacity = max(snow_opacity, flat_accumulation * 0.9); snow_opacity = max(snow_opacity, flat_accumulation * 0.9);

View File

@@ -5,3 +5,17 @@
[resource] [resource]
render_priority = 0 render_priority = 0
shader = ExtResource("1_weather") 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

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

View File

@@ -81,8 +81,9 @@ extends Resource
#Post-process effect toggles (initial values) #Post-process effect toggles (initial values)
@export_group("Post Process") @export_group("Post Process")
@export var enable_dust: bool = false #Floating dust particles overlay @export var enable_dust: bool = false #Floating dust particles overlay
@export var enable_blur: bool = false #Screen blur effect @export var enable_blur: bool = true #Screen blur effect
@export var enable_environment_shadows: bool = true #Cloud shadow projection on terrain @export var enable_environment_shadows: bool = true #Cloud shadow projection on terrain
@export var enable_fog: bool = true #Enable fog around the train
@export var blur_amount: float = 0.6 @export var blur_amount: float = 0.6
@export_group("Dust") @export_group("Dust")
@@ -176,3 +177,10 @@ extends Resource
@export var fireflies_amount: int = 60 #Number of firefly particles @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_ray: float = 20.0 #Horizontal spawn radius
@export var fireflies_spawn_height: float = 3.0 #Vertical spawn range @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

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

View File

@@ -171,6 +171,30 @@ shadow_blur = 0.5
directional_shadow_mode = 0 directional_shadow_mode = 0
directional_shadow_max_distance = 200.0 directional_shadow_max_distance = 200.0
[node name="MainMap" parent="." unique_id=1895741703 instance=ExtResource("20_xkcqp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 280, 0, 0)
[node name="rail" type="Path3D" parent="." unique_id=1795138464 node_paths=PackedStringArray("cameras")]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 270, 2, -0.101)
curve = SubResource("Curve3D_ndco5")
script = ExtResource("12_4is5r")
train_model = ExtResource("13_5rdtm")
cameras = NodePath("../cameras")
sleepers_model = ExtResource("14_ahang")
fireworks_scene = ExtResource("15_atdal")
[node name="Marker3D" type="Marker3D" parent="rail" unique_id=1460318018]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.7581053, -1.6046681, 59.658325)
[node name="Marker3D2" type="Marker3D" parent="rail" unique_id=131965864]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 127.14737, 0, 169.44846)
[node name="Marker3D3" type="Marker3D" parent="rail" unique_id=492991547]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -91.191925, 0, 539.03174)
[node name="Marker3D4" type="Marker3D" parent="rail" unique_id=1550097358]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -312.19193, 0, 349.03174)
[node name="Control" type="Control" parent="." unique_id=630650980] [node name="Control" type="Control" parent="." unique_id=630650980]
layout_mode = 3 layout_mode = 3
anchors_preset = 0 anchors_preset = 0
@@ -209,9 +233,9 @@ text = "Rain"
[node name="Wind" type="CheckButton" parent="Control" unique_id=1013004982] [node name="Wind" type="CheckButton" parent="Control" unique_id=1013004982]
layout_mode = 0 layout_mode = 0
offset_left = 8.0 offset_left = 8.0
offset_top = 231.0 offset_top = 256.0
offset_right = 96.0 offset_right = 96.0
offset_bottom = 262.0 offset_bottom = 287.0
theme_override_colors/font_color = Color(1, 1, 1, 1) 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_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1) theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
@@ -223,18 +247,18 @@ text = "Wind"
[node name="WindSlider" type="HSlider" parent="Control" unique_id=28050098] [node name="WindSlider" type="HSlider" parent="Control" unique_id=28050098]
layout_mode = 0 layout_mode = 0
offset_left = 103.0 offset_left = 103.0
offset_top = 238.0 offset_top = 263.0
offset_right = 187.0 offset_right = 187.0
offset_bottom = 254.0 offset_bottom = 279.0
max_value = 1.0 max_value = 1.0
step = 0.01 step = 0.01
[node name="Fireflies" type="CheckButton" parent="Control" unique_id=1046228444] [node name="Fireflies" type="CheckButton" parent="Control" unique_id=1046228444]
layout_mode = 0 layout_mode = 0
offset_left = 8.0 offset_left = 8.0
offset_top = 259.0 offset_top = 284.0
offset_right = 117.0 offset_right = 117.0
offset_bottom = 290.0 offset_bottom = 315.0
theme_override_colors/font_color = Color(1, 1, 1, 1) 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_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1) theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
@@ -353,9 +377,9 @@ text = "Shadows"
[node name="RandomWeather" type="Button" parent="Control" unique_id=1047710802] [node name="RandomWeather" type="Button" parent="Control" unique_id=1047710802]
layout_mode = 0 layout_mode = 0
offset_left = 12.0 offset_left = 12.0
offset_top = 289.0 offset_top = 314.0
offset_right = 157.0 offset_right = 195.0
offset_bottom = 320.0 offset_bottom = 345.0
theme_override_colors/font_color = Color(1, 1, 1, 1) 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_focus_color = Color(1, 1, 1, 1)
theme_override_colors/font_pressed_color = Color(1, 1, 1, 1) theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
@@ -374,29 +398,19 @@ theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_outline_color = Color(1, 1, 1, 1) theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
text = "Weather: Clear" text = "Weather: Clear"
[node name="MainMap" parent="." unique_id=1895741703 instance=ExtResource("20_xkcqp")] [node name="Fog" type="CheckButton" parent="Control" unique_id=2101743368]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 280, 0, 0) layout_mode = 0
offset_left = 7.0
[node name="rail" type="Path3D" parent="." unique_id=1795138464 node_paths=PackedStringArray("cameras")] offset_top = 228.0
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 270, 2, -0.101) offset_right = 97.0
curve = SubResource("Curve3D_ndco5") offset_bottom = 259.0
script = ExtResource("12_4is5r") theme_override_colors/font_color = Color(1, 1, 1, 1)
train_model = ExtResource("13_5rdtm") theme_override_colors/font_focus_color = Color(1, 1, 1, 1)
cameras = NodePath("../cameras") theme_override_colors/font_pressed_color = Color(1, 1, 1, 1)
sleepers_model = ExtResource("14_ahang") theme_override_colors/font_hover_color = Color(1, 1, 1, 1)
fireworks_scene = ExtResource("15_atdal") theme_override_colors/font_hover_pressed_color = Color(1, 1, 1, 1)
theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
[node name="Marker3D" type="Marker3D" parent="rail" unique_id=1460318018] text = "Fog"
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.7581053, -1.6046681, 59.658325)
[node name="Marker3D2" type="Marker3D" parent="rail" unique_id=131965864]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 127.14737, 0, 169.44846)
[node name="Marker3D3" type="Marker3D" parent="rail" unique_id=492991547]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -91.191925, 0, 539.03174)
[node name="Marker3D4" type="Marker3D" parent="rail" unique_id=1550097358]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -312.19193, 0, 349.03174)
[connection signal="toggled" from="Control/Snow" to="Control" method="_on_snow_toggled"] [connection signal="toggled" from="Control/Snow" to="Control" method="_on_snow_toggled"]
[connection signal="toggled" from="Control/Rain" to="Control" method="_on_rain_toggled"] [connection signal="toggled" from="Control/Rain" to="Control" method="_on_rain_toggled"]
@@ -411,3 +425,4 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -312.19193, 0, 349.03174)
[connection signal="toggled" from="Control/Pause" to="Control" method="_on_pause_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="toggled" from="Control/Shadows" to="Control" method="_on_shadows_toggled"]
[connection signal="pressed" from="Control/RandomWeather" to="Control" method="_on_random_weather_pressed"] [connection signal="pressed" from="Control/RandomWeather" to="Control" method="_on_random_weather_pressed"]
[connection signal="toggled" from="Control/Fog" to="Control" method="_on_fog_toggled"]

View File

@@ -96,3 +96,6 @@ func _on_day_time_option_changed(index: int) -> void:
func _on_option_button_item_selected(index: int) -> void: func _on_option_button_item_selected(index: int) -> void:
UIEvents.time_option_item_changed.emit(index) UIEvents.time_option_item_changed.emit(index)
func _on_fog_toggled(toggled_on: bool) -> void:
UIEvents.toggle_fog.emit(toggled_on)

View File

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

View File

@@ -11,7 +11,7 @@ config_version=5
[application] [application]
config/name="tgcc" config/name="tgcc"
run/main_scene="uid://cae0mnf353dy3" run/main_scene="uid://38qpxwbpvd28"
config/features=PackedStringArray("4.6", "Forward Plus") config/features=PackedStringArray("4.6", "Forward Plus")
run/max_fps=60 run/max_fps=60
config/icon="uid://bfar1kk3pgq8f" config/icon="uid://bfar1kk3pgq8f"
@@ -142,3 +142,7 @@ global_snow_cap_enabled={
"type": "bool", "type": "bool",
"value": false "value": false
} }
global_water_color={
"type": "color",
"value": Color(0, 0, 0, 1)
}

Binary file not shown.

View File

@@ -1,12 +1,35 @@
[gd_scene format=3 uid="uid://bgb4pfflokl5s"] [gd_scene format=3 uid="uid://bgb4pfflokl5s"]
[ext_resource type="PackedScene" uid="uid://c87qfar8b0ak0" path="res://tgcc/chunk/prop/pylon/pylon.fbx" id="1_lbnkk"] [ext_resource type="PackedScene" uid="uid://c87qfar8b0ak0" path="res://tgcc/chunk/prop/pylon/pylon.fbx" id="1_lbnkk"]
[ext_resource type="Material" uid="uid://buxlrrpn7rdgs" path="res://tgcc/chunk/material/wood.tres" id="2_8ym60"]
[ext_resource type="Shader" uid="uid://d0ch5ofrgf7y6" path="res://core/daynight/trunk_shader.gdshader" id="3_88p0r"] [ext_resource type="Shader" uid="uid://d0ch5ofrgf7y6" path="res://core/daynight/trunk_shader.gdshader" id="3_88p0r"]
[ext_resource type="Material" uid="uid://cn20mp8ep3yxu" path="res://tgcc/chunk/material/wires.tres" id="4_t1abq"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_wpudh"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_21pk4"]
render_priority = 0 render_priority = 0
shader = ExtResource("3_88p0r") shader = ExtResource("3_88p0r")
shader_parameter/albedo_color = Color(0.35906908, 0.35906908, 0.35906908, 1) shader_parameter/albedo_color = Color(0.2864734, 0.29280058, 0.2625562, 1)
shader_parameter/use_texture = true
shader_parameter/uv_scale = Vector2(3, 3)
shader_parameter/palette_shift_y = 0.0
shader_parameter/gradient_start_y = 0.0
shader_parameter/gradient_end_y = 1.5
shader_parameter/light_steps = 3.0
shader_parameter/step_softness = 0.1
shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1)
shader_parameter/shadow_offset = 0.0
shader_parameter/cast_shadow_strength = 0.6
shader_parameter/use_ghibli_glint = true
shader_parameter/glint_color = Color(1, 0.95, 0.85, 1)
shader_parameter/glint_intensity = 1.0
shader_parameter/glint_sharpness = 32.0
shader_parameter/emission_color = Color(0, 0, 0, 1)
shader_parameter/emission_energy = 0.0
[sub_resource type="ShaderMaterial" id="ShaderMaterial_equlh"]
render_priority = 0
shader = ExtResource("3_88p0r")
shader_parameter/albedo_color = Color(0.45348388, 0.45351064, 0.42169568, 1)
shader_parameter/use_texture = true shader_parameter/use_texture = true
shader_parameter/uv_scale = Vector2(1, 1) shader_parameter/uv_scale = Vector2(1, 1)
shader_parameter/palette_shift_y = 0.0 shader_parameter/palette_shift_y = 0.0
@@ -24,36 +47,17 @@ shader_parameter/glint_sharpness = 32.0
shader_parameter/emission_color = Color(0, 0, 0, 1) shader_parameter/emission_color = Color(0, 0, 0, 1)
shader_parameter/emission_energy = 0.0 shader_parameter/emission_energy = 0.0
[sub_resource type="ShaderMaterial" id="ShaderMaterial_q1sqc"] [node name="PaloLuce" unique_id=830472879 instance=ExtResource("1_lbnkk")]
render_priority = 0
shader = ExtResource("3_88p0r")
shader_parameter/albedo_color = Color(0.35056442, 0.17908111, 0.051149555, 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
[node name="PaloLuce" unique_id=1607500596 instance=ExtResource("1_lbnkk")] [node name="Pylon" parent="." index="0" unique_id=938151162]
transform = Transform3D(9.360515e-06, -3.932214e-07, -100, -86.173874, 50.735218, -8.265819e-06, 50.735218, 86.173874, 4.410226e-06, -0.61381716, 6.4698167, 0.52650124)
[node name="Cube" parent="." index="0" unique_id=1142687027] surface_material_override/0 = ExtResource("2_8ym60")
transform = Transform3D(-4.3711393e-06, 100.00001, 1.1920929e-05, 0, -1.1920929e-05, 100.00001, 100.000015, 4.371139e-06, 5.210804e-13, -0.0027855237, 0, -0.002785524) surface_material_override/1 = SubResource("ShaderMaterial_21pk4")
surface_material_override/0 = SubResource("ShaderMaterial_wpudh") surface_material_override/2 = ExtResource("4_t1abq")
surface_material_override/1 = SubResource("ShaderMaterial_q1sqc") surface_material_override/3 = SubResource("ShaderMaterial_equlh")
[node name="dx" type="Marker3D" parent="." index="1" unique_id=817453817] [node name="dx" type="Marker3D" parent="." index="1" unique_id=817453817]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 0.6740973, 7.234124, -0.002785494) transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 0.6448493, 7.234124, -0.002785494)
[node name="sx" type="Marker3D" parent="." index="2" unique_id=1025556497] [node name="sx" type="Marker3D" parent="." index="2" unique_id=1025556497]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -0.67131174, 7.234124, -0.002785553) transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -0.61281574, 7.234124, -0.002785553)

View File

@@ -45,10 +45,10 @@ connection_right = [NodePath("PaloLuce/dx"), NodePath("PaloLuce2/dx")]
[node name="Chunk_001" parent="." index="0" unique_id=1122765659] [node name="Chunk_001" parent="." index="0" unique_id=1122765659]
surface_material_override/0 = ExtResource("2_5cqaj") surface_material_override/0 = ExtResource("2_5cqaj")
[node name="Chunk_020" parent="." index="1" unique_id=467050080] [node name="Chunk_020" parent="." index="1" unique_id=107670766]
surface_material_override/0 = ExtResource("2_1yd65") surface_material_override/0 = ExtResource("2_1yd65")
[node name="Cube_159" parent="." index="2" unique_id=1552861257] [node name="Cube_159" parent="." index="2" unique_id=334311805 groups=["weather_node"]]
surface_material_override/0 = ExtResource("3_dldiy") surface_material_override/0 = ExtResource("3_dldiy")
surface_material_override/1 = ExtResource("4_5cqaj") surface_material_override/1 = ExtResource("4_5cqaj")