diff options
Diffstat (limited to 'src/ch/epfl')
-rw-r--r-- | src/ch/epfl/xblast/client/GameStateDeserializer.java | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/src/ch/epfl/xblast/client/GameStateDeserializer.java b/src/ch/epfl/xblast/client/GameStateDeserializer.java index f95c515..66be2d9 100644 --- a/src/ch/epfl/xblast/client/GameStateDeserializer.java +++ b/src/ch/epfl/xblast/client/GameStateDeserializer.java | |||
@@ -28,8 +28,9 @@ public final class GameStateDeserializer { | |||
28 | * Serialized data chunks | 28 | * Serialized data chunks |
29 | */ | 29 | */ |
30 | private final static int NUMBER_OF_PLAYERS = 4; | 30 | private final static int NUMBER_OF_PLAYERS = 4; |
31 | private final static int PLAYER_CHUNK_SIZE = 6; | 31 | private final static int PLAYER_CHUNK_SIZE = 4; |
32 | private final static int PLAYER_SIZE = NUMBER_OF_PLAYERS * PLAYER_CHUNK_SIZE; | 32 | private final static int PLAYER_TOTAL_SIZE = NUMBER_OF_PLAYERS * PLAYER_CHUNK_SIZE; |
33 | |||
33 | private final static int TIME_LINE_SIZE = (Ticks.GAME_DURATION / 2); | 34 | private final static int TIME_LINE_SIZE = (Ticks.GAME_DURATION / 2); |
34 | 35 | ||
35 | /** | 36 | /** |
@@ -55,10 +56,10 @@ public final class GameStateDeserializer { | |||
55 | } | 56 | } |
56 | 57 | ||
57 | /** | 58 | /** |
58 | * Build a list of players given the serialized data.. | 59 | * Build a list of players given the serialized data. |
59 | * | 60 | * |
60 | * @param serializedPlayers the serialized players | 61 | * @param serializedPlayers the serialized players |
61 | * @return a list of players built from the serialized players | 62 | * @return a list of players built from the serialized data |
62 | */ | 63 | */ |
63 | private static List<Player> deserializePlayers(List<Byte> serializedPlayers) { | 64 | private static List<Player> deserializePlayers(List<Byte> serializedPlayers) { |
64 | List<Player> players = new ArrayList<>(); | 65 | List<Player> players = new ArrayList<>(); |
@@ -75,10 +76,10 @@ public final class GameStateDeserializer { | |||
75 | } | 76 | } |
76 | 77 | ||
77 | /** | 78 | /** |
78 | * Generate a Player from the serialized data. | 79 | * Generate a Player from its serialized data. |
79 | * | 80 | * |
80 | * @param serializedPlayer a serialized player | 81 | * @param serializedPlayer a serialized player |
81 | * @return a player built from the serialized player | 82 | * @return a player built from its serialized data |
82 | */ | 83 | */ |
83 | private static Player deserializePlayer(List<Byte> serializedPlayer, int i) { | 84 | private static Player deserializePlayer(List<Byte> serializedPlayer, int i) { |
84 | PlayerID id = PlayerID.values()[i]; | 85 | PlayerID id = PlayerID.values()[i]; |
@@ -126,6 +127,7 @@ public final class GameStateDeserializer { | |||
126 | playerScore.add(imageCollection.imageOrNull(SCORE_TEXT_RIGHT_IMAGE_ID)); | 127 | playerScore.add(imageCollection.imageOrNull(SCORE_TEXT_RIGHT_IMAGE_ID)); |
127 | return playerScore; | 128 | return playerScore; |
128 | } | 129 | } |
130 | |||
129 | /** | 131 | /** |
130 | * Generate the list of images composing the time "line". | 132 | * Generate the list of images composing the time "line". |
131 | * | 133 | * |
@@ -153,28 +155,29 @@ public final class GameStateDeserializer { | |||
153 | */ | 155 | */ |
154 | public static GameState deserialize(List<Byte> serializedData) { | 156 | public static GameState deserialize(List<Byte> serializedData) { |
155 | 157 | ||
156 | // Indexes | 158 | // Build the indexes |
157 | int boardIndex = 1; | 159 | int boardBeginIndex = 0; // First element |
158 | int boardSize = serializedData.get(boardIndex); | 160 | int boardEndIndex = (boardBeginIndex) + Byte.toUnsignedInt(serializedData.get(boardBeginIndex)); |
159 | int explosionsIndex = boardIndex + boardSize; | 161 | int explosionsBeginIndex = boardEndIndex + 1; |
160 | int explosionsSize = serializedData.get(explosionsIndex); | 162 | int explosionsEndIndex = explosionsBeginIndex + Byte.toUnsignedInt(serializedData.get(explosionsBeginIndex)); |
161 | int playersIndex = explosionsIndex + explosionsSize; | 163 | int playersBeginIndex = explosionsEndIndex + 1; |
162 | Byte time = serializedData.get(serializedData.size()); | 164 | int playersEndIndex = (playersBeginIndex - 1) + PLAYER_TOTAL_SIZE; |
165 | Byte time = serializedData.get(playersEndIndex + 1); // Last element | ||
163 | 166 | ||
164 | // Deserialize the Board | 167 | // Deserialize the Board |
165 | List<Image> board = deserializeChunk( | 168 | List<Image> board = deserializeChunk( |
166 | serializedData.subList(boardIndex, boardSize), | 169 | serializedData.subList(boardBeginIndex + 1, boardEndIndex + 1), |
167 | new ImageCollection(BOARD_IMAGES_FOLDER) | 170 | new ImageCollection(BOARD_IMAGES_FOLDER) |
168 | ); | 171 | ); |
169 | 172 | ||
170 | // Deserialize the explosions | 173 | // Deserialize the explosions |
171 | List<Image> explosions = deserializeChunk( | 174 | List<Image> explosions = deserializeChunk( |
172 | serializedData.subList(boardIndex,boardSize), | 175 | serializedData.subList(explosionsBeginIndex + 1,explosionsEndIndex + 1), |
173 | new ImageCollection(EXPLOSION_IMAGES_FOLDER) | 176 | new ImageCollection(EXPLOSION_IMAGES_FOLDER) |
174 | ); | 177 | ); |
175 | 178 | ||
176 | // Deserialize the players | 179 | // Deserialize the players |
177 | List<Player> players = deserializePlayers(serializedData.subList(playersIndex,PLAYER_SIZE)); | 180 | List<Player> players = deserializePlayers(serializedData.subList(playersBeginIndex,playersEndIndex + 1)); |
178 | 181 | ||
179 | // Generate the scores and the time "line" | 182 | // Generate the scores and the time "line" |
180 | List<Image> scores = buildScores(players); | 183 | List<Image> scores = buildScores(players); |