38 lines
1.1 KiB
GDScript
38 lines
1.1 KiB
GDScript
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 [
|
|
"Animals", "AnimalHabitats", "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
|