Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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();
        }