public static void OnLoadingColony(Colony c, JSONNode n) { if (!_colonyStates.ContainsKey(c)) { _colonyStates.Add(c, new ColonyState(c)); } if (n.TryGetChild(GameLoader.NAMESPACE + ".ColonyState", out var stateNode)) { if (stateNode.TryGetAs(nameof(ItemsPlaced), out JSONNode ItemsPlacedNode)) { foreach (var aNode in ItemsPlacedNode.LoopObject()) { _colonyStates[c].ItemsPlaced.Add(ushort.Parse(aNode.Key), aNode.Value.GetAs <int>()); } } if (stateNode.TryGetAs(nameof(ItemsRemoved), out JSONNode ItemsRemovedNode)) { foreach (var aNode in ItemsRemovedNode.LoopObject()) { _colonyStates[c].ItemsRemoved.Add(ushort.Parse(aNode.Key), aNode.Value.GetAs <int>()); } } if (stateNode.TryGetAs(nameof(ItemsInWorld), out JSONNode ItemsInWorldNode)) { foreach (var aNode in ItemsInWorldNode.LoopObject()) { _colonyStates[c].ItemsInWorld.Add(ushort.Parse(aNode.Key), aNode.Value.GetAs <int>()); } } if (stateNode.TryGetAs(nameof(Stats), out JSONNode itterations)) { foreach (var skill in itterations.LoopObject()) { _colonyStates[c].Stats[skill.Key] = skill.Value.GetAs <double>(); } } if (stateNode.TryGetAs("Difficulty", out string diff)) { _colonyStates[c].DifficultyStr = diff; } if (stateNode.TryGetAs(nameof(BossesEnabled), out bool bosses)) { _colonyStates[c].BossesEnabled = bosses; } if (stateNode.TryGetAs(nameof(NotifySettlers), out bool settlers)) { _colonyStates[c].NotifySettlers = settlers; } if (stateNode.TryGetAs(nameof(SettlersEnabled), out bool notify)) { _colonyStates[c].SettlersEnabled = notify; } if (stateNode.TryGetAs(nameof(HighestColonistCount), out int hsc)) { _colonyStates[c].HighestColonistCount = hsc; } if (stateNode.TryGetAs(nameof(NeedsABed), out int nb)) { _colonyStates[c].NeedsABed = nb; } if (stateNode.TryGetAs(nameof(SettlersToggledTimes), out int stt)) { _colonyStates[c].SettlersToggledTimes = stt; } if (stateNode.TryGetAs(nameof(CreationDate), out string joindate) && DateTime.TryParse(joindate, out var parsedJoinDate)) { _colonyStates[c].CreationDate = parsedJoinDate; } } }
public static void OnLoadingPlayer(JSONNode n, Players.Player p) { if (!_playerStates.ContainsKey(p)) { _playerStates.Add(p, new PlayerState(p)); } if (n.TryGetChild(GameInitializer.NAMESPACE + ".PlayerState", out var stateNode)) { if (stateNode.TryGetAs(nameof(ItemsPlaced), out JSONNode ItemsPlacedNode)) { foreach (var aNode in ItemsPlacedNode.LoopObject()) { _playerStates[p].ItemsPlaced.Add(ushort.Parse(aNode.Key), aNode.Value.GetAs <int>()); } } if (stateNode.TryGetAs(nameof(Tutorials), out JSONNode tutorials)) { foreach (var aNode in tutorials.LoopObject()) { _playerStates[p].Tutorials.Add(aNode.Key, aNode.Value.GetAs <bool>()); } } if (stateNode.TryGetAs(nameof(Positions), out JSONNode positions)) { foreach (var aNode in positions.LoopObject()) { _playerStates[p].Positions.Add(aNode.Key, (Vector3Int)aNode.Value); } } if (stateNode.TryGetAs(nameof(ItemsRemoved), out JSONNode ItemsRemovedNode)) { foreach (var aNode in ItemsRemovedNode.LoopObject()) { _playerStates[p].ItemsRemoved.Add(ushort.Parse(aNode.Key), aNode.Value.GetAs <int>()); } } if (stateNode.TryGetAs(nameof(ItemsInWorld), out JSONNode ItemsInWorldNode)) { foreach (var aNode in ItemsInWorldNode.LoopObject()) { _playerStates[p].ItemsInWorld.Add(ushort.Parse(aNode.Key), aNode.Value.GetAs <int>()); } } if (stateNode.TryGetAs(nameof(Backpack), out JSONNode backpack)) { foreach (var aNode in backpack.LoopObject()) { _playerStates[p].Backpack.Add(ushort.Parse(aNode.Key), aNode.Value.GetAs <int>()); } } if (stateNode.TryGetAs("Armor", out JSONNode armorNode) && armorNode.NodeType == NodeType.Object) { foreach (var aNode in armorNode.LoopObject()) { _playerStates[p].Armor[(ArmorFactory.ArmorSlot)Enum.Parse(typeof(ArmorFactory.ArmorSlot), aNode.Key)] = new ItemState(aNode.Value); } } if (stateNode.TryGetAs("FlagsPlaced", out JSONNode flagsPlaced) && flagsPlaced.NodeType == NodeType.Array) { foreach (var aNode in flagsPlaced.LoopArray()) { _playerStates[p].FlagsPlaced.Add((Vector3Int)aNode); } } if (stateNode.TryGetAs("TeleporterPlaced", out JSONNode teleporterPlaced)) { _playerStates[p].TeleporterPlaced = (Vector3Int)teleporterPlaced; } if (stateNode.TryGetAs("Weapon", out JSONNode wepNode)) { _playerStates[p].Weapon = new ItemState(wepNode); } if (stateNode.TryGetAs(nameof(BuildersWandCharge), out int wandCharge)) { _playerStates[p].BuildersWandCharge = wandCharge; } if (stateNode.TryGetAs(nameof(BuildersWandTarget), out ushort wandTarget)) { _playerStates[p].BuildersWandTarget = wandTarget; } if (stateNode.TryGetAs(nameof(JoinDate), out string joindate) && DateTime.TryParse(joindate, out var parsedJoinDate)) { _playerStates[p].JoinDate = parsedJoinDate; } _playerStates[p].BuildersWandPreview.Clear(); if (stateNode.TryGetAs(nameof(BuildersWandPreview), out JSONNode wandPreview)) { foreach (var node in wandPreview.LoopArray()) { _playerStates[p].BuildersWandPreview.Add((Vector3Int)node); } } var playerMagicItems = new List <IPlayerMagicItem>(); if (stateNode.TryGetAs(nameof(MagicItems), out JSONNode magicItems)) { foreach (var magicItem in magicItems.LoopArray()) { if (MagicItemsCache.PlayerMagicItems.TryGetValue(magicItem.GetAs <string>(), out var pmi)) { playerMagicItems.Add(pmi); } } } _playerStates[p].MagicItems = playerMagicItems.ToArray(); if (stateNode.TryGetAs(nameof(Stats), out JSONNode itterations)) { foreach (var skill in itterations.LoopObject()) { _playerStates[p].Stats[skill.Key] = skill.Value.GetAs <double>(); } } _playerStates[p].RecaclculateMagicItems(); } }