fix set shader on nodes
This commit is contained in:
@@ -1,6 +1,10 @@
|
|||||||
class_name EnvironmentManagerRoot
|
class_name EnvironmentManagerRoot
|
||||||
extends Node3D
|
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 var environment_config: EnvironmentConfig
|
||||||
|
|
||||||
@export_group("Camera")
|
@export_group("Camera")
|
||||||
@@ -33,6 +37,9 @@ var day_time: float = 0.0
|
|||||||
|
|
||||||
func _ready() -> void:
|
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
|
#set noise texture 2d to materials in special group
|
||||||
ApplyWindNoiseToMaterials()
|
ApplyWindNoiseToMaterials()
|
||||||
#set weather overlay (snow + rain) to materials in special group
|
#set weather overlay (snow + rain) to materials in special group
|
||||||
@@ -67,10 +74,26 @@ func _ready() -> void:
|
|||||||
weather_controller.name = "WeatherController"
|
weather_controller.name = "WeatherController"
|
||||||
add_child(weather_controller)
|
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():
|
func ApplyWindNoiseToMaterials():
|
||||||
var noise_tex = preload("res://core/daynight/noise.tres")
|
|
||||||
for node in get_tree().get_nodes_in_group("wind_node"):
|
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:
|
func _apply_wind_noise_to_node(node: Node, noise_tex: Texture2D) -> void:
|
||||||
if node is GeometryInstance3D:
|
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)
|
_apply_wind_noise_to_node(child, noise_tex)
|
||||||
|
|
||||||
func ApplyWeatherShaderToMaterials():
|
func ApplyWeatherShaderToMaterials():
|
||||||
var weather_shader = preload("res://core/daynight/weather_overlay.tres")
|
|
||||||
for node in get_tree().get_nodes_in_group("weather_node"):
|
for node in get_tree().get_nodes_in_group("weather_node"):
|
||||||
if node is GeometryInstance3D:
|
_apply_weather_overlay_to_node(node, WEATHER_SHADER)
|
||||||
node.material_overlay = weather_shader
|
|
||||||
else:
|
|
||||||
for child in node.get_children():
|
|
||||||
if child is GeometryInstance3D:
|
|
||||||
child.material_overlay = weather_shader
|
|
||||||
break
|
|
||||||
|
|
||||||
var weather_plain_shader = preload("res://core/daynight/weather_plain_shader.tres")
|
|
||||||
for node in get_tree().get_nodes_in_group("weather_vegetables_node"):
|
for node in get_tree().get_nodes_in_group("weather_vegetables_node"):
|
||||||
if node is GeometryInstance3D:
|
_apply_weather_overlay_to_node(node, WEATHER_PLAIN_SHADER)
|
||||||
node.material_overlay = weather_plain_shader
|
|
||||||
else:
|
func _apply_weather_overlay_to_node(node: Node, material: Material) -> void:
|
||||||
for child in node.get_children():
|
if node is GeometryInstance3D:
|
||||||
if child is GeometryInstance3D:
|
node.material_overlay = material
|
||||||
child.material_overlay = weather_plain_shader
|
|
||||||
break
|
for child in node.get_children():
|
||||||
|
_apply_weather_overlay_to_node(child, material)
|
||||||
|
|
||||||
func select_day_time(normalized_time: float) -> void:
|
func select_day_time(normalized_time: float) -> void:
|
||||||
#set show_day_time_debug = true to show debug on screen
|
#set show_day_time_debug = true to show debug on screen
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user