using Robust.Shared.GameObjects; using Robust.Shared.Serialization; using System; using System.Diagnostics; using System.Linq; using NetSerializer; using Robust.Shared.Timing; namespace Robust.Shared.GameStates { [DebuggerDisplay("GameState from={FromSequence} to={ToSequence}")] [Serializable, NetSerializable] public sealed class GameState { /// /// The serialized size in bytes of this game state. /// [field:NonSerialized] public int PayloadSize { get; set; } public bool ForceSendReliably; /// /// Constructor! /// public GameState( GameTick fromSequence, GameTick toSequence, uint lastInput, NetListAsArray entities, NetListAsArray players, NetListAsArray deletions) { FromSequence = fromSequence; ToSequence = toSequence; LastProcessedInput = lastInput; EntityStates = entities; PlayerStates = players; EntityDeletions = deletions; } public readonly GameTick FromSequence; public readonly GameTick ToSequence; public readonly uint LastProcessedInput; public readonly NetListAsArray EntityStates; public readonly NetListAsArray PlayerStates; public readonly NetListAsArray EntityDeletions; /// /// Clone the game state's collections. Required for integration tests, to avoid the server/client referencing /// the same objects /// public GameState Clone() { // TODO integration test serialization. return new( FromSequence, ToSequence, LastProcessedInput, EntityStates.Value.ToArray(), PlayerStates.Value.Select(x=> x.Clone()).ToArray(), EntityDeletions.Value.ToArray()); } } }