private void Update()
    {
        //tiles start to generate some time before music starts playing and finish generating sometime before music
        if (gameIsPlaying)
        {
            if (!isCurrentTileDequeued)
            {
                if (tileQueue.Count == 0 && createdTiles.Count == 0)
                {
                    ResetGame();
                    ChangeTileMode();
                    InitializeGame();
                }
                else
                {
                    currentTileInfo       = tileQueue.Dequeue();
                    isCurrentTileDequeued = true;
                }
            }

            if (currentTileInfo.tileTimePosStart <= timeTracked && areTilesMoving)
            {
                if (currentTileInfo.tile.tileType == TileBaseContainer.TileType.TAP_TILE)
                {
                    currentTile = Instantiate(tapTilePrefab, GetRandomLane(), Quaternion.identity);
                    createdTiles.Add(currentTile);
                }
                else if (currentTileInfo.tile.tileType == TileBaseContainer.TileType.SLIDE_TILE)
                {
                    currentTile = Instantiate(slideTilePrefab, GetRandomLane(), Quaternion.identity);
                    createdTiles.Add(currentTile);
                }

                TileBase tileBase = currentTile.GetComponent <TileBase>();

                tileBase.GetTileMapDataFromMap(currentTileInfo.tile);
                //lastTile = tileBase;

                if (currentTileInfo.tile.tileType == TileBaseContainer.TileType.SLIDE_TILE)
                {
                    currentTile.transform.localScale = new Vector3
                    {
                        x = currentTile.transform.localScale.x,
                        y = tileBase.tileYSize / 10,
                        z = 1
                    };
                }

                currentTile.transform.position = new Vector3
                {
                    x = currentTile.transform.position.x,
                    y = currentTile.transform.position.y + tileBase.tileYSize / 2,
                    z = -2
                };

                isCurrentTileDequeued = false;
            }
        }
    }
    private void SceneGUI(SceneView sceneView)
    {
        // This will have scene events including mouse down on scenes objects
        Event guiEvent = Event.current;

        if (isTileCreationOn)
        {
            DrawCreatorUI();

            Ray mouseRay = HandleUtility.GUIPointToWorldRay(guiEvent.mousePosition);

            float   drawPlaneHeight = 0;
            float   dstToDrawPlane  = (drawPlaneHeight - mouseRay.origin.z) / mouseRay.direction.z;
            Vector3 mousePosition   = mouseRay.GetPoint(dstToDrawPlane);

            if (guiEvent.type == EventType.MouseDown && guiEvent.button == 0)
            {
                Debug.Log(switchTile);
                AddTileToSequence(mousePosition.y);
            }

            if (guiEvent.keyCode == KeyCode.K)
            {
                window.Close();
                isTileCreationOn = false;
            }
        }

        void AddTileToSequence(float mouseYPos)
        {
            Vector3 placePos = new Vector3
            {
                x = 0.5f,
                y = lastYPos,
                z = 0
            };

            //Tile info to fill in to the list
            TileMapData.TileInfo tileInfo = new TileMapData.TileInfo();
            TileBaseContainer    tile;
            float tileYOrigin;

            Debug.Log(isDoubleTapTile);

            float      slideTileSize;
            GameObject instantiatedTile;

            Debug.Log(switchTile);

            switch (switchTile)
            {
            case switchTileEnum.SLIDE_TILE:
                //calculate the size
                slideTileSize = (float)(Math.Round(Convert.ToDouble(mouseYPos), 2)) - lastYPos;
                tileYOrigin   = lastYPos;
                lastYPos     += slideTileSize;
                placePos.y   += slideTileSize / 2;

                Debug.Log(slideTilePrefab);

                instantiatedTile = Instantiate(slideTilePrefab, placePos, Quaternion.identity);
                lastTile         = instantiatedTile;

                instantiatedTile.transform.localScale = new Vector3
                {
                    x = instantiatedTile.transform.localScale.x,
                    y = slideTileSize / 10,
                    z = 1
                };

                tile = new TileBaseContainer();

                tile.tileType    = TileBaseContainer.TileType.SLIDE_TILE;
                tile.yAxisOrigin = tileYOrigin;
                tile.yAxisEnd    = lastYPos;
                tile.tileYSize   = slideTileSize;

                tileInfo.tile = tile;
                //I probably need to do some calculations here idfk how
                tileInfo.tileTimePosStart = tileYOrigin - tileLaneOrigin;
                break;

            case switchTileEnum.TAP_TILE:
                tileYOrigin = lastYPos;
                lastYPos   += TapTile.tileYSize;
                placePos.y += TapTile.tileYSize / 2;

                lastTile = Instantiate(tapTilePrefab, placePos, Quaternion.identity);

                tile             = new TileBaseContainer();
                tile.tileType    = TileBaseContainer.TileType.TAP_TILE;
                tile.yAxisOrigin = tileYOrigin;
                tile.yAxisEnd    = lastYPos;
                tile.tileYSize   = TapTile.tileYSize;

                tileInfo.tile = tile;
                //I probably need to do some calculations here idfk howd
                tileInfo.tileTimePosStart = tileYOrigin - tileLaneOrigin;
                break;

            case switchTileEnum.DOUBLE_TAP_TILE:
                tileYOrigin = lastYPos;
                lastYPos   += TapTile.tileYSize;
                placePos.y += TapTile.tileYSize / 2;

                lastTile = Instantiate(tapTilePrefab, placePos, Quaternion.identity);

                tile             = new TileBaseContainer();
                tile.tileType    = TileBaseContainer.TileType.TAP_TILE;
                tile.yAxisOrigin = tileYOrigin;
                tile.yAxisEnd    = lastYPos;
                tile.tileYSize   = TapTile.tileYSize;

                tileInfo.tile = tile;
                //I probably need to do some calculations here idfk howd
                tileInfo.tileTimePosStart = tileYOrigin - tileLaneOrigin;
                break;

            case switchTileEnum.DOUBLE_SLIDE_TILE:
                Debug.Log("Does this shit actually work?");
                //calculate the size
                slideTileSize = (float)(Math.Round(Convert.ToDouble(mouseYPos), 2)) - lastYPos;
                tileYOrigin   = lastYPos;
                lastYPos     += slideTileSize;
                placePos.y   += slideTileSize / 2;

                Debug.Log(slideTilePrefab);

                instantiatedTile = Instantiate(slideTilePrefab, placePos, Quaternion.identity);
                lastTile         = instantiatedTile;

                instantiatedTile.transform.localScale = new Vector3
                {
                    x = instantiatedTile.transform.localScale.x,
                    y = slideTileSize / 10,
                    z = 1
                };

                tile = new TileBaseContainer();

                tile.tileType    = TileBaseContainer.TileType.SLIDE_TILE;
                tile.yAxisOrigin = tileYOrigin;
                tile.yAxisEnd    = lastYPos;
                tile.tileYSize   = slideTileSize;

                tileInfo.tile = tile;
                //I probably need to do some calculations here idfk how
                tileInfo.tileTimePosStart = tileYOrigin - tileLaneOrigin;
                break;

            default:
                break;
            }

            tileMapData.tileSequence.Add(tileInfo);
        }

        void DrawCreatorUI()
        {
            Debug.DrawLine(startingLineOrigin, startingLineTo, Color.red);
        }
    }