Merge pull request 'manage color and exposure during rain e storm; remove wind from rice; disable fireflies on rain, snow or storm; remove key for fireworks test; add hero to railway_pool; manage train windows' (#28) from matt_req_fix into main
Reviewed-on: #28
This commit was merged in pull request #28.
This commit is contained in:
@@ -264,8 +264,8 @@ func _input(event: InputEvent) -> void:
|
|||||||
if event is InputEventKey and event.pressed and not event.echo:
|
if event is InputEventKey and event.pressed and not event.echo:
|
||||||
if event.keycode == KEY_T:
|
if event.keycode == KEY_T:
|
||||||
_goto_next_stop()
|
_goto_next_stop()
|
||||||
elif event.keycode == KEY_F:
|
#elif event.keycode == KEY_F:
|
||||||
_test_manual_fireworks()
|
#_test_manual_fireworks()
|
||||||
|
|
||||||
func _test_manual_fireworks() -> void:
|
func _test_manual_fireworks() -> void:
|
||||||
if fireworks_scene == null or train_instance == null: return
|
if fireworks_scene == null or train_instance == null: return
|
||||||
|
|||||||
@@ -10,8 +10,9 @@
|
|||||||
[ext_resource type="PackedScene" uid="uid://fi6faw7ag1i0" path="res://tgcc/chunk/railway/scene/chunk_railway_curve_3.tscn" id="8_r0882"]
|
[ext_resource type="PackedScene" uid="uid://fi6faw7ag1i0" path="res://tgcc/chunk/railway/scene/chunk_railway_curve_3.tscn" id="8_r0882"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dglpoh63x2lpy" path="res://tgcc/chunk/railway/scene/chunk_railway_curve_4.tscn" id="9_3auto"]
|
[ext_resource type="PackedScene" uid="uid://dglpoh63x2lpy" path="res://tgcc/chunk/railway/scene/chunk_railway_curve_4.tscn" id="9_3auto"]
|
||||||
[ext_resource type="Script" uid="uid://c374rv220mvh1" path="res://core/biome_generator/railway_pool.gd" id="9_8tdc7"]
|
[ext_resource type="Script" uid="uid://c374rv220mvh1" path="res://core/biome_generator/railway_pool.gd" id="9_8tdc7"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bup6gwlxos0w2" path="res://tgcc/chunk/railway/hero/chunk_railway_station_hero.tscn" id="10_3auto"]
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("9_8tdc7")
|
script = ExtResource("9_8tdc7")
|
||||||
name = "Railway Pool"
|
name = "Railway Pool"
|
||||||
available_railways = Array[PackedScene]([ExtResource("1_86h1y"), ExtResource("3_3auto"), ExtResource("4_i1umq"), ExtResource("5_x44at"), ExtResource("6_vrrkw"), ExtResource("7_l17bw"), ExtResource("8_qcl5o"), ExtResource("8_r0882"), ExtResource("9_3auto")])
|
available_railways = Array[PackedScene]([ExtResource("1_86h1y"), ExtResource("3_3auto"), ExtResource("4_i1umq"), ExtResource("5_x44at"), ExtResource("6_vrrkw"), ExtResource("7_l17bw"), ExtResource("8_qcl5o"), ExtResource("8_r0882"), ExtResource("9_3auto"), ExtResource("10_3auto")])
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ func _process(delta: float) -> void:
|
|||||||
|
|
||||||
var is_night = day_time >= 2.5
|
var is_night = day_time >= 2.5
|
||||||
if particles_fireflies:
|
if particles_fireflies:
|
||||||
particles_fireflies.emitting = thereare_fireflies and is_night
|
particles_fireflies.emitting = thereare_fireflies and is_night and not is_raining and not is_snowing and not is_storm
|
||||||
|
|
||||||
var base_tint: Color
|
var base_tint: Color
|
||||||
var base_sky_top: Color
|
var base_sky_top: Color
|
||||||
@@ -190,11 +190,22 @@ func _process(delta: float) -> void:
|
|||||||
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))
|
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))
|
||||||
|
var rain_weather_amount: float = 0.0
|
||||||
|
if is_raining:
|
||||||
|
rain_weather_amount = clamp(rain_intensity, 0.0, 1.0)
|
||||||
|
var storm_weather_amount: float = 0.0
|
||||||
|
if is_raining and is_storm:
|
||||||
|
if environment_config.storm_rain_intensity_multiplier > 1.0:
|
||||||
|
storm_weather_amount = clamp((rain_intensity - 1.0) / (environment_config.storm_rain_intensity_multiplier - 1.0), 0.0, 1.0)
|
||||||
|
else:
|
||||||
|
storm_weather_amount = rain_weather_amount
|
||||||
|
|
||||||
final_tint = final_tint.lerp(final_tint * environment_config.snow_mode_color, snow_weather_amount)
|
final_tint = final_tint.lerp(final_tint * environment_config.snow_mode_color, snow_weather_amount)
|
||||||
final_sky_top = final_sky_top.lerp(final_sky_top * environment_config.snow_mode_color, snow_weather_amount)
|
final_sky_top = final_sky_top.lerp(final_sky_top * environment_config.snow_mode_color, snow_weather_amount)
|
||||||
final_sky_horizon = final_sky_horizon.lerp(final_sky_horizon * environment_config.snow_mode_color, snow_weather_amount)
|
final_sky_horizon = final_sky_horizon.lerp(final_sky_horizon * environment_config.snow_mode_color, snow_weather_amount)
|
||||||
final_fog_color = final_fog_color.lerp(final_fog_color * environment_config.snow_mode_color, snow_weather_amount)
|
final_fog_color = final_fog_color.lerp(final_fog_color * environment_config.snow_mode_color, snow_weather_amount)
|
||||||
|
final_tint = final_tint.lerp(final_tint * _get_rain_day_color(), rain_weather_amount)
|
||||||
|
final_tint = final_tint.lerp(final_tint * _get_storm_day_color(), storm_weather_amount)
|
||||||
|
|
||||||
#Shader parameters for global trunk_shader
|
#Shader parameters for global trunk_shader
|
||||||
var final_grad_top = base_grad_top.lerp(base_grad_top * weather_color, clamp(rain_intensity, 0.0, 1.0))
|
var final_grad_top = base_grad_top.lerp(base_grad_top * weather_color, clamp(rain_intensity, 0.0, 1.0))
|
||||||
@@ -214,6 +225,8 @@ func _process(delta: float) -> void:
|
|||||||
|
|
||||||
# We calculate the final exposure by applying snow damping directly to the camera exposure
|
# We calculate the final exposure by applying snow damping directly to the camera exposure
|
||||||
var final_exposure = base_exposure * snow_light_attenuation
|
var final_exposure = base_exposure * snow_light_attenuation
|
||||||
|
final_exposure = lerp(final_exposure, _get_rain_day_exposure(), rain_weather_amount)
|
||||||
|
final_exposure = lerp(final_exposure, _get_storm_day_exposure(), storm_weather_amount)
|
||||||
|
|
||||||
var reflected_color = Color(0.4, 0.5, 0.6, 1.0)
|
var reflected_color = Color(0.4, 0.5, 0.6, 1.0)
|
||||||
var drops_color = final_sky_horizon.lerp(reflected_color, 0.15)
|
var drops_color = final_sky_horizon.lerp(reflected_color, 0.15)
|
||||||
@@ -293,6 +306,30 @@ func create_sound_players():
|
|||||||
thunder_audio_player.volume_db = environment_config.thunder_audio_volume_db
|
thunder_audio_player.volume_db = environment_config.thunder_audio_volume_db
|
||||||
add_child(thunder_audio_player)
|
add_child(thunder_audio_player)
|
||||||
|
|
||||||
|
func _get_rain_day_color() -> Color:
|
||||||
|
if day_time <= 2.0:
|
||||||
|
return environment_config.rain_morning_color.lerp(environment_config.rain_afternoon_color, day_time - 1.0)
|
||||||
|
|
||||||
|
return environment_config.rain_afternoon_color.lerp(environment_config.rain_night_color, day_time - 2.0)
|
||||||
|
|
||||||
|
func _get_storm_day_color() -> Color:
|
||||||
|
if day_time <= 2.0:
|
||||||
|
return environment_config.storm_morning_color.lerp(environment_config.storm_afternoon_color, day_time - 1.0)
|
||||||
|
|
||||||
|
return environment_config.storm_afternoon_color.lerp(environment_config.storm_night_color, day_time - 2.0)
|
||||||
|
|
||||||
|
func _get_rain_day_exposure() -> float:
|
||||||
|
if day_time <= 2.0:
|
||||||
|
return lerp(environment_config.rain_exposure_morning, environment_config.rain_exposure_afternoon, day_time - 1.0)
|
||||||
|
|
||||||
|
return lerp(environment_config.rain_exposure_afternoon, environment_config.rain_exposure_night, day_time - 2.0)
|
||||||
|
|
||||||
|
func _get_storm_day_exposure() -> float:
|
||||||
|
if day_time <= 2.0:
|
||||||
|
return lerp(environment_config.storm_exposure_morning, environment_config.storm_exposure_afternoon, day_time - 1.0)
|
||||||
|
|
||||||
|
return lerp(environment_config.storm_exposure_afternoon, environment_config.storm_exposure_night, day_time - 2.0)
|
||||||
|
|
||||||
#region camera
|
#region camera
|
||||||
func _set_camera(curr_camera: Camera3D):
|
func _set_camera(curr_camera: Camera3D):
|
||||||
camera = curr_camera
|
camera = curr_camera
|
||||||
@@ -347,7 +384,7 @@ func toggle_fireflies(value: bool):
|
|||||||
thereare_fireflies = value
|
thereare_fireflies = value
|
||||||
var is_night = day_time >= 2.5
|
var is_night = day_time >= 2.5
|
||||||
if particles_fireflies:
|
if particles_fireflies:
|
||||||
particles_fireflies.emitting = thereare_fireflies and is_night
|
particles_fireflies.emitting = thereare_fireflies and is_night and not is_raining
|
||||||
|
|
||||||
#disable fireflies and set default values and materials
|
#disable fireflies and set default values and materials
|
||||||
func init_fireflies():
|
func init_fireflies():
|
||||||
|
|||||||
@@ -33,6 +33,24 @@ extends Resource
|
|||||||
@export var exposure_afternoon: float = 0.95
|
@export var exposure_afternoon: float = 0.95
|
||||||
@export var exposure_night: float = 0.4
|
@export var exposure_night: float = 0.4
|
||||||
|
|
||||||
|
#Camera tonemap exposure and light tint used only while rain is active
|
||||||
|
@export_group("Rain Exposition and Colors")
|
||||||
|
@export var rain_exposure_morning: float = 0.8
|
||||||
|
@export var rain_exposure_afternoon: float = 0.7
|
||||||
|
@export var rain_exposure_night: float = 0.35
|
||||||
|
@export var rain_morning_color: Color = Color(0.85, 0.89, 0.93, 1.0)
|
||||||
|
@export var rain_afternoon_color: Color = Color(0.78, 0.83, 0.89, 1.0)
|
||||||
|
@export var rain_night_color: Color = Color(0.55, 0.6, 0.75, 1.0)
|
||||||
|
|
||||||
|
#Camera tonemap exposure and light tint used only while storm is active
|
||||||
|
@export_group("Storm Exposition and Colors")
|
||||||
|
@export var storm_exposure_morning: float = 0.65
|
||||||
|
@export var storm_exposure_afternoon: float = 0.55
|
||||||
|
@export var storm_exposure_night: float = 0.25
|
||||||
|
@export var storm_morning_color: Color = Color(0.78, 0.83, 0.89, 1.0)
|
||||||
|
@export var storm_afternoon_color: Color = Color(0.65, 0.7, 0.78, 1.0)
|
||||||
|
@export var storm_night_color: Color = Color(0.45, 0.5, 0.65, 1.0)
|
||||||
|
|
||||||
#Sky top color for each time of day
|
#Sky top color for each time of day
|
||||||
@export_group("Sky Colors - Top")
|
@export_group("Sky Colors - Top")
|
||||||
@export var sky_top_morning: Color = Color(0.35, 0.65, 0.9, 1.0)
|
@export var sky_top_morning: Color = Color(0.35, 0.65, 0.9, 1.0)
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ extends Button
|
|||||||
if is_inside_tree() and has_node("%Texture"):
|
if is_inside_tree() and has_node("%Texture"):
|
||||||
$%Texture.texture = image
|
$%Texture.texture = image
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
if image != null and has_node("%Texture"):
|
if image != null and has_node("%Texture"):
|
||||||
$%Texture.texture = image
|
$%Texture.texture = image
|
||||||
@@ -20,8 +18,6 @@ func _ready():
|
|||||||
$%TextureRect.hide()
|
$%TextureRect.hide()
|
||||||
TweenFX.breathe(self, 1)
|
TweenFX.breathe(self, 1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func _on_pressed() -> void:
|
func _on_pressed() -> void:
|
||||||
if TweenFX.is_playing(self, TweenFX.Animations.PRESS_ROTATE):
|
if TweenFX.is_playing(self, TweenFX.Animations.PRESS_ROTATE):
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -58,19 +58,19 @@ script = ExtResource("2_0bmh1")
|
|||||||
north = true
|
north = true
|
||||||
south = true
|
south = true
|
||||||
|
|
||||||
[node name="Argini_003" parent="." index="0" unique_id=1178813592]
|
[node name="Argini_003" parent="." index="0" unique_id=509439881]
|
||||||
surface_material_override/0 = ExtResource("3_c4jie")
|
surface_material_override/0 = ExtResource("3_c4jie")
|
||||||
|
|
||||||
[node name="Grass_005" parent="." index="1" unique_id=1427965126 groups=["weather_vegetables_node", "wind_node"]]
|
[node name="Grass_005" parent="." index="1" unique_id=188609017 groups=["weather_vegetables_node", "wind_node"]]
|
||||||
surface_material_override/0 = ExtResource("3_c4jie")
|
surface_material_override/0 = ExtResource("3_c4jie")
|
||||||
|
|
||||||
[node name="MSH_Staccioanta_1_002" parent="." index="2" unique_id=562234307]
|
[node name="MSH_Staccioanta_1_002" parent="." index="2" unique_id=746941179]
|
||||||
surface_material_override/0 = ExtResource("4_lr7xw")
|
surface_material_override/0 = ExtResource("4_lr7xw")
|
||||||
|
|
||||||
[node name="Strada_004" parent="." index="3" unique_id=387203009 groups=["weather_node"]]
|
[node name="Strada_004" parent="." index="3" unique_id=604168900 groups=["weather_node"]]
|
||||||
surface_material_override/0 = ExtResource("5_5jc2f")
|
surface_material_override/0 = ExtResource("5_5jc2f")
|
||||||
|
|
||||||
[node name="Water_004" parent="." index="4" unique_id=1258756459]
|
[node name="Water_004" parent="." index="4" unique_id=244513747]
|
||||||
surface_material_override/0 = ExtResource("6_0bmh1")
|
surface_material_override/0 = ExtResource("6_0bmh1")
|
||||||
|
|
||||||
[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 groups=["weather_vegetables_node", "wind_node"]]
|
||||||
@@ -104,7 +104,7 @@ material_override = ExtResource("10_tbcfd")
|
|||||||
cast_shadow = 0
|
cast_shadow = 0
|
||||||
multimesh = SubResource("MultiMesh_e417f")
|
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 groups=["weather_vegetables_node"]]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[node name="rice_plane" type="MeshInstance3D" parent="rice" index="0" unique_id=629743434]
|
[node name="rice_plane" type="MeshInstance3D" parent="rice" index="0" unique_id=629743434]
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
[ext_resource type="Material" uid="uid://jygb1hcokks5" path="res://tgcc/chunk/prop/grass/grass_bank.tres" id="6_cxqsi"]
|
[ext_resource type="Material" uid="uid://jygb1hcokks5" path="res://tgcc/chunk/prop/grass/grass_bank.tres" id="6_cxqsi"]
|
||||||
[ext_resource type="Material" uid="uid://fnjxocmx16b7" path="res://tgcc/chunk/prop/grass/grass_chunk.tres" id="7_vkypx"]
|
[ext_resource type="Material" uid="uid://fnjxocmx16b7" path="res://tgcc/chunk/prop/grass/grass_chunk.tres" id="7_vkypx"]
|
||||||
[ext_resource type="Material" uid="uid://0x17mj2v807r" path="res://tgcc/chunk/prop/grass/grass_chunk_weeds2.tres" id="8_k7yf4"]
|
[ext_resource type="Material" uid="uid://0x17mj2v807r" path="res://tgcc/chunk/prop/grass/grass_chunk_weeds2.tres" id="8_k7yf4"]
|
||||||
[ext_resource type="ArrayMesh" uid="uid://doophefr873pt" path="res://tgcc/chunk/prop/tree/bambù/Bambu.res" id="11_fy14c"]
|
[ext_resource type="ArrayMesh" uid="uid://bg5rfu7tyl3p8" path="res://tgcc/chunk/prop/tree/bambù/Bambu.res" id="11_fy14c"]
|
||||||
[ext_resource type="PackedScene" uid="uid://d12t04rs47jq3" path="res://tgcc/chunk/prop/tree/tree_01/tree_01.tscn" id="12_fqf4n"]
|
[ext_resource type="PackedScene" uid="uid://d12t04rs47jq3" path="res://tgcc/chunk/prop/tree/tree_01/tree_01.tscn" id="12_fqf4n"]
|
||||||
[ext_resource type="Script" uid="uid://cp1pb5dnuojg3" path="res://tgcc/chunk/prop/tree/bambù/bambu.gd" id="12_s2jc4"]
|
[ext_resource type="Script" uid="uid://cp1pb5dnuojg3" path="res://tgcc/chunk/prop/tree/bambù/bambu.gd" id="12_s2jc4"]
|
||||||
|
|
||||||
@@ -60,20 +60,20 @@ script = ExtResource("2_vkypx")
|
|||||||
river_north = true
|
river_north = true
|
||||||
river_south = true
|
river_south = true
|
||||||
|
|
||||||
[node name="Argini_011" parent="." index="0" unique_id=895986402]
|
[node name="Argini_011" parent="." index="0" unique_id=1103166467]
|
||||||
surface_material_override/0 = ExtResource("2_mic04")
|
surface_material_override/0 = ExtResource("2_mic04")
|
||||||
surface_material_override/1 = ExtResource("2_mic04")
|
surface_material_override/1 = ExtResource("2_mic04")
|
||||||
|
|
||||||
[node name="Grass_019" parent="." index="1" unique_id=1784106582]
|
[node name="Grass_019" parent="." index="1" unique_id=163702648]
|
||||||
surface_material_override/0 = ExtResource("2_mic04")
|
surface_material_override/0 = ExtResource("2_mic04")
|
||||||
|
|
||||||
[node name="Water_012" parent="." index="2" unique_id=1865739867]
|
[node name="Water_012" parent="." index="2" unique_id=183333409]
|
||||||
surface_material_override/0 = ExtResource("3_5p1m2")
|
surface_material_override/0 = ExtResource("3_5p1m2")
|
||||||
|
|
||||||
[node name="Water_F_015" parent="." index="3" unique_id=147107428]
|
[node name="Water_F_015" parent="." index="3" unique_id=1691016237]
|
||||||
surface_material_override/0 = ExtResource("4_532mt")
|
surface_material_override/0 = ExtResource("4_532mt")
|
||||||
|
|
||||||
[node name="rice" type="Node3D" parent="." index="4" unique_id=1336289627 groups=["weather_vegetables_node", "wind_node"]]
|
[node name="rice" type="Node3D" parent="." index="4" unique_id=1336289627 groups=["weather_vegetables_node"]]
|
||||||
transform = Transform3D(-1, 0, 8.742278e-08, 0, 1, 0, -8.742278e-08, 0, -1, 21.006079, 0, 0)
|
transform = Transform3D(-1, 0, 8.742278e-08, 0, 1, 0, -8.742278e-08, 0, -1, 21.006079, 0, 0)
|
||||||
|
|
||||||
[node name="rice_plane" type="MeshInstance3D" parent="rice" index="0" unique_id=1744988640]
|
[node name="rice_plane" type="MeshInstance3D" parent="rice" index="0" unique_id=1744988640]
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
[ext_resource type="Material" uid="uid://o31kp0jm07q3" path="res://tgcc/chunk/material/rocks.tres" id="5_pj7tp"]
|
[ext_resource type="Material" uid="uid://o31kp0jm07q3" path="res://tgcc/chunk/material/rocks.tres" id="5_pj7tp"]
|
||||||
[ext_resource type="Material" uid="uid://d4vsl672lwv7" path="res://tgcc/chunk/material/rocks2.tres" id="6_5hjh1"]
|
[ext_resource type="Material" uid="uid://d4vsl672lwv7" path="res://tgcc/chunk/material/rocks2.tres" id="6_5hjh1"]
|
||||||
[ext_resource type="Shader" uid="uid://d0ch5ofrgf7y6" path="res://core/daynight/trunk_shader.gdshader" id="8_d3e7a"]
|
[ext_resource type="Shader" uid="uid://d0ch5ofrgf7y6" path="res://core/daynight/trunk_shader.gdshader" id="8_d3e7a"]
|
||||||
|
[ext_resource type="Script" uid="uid://5frq4qrokiy2" path="res://tgcc/train/train_glass_emission.gd" id="9_4qk3b"]
|
||||||
|
|
||||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_fuy7x"]
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_fuy7x"]
|
||||||
render_priority = 0
|
render_priority = 0
|
||||||
@@ -31,17 +32,18 @@ shader_parameter/emission_color = Color(0.3875077, 0.16205889, 0.035861596, 1)
|
|||||||
shader_parameter/emission_energy = 12.00000057
|
shader_parameter/emission_energy = 12.00000057
|
||||||
|
|
||||||
[node name="Treno" unique_id=1182090923 instance=ExtResource("1_33mei")]
|
[node name="Treno" unique_id=1182090923 instance=ExtResource("1_33mei")]
|
||||||
|
script = ExtResource("9_4qk3b")
|
||||||
|
|
||||||
[node name="Finestrini" parent="." index="0" unique_id=1797001001]
|
[node name="Finestrini" parent="." index="0" unique_id=271431519]
|
||||||
surface_material_override/0 = ExtResource("2_bks4l")
|
surface_material_override/0 = ExtResource("2_bks4l")
|
||||||
surface_material_override/1 = ExtResource("3_sgpgi")
|
surface_material_override/1 = ExtResource("3_sgpgi")
|
||||||
surface_material_override/2 = ExtResource("4_gua5y")
|
surface_material_override/2 = ExtResource("4_gua5y")
|
||||||
|
|
||||||
[node name="Ruote" parent="." index="1" unique_id=226016697]
|
[node name="Ruote" parent="." index="1" unique_id=1570760095]
|
||||||
surface_material_override/0 = ExtResource("5_pj7tp")
|
surface_material_override/0 = ExtResource("5_pj7tp")
|
||||||
surface_material_override/1 = ExtResource("4_gua5y")
|
surface_material_override/1 = ExtResource("4_gua5y")
|
||||||
|
|
||||||
[node name="Train" parent="." index="2" unique_id=1876679965]
|
[node name="Train" parent="." index="2" unique_id=301191703]
|
||||||
surface_material_override/0 = ExtResource("6_5hjh1")
|
surface_material_override/0 = ExtResource("6_5hjh1")
|
||||||
surface_material_override/1 = ExtResource("2_5yo4e")
|
surface_material_override/1 = ExtResource("2_5yo4e")
|
||||||
surface_material_override/2 = ExtResource("2_bks4l")
|
surface_material_override/2 = ExtResource("2_bks4l")
|
||||||
|
|||||||
100
tgcc/train/train_glass_emission.gd
Normal file
100
tgcc/train/train_glass_emission.gd
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
## Updates the train window emission during the day/night cycle.
|
||||||
|
extends Node3D
|
||||||
|
|
||||||
|
@export_group("Windows")
|
||||||
|
@export var glass_surface_index: int = 1
|
||||||
|
@export var morning_emissive_intensity: float = 0.0
|
||||||
|
@export var night_emissive_intensity: float = 8.0
|
||||||
|
|
||||||
|
var _glass_material: ShaderMaterial
|
||||||
|
var _sunrise_time: float = 0.0
|
||||||
|
var _night_time: float = 0.0
|
||||||
|
|
||||||
|
@onready var _finestrini: MeshInstance3D = $Finestrini
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
var environment_manager: EnvironmentManagerRoot = _get_environment_manager()
|
||||||
|
if environment_manager == null or environment_manager.environment_config == null:
|
||||||
|
return
|
||||||
|
|
||||||
|
_sunrise_time = environment_manager.environment_config.sunrise
|
||||||
|
_night_time = environment_manager.environment_config.night
|
||||||
|
|
||||||
|
if _finestrini != null:
|
||||||
|
_glass_material = _finestrini.get_surface_override_material(glass_surface_index) as ShaderMaterial
|
||||||
|
|
||||||
|
_apply_emissive_intensity(_get_current_normalized_time())
|
||||||
|
|
||||||
|
if not UIEvents.day_time_changed.is_connected(_on_day_time_changed):
|
||||||
|
UIEvents.day_time_changed.connect(_on_day_time_changed)
|
||||||
|
|
||||||
|
|
||||||
|
func _exit_tree() -> void:
|
||||||
|
if UIEvents.day_time_changed.is_connected(_on_day_time_changed):
|
||||||
|
UIEvents.day_time_changed.disconnect(_on_day_time_changed)
|
||||||
|
|
||||||
|
|
||||||
|
func _get_current_normalized_time() -> float:
|
||||||
|
var environment_manager: EnvironmentManagerRoot = _get_environment_manager()
|
||||||
|
if environment_manager == null:
|
||||||
|
return _sunrise_time
|
||||||
|
|
||||||
|
if environment_manager.day_night_controller != null:
|
||||||
|
return environment_manager.day_night_controller.current_time
|
||||||
|
|
||||||
|
if environment_manager.environment_config != null:
|
||||||
|
return environment_manager.environment_config.start_time
|
||||||
|
|
||||||
|
return _sunrise_time
|
||||||
|
|
||||||
|
|
||||||
|
func _get_environment_manager() -> EnvironmentManagerRoot:
|
||||||
|
var current_scene: Node = get_tree().current_scene
|
||||||
|
if current_scene == null:
|
||||||
|
return null
|
||||||
|
|
||||||
|
for child in current_scene.get_children():
|
||||||
|
var environment_manager := child as EnvironmentManagerRoot
|
||||||
|
if environment_manager != null:
|
||||||
|
return environment_manager
|
||||||
|
|
||||||
|
return null
|
||||||
|
|
||||||
|
|
||||||
|
func _apply_emissive_intensity(normalized_time: float) -> void:
|
||||||
|
if _glass_material == null:
|
||||||
|
return
|
||||||
|
|
||||||
|
_glass_material.set_shader_parameter(
|
||||||
|
"intensita_emissiva",
|
||||||
|
_calculate_emissive_intensity(normalized_time)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
func _calculate_emissive_intensity(normalized_time: float) -> float:
|
||||||
|
var wrapped_time: float = wrapf(normalized_time, 0.0, 1.0)
|
||||||
|
var sunrise_time: float = clampf(_sunrise_time, 0.0, 1.0)
|
||||||
|
var night_time: float = clampf(_night_time, sunrise_time, 1.0)
|
||||||
|
|
||||||
|
if sunrise_time > 0.0 and wrapped_time < sunrise_time:
|
||||||
|
var night_to_morning_t: float = wrapped_time / sunrise_time
|
||||||
|
return lerpf(
|
||||||
|
night_emissive_intensity,
|
||||||
|
morning_emissive_intensity,
|
||||||
|
night_to_morning_t
|
||||||
|
)
|
||||||
|
|
||||||
|
if is_equal_approx(night_time, sunrise_time):
|
||||||
|
return morning_emissive_intensity
|
||||||
|
|
||||||
|
var morning_to_night_t: float = inverse_lerp(sunrise_time, night_time, wrapped_time)
|
||||||
|
return lerpf(
|
||||||
|
morning_emissive_intensity,
|
||||||
|
night_emissive_intensity,
|
||||||
|
clampf(morning_to_night_t, 0.0, 1.0)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_day_time_changed(value: float, _time_string: String) -> void:
|
||||||
|
_apply_emissive_intensity(value)
|
||||||
1
tgcc/train/train_glass_emission.gd.uid
Normal file
1
tgcc/train/train_glass_emission.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://5frq4qrokiy2
|
||||||
Reference in New Issue
Block a user