Beispiel #1
0
        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}");
                    }
                }
            }
        }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
 public LogBuildingUpdate(string s, ILogParserHelper parseHelper)
 {
     Deserialize(s);
     Building = parseHelper.GetBuilding(BuildingIndex, GameIndex);
     if (TileIndex != -1)
     {
         Tile = parseHelper.GetTile(TileIndex, GameIndex);
     }
 }
Beispiel #4
0
 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);
     }
 }
Beispiel #5
0
 public LogRoadUpdate(string s, ILogParserHelper parseHelper)
 {
     Deserialize(s);
     Road = parseHelper.GetRoad(Index, GameIndex);
 }
Beispiel #6
0
        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;
            }
        }
Beispiel #7
0
 public LogEntry(string s, ILogParserHelper parseHelper)
 {
     StaticHelpers.DeserializeObject <LogEntry>(this, s, "=", "|");
     ParsePlayer(PlayerDataString, parseHelper);
     ParseTag(TagAsString, parseHelper);
 }
Beispiel #8
0
 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!
 }