private string CreateCoolTokenLogMessage(string name, GameStateReaderToken token, string type) { string message = string.Format("READER: {0}pick {1} {2} {3} ({4})", token.isHidden ? "random ": "", type, name, getPlayerIndex(token.player_id), token.type); if (!token.isPlaced) { message += "not placed"; } else if (token.isOnBoard) { message += string.Format("at ({0},{1}) -> ({2},{3})", token.x, token.y, board.ConvertY(token.y), board.ConvertX(token.x)); } else if (token.isOnTile) { message += string.Format("on tile {0} -> {1}", token.location_arg, board.ConvertTile(int.Parse(token.location_arg))); } else { message += "of UNKNOWN STATUS"; } return(message); }
private void extractGameState(JSONObject json) { Debug.Assert(JSONTools.HasFieldOfTypeObject(json, "gamestate")); JSONObject gamestate = json.GetField("gamestate"); name = JSONTools.GetStrValue(gamestate, "name"); type = JSONTools.GetStrValue(gamestate, "type"); active_players = new List <string>(); switch (type) { case "manager": case "game": case "activeplayer": active_players.Add(JSONTools.GetStrValue(gamestate, "active_player")); break; case "multipleactiveplayer": Debug.Assert(JSONTools.HasFieldOfTypeArray(gamestate, "multiactive")); foreach (JSONObject id in gamestate.GetField("multiactive").list) { Debug.Assert(id.IsString || id.IsNumber); if (id.IsString) { active_players.Add(id.str); } else { active_players.Add(Mathf.RoundToInt(id.n).ToString()); } } Debug.Assert(active_players.Count <= 2); break; default: Debug.Assert(false, "unhandled gamestate type"); break; } current_player = null; discoveredRoom = GameStateReader.INVALID_INT; selectedCharacterId = GameStateReader.INVALID_INT; targetId = GameStateReader.INVALID_INT; pointsRemaining = GameStateReader.INVALID_INT; modifiedTokens = new Dictionary <int, GameStateReaderToken>(); Debug.Assert(gamestate.HasField("args")); JSONObject args = gamestate.GetField("args"); switch (name) { case "movingCharacter": case "movingCharacterContinue": { Debug.Assert(args.IsObject); selectedCharacterId = JSONTools.GetIntValue(args, "character_id"); pointsRemaining = JSONTools.GetIntValue(args, "points"); if (JSONTools.HasFieldOfTypeArray(args, "inital_objects")) { foreach (var token in args.GetField("inital_objects").list) { var tokenData = new GameStateReaderToken(token, true); Debug.Assert(!modifiedTokens.ContainsKey(tokenData.id)); modifiedTokens[tokenData.id] = tokenData; } } } break; case "discoverRoomPlaceToken": { Debug.Assert(args.IsObject); current_player = JSONTools.GetStrValue(args, "turn"); discoveredRoom = JSONTools.GetIntValue(args, "room", GameStateReader.INVALID_INT); } break; case "combatChooseCard": { Debug.Assert(args.IsObject); selectedCharacterId = JSONTools.GetIntValue(args, "character_id"); targetId = JSONTools.GetIntValue(args, "target_id"); } break; } }