feat(world): generic dive site scene fed by a baked site definition

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
OlivierandClaude Sonnet 5.5 committed 2026-10-06 20:08:07 +02:00
1 parent 0e590f2bc7
commit b1d32f7d81
8 files changed
+286 -6

No files matched your search

@@ -2,6 +2,10 @@ class_name VehicleTestTerrainRecipe
extends RefCounted
const SiteTerrainBaker = preload("res://tools/site_terrain_baker.gd")
const SiteTerrainData = preload("res://game/domain/sites/site_terrain_data.gd")
const TerrainHeightField = preload("res://game/domain/sites/terrain_height_field.gd")
const DiveSiteDefinition = preload("res://game/domain/sites/dive_site_definition.gd")
const SitePlacement = preload("res://game/domain/sites/site_placement.gd")
static func recipe() -> SiteTerrainBaker.Recipe:
@@ -23,3 +27,25 @@ static func recipe() -> SiteTerrainBaker.Recipe:
SiteTerrainBaker.Ripples.new(Vector2(0.0, 1.0), TAU / 0.048, 0.9, Vector2.ZERO, 0.0),
]
return result
static func definition(terrain: SiteTerrainData) -> DiveSiteDefinition:
var field := TerrainHeightField.from_data(terrain)
var result := DiveSiteDefinition.new()
result.site_id = &"vehicle_test"
result.display_name = "Site de calibration du véhicule"
result.terrain = terrain
result.playable_bounds_m = Rect2(-90.0, -176.0, 180.0, 204.0)
result.spawn_position_m = Vector3(0.0, -12.0, 12.0)
result.spawn_yaw_radians = 0.0
var target := SitePlacement.new()
target.placement_id = &"calibration_target"
target.kind = SitePlacement.Kind.WRECK_DECOY
target.position_m = Vector3(0.0, field.elevation_at(0.0, -58.0) + 2.5, -58.0)
target.footprint_m = Vector3(8.0, 5.0, 7.0)
var anchor := SitePlacement.new()
anchor.placement_id = &"navigation_beacon"
anchor.kind = SitePlacement.Kind.VESSEL_ANCHOR
anchor.position_m = Vector3(0.0, -15.0, -22.0)
result.placements = [target, anchor]
return result