using AcDream.Core.Physics;
namespace AcDream.Runtime;
public readonly record struct RuntimeEntityIdentity(
uint ServerGuid,
uint LocalEntityId,
ushort Incarnation);
public readonly record struct RuntimeEntitySnapshot(
RuntimeEntityIdentity Identity,
uint CellId,
uint PhysicsState,
Position? Position);
public interface IRuntimeEntityVisitor
{
void Visit(in RuntimeEntitySnapshot entity);
}
public interface IRuntimeEntityView
{
int Count { get; }
bool TryGet(uint serverGuid, out RuntimeEntitySnapshot entity);
///
/// Visits the canonical owner synchronously without copying its mutable
/// collection. The visitor must not retain references or mutate runtime
/// ownership during the call.
///
void Visit(IRuntimeEntityVisitor visitor);
}
public readonly record struct RuntimeInventoryItemSnapshot(
uint ObjectId,
ushort Incarnation,
string Name,
uint ContainerId,
int ContainerSlot,
uint WielderId,
uint EquipLocation,
int StackSize,
int Value);
public interface IRuntimeInventoryVisitor
{
void Visit(in RuntimeInventoryItemSnapshot item);
}
public interface IRuntimeInventoryView
{
int ObjectCount { get; }
int ContainerCount { get; }
bool TryGet(uint objectId, out RuntimeInventoryItemSnapshot item);
///
void Visit(IRuntimeInventoryVisitor visitor);
}
public interface IRuntimeChatView
{
long Revision { get; }
int Count { get; }
}
public readonly record struct RuntimeMovementSnapshot(
bool HasController,
uint LocalEntityId,
Position Position,
System.Numerics.Vector3 Velocity,
bool IsAirborne,
double SimulationTimeSeconds);
public interface IRuntimeMovementView
{
RuntimeMovementSnapshot Snapshot { get; }
}
public enum RuntimePortalKind
{
None,
Login,
Portal,
}
public readonly record struct RuntimePortalSnapshot(
long Generation,
RuntimePortalKind Kind,
uint DestinationCell,
bool IsReady,
bool IsMaterialized,
bool IsCompleted,
bool IsCancelled,
bool IsWorldVisible);
public interface IRuntimePortalView
{
RuntimePortalSnapshot Snapshot { get; }
}
public readonly record struct RuntimeStateCheckpoint(
RuntimeGenerationToken Generation,
RuntimeLifecycleState Lifecycle,
ulong FrameNumber,
int EntityCount,
int MaterializedEntityCount,
int InventoryObjectCount,
int InventoryContainerCount,
RuntimeInventoryStateSnapshot InventoryState,
RuntimeCharacterSnapshot Character,
RuntimeSocialSnapshot Social,
long ChatRevision,
int ChatCount,
RuntimeMovementSnapshot Movement,
RuntimePortalSnapshot Portal);
public interface IGameRuntimeView
{
RuntimeGenerationToken Generation { get; }
RuntimeLifecycleSnapshot Lifecycle { get; }
IGameRuntimeClock Clock { get; }
IRuntimeEntityView Entities { get; }
IRuntimeInventoryView Inventory { get; }
IRuntimeInventoryStateView InventoryState { get; }
IRuntimeCharacterView Character { get; }
IRuntimeSocialView Social { get; }
IRuntimeChatView Chat { get; }
IRuntimeMovementView Movement { get; }
IRuntimePortalView Portal { get; }
RuntimeStateCheckpoint CaptureCheckpoint();
}