using System; using System.Collections.Generic; using System.Linq; using NitroxModel.DataStructures; using NitroxModel.DataStructures.GameLogic; using NitroxModel.DataStructures.Unity; using NitroxModel.DataStructures.Util; using NitroxModel.MultiplayerSession; using NitroxModel.Server; namespace NitroxModel.Packets { [Serializable] public class InitialPlayerSync : Packet { public NitroxId AssignedEscapePodId { get; } public Dictionary EquippedItems { get; } public List UsedItems { get; } public Optional[] QuickSlotsBindingIds { get; } public NitroxId PlayerGameObjectId { get; } public bool FirstTimeConnecting { get; } public InitialPDAData PDAData { get; } public InitialStoryGoalData StoryGoalData { get; } public NitroxVector3 PlayerSpawnData { get; } public NitroxQuaternion PlayerSpawnRotation { get; } public Optional PlayerSubRootId { get; } public PlayerStatsData PlayerStatsData { get; } public List OtherPlayers { get; } public List GlobalRootEntities { get; } public List InitialSimulationOwnerships { get; } public NitroxGameMode GameMode { get; } public Perms Permissions { get; } public IntroCinematicMode IntroCinematicMode { get; } public SubnauticaPlayerPreferences Preferences { get; } public TimeData TimeData { get; } public bool IsFirstPlayer { get; } public Dictionary BuildOperationIds { get; } public bool KeepInventoryOnDeath { get; } public SessionSettings SessionSettings { get; } public InitialPlayerSync(NitroxId playerGameObjectId, bool firstTimeConnecting, NitroxId assignedEscapePodId, IDictionary equipment, IEnumerable usedItems, Optional[] quickSlotsBindingIds, InitialPDAData pdaData, InitialStoryGoalData storyGoalData, NitroxVector3 playerSpawnData, NitroxQuaternion playerSpawnRotation, Optional playerSubRootId, PlayerStatsData playerStatsData, IEnumerable otherPlayers, IEnumerable globalRootEntities, IEnumerable initialSimulationOwnerships, NitroxGameMode gameMode, Perms perms, IntroCinematicMode introCinematicMode, SubnauticaPlayerPreferences preferences, TimeData timeData, bool isFirstPlayer, Dictionary buildOperationIds, bool keepInventoryOnDeath, SessionSettings sessionSettings) { AssignedEscapePodId = assignedEscapePodId; PlayerGameObjectId = playerGameObjectId; FirstTimeConnecting = firstTimeConnecting; EquippedItems = new(equipment); UsedItems = usedItems.ToList(); QuickSlotsBindingIds = quickSlotsBindingIds; PDAData = pdaData; StoryGoalData = storyGoalData; PlayerSpawnData = playerSpawnData; PlayerSpawnRotation = playerSpawnRotation; PlayerSubRootId = playerSubRootId; PlayerStatsData = playerStatsData; OtherPlayers = otherPlayers.ToList(); GlobalRootEntities = globalRootEntities.ToList(); InitialSimulationOwnerships = initialSimulationOwnerships.ToList(); GameMode = gameMode; Permissions = perms; IntroCinematicMode = introCinematicMode; Preferences = preferences; TimeData = timeData; IsFirstPlayer = isFirstPlayer; BuildOperationIds = buildOperationIds; KeepInventoryOnDeath = keepInventoryOnDeath; SessionSettings = sessionSettings; } /// Used for deserialization public InitialPlayerSync( NitroxId assignedEscapePodId, Dictionary equippedItems, List usedItems, Optional[] quickSlotsBindingIds, NitroxId playerGameObjectId, bool firstTimeConnecting, InitialPDAData pdaData, InitialStoryGoalData storyGoalData, NitroxVector3 playerSpawnData, NitroxQuaternion playerSpawnRotation, Optional playerSubRootId, PlayerStatsData playerStatsData, List otherPlayers, List globalRootEntities, List initialSimulationOwnerships, NitroxGameMode gameMode, Perms permissions, IntroCinematicMode introCinematicMode, SubnauticaPlayerPreferences preferences, TimeData timeData, bool isFirstPlayer, Dictionary buildOperationIds, bool keepInventoryOnDeath, SessionSettings sessionSettings) { AssignedEscapePodId = assignedEscapePodId; PlayerGameObjectId = playerGameObjectId; FirstTimeConnecting = firstTimeConnecting; EquippedItems = equippedItems; UsedItems = usedItems; QuickSlotsBindingIds = quickSlotsBindingIds; PDAData = pdaData; StoryGoalData = storyGoalData; PlayerSpawnData = playerSpawnData; PlayerSpawnRotation = playerSpawnRotation; PlayerSubRootId = playerSubRootId; PlayerStatsData = playerStatsData; OtherPlayers = otherPlayers; GlobalRootEntities = globalRootEntities; InitialSimulationOwnerships = initialSimulationOwnerships; GameMode = gameMode; Permissions = permissions; IntroCinematicMode = introCinematicMode; Preferences = preferences; TimeData = timeData; IsFirstPlayer = isFirstPlayer; BuildOperationIds = buildOperationIds; KeepInventoryOnDeath = keepInventoryOnDeath; SessionSettings = sessionSettings; } } }