/// <summary> /// Updates the game state from data by deserializing it into the /// message object. /// </summary> /// <param name="data">Data.</param> internal void UpdateGameStateFromData(byte[] data) { MemoryStream ms = new MemoryStream(data); GameDataMessage msg = bf.Deserialize(ms) as GameDataMessage; Debug.Log("Received new GameState!( " + msg.Changes.Count + ")"); managerImpl.OnNewGameState(msg.GameState, msg.Changes); }
/// <summary> /// Gets the state of the game serialized so it can be sent to others. /// </summary> /// <param name="phase">The phase of games state to generate.</param> /// <returns>The game state.</returns> internal byte[] GetGameStateData(GameStateData.Phase phase) { gameState.SerialNumber = gameState.SerialNumber + 1; gameState.CurrentPhase = phase; Debug.Log("Serializing Game state: " + phase + " " + gameState.SerialNumber); gameState.Players.Clear(); foreach (PlayerInfo p in PlayerInfo.AllPlayers) { gameState.Players.Add(p.DataState); if (phase == GameStateData.Phase.Initializing || phase == GameStateData.Phase.Connecting) { GameObject playerObj = levelmanager.GetPlayerObject(p.DeviceId); if (playerObj != null) { OnObjectChanged(playerObj.GetComponent <Shareable>()); } } } GameDataMessage msg = new GameDataMessage(); if (gameType == GameType.MultiplayerLocal) { msg.GameState = gameState; } msg.Changes = new List <ItemState>(); msg.Changes.AddRange(changesToShare.Values); MemoryStream m = new MemoryStream(); bf.Serialize(m, msg); m.Flush(); return(m.ToArray()); }
/// <summary> /// Gets the state of the game serialized so it can be sent to others. /// </summary> /// <param name="phase">The phase of games state to generate.</param> /// <returns>The game state.</returns> internal byte[] GetGameStateData(GameStateData.Phase phase) { gameState.SerialNumber = gameState.SerialNumber + 1; gameState.CurrentPhase = phase; Debug.Log("Serializing Game state: " + phase + " " + gameState.SerialNumber); gameState.Players.Clear(); foreach (PlayerInfo p in PlayerInfo.AllPlayers) { gameState.Players.Add(p.DataState); if (phase == GameStateData.Phase.Initializing || phase == GameStateData.Phase.Connecting) { GameObject playerObj = levelmanager.GetPlayerObject(p.DeviceId); if (playerObj != null) { OnObjectChanged(playerObj.GetComponent<Shareable>()); } } } GameDataMessage msg = new GameDataMessage(); if (gameType == GameType.MultiplayerLocal) { msg.GameState = gameState; } msg.Changes = new List<ItemState>(); msg.Changes.AddRange(changesToShare.Values); MemoryStream m = new MemoryStream(); bf.Serialize(m, msg); m.Flush(); return m.ToArray(); }