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:
1 parent
0e590f2bc7
commit
b1d32f7d81
8 files changed
+286
-6
No files matched your search
@@ -31,17 +31,32 @@ func _init() -> void:
|
||||
DirAccess.make_dir_recursive_absolute(OUTPUT_DIRECTORY)
|
||||
DirAccess.make_dir_recursive_absolute(PREVIEW_DIRECTORY)
|
||||
var output_path := "%s/%s_terrain.res" % [OUTPUT_DIRECTORY, name]
|
||||
var save_error := ResourceSaver.save(data, output_path)
|
||||
var save_error := ResourceSaver.save(data, output_path, ResourceSaver.FLAG_CHANGE_PATH)
|
||||
if save_error != OK:
|
||||
push_error("cannot save %s (%d)" % [output_path, save_error])
|
||||
quit(1)
|
||||
return
|
||||
# ResourceSaver restores the previous path after saving, so the data must
|
||||
# take over the baked path explicitly for the definition to reference it.
|
||||
data.take_over_path(output_path)
|
||||
var preview_path := "%s/%s_terrain_preview.png" % [PREVIEW_DIRECTORY, name]
|
||||
var preview_error := SiteTerrainBaker.write_preview_png(data, preview_path)
|
||||
if preview_error != OK:
|
||||
push_error("cannot write %s (%d)" % [preview_path, preview_error])
|
||||
quit(1)
|
||||
return
|
||||
var definition = recipe_script.definition(data)
|
||||
var definition_error: String = definition.validation_error()
|
||||
if not definition_error.is_empty():
|
||||
push_error("recipe %s definition is invalid: %s" % [name, definition_error])
|
||||
quit(1)
|
||||
return
|
||||
var definition_path := "%s/%s.tres" % [OUTPUT_DIRECTORY, name]
|
||||
var definition_save_error := ResourceSaver.save(definition, definition_path)
|
||||
if definition_save_error != OK:
|
||||
push_error("cannot save %s (%d)" % [definition_path, definition_save_error])
|
||||
quit(1)
|
||||
return
|
||||
var rock_cells := 0
|
||||
for material: int in data.materials:
|
||||
if material == SiteTerrainBaker.SonarMaterial.Value.ROCK:
|
||||
|
||||
@@ -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
|
||||
Reference in new issue
Block a user