# GrassController.gd extends Node3D class_name GrassController # 229379 var parent_node: GroundTile = null var grass_density: float = 0.5 var grass_instance_range: int = 10 signal grass_data_ready() func _ready() -> void: # Use call_deferred to ensure parent is fully ready call_deferred("_setup_connections") func _setup_connections() -> void: parent_node = get_parent() as GroundTile if parent_node == null: Log.pr("Error: Parent node is not a GroundTile!") return parent_node.cell_info_updated.connect(_on_parent_data_changed) # Check if cell_info already exists and process it if parent_node.cell_info != null: _on_parent_data_changed(parent_node.cell_info) func _on_parent_data_changed(value): if value == null: return grass_density = value.vegetation_density update_grass_density() grass_data_ready.emit() func update_grass_density() -> void: if parent_node == null or parent_node.rng == null: return if grass_density > 0.8: grass_instance_range = parent_node.rng.randi_range(100, 500) elif grass_density > 0.6: grass_instance_range = parent_node.rng.randi_range(30, 50) elif grass_density > 0.3: grass_instance_range = parent_node.rng.randi_range(5, 20) else: grass_instance_range = parent_node.rng.randi_range(0, 1)