extends Node3D @onready var terrain: Terrain3D = $TerrainRoot/Terrain3D func _ready() -> void: call_deferred("_initialize_world_presentation") func _initialize_world_presentation() -> void: var active_camera := get_viewport().get_camera_3d() if active_camera != null: terrain.set_camera(active_camera) var groups_to_snap: Array[Node] = [] groups_to_snap.append_array($FoliageRoot.get_children()) if has_node("FortressBlockout"): groups_to_snap.append($FortressBlockout) groups_to_snap.append_array($FortressBlockout.get_children()) for child in $VillageRoot.get_children(): groups_to_snap.append(child) if has_node("WorldObjects"): var wo := $WorldObjects for group_name in ["ResourceNodes", "StorageSites", "ActivitySites"]: if wo.has_node(group_name): groups_to_snap.append_array(wo.get_node(group_name).get_children()) for item in groups_to_snap: if not item is Node3D: continue var node3d := item as Node3D var pos := node3d.global_position var h: float = terrain.data.get_height(pos) if not is_nan(h): node3d.global_position.y = h