public void UpdateGameState(GameState state)
{
Console.WriteLine("UpdateGameState called");
latestGameState = state;
#region Roads
Dictionary<Edge, int> allRoads = latestGameState.Board.GetAllRoads();
foreach (KeyValuePair<Edge, int> road in allRoads)
{
int tile1 = road.Key.FirstTile;
int tile2 = road.Key.SecondTile;
if (roads.Exists(r => r.Tile1 == tile1 && r.Tile2 == tile2))
{
continue;
}
Edge t1Coord = GetTerrainCoords(tile1);
Edge t2Coord = GetTerrainCoords(tile2);
Vector2 diffVector = board[t2Coord.FirstTile][t2Coord.SecondTile].Position / TXAGame.SCALE -
board[t1Coord.FirstTile][t1Coord.SecondTile].Position / TXAGame.SCALE;
Vector2 placeVector = (board[t1Coord.FirstTile][t1Coord.SecondTile].Position/TXAGame.SCALE)+(diffVector/2);
float rotation = 0;
const float value = (float) (Math.PI/3);
if (diffVector.X < 0)
{
rotation = value*2;
}
else if (diffVector.X < diffVector.Y)
{
rotation = value;
}
GUIRoad newRoad = new GUIRoad(placeVector,rotation,road.Value, tile1, tile2);
newRoad.Visible = true;
AddDrawableComponent(newRoad);
}
#endregion
#region Pieces
Dictionary<Intersection, Piece> piecelist = state.Board.GetAllPieces();
foreach (KeyValuePair<Intersection, Piece> piece in piecelist)
{
int t1 = piece.Key.FirstTile;
int t2 = piece.Key.SecondTile;
int t3 = piece.Key.ThirdTile;
GUIPiece alreadyPiece = pieces.FirstOrDefault(e => e.Tile1 == t1 && e.Tile2 == t2 && e.Tile3 == t3);
if (alreadyPiece != null)
{
if (alreadyPiece.Type == Token.Settlement && piece.Value.Token == Token.City)
{
alreadyPiece.Type = Token.City;
}
continue;
}
Vector2 diffVector = t1 + 1 == t2
? new Vector2(GUITile.TileWidth()/2, GUITile.TileHeight()/4)
: new Vector2(0, GUITile.TileHeight()/2);
Edge t1C = GetTerrainCoords(t1);
Vector2 placePos = board[t1C.FirstTile][t1C.SecondTile].Position/TXAGame.SCALE + diffVector;
GUIPiece newPiece = new GUIPiece(placePos, piece.Value.Player, piece.Value.Token, t1, t2, t3);
newPiece.Visible = true;
pieces.Add(newPiece);
AddDrawableComponent(newPiece);
}
#endregion
#region Robber
robber.UpdateRobberPosition(GetRobberPos());
#endregion
#region GameLog
latestGameState.GetLatestEvents(int.MaxValue).Skip(gamelog.Count).ForEach(a => InsertLogEvent(a.ToString()));
//Console.WriteLine(events.Count);
//events.ForEach(a => InsertLogEvent(a.ToString()));
//lastLogPoll = DateTime.Now;
#endregion
}