fix snow stuff

This commit is contained in:
Matteo Sonaglioni
2026-03-13 20:56:43 +01:00
parent 44252ec5e6
commit a72211db45
4 changed files with 110 additions and 42 deletions

View File

@@ -1,15 +1,20 @@
[gd_resource type="ShaderMaterial" format=3 uid="uid://buknp8uj4o22p"] [gd_resource type="ShaderMaterial" format=3 uid="uid://buknp8uj4o22p"]
[ext_resource type="Shader" uid="uid://cw7lu2soglhqu" path="res://Shaders/Grain_Test.gdshader" id="1_etun4"] [ext_resource type="Shader" uid="uid://co2jw3fnyc6aa" path="res://Shaders/tree_leaves.gdshader" id="1_etun4"]
[ext_resource type="Texture2D" uid="uid://dluagib52he0x" path="res://Assets/Textures/grass_thin.png" id="2_j223e"] [ext_resource type="Texture2D" uid="uid://dluagib52he0x" path="res://Assets/Textures/grass_thin.png" id="2_j223e"]
[resource] [resource]
render_priority = 0 render_priority = 0
shader = ExtResource("1_etun4") shader = ExtResource("1_etun4")
shader_parameter/billboard_enabled = true
shader_parameter/wind_enabled = true
shader_parameter/base_color = Color(0.6910962, 0.46426672, 0.08072326, 1) shader_parameter/base_color = Color(0.6910962, 0.46426672, 0.08072326, 1)
shader_parameter/alpha_texture = ExtResource("2_j223e") shader_parameter/alpha_texture = ExtResource("2_j223e")
shader_parameter/leaves_scale = 1.0 shader_parameter/leaves_scale = 1.0
shader_parameter/rotation_degrees = 180.0 shader_parameter/rotation_degrees = 180.0
shader_parameter/texture_offset = Vector2(0, 0)
shader_parameter/opacity = 1.0
shader_parameter/snow_color = Color(0.85, 0.9, 0.95, 1)
shader_parameter/height_min = 0.0 shader_parameter/height_min = 0.0
shader_parameter/height_max = 5.0 shader_parameter/height_max = 5.0
shader_parameter/shadow_intensity = 0.5 shader_parameter/shadow_intensity = 0.5

View File

@@ -3,6 +3,32 @@
[ext_resource type="PackedScene" uid="uid://dopxtbmauwr0n" path="res://Assets/Test/Colonnina_Blockout.fbx" id="1_iaqs2"] [ext_resource type="PackedScene" uid="uid://dopxtbmauwr0n" path="res://Assets/Test/Colonnina_Blockout.fbx" id="1_iaqs2"]
[ext_resource type="Material" uid="uid://da8erd0d83kog" path="res://Materials/Palette_Cel.tres" id="2_hqihs"] [ext_resource type="Material" uid="uid://da8erd0d83kog" path="res://Materials/Palette_Cel.tres" id="2_hqihs"]
[ext_resource type="Texture2D" uid="uid://cdlgd0h5qeb7k" path="res://Assets/Textures/Palette_train.png" id="3_jfj3v"] [ext_resource type="Texture2D" uid="uid://cdlgd0h5qeb7k" path="res://Assets/Textures/Palette_train.png" id="3_jfj3v"]
[ext_resource type="Shader" uid="uid://do0tct77dfhef" path="res://Shaders/snow.gdshader" id="3_ptdo2"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_dg33q"]
render_priority = 0
shader = ExtResource("3_ptdo2")
shader_parameter/snow_color = Color(0.95, 0.98, 1, 1)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_lrklx"]
render_priority = 0
shader = ExtResource("3_ptdo2")
shader_parameter/snow_color = Color(0.95, 0.98, 1, 1)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_bwl3q"]
render_priority = 0
shader = ExtResource("3_ptdo2")
shader_parameter/snow_color = Color(0.95, 0.98, 1, 1)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_n0srh"]
render_priority = 0
shader = ExtResource("3_ptdo2")
shader_parameter/snow_color = Color(0.95, 0.98, 1, 1)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_0mbrm"]
render_priority = 0
shader = ExtResource("3_ptdo2")
shader_parameter/snow_color = Color(0.95, 0.98, 1, 1)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_6tlqt"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_6tlqt"]
specular_mode = 1 specular_mode = 1
@@ -14,27 +40,42 @@ emission_enabled = true
emission_energy_multiplier = 8.0 emission_energy_multiplier = 8.0
emission_texture = ExtResource("3_jfj3v") emission_texture = ExtResource("3_jfj3v")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_7dodf"]
render_priority = 0
shader = ExtResource("3_ptdo2")
shader_parameter/snow_color = Color(0.95, 0.98, 1, 1)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_63xe0"]
render_priority = 0
shader = ExtResource("3_ptdo2")
shader_parameter/snow_color = Color(0.95, 0.98, 1, 1)
[node name="ArtTest3" unique_id=143340255 instance=ExtResource("1_iaqs2")] [node name="ArtTest3" unique_id=143340255 instance=ExtResource("1_iaqs2")]
[node name="Empty" parent="." index="0" unique_id=1671039315] [node name="Empty" parent="." index="0" unique_id=1399041374]
transform = Transform3D(50, 0, 0, 0, -2.1855694e-06, 50, 0, -50, -2.1855694e-06, 0, 0, 0) transform = Transform3D(50, 0, 0, 0, -2.1855694e-06, 50, 0, -50, -2.1855694e-06, 0, 0, 0)
[node name="Cube_004" parent="Empty" index="0" unique_id=1602644254] [node name="Cube_004" parent="Empty" index="0" unique_id=1076888931]
material_override = ExtResource("2_hqihs") material_override = ExtResource("2_hqihs")
material_overlay = SubResource("ShaderMaterial_dg33q")
[node name="Cube_005" parent="Empty" index="1" unique_id=1550621633] [node name="Cube_005" parent="Empty" index="1" unique_id=257441775]
material_override = ExtResource("2_hqihs") material_override = ExtResource("2_hqihs")
material_overlay = SubResource("ShaderMaterial_lrklx")
[node name="Cube_006" parent="Empty" index="2" unique_id=1497731252] [node name="Cube_006" parent="Empty" index="2" unique_id=1211401951]
material_override = ExtResource("2_hqihs") material_override = ExtResource("2_hqihs")
material_overlay = SubResource("ShaderMaterial_bwl3q")
[node name="Cube_007" parent="Empty" index="3" unique_id=259390191] [node name="Cube_007" parent="Empty" index="3" unique_id=323750734]
material_override = ExtResource("2_hqihs") material_override = ExtResource("2_hqihs")
material_overlay = SubResource("ShaderMaterial_n0srh")
[node name="Cube_008" parent="Empty" index="4" unique_id=1357576798] [node name="Cube_008" parent="Empty" index="4" unique_id=2097566020]
material_override = ExtResource("2_hqihs") material_override = ExtResource("2_hqihs")
material_overlay = SubResource("ShaderMaterial_0mbrm")
[node name="Cube_009" parent="Empty" index="5" unique_id=1102627943] [node name="Cube_009" parent="Empty" index="5" unique_id=264106945]
material_override = SubResource("StandardMaterial3D_6tlqt") material_override = SubResource("StandardMaterial3D_6tlqt")
[node name="OmniLight3D" type="OmniLight3D" parent="Empty/Cube_009" index="0" unique_id=1295876317] [node name="OmniLight3D" type="OmniLight3D" parent="Empty/Cube_009" index="0" unique_id=1295876317]
@@ -46,8 +87,10 @@ omni_range = 15.0
omni_attenuation = 2.621 omni_attenuation = 2.621
omni_shadow_mode = 0 omni_shadow_mode = 0
[node name="Cube_011" parent="Empty" index="6" unique_id=556675018] [node name="Cube_011" parent="Empty" index="6" unique_id=1497976141]
material_override = ExtResource("2_hqihs") material_override = ExtResource("2_hqihs")
material_overlay = SubResource("ShaderMaterial_7dodf")
[node name="tetto 2" parent="Empty" index="7" unique_id=1317509787] [node name="tetto 2" parent="Empty" index="7" unique_id=1754192511]
material_override = ExtResource("2_hqihs") material_override = ExtResource("2_hqihs")
material_overlay = SubResource("ShaderMaterial_63xe0")

File diff suppressed because one or more lines are too long

View File

@@ -60,7 +60,6 @@ extends Node3D
@export var raggio_spawn_vento: float = 25.0 @export var raggio_spawn_vento: float = 25.0
@export var altezza_spawn_vento: float = 5.0 @export var altezza_spawn_vento: float = 5.0
# --- GRUPPO NEVE AGGIORNATO ---
@export_group("Neve") @export_group("Neve")
@export var bottone_neve: Button @export var bottone_neve: Button
@export var bottone_nevicata: Button @export var bottone_nevicata: Button
@@ -87,7 +86,6 @@ var is_cinematic_mode: bool = false
var timer_cinematic_env: float = 0.0 var timer_cinematic_env: float = 0.0
var sto_cambiando_in_cinematic: bool = false var sto_cambiando_in_cinematic: bool = false
# Variabili di stato per la neve
var is_snow_accumulated: bool = false var is_snow_accumulated: bool = false
var is_actively_snowing: bool = false var is_actively_snowing: bool = false
var snow_tween: Tween var snow_tween: Tween
@@ -109,7 +107,6 @@ func _ready() -> void:
if particelle_pioggia: if particelle_pioggia:
particelle_pioggia.emitting = false particelle_pioggia.emitting = false
# Inizializzazione Lucciole
if particelle_lucciole: if particelle_lucciole:
particelle_lucciole.emitting = false particelle_lucciole.emitting = false
particelle_lucciole.amount = quantita_lucciole particelle_lucciole.amount = quantita_lucciole
@@ -117,7 +114,6 @@ func _ready() -> void:
if proc_mat: if proc_mat:
proc_mat.emission_box_extents = Vector3(raggio_spawn_lucciole, altezza_spawn_lucciole, raggio_spawn_lucciole) proc_mat.emission_box_extents = Vector3(raggio_spawn_lucciole, altezza_spawn_lucciole, raggio_spawn_lucciole)
# Inizializzazione Vento
if particelle_vento: if particelle_vento:
particelle_vento.emitting = false particelle_vento.emitting = false
particelle_vento.amount = quantita_vento particelle_vento.amount = quantita_vento
@@ -125,7 +121,6 @@ func _ready() -> void:
if proc_mat_vento: if proc_mat_vento:
proc_mat_vento.emission_box_extents = Vector3(raggio_spawn_vento, altezza_spawn_vento, raggio_spawn_vento) proc_mat_vento.emission_box_extents = Vector3(raggio_spawn_vento, altezza_spawn_vento, raggio_spawn_vento)
# --- INIZIALIZZAZIONE NEVE ---
set_snow_amount(0.0) set_snow_amount(0.0)
if particelle_neve: if particelle_neve:
@@ -173,6 +168,12 @@ func _on_giornata_selezionata(index: int) -> void:
trigger_morning() trigger_morning()
func _on_pioggia_toggled(toggled_on: bool) -> void: func _on_pioggia_toggled(toggled_on: bool) -> void:
# Blocchiamo la pioggia se sta già nevicando
if is_actively_snowing and toggled_on:
if bottone_pioggia:
bottone_pioggia.set_pressed_no_signal(false)
return
if not sto_cambiando_in_cinematic and is_cinematic_mode: if not sto_cambiando_in_cinematic and is_cinematic_mode:
is_cinematic_mode = false is_cinematic_mode = false
print("Ambiente Cinematic: DISATTIVATA (Pioggia cambiata manualmente)") print("Ambiente Cinematic: DISATTIVATA (Pioggia cambiata manualmente)")
@@ -196,13 +197,18 @@ func _process(delta: float) -> void:
var base_sky_top: Color var base_sky_top: Color
var base_sky_horizon: Color var base_sky_horizon: Color
if is_raining: # Usiamo questa variabile per animare le nuvole sia se piove sia se nevica
var tempesta_attiva = is_raining or is_actively_snowing
if tempesta_attiva:
intensita_pioggia = move_toward(intensita_pioggia, 1.0, delta * 0.5) intensita_pioggia = move_toward(intensita_pioggia, 1.0, delta * 0.5)
timer_prossimo_fulmine -= delta # I fulmini partono SOLO se sta piovendo
if timer_prossimo_fulmine <= 0.0: if is_raining:
_scatena_fulmine() timer_prossimo_fulmine -= delta
_resetta_timer_fulmine() if timer_prossimo_fulmine <= 0.0:
_scatena_fulmine()
_resetta_timer_fulmine()
else: else:
intensita_pioggia = move_toward(intensita_pioggia, 0.0, delta * 0.5) intensita_pioggia = move_toward(intensita_pioggia, 0.0, delta * 0.5)
@@ -255,28 +261,22 @@ func _process(delta: float) -> void:
materiale_nebbia.set_shader_parameter("night_intensity", night_val) materiale_nebbia.set_shader_parameter("night_intensity", night_val)
materiale_nebbia.set_shader_parameter("sun_color", final_tint) materiale_nebbia.set_shader_parameter("sun_color", final_tint)
# ==========================================
# --- GESTIONE POLVERE, LUCCIOLE E VENTO ---
# ==========================================
var e_notte = tempo_giorno >= 2.5 var e_notte = tempo_giorno >= 2.5
# Polvere (2D): Solo di giorno e senza pioggia
if nodo_polvere: if nodo_polvere:
if not is_raining and not e_notte: if not tempesta_attiva and not e_notte:
nodo_polvere.visible = true nodo_polvere.visible = true
else: else:
nodo_polvere.visible = false nodo_polvere.visible = false
# Lucciole (3D): Solo di notte e senza pioggia
if particelle_lucciole: if particelle_lucciole:
if not is_raining and e_notte: if not tempesta_attiva and e_notte:
particelle_lucciole.emitting = true particelle_lucciole.emitting = true
else: else:
particelle_lucciole.emitting = false particelle_lucciole.emitting = false
# Vento (3D): Solo di giorno e senza pioggia
if particelle_vento: if particelle_vento:
if not is_raining and not e_notte: if not tempesta_attiva and not e_notte:
particelle_vento.emitting = true particelle_vento.emitting = true
else: else:
particelle_vento.emitting = false particelle_vento.emitting = false
@@ -293,17 +293,21 @@ func _genera_evento_meteo_casuale() -> void:
_on_giornata_selezionata(nuovo_orario) _on_giornata_selezionata(nuovo_orario)
elif scelta == 1: elif scelta == 1:
var piove = randf() > 0.5 # Blocca il trigger della pioggia in cinematic mode se nevica
if bottone_pioggia: if not is_actively_snowing:
bottone_pioggia.set_pressed_no_signal(piove) var piove = randf() > 0.5
_on_pioggia_toggled(piove) if bottone_pioggia:
bottone_pioggia.set_pressed_no_signal(piove)
_on_pioggia_toggled(piove)
elif scelta == 2: elif scelta == 2:
if not is_raining: # Blocca il trigger di tempesta/fulmini se nevica
if bottone_pioggia: if not is_actively_snowing:
bottone_pioggia.set_pressed_no_signal(true) if not is_raining:
_on_pioggia_toggled(true) if bottone_pioggia:
_scatena_fulmine() bottone_pioggia.set_pressed_no_signal(true)
_on_pioggia_toggled(true)
_scatena_fulmine()
sto_cambiando_in_cinematic = false sto_cambiando_in_cinematic = false
@@ -372,18 +376,19 @@ func spawn_single_godray() -> void:
ray.scale = godray_scale ray.scale = godray_scale
# ========================================== # ==========================================
# --- LOGICA NEVE AGGIORNATA --- # --- LOGICA NEVE E NEVICATA ---
# ========================================== # ==========================================
func _on_snow_button_pressed(): func _on_snow_button_pressed():
is_snow_accumulated = !is_snow_accumulated is_snow_accumulated = !is_snow_accumulated
# Sblocca il pulsante nevicata solo se c'è accumulo
if bottone_nevicata: if bottone_nevicata:
bottone_nevicata.disabled = !is_snow_accumulated bottone_nevicata.disabled = !is_snow_accumulated
# Se sciogliamo la neve, fermiamo anche la nevicata attiva # Attiva in automatico la nevicata quando nevica, la spegne quando si scioglie
if not is_snow_accumulated and is_actively_snowing: if is_snow_accumulated and not is_actively_snowing:
_on_nevicata_button_pressed()
elif not is_snow_accumulated and is_actively_snowing:
_on_nevicata_button_pressed() _on_nevicata_button_pressed()
var target_snow: float = 1.0 if is_snow_accumulated else 0.0 var target_snow: float = 1.0 if is_snow_accumulated else 0.0
@@ -394,12 +399,20 @@ func _on_snow_button_pressed():
snow_tween = create_tween() snow_tween = create_tween()
snow_tween.tween_method(set_snow_amount, actual_snow_amount, target_snow, tempo_transizione_neve) snow_tween.tween_method(set_snow_amount, actual_snow_amount, target_snow, tempo_transizione_neve)
func _on_nevicata_button_pressed(): func _on_nevicata_button_pressed():
if not is_snow_accumulated: if not is_snow_accumulated:
return return
is_actively_snowing = !is_actively_snowing is_actively_snowing = !is_actively_snowing
# Disabilita il pulsante della pioggia. Se pioveva già, spegne la pioggia.
if bottone_pioggia:
bottone_pioggia.disabled = is_actively_snowing
if is_actively_snowing and is_raining:
bottone_pioggia.set_pressed_no_signal(false)
_on_pioggia_toggled(false)
if particelle_neve: if particelle_neve:
particelle_neve.emitting = is_actively_snowing particelle_neve.emitting = is_actively_snowing