#pragma once #include "CoreMinimal.h" #include "Vehicles/CarrierLayout.h" #include "Vehicles/CarrierMeshBuilder.h" /** * The blockout geometry as pure functions (DESIGN_UE.md section 3.2): each fills an FMeshBuilder in carrier-local metres, from * FCarrierLayout. UCarrierBlockoutComponent turns the result into components; the tests call the same functions without a world. */ namespace Descent::Carrier { /** A sign made of text (UTextRenderComponent): position and facing in carrier-local metres. */ struct FSignDef { FString Text; FVector PosM = FVector::ZeroVector; double YawDeg = 0.0; // the direction the text faces (the viewer stands on that side) double HeightM = 0.2; FLinearColor Colour = FLinearColor(0.75f, 0.5f, 0.1f); }; /** Floor, ceiling, walls with door/window holes, lamp strips, props and stairs of one room. */ THEDESCENT_API void BuildRoomMesh(const FRoomDef& Room, FMeshBuilder& B); /** Door frames (cyan strip above each door) and floor pads that bridge the double wall. */ THEDESCENT_API void BuildDoorsMesh(FMeshBuilder& B); /** The hull exterior: lathe with the moon-pool opening, sail, pods, fins, shroud, keel, dome, pool rim, bridge window glow. No collision. */ THEDESCENT_API void BuildHullMesh(FMeshBuilder& B); /** The moon pool shaft, rim, railings (solid, collision) and the water surface (separate builder, no collision). */ THEDESCENT_API void BuildPoolMesh(FMeshBuilder& Solid, FMeshBuilder& Water); /** The visual and collision of one fixed station, in carrier-local coordinates. */ THEDESCENT_API void BuildFixtureMesh(const FAnchorDef& Anchor, FMeshBuilder& B); /** All text signs: door labels, bay and terminal signs. */ THEDESCENT_API void CollectSigns(TArray& Out); }