Use canonical Eve surface documents
This commit is contained in:
parent
188188cec8
commit
380b2d9f71
16 changed files with 98 additions and 154 deletions
|
|
@ -1,5 +1,6 @@
|
|||
using GameCult.Aetheria.State.Verse;
|
||||
using GameCult.Mesh;
|
||||
using EveSurfaceDocument = GameCult.Eve.Surface.EveSurfaceDocument;
|
||||
|
||||
namespace Aetheria.State.Unity;
|
||||
|
||||
|
|
|
|||
|
|
@ -919,8 +919,9 @@ static void RequireSharedEvePackagesImportedFromEveRepo(string root)
|
|||
if (!runtimeCultCacheDocumentStore.Contains("CultMesh.OperationBindingRecord(command.Operation)", StringComparison.Ordinal) ||
|
||||
!runtimeCultCacheDocumentStore.Contains("CultMesh.OperationBindingRecord(", StringComparison.Ordinal) ||
|
||||
!runtimeCultCacheDocumentStore.Contains("routeDescription).ToBinding()", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("public static GameCult.Mesh.EveSurfaceDocument ToPortableSurface(AetheriaRuntimeSurfaceDocument document)", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("new GameCult.Mesh.EveSurfaceCommandTemplate(command.Operation)", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("public static EveUiSurfaceDocument ToPortableSurface(AetheriaRuntimeSurfaceDocument document)", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("new EveUiCommandTemplate(command.Operation)", StringComparison.Ordinal) ||
|
||||
runtimeSurfaceDocuments.Contains("GameCult.Mesh.EveSurface", StringComparison.Ordinal) ||
|
||||
runtimeCultCacheDocumentStore.Contains("new CultMeshOperationBindingDescriptor(", StringComparison.Ordinal) ||
|
||||
runtimeSurfaceDocuments.Contains("new CultMeshOperationBindingDescriptor(", StringComparison.Ordinal))
|
||||
{
|
||||
|
|
@ -3347,7 +3348,7 @@ static void RequireEveRuntimeBootstrap(string root)
|
|||
".EveSurfaceDocument(surfaceId)",
|
||||
"?.Reactive()",
|
||||
"AetheriaEveRuntimeUnityHooks.TryCreateStateRefResolver(",
|
||||
"CultMeshReactiveDocument<MeshEveSurfaceDocument>",
|
||||
"CultMeshReactiveDocument<EveSurfaceDocument>",
|
||||
"ResolveReactiveDaemonSurfaceState(",
|
||||
"DisposeReactiveSurfaceState()",
|
||||
"AetheriaRuntimeSurfaceDocuments.ToEveSurfaceDocument(",
|
||||
|
|
@ -8717,7 +8718,7 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root
|
|||
"public CultMeshDocumentHandle<AetheriaRuntimeCatalogSnapshot> Catalog { get; }",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimePlayerSettingsDocument> PlayerSettings { get; }",
|
||||
"public static bool TryResolveEveSurface(",
|
||||
"public CultMeshDocumentHandle<MeshEveSurfaceDocument>? EveSurfaceDocument(",
|
||||
"public CultMeshDocumentHandle<EveSurfaceDocument>? EveSurfaceDocument(",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimeRtsViewportDocument> RtsViewport(",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimeObjectsViewportDocument> ObjectsViewport(",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimeGravityViewportDocument> GravityViewport(",
|
||||
|
|
@ -11551,11 +11552,12 @@ static void RequireDaemonVersePublication(string root)
|
|||
"Daemon Eve surface state lowering still lives in Aetheria.State projector chaff instead of the runtime surface documents.");
|
||||
}
|
||||
|
||||
if (!runtimeSurfaceDocuments.Contains("public static GameCult.Mesh.EveSurfaceDocument ToPortableSurface(AetheriaRuntimeSurfaceDocument document)", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("GameCult.Mesh.EveSurfaceCommandTemplate", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("GameCult.Mesh.EveSurfaceComponent", StringComparison.Ordinal))
|
||||
if (!runtimeSurfaceDocuments.Contains("public static EveUiSurfaceDocument ToPortableSurface(AetheriaRuntimeSurfaceDocument document)", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("new EveUiCommandTemplate(command.Operation)", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("new EveUiSurfaceComponent(", StringComparison.Ordinal) ||
|
||||
runtimeSurfaceDocuments.Contains("GameCult.Mesh.EveSurface", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException("Runtime surface documents no longer lower daemon surfaces into portable CultMesh Eve surface documents.");
|
||||
throw new InvalidOperationException("Runtime surface documents no longer lower daemon surfaces into canonical Eve surface documents published through CultMesh.");
|
||||
}
|
||||
|
||||
if (!daemonDocuments.Contains("AetheriaRuntimeDaemonCommandKinds", StringComparison.Ordinal))
|
||||
|
|
@ -12350,10 +12352,10 @@ static void RequireUnityRuntimeCatalogClientUsesManagedDocument(string root)
|
|||
|
||||
var requiredSymbols = new[]
|
||||
{
|
||||
"using MeshEveSurfaceDocument = GameCult.Mesh.EveSurfaceDocument;",
|
||||
"using EveSurfaceDocument = GameCult.Eve.Surface.EveSurfaceDocument;",
|
||||
"CultMeshDocumentHandle<AetheriaRuntimeCatalogSnapshot> catalog",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimeCatalogSnapshot> Catalog",
|
||||
"public CultMeshDocumentHandle<MeshEveSurfaceDocument>? EveSurfaceDocument(",
|
||||
"public CultMeshDocumentHandle<EveSurfaceDocument>? EveSurfaceDocument(",
|
||||
"AetheriaClientEveSurface.Game => GameSurface",
|
||||
"AetheriaClientEveSurface.Editor => EditorSurface"
|
||||
};
|
||||
|
|
@ -12370,7 +12372,7 @@ static void RequireUnityRuntimeCatalogClientUsesManagedDocument(string root)
|
|||
var requiredVerseClientSymbols = new[]
|
||||
{
|
||||
"BootstrapCatalogDocument(",
|
||||
"Document<MeshEveSurfaceDocument>(",
|
||||
"Document<EveSurfaceDocument>(",
|
||||
"AetheriaRuntimeVerseRecordKeys.DaemonGameSurface",
|
||||
"AetheriaRuntimeVerseRecordKeys.DaemonEditorSurface"
|
||||
};
|
||||
|
|
@ -12562,7 +12564,7 @@ static void RequireAetheriaRuntimeVerseClientContract(string root)
|
|||
if (File.Exists(surfaceStatePath))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"AetheriaRuntimeEveSurfaceState.cs is legacy surface-state cruft; daemon UI surfaces must publish GameCult.Mesh.EveSurfaceDocument.");
|
||||
"AetheriaRuntimeEveSurfaceState.cs is legacy surface-state cruft; daemon UI surfaces must publish GameCult.Eve.Surface.EveSurfaceDocument.");
|
||||
}
|
||||
|
||||
var requiredClientSymbols = new[]
|
||||
|
|
@ -12585,7 +12587,7 @@ static void RequireAetheriaRuntimeVerseClientContract(string root)
|
|||
"public static CultRecordKey StarbridgeSessionSummary",
|
||||
"new CultRecordKey(\"daemon:aetheria.starbridge.session.latest.v1\")",
|
||||
"Document<AetheriaRuntimeVerseAuthorityPolicyDocument>(",
|
||||
"typeof(MeshEveSurfaceDocument)",
|
||||
"typeof(EveSurfaceDocument)",
|
||||
"private AetheriaClientState? _aetheriaState",
|
||||
"private CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument>? _managedDaemonFrame",
|
||||
"private CultMeshReactiveDocument<AetheriaRuntimeCatalogSnapshot>? _managedCatalog",
|
||||
|
|
@ -16715,9 +16717,9 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
var requiredSurfaceDocumentSymbols = new[]
|
||||
{
|
||||
"public static class AetheriaRuntimeSurfaceDocuments",
|
||||
"public static GameCult.Mesh.EveSurfaceDocument ToPortableSurface(AetheriaRuntimeSurfaceDocument document)",
|
||||
"public static EveUiSurfaceDocument ToPortableSurface(AetheriaRuntimeSurfaceDocument document)",
|
||||
"public static EveUiSurfaceDocument ToEveSurfaceDocument(AetheriaRuntimeSurfaceDocument document)",
|
||||
"public static EveUiSurfaceDocument ToEveSurfaceDocument(GameCult.Mesh.EveSurfaceDocument document)",
|
||||
"public static EveUiSurfaceDocument ToEveSurfaceDocument(EveUiSurfaceDocument document)",
|
||||
"public static EveUiSurfaceDocument ResolveStateRefs(",
|
||||
"CultMeshStateRefResolver? stateRefResolver",
|
||||
"ResolvePropRefs(props, resolveStateRef)",
|
||||
|
|
@ -17059,11 +17061,11 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
"public CultMeshDocumentHandle<AetheriaRuntimeVerseAuthorityPolicyDocument> AuthorityPolicy { get; }",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimeDaemonFrameDocument> DaemonFrame { get; }",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimeDaemonSoaViewDocument> DaemonSoaView { get; }",
|
||||
"using MeshEveSurfaceDocument = GameCult.Mesh.EveSurfaceDocument;",
|
||||
"public CultMeshDocumentHandle<MeshEveSurfaceDocument> GameSurface { get; }",
|
||||
"public CultMeshDocumentHandle<MeshEveSurfaceDocument> GameTuiSurface { get; }",
|
||||
"public CultMeshDocumentHandle<MeshEveSurfaceDocument> EditorSurface { get; }",
|
||||
"public CultMeshDocumentHandle<MeshEveSurfaceDocument> EditorTuiSurface { get; }",
|
||||
"using EveSurfaceDocument = GameCult.Eve.Surface.EveSurfaceDocument;",
|
||||
"public CultMeshDocumentHandle<EveSurfaceDocument> GameSurface { get; }",
|
||||
"public CultMeshDocumentHandle<EveSurfaceDocument> GameTuiSurface { get; }",
|
||||
"public CultMeshDocumentHandle<EveSurfaceDocument> EditorSurface { get; }",
|
||||
"public CultMeshDocumentHandle<EveSurfaceDocument> EditorTuiSurface { get; }",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimeCatalogSnapshot> Catalog { get; }",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimeLoadoutTemplatesDocument> LoadoutTemplates { get; }",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimePlayerSettingsDocument> PlayerSettings { get; }",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using Aetheria.State.Documents;
|
||||
using GameCult.Caching;
|
||||
using GameCult.Aetheria.State.Verse;
|
||||
using GameCult.Eve.Surface;
|
||||
using GameCult.Mesh;
|
||||
using GameCult.Networking;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using Aetheria.State.Documents;
|
||||
using GameCult.Aetheria.State.Verse;
|
||||
using GameCult.Mesh;
|
||||
using EveSurfaceDocument = GameCult.Eve.Surface.EveSurfaceDocument;
|
||||
|
||||
namespace Aetheria.State;
|
||||
|
||||
|
|
|
|||
|
|
@ -4,9 +4,11 @@ using System.Linq;
|
|||
using Aetheria.State.Documents;
|
||||
using GameCult.Aetheria.State.Verse;
|
||||
using GameCult.Mesh;
|
||||
using EveSurfaceComponent = GameCult.Mesh.EveSurfaceComponent;
|
||||
using EveSurfaceDocument = GameCult.Mesh.EveSurfaceDocument;
|
||||
using EveSurfaceTree = GameCult.Mesh.EveSurfaceTree;
|
||||
using EveCommandTemplate = GameCult.Eve.Surface.EveCommandTemplate;
|
||||
using EveStyleToken = GameCult.Eve.Surface.EveStyleToken;
|
||||
using EveSurfaceComponent = GameCult.Eve.Surface.EveSurfaceComponent;
|
||||
using EveSurfaceDocument = GameCult.Eve.Surface.EveSurfaceDocument;
|
||||
using EveSurfaceTree = GameCult.Eve.Surface.EveSurfaceTree;
|
||||
|
||||
namespace Aetheria.State;
|
||||
|
||||
|
|
@ -91,10 +93,10 @@ public static class AetheriaEveSurfaceDocuments
|
|||
"card",
|
||||
[("title", "Corporations")],
|
||||
Node("aetheria.catalog.corporation.rows", "inspector.kv", [], corporations))),
|
||||
Array.Empty<EveSurfaceStyleToken>()),
|
||||
Array.Empty<EveStyleToken>()),
|
||||
new[]
|
||||
{
|
||||
new EveSurfaceCommandTemplate(refreshCommand.ToBinding())
|
||||
new EveCommandTemplate(refreshCommand.ToBinding())
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -175,10 +177,10 @@ public static class AetheriaEveSurfaceDocuments
|
|||
("runtime", runtimeSession?.RuntimeId ?? ""),
|
||||
("started", runtimeSession?.StartedAtUtc ?? ""),
|
||||
("lastSeen", runtimeSession?.LastSeenAtUtc ?? "")))),
|
||||
Array.Empty<EveSurfaceStyleToken>()),
|
||||
Array.Empty<EveStyleToken>()),
|
||||
new[]
|
||||
{
|
||||
new EveSurfaceCommandTemplate(refreshCommand.ToBinding())
|
||||
new EveCommandTemplate(refreshCommand.ToBinding())
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ using GameCult.Caching.MessagePack;
|
|||
using GameCult.Mesh;
|
||||
using GameCult.Networking;
|
||||
using R3;
|
||||
using EveSurfaceDocument = GameCult.Eve.Surface.EveSurfaceDocument;
|
||||
|
||||
namespace Aetheria.State;
|
||||
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ First implementation footholds now exist in CultLib:
|
|||
- `E:/Projects/CultLib/src/GameCult.Mesh/CultMeshPrimitives.cs` also exposes fluent operation/query context builders, with `CultMesh.OperationContextFor(...)` and `CultMesh.QueryContextFor(...)` entrypoints. Application code should read like a typed Verse call, not like manual transport setup.
|
||||
- `E:/Projects/CultLib/src/GameCult.Geometry/CultGeometryPrimitives.cs` defines shared `CultVec2`, `CultVec3`, `CultRect`, `CultCircle`, and `CultSphere` values for query and physics contracts.
|
||||
- `E:/Projects/CultLib/packages/cultmesh-ts/src/index.ts` now exposes TS `CultMeshVec2`, `CultMeshRect`, `CultMeshViewportRequest`, `CultMeshQuerySurface`, `CultMeshQueryContext`, `CultMeshOperationHandle`, `CultMeshOperationContext`, `CultMeshOperationPayload`, `CultMeshDocumentHandle`, `CultMeshDocumentCatalog`, `CultMeshCollectionHandle`, `CultMeshStatePointer`, `CultMeshStateBindingDescriptor`, `CultMeshOperationBindingDescriptor`, `CultMeshOperationInvocationDescriptor`, native slice descriptors, authority claims, route hints, fluent context builders, and handle helpers like `CultMesh.rectFromBounds(...)`, `CultMesh.viewportRequest(...)`, `CultMesh.query(...)`, `CultMesh.querySource(...)`, `CultMesh.operation(...)`, `CultMesh.document(...)`, `CultMesh.documents(...)`, `CultMesh.collection(...)`, `CultMesh.operationPayload(...)`, `CultMesh.statePointer(...)`, `CultMesh.stateBinding(...)`, `CultMesh.operationBinding(...)`, `CultMesh.operationInvocation(...)`, `CultMesh.nativeSliceView(...)`, `CultMesh.operationContextFor(...)`, and `CultMesh.queryContextFor(...)`.
|
||||
- `Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimePlayerSettingsSurfaceBuilder.cs` and `GameCult.Mesh.EveSurfaceDocument` now expose component state bindings as CultMesh-owned portable binding records. Eve no longer owns a parallel live binding DTO, and Aetheria no longer owns a parallel persisted Eve surface state. Aetheria can build runtime surface source data, then publishes the shared CultMesh surface document before renderers lower it.
|
||||
- `Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimePlayerSettingsSurfaceBuilder.cs` builds Aetheria runtime surface source data, then lowers it to the canonical `GameCult.Eve.Surface.EveSurfaceDocument` published through CultMesh. CultMesh owns state and operation binding descriptors; Eve owns the surface document and CultUI composition model. Mesh no longer defines a parallel Eve surface DTO.
|
||||
- `E:/Projects/Eve/packages/org.gamecult.eve.surface/Runtime/EveSurfaceDocument.cs` also exposes component `EmbeddedDocuments` as first-class CultUI slots. Aetheria runtime surfaces mirror that shape with `AetheriaRuntimeEmbeddedDocumentSlot`, so daemon-owned UI can compose nested synced surfaces such as inventory dropdowns without a Unity-only model, facade, or projector.
|
||||
- Aetheria and Eve live command templates now carry `CultMeshOperationBindingDescriptor`. Eve command requests carry `CultMeshOperationInvocationDescriptor` plus `CultMeshOperationPayload`, so renderer click/change events preserve operation id, schema, route hint, idempotency, and scalar field reads as shared CultMesh metadata. Legacy `command`, `label`, `transport`, and string payload fields remain compatibility projections and persisted DTO fields, but the live API no longer exposes raw command-string/dictionary constructors; controls point at typed CultMesh operations and renderers build requests from shared CultMesh primitives.
|
||||
- `Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeDaemonOperationsClient.cs` is now a typed operation handle surface that returns `CultMeshOperationReceipt` from semantic verbs such as `SetMoveVector`, `SetTarget`, `DockNearest`, and inventory transfers. The lower-level daemon command envelope remains an internal transport wrapper, but public client code should receive shared CultMesh receipts, not Aetheria-specific command envelopes.
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ using EveSurfaceCommandRequest = GameCult.Eve.Surface.EveSurfaceCommandRequest;
|
|||
using EveSurfaceComponent = GameCult.Eve.Surface.EveSurfaceComponent;
|
||||
using EveSurfaceDocument = GameCult.Eve.Surface.EveSurfaceDocument;
|
||||
using EveSurfaceTree = GameCult.Eve.Surface.EveSurfaceTree;
|
||||
using MeshEveSurfaceDocument = GameCult.Mesh.EveSurfaceDocument;
|
||||
using EveSurfaceDocument = GameCult.Eve.Surface.EveSurfaceDocument;
|
||||
|
||||
public class DaemonRuntimeDocumentTests
|
||||
{
|
||||
|
|
@ -4351,25 +4351,25 @@ public class DaemonRuntimeDocumentTests
|
|||
.GetAwaiter()
|
||||
.GetResult();
|
||||
client
|
||||
.MutableDocument<MeshEveSurfaceDocument>(
|
||||
.MutableDocument<EveSurfaceDocument>(
|
||||
AetheriaRuntimeVerseRecordKeys.DaemonGameSurface)
|
||||
.ReplaceAsync(AetheriaRuntimeSurfaceDocuments.ToPortableSurface(result.GameSurface))
|
||||
.GetAwaiter()
|
||||
.GetResult();
|
||||
client
|
||||
.MutableDocument<MeshEveSurfaceDocument>(
|
||||
.MutableDocument<EveSurfaceDocument>(
|
||||
AetheriaRuntimeVerseRecordKeys.DaemonGameTuiSurface)
|
||||
.ReplaceAsync(AetheriaRuntimeSurfaceDocuments.ToPortableSurface(result.GameTuiSurface))
|
||||
.GetAwaiter()
|
||||
.GetResult();
|
||||
client
|
||||
.MutableDocument<MeshEveSurfaceDocument>(
|
||||
.MutableDocument<EveSurfaceDocument>(
|
||||
AetheriaRuntimeVerseRecordKeys.DaemonEditorSurface)
|
||||
.ReplaceAsync(AetheriaRuntimeSurfaceDocuments.ToPortableSurface(result.EditorSurface))
|
||||
.GetAwaiter()
|
||||
.GetResult();
|
||||
client
|
||||
.MutableDocument<MeshEveSurfaceDocument>(
|
||||
.MutableDocument<EveSurfaceDocument>(
|
||||
AetheriaRuntimeVerseRecordKeys.DaemonEditorTuiSurface)
|
||||
.ReplaceAsync(AetheriaRuntimeSurfaceDocuments.ToPortableSurface(result.EditorTuiSurface))
|
||||
.GetAwaiter()
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@
|
|||
<Analyzer Include="C:\Program Files\Unity\Hub\Editor\6000.4.2f1\Editor\Data\Tools\BuildPipeline\Unity.SourceGenerators\Unity.UIToolkit.SourceGenerator.dll" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="E:\Projects\Eve\packages\org.gamecult.eve.surface\Runtime\EveSurfaceBuilder.cs" />
|
||||
<Compile Include="E:\Projects\Eve\packages\org.gamecult.eve.surface\Runtime\EveSurfaceDocument.cs" />
|
||||
<None Include="E:\Projects\Eve\packages\org.gamecult.eve.surface\Runtime\GameCult.Eve.Surface.asmdef" />
|
||||
<Reference Include="Unity.Cecil.Awesome">
|
||||
|
|
@ -97,6 +98,9 @@
|
|||
<Reference Include="GameCult.Caching">
|
||||
<HintPath>E:\Projects\Brokkr\surfaces\unity\Packages\com.gamecult.brokkr\Plugins\CultMesh\GameCult.Caching.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MessagePack.Annotations">
|
||||
<HintPath>E:\Projects\Brokkr\surfaces\unity\Packages\com.gamecult.brokkr\Plugins\CultMesh\MessagePack.Annotations.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="QuickGraph">
|
||||
<HintPath>E:\Projects\Aetheria\Assets\Plugins\QuickGraph.dll</HintPath>
|
||||
</Reference>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ using GameCult.Eve.Surface;
|
|||
using GameCult.Mesh;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
using MeshEveSurfaceDocument = GameCult.Mesh.EveSurfaceDocument;
|
||||
using EveSurfaceDocument = GameCult.Eve.Surface.EveSurfaceDocument;
|
||||
|
||||
#nullable enable
|
||||
|
||||
|
|
@ -36,7 +36,7 @@ namespace GameCult.Aetheria.EveRuntime
|
|||
private string _mountedSurfaceId = "";
|
||||
private long _mountedSurfaceVersion = -1;
|
||||
private string _mountedSurfaceUpdatedAtUtc = "";
|
||||
private CultMeshReactiveDocument<MeshEveSurfaceDocument>? _reactiveSurfaceState;
|
||||
private CultMeshReactiveDocument<EveSurfaceDocument>? _reactiveSurfaceState;
|
||||
private string _reactiveSurfaceStatePath = "";
|
||||
private string _reactiveSurfaceId = "";
|
||||
private static readonly AetheriaEveUnitySurfaceChrome RootOnlyChrome = new AetheriaEveUnitySurfaceChrome
|
||||
|
|
@ -141,14 +141,14 @@ namespace GameCult.Aetheria.EveRuntime
|
|||
"unity-eve-surface-presenter"));
|
||||
}
|
||||
|
||||
private MeshEveSurfaceDocument? ReadDaemonSurfaceState(
|
||||
private EveSurfaceDocument? ReadDaemonSurfaceState(
|
||||
AetheriaRuntimeStateBootReport stateBoot)
|
||||
{
|
||||
var reactive = ResolveReactiveDaemonSurfaceState(stateBoot);
|
||||
return reactive?.Current;
|
||||
}
|
||||
|
||||
private CultMeshReactiveDocument<MeshEveSurfaceDocument>? ResolveReactiveDaemonSurfaceState(
|
||||
private CultMeshReactiveDocument<EveSurfaceDocument>? ResolveReactiveDaemonSurfaceState(
|
||||
AetheriaRuntimeStateBootReport stateBoot)
|
||||
{
|
||||
if (_reactiveSurfaceState != null &&
|
||||
|
|
@ -169,7 +169,7 @@ namespace GameCult.Aetheria.EveRuntime
|
|||
return _reactiveSurfaceState;
|
||||
}
|
||||
|
||||
private CultMeshReactiveDocument<MeshEveSurfaceDocument>? CreateReactiveDaemonSurfaceState(
|
||||
private CultMeshReactiveDocument<EveSurfaceDocument>? CreateReactiveDaemonSurfaceState(
|
||||
AetheriaRuntimeStateBootReport stateBoot)
|
||||
{
|
||||
try
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using GameCult.Mesh;
|
||||
using MessagePack;
|
||||
using MeshEveSurfaceDocument = GameCult.Mesh.EveSurfaceDocument;
|
||||
using EveSurfaceDocument = GameCult.Eve.Surface.EveSurfaceDocument;
|
||||
|
||||
#nullable enable
|
||||
|
||||
|
|
@ -42,10 +42,10 @@ namespace GameCult.Aetheria.State.Verse
|
|||
CultMeshDocumentHandle<AetheriaRuntimeVerseAuthorityPolicyDocument> authorityPolicy,
|
||||
CultMeshDocumentHandle<AetheriaRuntimeDaemonFrameDocument> daemonFrame,
|
||||
CultMeshDocumentHandle<AetheriaRuntimeDaemonSoaViewDocument> daemonSoaView,
|
||||
CultMeshDocumentHandle<MeshEveSurfaceDocument> gameSurface,
|
||||
CultMeshDocumentHandle<MeshEveSurfaceDocument> gameTuiSurface,
|
||||
CultMeshDocumentHandle<MeshEveSurfaceDocument> editorSurface,
|
||||
CultMeshDocumentHandle<MeshEveSurfaceDocument> editorTuiSurface,
|
||||
CultMeshDocumentHandle<EveSurfaceDocument> gameSurface,
|
||||
CultMeshDocumentHandle<EveSurfaceDocument> gameTuiSurface,
|
||||
CultMeshDocumentHandle<EveSurfaceDocument> editorSurface,
|
||||
CultMeshDocumentHandle<EveSurfaceDocument> editorTuiSurface,
|
||||
CultMeshDocumentHandle<AetheriaRuntimeCatalogSnapshot> catalog,
|
||||
CultMeshDocumentHandle<AetheriaRuntimeLoadoutTemplatesDocument> loadoutTemplates,
|
||||
CultMeshDocumentHandle<AetheriaRuntimePlayerSettingsDocument> playerSettings,
|
||||
|
|
@ -127,13 +127,13 @@ namespace GameCult.Aetheria.State.Verse
|
|||
|
||||
public CultMeshDocumentHandle<AetheriaRuntimeLoadoutTemplatesDocument> LoadoutTemplates { get; }
|
||||
|
||||
public CultMeshDocumentHandle<MeshEveSurfaceDocument> GameSurface { get; }
|
||||
public CultMeshDocumentHandle<EveSurfaceDocument> GameSurface { get; }
|
||||
|
||||
public CultMeshDocumentHandle<MeshEveSurfaceDocument> GameTuiSurface { get; }
|
||||
public CultMeshDocumentHandle<EveSurfaceDocument> GameTuiSurface { get; }
|
||||
|
||||
public CultMeshDocumentHandle<MeshEveSurfaceDocument> EditorSurface { get; }
|
||||
public CultMeshDocumentHandle<EveSurfaceDocument> EditorSurface { get; }
|
||||
|
||||
public CultMeshDocumentHandle<MeshEveSurfaceDocument> EditorTuiSurface { get; }
|
||||
public CultMeshDocumentHandle<EveSurfaceDocument> EditorTuiSurface { get; }
|
||||
|
||||
public CultMeshDocumentHandle<AetheriaRuntimePlayerSettingsDocument> PlayerSettings { get; }
|
||||
|
||||
|
|
@ -191,7 +191,7 @@ namespace GameCult.Aetheria.State.Verse
|
|||
return false;
|
||||
}
|
||||
|
||||
public CultMeshDocumentHandle<MeshEveSurfaceDocument>? EveSurfaceDocument(
|
||||
public CultMeshDocumentHandle<EveSurfaceDocument>? EveSurfaceDocument(
|
||||
string? surfaceId)
|
||||
{
|
||||
if (!TryResolveEveSurface(surfaceId, out var surface))
|
||||
|
|
|
|||
|
|
@ -333,13 +333,13 @@ namespace GameCult.Aetheria.State.Verse
|
|||
.ToArray());
|
||||
}
|
||||
|
||||
private static GameCult.Mesh.EveSurfaceBuilder MainMenuSurface(
|
||||
private static GameCult.Eve.Surface.EveSurfaceBuilder MainMenuSurface(
|
||||
string surfaceId,
|
||||
string title,
|
||||
string updatedAtUtc,
|
||||
long version)
|
||||
{
|
||||
var builder = GameCult.Mesh.EveSurface.Create(surfaceId)
|
||||
var builder = GameCult.Eve.Surface.EveSurface.Create(surfaceId)
|
||||
.Provider(ProviderId, ProviderKind)
|
||||
.Version(version)
|
||||
.UpdatedAtUtc(updatedAtUtc);
|
||||
|
|
|
|||
|
|
@ -369,28 +369,28 @@ namespace GameCult.Aetheria.State.Verse
|
|||
|
||||
public static class AetheriaRuntimeSurfaceDocuments
|
||||
{
|
||||
public static GameCult.Mesh.EveSurfaceDocument ToPortableSurface(AetheriaRuntimeSurfaceDocument document)
|
||||
public static EveUiSurfaceDocument ToPortableSurface(AetheriaRuntimeSurfaceDocument document)
|
||||
{
|
||||
if (document == null) throw new ArgumentNullException(nameof(document));
|
||||
|
||||
return new GameCult.Mesh.EveSurfaceDocument(
|
||||
return new EveUiSurfaceDocument(
|
||||
document.ProviderId,
|
||||
document.ProviderKind,
|
||||
document.Title,
|
||||
document.Version,
|
||||
document.UpdatedAtUtc,
|
||||
new GameCult.Mesh.EveSurfaceTree(
|
||||
new EveUiSurfaceTree(
|
||||
document.Surface.Id,
|
||||
ToPortableComponent(document.Surface.Root),
|
||||
ToEveSurfaceComponent(document.Surface.Root),
|
||||
document.Surface.Styles
|
||||
.Select(style => new GameCult.Mesh.EveSurfaceStyleToken(style.Name, style.Value))
|
||||
.Select(style => new EveUiStyleToken(style.Name, style.Value))
|
||||
.ToArray()),
|
||||
document.Commands
|
||||
.Select(command => new GameCult.Mesh.EveSurfaceCommandTemplate(command.Operation))
|
||||
.Select(command => new EveUiCommandTemplate(command.Operation))
|
||||
.ToArray());
|
||||
}
|
||||
|
||||
public static AetheriaRuntimeSurfaceDocument FromPortableSurface(GameCult.Mesh.EveSurfaceDocument document)
|
||||
public static AetheriaRuntimeSurfaceDocument FromPortableSurface(EveUiSurfaceDocument document)
|
||||
{
|
||||
if (document == null) throw new ArgumentNullException(nameof(document));
|
||||
|
||||
|
|
@ -408,7 +408,7 @@ namespace GameCult.Aetheria.State.Verse
|
|||
.ToArray()),
|
||||
document.Commands
|
||||
.Select(command => new AetheriaRuntimeSurfaceCommandTemplate(
|
||||
FromPortableOperation(command.Operation)))
|
||||
command.Operation))
|
||||
.ToArray());
|
||||
}
|
||||
|
||||
|
|
@ -417,18 +417,18 @@ namespace GameCult.Aetheria.State.Verse
|
|||
return ToEveSurfaceDocument(document, null);
|
||||
}
|
||||
|
||||
public static EveUiSurfaceDocument ToEveSurfaceDocument(GameCult.Mesh.EveSurfaceDocument document)
|
||||
public static EveUiSurfaceDocument ToEveSurfaceDocument(EveUiSurfaceDocument document)
|
||||
{
|
||||
return ToEveSurfaceDocument(document, null);
|
||||
}
|
||||
|
||||
public static EveUiSurfaceDocument ToEveSurfaceDocument(
|
||||
GameCult.Mesh.EveSurfaceDocument document,
|
||||
EveUiSurfaceDocument document,
|
||||
CultMeshStateRefResolver? stateRefResolver)
|
||||
{
|
||||
if (document == null) throw new ArgumentNullException(nameof(document));
|
||||
|
||||
return ToEveSurfaceDocument(FromPortableSurface(document), stateRefResolver);
|
||||
return ResolveStateRefs(document, stateRefResolver);
|
||||
}
|
||||
|
||||
public static EveUiSurfaceDocument ToEveSurfaceDocument(
|
||||
|
|
@ -437,25 +437,7 @@ namespace GameCult.Aetheria.State.Verse
|
|||
{
|
||||
if (document == null) throw new ArgumentNullException(nameof(document));
|
||||
|
||||
var surface = new EveUiSurfaceDocument(
|
||||
"surface-state",
|
||||
"gamecult.eve.surface.v1",
|
||||
document.ProviderId,
|
||||
document.ProviderKind,
|
||||
document.Title,
|
||||
document.Version,
|
||||
document.UpdatedAtUtc,
|
||||
new EveUiSurfaceTree(
|
||||
document.Surface.Id,
|
||||
ToEveSurfaceComponent(document.Surface.Root),
|
||||
document.Surface.Styles
|
||||
.Select(style => new EveUiStyleToken(style.Name, style.Value))
|
||||
.ToArray()),
|
||||
document.Commands
|
||||
.Select(command => new EveUiCommandTemplate(command.Operation))
|
||||
.ToArray());
|
||||
|
||||
return ResolveStateRefs(surface, stateRefResolver);
|
||||
return ResolveStateRefs(ToPortableSurface(document), stateRefResolver);
|
||||
}
|
||||
|
||||
public static EveUiSurfaceDocument ResolveStateRefs(
|
||||
|
|
@ -533,6 +515,12 @@ namespace GameCult.Aetheria.State.Verse
|
|||
return binding;
|
||||
}
|
||||
|
||||
private static CultMeshStateBindingDescriptor FromPortableStateBinding(
|
||||
CultMeshStateBindingDescriptor binding)
|
||||
{
|
||||
return binding;
|
||||
}
|
||||
|
||||
private static EveUiSurfaceComponent ResolveStateRefs(
|
||||
EveUiSurfaceComponent component,
|
||||
Func<string, string> resolveStateRef)
|
||||
|
|
@ -562,7 +550,7 @@ namespace GameCult.Aetheria.State.Verse
|
|||
return resolved;
|
||||
}
|
||||
|
||||
private static AetheriaRuntimeSurfaceComponent FromPortableComponent(GameCult.Mesh.EveSurfaceComponent component)
|
||||
private static AetheriaRuntimeSurfaceComponent FromPortableComponent(EveUiSurfaceComponent component)
|
||||
{
|
||||
return new AetheriaRuntimeSurfaceComponent(
|
||||
component.Id,
|
||||
|
|
@ -574,71 +562,14 @@ namespace GameCult.Aetheria.State.Verse
|
|||
}
|
||||
|
||||
private static AetheriaRuntimeEmbeddedDocumentSlot FromPortableEmbeddedDocumentSlot(
|
||||
GameCult.Mesh.EveEmbeddedDocumentSlot slot)
|
||||
EveUiEmbeddedDocumentSlot slot)
|
||||
{
|
||||
return new AetheriaRuntimeEmbeddedDocumentSlot(
|
||||
slot.SlotId,
|
||||
slot.DocumentId,
|
||||
slot.SchemaId,
|
||||
slot.PresentationKind,
|
||||
FromPortableRoute(slot.RouteHint));
|
||||
}
|
||||
|
||||
private static CultMeshStateBindingDescriptor FromPortableStateBinding(
|
||||
GameCult.Mesh.EveSurfaceStateBinding binding)
|
||||
{
|
||||
return CultMesh.StateBindingRecord(
|
||||
binding.TargetProp,
|
||||
binding.PointerId,
|
||||
binding.SourceId,
|
||||
binding.SchemaId,
|
||||
binding.RouteHint.Kind,
|
||||
binding.RouteHint.Description).ToBinding();
|
||||
}
|
||||
|
||||
private static CultMeshOperationBindingDescriptor FromPortableOperation(
|
||||
GameCult.Mesh.EveSurfaceOperationBinding operation)
|
||||
{
|
||||
return CultMesh.OperationBindingRecord(
|
||||
operation.OperationId,
|
||||
operation.Label,
|
||||
operation.SchemaId,
|
||||
operation.RouteHint.Kind,
|
||||
operation.RouteHint.Description).ToBinding();
|
||||
}
|
||||
|
||||
private static CultMeshRouteHint FromPortableRoute(GameCult.Mesh.EveSurfaceRouteHint route)
|
||||
{
|
||||
return new CultMeshRouteRecord(route.Kind, route.Description).ToRoute(CultMeshRouteHint.Automatic);
|
||||
}
|
||||
|
||||
private static GameCult.Mesh.EveSurfaceComponent ToPortableComponent(AetheriaRuntimeSurfaceComponent component)
|
||||
{
|
||||
var props = new Dictionary<string, string>(component.Props, StringComparer.Ordinal);
|
||||
AetheriaRuntimeSurfaceStateBindings.AddPointerProps(props, component.StateBindings);
|
||||
|
||||
return new GameCult.Mesh.EveSurfaceComponent(
|
||||
component.Id,
|
||||
component.Kind,
|
||||
props,
|
||||
component.Children.Select(ToPortableComponent).ToArray(),
|
||||
component.StateBindings
|
||||
.Select(GameCult.Mesh.EveSurfaceStateBinding.FromDescriptor)
|
||||
.ToArray(),
|
||||
component.EmbeddedDocuments
|
||||
.Select(ToPortableEmbeddedDocumentSlot)
|
||||
.ToArray());
|
||||
}
|
||||
|
||||
private static GameCult.Mesh.EveEmbeddedDocumentSlot ToPortableEmbeddedDocumentSlot(
|
||||
AetheriaRuntimeEmbeddedDocumentSlot slot)
|
||||
{
|
||||
return new GameCult.Mesh.EveEmbeddedDocumentSlot(
|
||||
slot.SlotId,
|
||||
slot.DocumentId,
|
||||
slot.SchemaId,
|
||||
slot.PresentationKind,
|
||||
GameCult.Mesh.EveSurfaceRouteHint.FromRoute(slot.RouteHint));
|
||||
slot.RouteHint);
|
||||
}
|
||||
|
||||
private static void ResolvePropRefs(
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ using GameCult.Mesh;
|
|||
using GameCult.Networking;
|
||||
using R3;
|
||||
using EveUiCommandRequest = GameCult.Eve.Surface.EveSurfaceCommandRequest;
|
||||
using MeshEveSurfaceDocument = GameCult.Mesh.EveSurfaceDocument;
|
||||
using EveSurfaceDocument = GameCult.Eve.Surface.EveSurfaceDocument;
|
||||
|
||||
#nullable enable
|
||||
|
||||
|
|
@ -122,7 +122,7 @@ namespace GameCult.Aetheria.State.Verse
|
|||
typeof(AetheriaRuntimePlayerSettingsDocument),
|
||||
typeof(AetheriaRuntimeVerseHostSettingsDocument),
|
||||
typeof(AetheriaRuntimeSurfaceDocument),
|
||||
typeof(MeshEveSurfaceDocument),
|
||||
typeof(EveSurfaceDocument),
|
||||
typeof(AetheriaRuntimeDaemonCommandDocument),
|
||||
typeof(AetheriaRuntimeEveCommandDocument)
|
||||
};
|
||||
|
|
@ -421,13 +421,13 @@ namespace GameCult.Aetheria.State.Verse
|
|||
latestFrameDocument,
|
||||
Document<AetheriaRuntimeDaemonSoaViewDocument>(
|
||||
AetheriaRuntimeVerseRecordKeys.DaemonSoaViewLatest),
|
||||
Document<MeshEveSurfaceDocument>(
|
||||
Document<EveSurfaceDocument>(
|
||||
AetheriaRuntimeVerseRecordKeys.DaemonGameSurface),
|
||||
Document<MeshEveSurfaceDocument>(
|
||||
Document<EveSurfaceDocument>(
|
||||
AetheriaRuntimeVerseRecordKeys.DaemonGameTuiSurface),
|
||||
Document<MeshEveSurfaceDocument>(
|
||||
Document<EveSurfaceDocument>(
|
||||
AetheriaRuntimeVerseRecordKeys.DaemonEditorSurface),
|
||||
Document<MeshEveSurfaceDocument>(
|
||||
Document<EveSurfaceDocument>(
|
||||
AetheriaRuntimeVerseRecordKeys.DaemonEditorTuiSurface),
|
||||
catalogDocument,
|
||||
loadoutTemplatesDocument,
|
||||
|
|
|
|||
|
|
@ -134,11 +134,12 @@ The daemon already publishes game and editor Eve surface records at these keys:
|
|||
|
||||
`AetheriaRuntimeVerseRecordKeys` exposes those keys and
|
||||
`AetheriaRuntimeVerseClient` exposes typed reads, mutable state pointers, and
|
||||
`WatchRecord<GameCult.Mesh.EveSurfaceDocument>(CultRecordKey)` subscriptions for
|
||||
all four. The Eve surface document contract lives in CultMesh because Eve is the
|
||||
UI projection language, not an Aetheria persisted-state owner. A Unity client,
|
||||
`WatchRecord<GameCult.Eve.Surface.EveSurfaceDocument>(CultRecordKey)`
|
||||
subscriptions for all four. Eve owns the surface document and composition DSL;
|
||||
CultMesh owns the transport, typed handles, state refs, operation bindings, and
|
||||
route hints that let clients observe and invoke that surface. A Unity client,
|
||||
terminal client, daemon inspector, or later non-C# runtime binding lowers the
|
||||
same published `GameCult.Mesh.EveSurfaceDocument`. The existing Eve Unity
|
||||
runtime host can keep resolving Aetheria state refs automatically; it should
|
||||
consume those refs as part of lowering the shared surface, not as a separate
|
||||
authority path.
|
||||
same published `GameCult.Eve.Surface.EveSurfaceDocument`. The existing Eve Unity
|
||||
runtime host can keep resolving Aetheria state refs automatically; it consumes
|
||||
those refs as part of lowering the shared surface, not as a separate authority
|
||||
path.
|
||||
|
|
|
|||
|
|
@ -314,7 +314,7 @@ Work on Unity thin-client migration:
|
|||
|
||||
Work on Eve/CultUI surfaces:
|
||||
|
||||
- `GameCult.Mesh.EveSurfaceDocument` for daemon-published CultUI/Eve surfaces
|
||||
- `GameCult.Eve.Surface.EveSurfaceDocument` for daemon-published CultUI/Eve surfaces
|
||||
- `Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeSurfaceDocuments.cs`
|
||||
- `Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeEveCommandClient.cs`
|
||||
- `Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntime*SurfaceBuilder.cs`
|
||||
|
|
|
|||
Loading…
Reference in a new issue