/// <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); }
/// <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); } }