private void ParsePlayer(string player, ILogParserHelper parseHelper) { // // should be in the form of "Joe.0.BottomRight // string[] tokens = player.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries); if (tokens.Length == 0) { // this is a normal occurance when there isn't a player, like the beginning of the game return; } if (Int32.TryParse(tokens[1], out int index)) { PlayerData = parseHelper.GetPlayerData(index); if (tokens.Length > 2) { if (Enum.TryParse <PlayerPosition>(tokens[2], out PlayerPosition pos)) { PlayerData.PlayerPosition = pos; } else { this.TraceMessage($"No player Position in PlayerData: {PlayerData}"); } } } }
public void Deserialize(string s, ILogParserHelper logParser, string keySep = "/", string listSep = ",") { Reset(); string[] tokens = s.Split(keySep.ToCharArray(), StringSplitOptions.RemoveEmptyEntries); if (tokens.Count() < 1) { return; } foreach (string token in tokens) { // 5=1,2,3 string[] ts = token.Split(new char[] { '=', listSep.ToCharArray()[0] }, StringSplitOptions.RemoveEmptyEntries); int roadCount = Int32.Parse(ts[0]); List <PlayerModel> list = new List <PlayerModel>(); for (int i = 1; i < ts.Count(); i++) // yes 1, ts[0] is the roadCount { int playerIndex = Int32.Parse(ts[i]); PlayerModel player = logParser.GetPlayerData(playerIndex); list.Add(player); } raceDictionary[roadCount.ToString()] = list; } }
public LogBuildingUpdate(string s, ILogParserHelper parseHelper) { Deserialize(s); Building = parseHelper.GetBuilding(BuildingIndex, GameIndex); if (TileIndex != -1) { Tile = parseHelper.GetTile(TileIndex, GameIndex); } }
public LogBaronOrPirate(string serialized, ILogParserHelper parseHelper) { Deserialize(serialized); StartTile = parseHelper.GetTile(StartTileIndex, GameIndex); TargetTile = parseHelper.GetTile(TargetTileIndex, GameIndex); SourcePlayer = parseHelper.GetPlayerData(SourcePlayerIndex); if (TargetPlayerIndex != -1) { TargetPlayer = parseHelper.GetPlayerData(TargetPlayerIndex); } }
public LogRoadUpdate(string s, ILogParserHelper parseHelper) { Deserialize(s); Road = parseHelper.GetRoad(Index, GameIndex); }
private void ParseTag(string val, ILogParserHelper parseHelper) { switch (Action) { case CatanAction.ChangedPlayer: Tag = new LogChangePlayer(val); break; case CatanAction.AssignedBaron: case CatanAction.PlayedKnight: case CatanAction.AssignedPirateShip: Tag = new LogBaronOrPirate(val, parseHelper); break; case CatanAction.UpdatedRoadState: Tag = new LogRoadUpdate(val, parseHelper); break; case CatanAction.UpdateBuildingState: Tag = new LogBuildingUpdate(val, parseHelper); break; case CatanAction.AddPlayer: Tag = Enum.Parse(typeof(PlayerPosition), val); break; case CatanAction.AssignHarbors: case CatanAction.AssignRandomTiles: case CatanAction.RandomizeTiles: Tag = LogList <int> .CreateAndParse(val); break; case CatanAction.ChangedState: Tag = new LogStateTranstion(val); break; case CatanAction.CardsLost: Tag = new LogCardsLost(val); break; case CatanAction.SetFirstPlayer: Tag = new LogSetFirstPlayer(val); break; case CatanAction.RoadTrackingChanged: Tag = new LogRoadTrackingChanged(val); break; case CatanAction.ChangedPlayerProperty: Tag = new LogPropertyChanged(val); break; case CatanAction.AddResourceCount: Tag = new LogResourceCount(val); break; default: break; } }
public LogEntry(string s, ILogParserHelper parseHelper) { StaticHelpers.DeserializeObject <LogEntry>(this, s, "=", "|"); ParsePlayer(PlayerDataString, parseHelper); ParseTag(TagAsString, parseHelper); }
public void Undo(string oldVal, string newVal, PlayerModel player, ILogParserHelper logHelper, GameState state) { // this.TraceMessage($"RoadRace Undo - setting To: {oldVal} from: {newVal}"); this.Deserialize(oldVal, logHelper); _log.PostLogEntry(player, state, CatanAction.RoadTrackingChanged, false, LogType.Undo, -1, new LogRoadTrackingChanged(newVal, oldVal)); // note: new and old switched! }