nature-sim/Utilities/MaterialManager/MaterialManager.gd
Dan Baker 3959333534 Adds bushes and flowers to ground tiles
Implements bush and flower spawning on ground tiles based on vegetation density.
Adds new assets for bushes and flowers, and introduces multi-mesh rendering for optimized performance.
Introduces seasonal color variations for vegetation using a shader for bushes and materials for flowers and grass.
Refactors material application into a MaterialManager to handle material assignments over multiple frames.
Moves ground tile scripts into a subfolder.
Adds floating particles to test scene.
2025-06-29 10:58:18 +01:00

30 lines
1.1 KiB
GDScript

class_name MaterialManagerClass
extends Node
var material_application_queue: Array = []
var max_materials_per_frame: int = 20 # Adjust based on performance
func _process(_delta):
# Process material applications gradually over multiple frames
process_material_queue()
func process_material_queue():
var processed = 0
while material_application_queue.size() > 0 and processed < max_materials_per_frame:
var task = material_application_queue.pop_front()
if is_instance_valid(task.mesh_instance) and task.mesh_instance != null:
apply_material_immediately(task.mesh_instance, task.surface_index, task.material)
processed += 1
func queue_material_application(mesh_instance: MeshInstance3D, surface_index: int, material: StandardMaterial3D):
material_application_queue.append({
"mesh_instance": mesh_instance,
"surface_index": surface_index,
"material": material
})
func apply_material_immediately(mesh_instance: MeshInstance3D, surface_index: int, material: StandardMaterial3D):
if is_instance_valid(mesh_instance):
mesh_instance.set_surface_override_material(surface_index, material)