private bool GetWallTubeOnTile(Vector2Int tileXY, out int playerIndex, out int wallTubeIndex)
        {
            // Add game coordinates
            tileXY += Vector2Int.one;

            wallTubeIndex = -1;

            for (playerIndex = 0; playerIndex < UserData.current.selectedVariant.players.Count; ++playerIndex)
            {
                PlayerData.ResourceData playerResData = UserData.current.GetPlayerResourceData(playerIndex);

                for (int i = 0; i < playerResData.wallTubes.Count; ++i)
                {
                    WallTubeData wallTube = playerResData.wallTubes[i];

                    if (wallTube.position.x == tileXY.x && wallTube.position.y == tileXY.y)
                    {
                        wallTubeIndex = i;
                        return(true);
                    }
                }
            }

            playerIndex = -1;
            return(false);
        }
        protected override void OnPaintTile(Vector2Int tileXY)
        {
            // Check if tile is passable
            if (!TileMapData.IsTilePassable(tileXY))
            {
                return;
            }

            // Check if area is blocked by units or structures
            if (AreUnitsOnTile(tileXY))
            {
                return;
            }

            // Remove wall or tube from tile. We are going to replace it.
            int playerIndex;
            int wallTubeIndex;

            while (GetWallTubeOnTile(tileXY, out playerIndex, out wallTubeIndex))
            {
                UserData.current.GetPlayerResourceData(playerIndex).wallTubes.RemoveAt(wallTubeIndex);
            }

            // Add game coordinates
            tileXY += Vector2Int.one;

            // Create data
            WallTubeData wallTube = new WallTubeData();

            wallTube.typeID   = GetMapIDFromName(m_SelectedButtonName);
            wallTube.position = new LOCATION(tileXY.x, tileXY.y);

            // Add wallTube to tile
            PlayerData player = UserData.current.selectedVariant.players[m_DropdownPlayer.value];

            UserData.current.GetPlayerResourceData(player).wallTubes.Add(wallTube);
            UserData.current.SetUnsaved();

            // Remove game coordinates
            tileXY -= Vector2Int.one;

            m_MapRenderer.RefreshTiles(new RectInt(tileXY.x - 1, tileXY.y - 1, 3, 3));
        }