fix set shader on nodes

This commit is contained in:
2026-04-24 12:22:46 +02:00
parent b95e8598b2
commit ab87c7f478
2 changed files with 56 additions and 20 deletions

View File

@@ -1,6 +1,10 @@
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")
@export var environment_config: EnvironmentConfig
@export_group("Camera")
@@ -33,6 +37,9 @@ var day_time: float = 0.0
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
@@ -67,10 +74,26 @@ func _ready() -> void:
weather_controller.name = "WeatherController"
add_child(weather_controller)
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"):
call_deferred("_apply_dynamic_environment_materials", node)
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_tex)
_apply_wind_noise_to_node(node, NOISE_TEXTURE)
func _apply_wind_noise_to_node(node: Node, noise_tex: Texture2D) -> void:
if node is GeometryInstance3D:
@@ -88,25 +111,18 @@ 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"):
if node is GeometryInstance3D:
node.material_overlay = weather_shader
else:
for child in node.get_children():
if child is GeometryInstance3D:
child.material_overlay = weather_shader
break
_apply_weather_overlay_to_node(node, WEATHER_SHADER)
var weather_plain_shader = preload("res://core/daynight/weather_plain_shader.tres")
for node in get_tree().get_nodes_in_group("weather_vegetables_node"):
if node is GeometryInstance3D:
node.material_overlay = weather_plain_shader
else:
for child in node.get_children():
if child is GeometryInstance3D:
child.material_overlay = weather_plain_shader
break
_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
for child in node.get_children():
_apply_weather_overlay_to_node(child, material)
func select_day_time(normalized_time: float) -> void:
#set show_day_time_debug = true to show debug on screen

File diff suppressed because one or more lines are too long