Exemplo n.º 1
0
        /// <summary>
        /// Used to change the id of a specific tile when in multiplayer mode.
        /// </summary>
        /// <param name="tileIndex"></param>
        /// <param name="newTileId"></param>
        /// <param name="isWall"></param>
        public static void UpdateTileFromP2P(Packet.TileIdChange packet)
        {
            int  tileIndex = packet.TileIndex;
            int  newTileId = packet.TileId;
            bool isWall    = packet.IsWall;

            Tile[] array = GameWorld.TileArray;
            if (isWall)
            {
                array = GameWorld.WallArray;
            }
            array[tileIndex].ResetToDefault();
            WorldDataIds[tileIndex] = (TileType)newTileId;
            if (newTileId == 0)
            {
                Destroy(array[tileIndex]);
            }
            else
            {
                Construct(array[tileIndex]);
            }
            UpdateTilesAround(tileIndex);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Updates all the tiles highlighted by the brush.
        /// </summary>
        /// <param name="desiredId"></param>
        private static void UpdateSelectedTiles(TileType desiredId)
        {
            bool hasChanged = false;

            foreach (var i in Brush.SelectedIndices)
            {
                if (i < 0 || i > WorldDataIds.Length)
                {
                    continue;
                }
                TileType tileId = WorldDataIds[i];


                //Wants to destroy. Any block can be destroyed.
                if (desiredId == 0)
                {
                    //Check to see if block is already air.
                    if (tileId == 0)
                    {
                        continue;
                    }
                    CurrentArray[i].ResetToDefault();
                    WorldDataIds[i] = desiredId;

                    hasChanged = true;
                    Destroy(CurrentArray[i]);

                    // Send change over network.
                    byte[] data = new Packet.TileIdChange()
                    {
                        TileIndex = i,
                        TileId    = (int)desiredId,
                        IsWall    = (CurrentArray == GameWorld.WallArray),
                    }.ToByteArray();
                    Session.Send(data, Steamworks.EP2PSend.k_EP2PSendReliable, Session.BB_TileIdChange);
                }

                //Wants to build, but only if there is air.
                else
                {
                    if (tileId == 0)
                    {
                        CurrentArray[i].ResetToDefault();
                        WorldDataIds[i] = desiredId;
                        if (OnWallMode)
                        {
                            CurrentArray[i].IsWall = true;
                        }
                        else
                        {
                            CurrentArray[i].IsWall = false;
                        }
                        Construct(CurrentArray[i]);
                        hasChanged = true;

                        // Send change over network.
                        //byte[] data = new Packet.TileIdChange()
                        //{
                        //    TileIndex = i,
                        //    TileId = (int)desiredId,
                        //    IsWall = (CurrentArray == GameWorld.WallArray),
                        //}.ToByteArray();
                        //Session.Send(data, Steamworks.EP2PSend.k_EP2PSendReliable, Session.BB_TileIdChange);
                    }
                }
            }
            if (hasChanged)
            {
                UpdateTilesAround(IndexOfMouse);
            }
        }