using AcDream.Core.Physics; namespace AcDream.App.Input; internal interface ILocalPlayerIdentitySource { uint ServerGuid { get; } } /// /// Session-scoped identity slot shared by focused update owners. /// internal sealed class LocalPlayerIdentityState : ILocalPlayerIdentitySource { public uint ServerGuid { get; set; } } internal interface ILocalPlayerControllerSource { PlayerMovementController? Controller { get; } } /// /// The one mutable local movement-controller slot. Player-mode lifecycle owns /// assignment; update and presentation owners receive the read-only seam. /// internal sealed class LocalPlayerControllerSlot : ILocalPlayerControllerSource { public PlayerMovementController? Controller { get; set; } }