|
1 | | -using NitroxModel.DataStructures.GameLogic; |
| 1 | +using System.Collections.Generic; |
| 2 | +using System.Linq; |
| 3 | +using Newtonsoft.Json; |
2 | 4 | using ProtoBufNet; |
3 | | -using System.Collections.Generic; |
4 | | -using NitroxModel.DataStructures; |
5 | | -using NitroxModel.DataStructures.Util; |
6 | 5 |
|
7 | 6 | namespace NitroxServer.GameLogic.Players |
8 | 7 | { |
9 | | - [ProtoContract] |
| 8 | + [ProtoContract, JsonObject(MemberSerialization.OptIn)] |
10 | 9 | public class PlayerData |
11 | 10 | { |
12 | 11 | public const short VERSION = 2; |
13 | 12 |
|
14 | | - [ProtoMember(1)] |
| 13 | + [JsonProperty, ProtoMember(1)] |
15 | 14 | public List<PersistedPlayerData> Players = new List<PersistedPlayerData>(); |
16 | 15 |
|
17 | 16 | public List<Player> GetPlayers() |
18 | 17 | { |
19 | | - List<Player> boPlayers = new List<Player>(); |
20 | | - |
21 | | - foreach (PersistedPlayerData playerData in Players) |
22 | | - { |
23 | | - Player player = new Player(playerData.Id, |
24 | | - playerData.Name, |
25 | | - playerData.IsPermaDeath, |
26 | | - null, //no connection/context as this player is not connected. |
27 | | - null, |
28 | | - playerData.SpawnPosition, |
29 | | - playerData.NitroxId, |
30 | | - Optional.OfNullable(playerData.SubRootId), |
31 | | - playerData.Permissions, |
32 | | - playerData.CurrentStats, |
33 | | - playerData.EquippedItems, |
34 | | - playerData.Modules); |
35 | | - boPlayers.Add(player); |
36 | | - } |
37 | | - |
38 | | - return boPlayers; |
| 18 | + return Players.Select(playerData => playerData.ToPlayer()).ToList(); |
39 | 19 | } |
40 | 20 |
|
41 | 21 | public static PlayerData From(IEnumerable<Player> players) |
42 | 22 | { |
43 | | - List<PersistedPlayerData> persistedPlayers = new List<PersistedPlayerData>(); |
44 | | - |
45 | | - foreach (Player player in players) |
46 | | - { |
47 | | - PersistedPlayerData persistedPlayer = new PersistedPlayerData(); |
48 | | - persistedPlayer.Name = player.Name; |
49 | | - persistedPlayer.EquippedItems = player.GetEquipment(); |
50 | | - persistedPlayer.Modules = player.GetModules(); |
51 | | - persistedPlayer.Id = player.Id; |
52 | | - persistedPlayer.SpawnPosition = player.Position; |
53 | | - persistedPlayer.CurrentStats = player.Stats; |
54 | | - persistedPlayer.SubRootId = player.SubRootId.OrElse(null); |
55 | | - persistedPlayer.Permissions = player.Permissions; |
56 | | - persistedPlayer.NitroxId = player.GameObjectId; |
57 | | - persistedPlayer.IsPermaDeath = player.IsPermaDeath; |
58 | | - |
59 | | - persistedPlayers.Add(persistedPlayer); |
60 | | - } |
61 | | - |
62 | | - PlayerData playerData = new PlayerData(); |
63 | | - playerData.Players = persistedPlayers; |
64 | | - |
65 | | - return playerData; |
66 | | - } |
67 | | - |
68 | | - [ProtoContract] |
69 | | - public class PersistedPlayerData |
70 | | - { |
71 | | - [ProtoMember(1)] |
72 | | - public string Name { get; set; } |
73 | | - |
74 | | - [ProtoMember(2)] |
75 | | - public List<EquippedItemData> EquippedItems { get; set; } = new List<EquippedItemData>(); |
76 | | - |
77 | | - [ProtoMember(3)] |
78 | | - public List<EquippedItemData> Modules { get; set; } = new List<EquippedItemData>(); |
79 | | - |
80 | | - [ProtoMember(4)] |
81 | | - public ushort Id { get; set; } |
82 | | - |
83 | | - [ProtoMember(5)] |
84 | | - public NitroxVector3 SpawnPosition { get; set; } |
85 | | - |
86 | | - [ProtoMember(6)] |
87 | | - public PlayerStatsData CurrentStats { get; set; } |
88 | | - |
89 | | - [ProtoMember(7)] |
90 | | - public NitroxId SubRootId { get; set; } |
91 | | - |
92 | | - [ProtoMember(8)] |
93 | | - public Perms Permissions { get; set; } = Perms.PLAYER; |
94 | | - |
95 | | - [ProtoMember(9)] |
96 | | - public NitroxId NitroxId { get; set; } |
| 23 | + List<PersistedPlayerData> persistedPlayers = players.Select(PersistedPlayerData.FromPlayer).ToList(); |
97 | 24 |
|
98 | | - [ProtoMember(10)] |
99 | | - public bool IsPermaDeath { get; set; } |
| 25 | + return new PlayerData { Players = persistedPlayers }; |
100 | 26 | } |
101 | 27 | } |
102 | 28 | } |
0 commit comments