Build cargo item details directly

This commit is contained in:
Meta Vens 2026-06-29 05:35:20 +01:00
commit 3be8e8fb31
3 changed files with 42 additions and 18 deletions

View file

@ -5227,8 +5227,9 @@ static void RequireInventoryCargoItemDetailsUseEveSurface(string root)
"HandleCargoItemDetailsSurfaceCommand(",
"AetheriaEveUnitySurfaceHost.RenderRuntime(",
"AetheriaEveUnitySurfaceHost.Hide(_cargoItemDetailsSurfaceDocument)",
"AetheriaRuntimeCargoItemDetailsSurfaceBuilder.Build(ComposeCargoItemDetailsSurface(",
"AetheriaRuntimeCargoItemDetailsSurfaceBuilder.Compose(",
"AetheriaRuntimeCargoItemDetailsSurfaceBuilder.Build(",
"ResolveManufacturerName(typedItem)",
"FormatItemTier(typedItem, equippableItem)",
"ComposeCargoItemObservation(",
"AetheriaRuntimeCargoItemDetailsSurfaceCommands.TryRead(request, out var command)",
"AetheriaRuntimeCargoItemDetailsCommandKind.Close"
@ -5319,6 +5320,7 @@ static void RequireInventoryCargoItemDetailsUseEveSurface(string root)
"host.AddComponent<UIDocument>",
"string.Equals(request.Command, AetheriaRuntimeCargoItemDetailsSurfaceBuilder.Close",
"new AetheriaRuntimeCargoItemDetailsSurfaceState(",
"ComposeCargoItemDetailsSurface(",
"ProjectCargoItemDetailsSurfaceState(",
"ProjectCargoItemBehaviorSections(",
"ProjectCargoItemBehaviorMetric(",
@ -5349,7 +5351,7 @@ static void RequireInventoryCargoItemDetailsUseEveSurface(string root)
"AetheriaRuntimeCargoItemObservation",
"AetheriaRuntimeCargoItemSection",
"AetheriaRuntimeCargoItemMetric",
"public static AetheriaRuntimeCargoItemDetailsSurfaceState Compose(",
"private static AetheriaRuntimeCargoItemDetailsSurfaceState ComposeState(",
"ProjectBehaviorSections(",
"ProjectBehaviorMetric(",
"public static AetheriaRuntimeSurfaceDocument Build("
@ -5363,6 +5365,13 @@ static void RequireInventoryCargoItemDetailsUseEveSurface(string root)
"Shared cargo-item detail surface builder no longer owns the cargo inspection contract: " +
string.Join(", ", missingBuilderSymbols));
}
if (cargoItemSurfaceBuilder.Contains("public static AetheriaRuntimeCargoItemDetailsSurfaceState Compose(", StringComparison.Ordinal) ||
cargoItemSurfaceBuilder.Contains("public static AetheriaRuntimeCargoItemDetailsSurfaceState Project(", StringComparison.Ordinal))
{
throw new InvalidOperationException(
"Runtime cargo item detail composition must stay behind Build(...); do not re-expose Compose/Project as the public cargo item details surface path.");
}
}
static void RequireInventoryEquippedItemDetailsUseEveSurface(string root)

View file

@ -284,7 +284,13 @@ public class InventoryMenu : MonoBehaviour
transform,
_cargoItemDetailsSurfaceDocument,
"Aetheria Inventory Cargo Item Details Surface",
AetheriaRuntimeCargoItemDetailsSurfaceBuilder.Build(ComposeCargoItemDetailsSurface(item, typedItem)),
AetheriaRuntimeCargoItemDetailsSurfaceBuilder.Build(
typedItem,
ComposeCargoItemObservation(item),
ResolveManufacturerName(typedItem),
item is EquippableItem equippableItem ? FormatItemTier(typedItem, equippableItem) : "",
FormatValue,
FormatTemperature),
HandleCargoItemDetailsSurfaceCommand,
_cargoItemDetailsSurfaceChrome,
sortingOrder: 1001);
@ -468,19 +474,6 @@ public class InventoryMenu : MonoBehaviour
("group", groupIndex.ToString(CultureInfo.InvariantCulture)))));
}
private AetheriaRuntimeCargoItemDetailsSurfaceState ComposeCargoItemDetailsSurface(
ItemInstance item,
AetheriaRuntimeCatalogItem typedItem)
{
return AetheriaRuntimeCargoItemDetailsSurfaceBuilder.Compose(
typedItem,
ComposeCargoItemObservation(item),
ResolveManufacturerName(typedItem),
item is EquippableItem equippableItem ? FormatItemTier(typedItem, equippableItem) : "",
FormatValue,
FormatTemperature);
}
private static AetheriaRuntimeCargoItemObservation ComposeCargoItemObservation(ItemInstance item)
{
var equippableItem = item as EquippableItem;

View file

@ -118,7 +118,29 @@ namespace GameCult.Aetheria.State.Verse
public const string SurfaceId = "aetheria.inventory.cargo_item_details";
public const string Close = "aetheria.inventory.cargo_item_details.close";
public static AetheriaRuntimeCargoItemDetailsSurfaceState Compose(
public static AetheriaRuntimeSurfaceDocument Build(
AetheriaRuntimeCatalogItem typedItem,
AetheriaRuntimeCargoItemObservation item,
string manufacturer,
string tier,
Func<float, string> formatValue,
Func<float, string> formatTemperature,
DateTime updatedAtUtc = default(DateTime),
long version = 1)
{
return Build(
ComposeState(
typedItem,
item,
manufacturer,
tier,
formatValue,
formatTemperature,
updatedAtUtc),
version);
}
private static AetheriaRuntimeCargoItemDetailsSurfaceState ComposeState(
AetheriaRuntimeCatalogItem typedItem,
AetheriaRuntimeCargoItemObservation item,
string manufacturer,