Aetheria/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeDaemonRenderView.cs

60 lines
2.3 KiB
C#
Raw Normal View History

2026-06-21 09:37:54 +01:00
using System;
using GameCult.Mesh;
2026-06-21 09:37:54 +01:00
#nullable enable
2026-06-21 09:54:15 +01:00
namespace GameCult.Aetheria.State.Verse
2026-06-21 09:37:54 +01:00
{
public sealed class AetheriaRuntimeDaemonRenderView
2026-06-21 09:37:54 +01:00
{
public AetheriaRuntimeDaemonRenderView(
2026-06-21 09:37:54 +01:00
AetheriaRuntimeDaemonFrameDocument frame,
AetheriaRuntimeDaemonSoaViewDocument? soaView,
AetheriaRuntimeZoneRenderDocument zoneRender)
2026-06-21 09:37:54 +01:00
{
Frame = frame ?? throw new ArgumentNullException(nameof(frame));
SoaView = soaView;
SoaIndex = AetheriaRuntimeDaemonSoaViewIndex.Build(soaView);
ZoneRender = zoneRender ?? throw new ArgumentNullException(nameof(zoneRender));
2026-06-21 09:37:54 +01:00
}
public AetheriaRuntimeDaemonFrameDocument Frame { get; }
public AetheriaRuntimeDaemonSoaViewDocument? SoaView { get; }
public AetheriaRuntimeDaemonSoaViewIndex SoaIndex { get; }
public AetheriaRuntimeZoneRenderDocument ZoneRender { get; }
2026-06-21 09:37:54 +01:00
public bool HasSoaView => SoaView != null && SoaIndex.IsValid;
public bool IsAuthoritative => Frame.IsAuthoritative;
public AetheriaRuntimeRunCheckpointCommit Run => Frame.Run;
public static bool TryCreateCurrent(
CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument> frame,
CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument>? soaView,
CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> zoneRender,
out AetheriaRuntimeDaemonRenderView? observed)
{
observed = null;
try
{
var currentFrame = frame?.Current;
var currentZoneRender = zoneRender?.Current;
if (currentFrame == null || currentZoneRender == null)
return false;
var currentSoaView = soaView?.Current;
if (currentSoaView == null ||
!string.Equals(currentSoaView.Schema, AetheriaRuntimeDaemonSchemas.SoaView, StringComparison.Ordinal))
{
currentSoaView = null;
}
observed = new AetheriaRuntimeDaemonRenderView(currentFrame, currentSoaView, currentZoneRender);
return true;
}
catch
{
return false;
}
}
2026-06-28 10:14:21 +01:00
}
2026-06-21 09:37:54 +01:00
}