public BlockUnit GetEntryBlock(Vector3 crossingPos, GameDefine.Direction dir, bool correctRoad, bool onRoad)
    {
        Vector3 blockPos = crossingPos;

        blockPos  += BlockOffset[(int)dir];
        blockPos.y = onRoad ?  correctRoad ? 2.6f : 2.4f : -3.0f;

        BlockUnit unit = GetEntryBlock(correctRoad);

        unit.transform.position = blockPos;
        unit.SetVisible(true);
        unit.crossingPos = crossingPos;
        unit.direction   = dir;
        unit.color       = correctRoad;

        if (!correctRoad)
        {
            // TODO: Refactor, put scaling logic in ObsBlock
            if (dir != GameDefine.Direction.Forward)
            {
                unit.transform.localScale = new Vector3(width, tall, size);
            }
            else
            {
                unit.transform.localScale = new Vector3(size, tall, width);
            }
        }

        return(unit);
    }
    public BlockUnit GetExtraBlock(Vector3 crossingPos, GameDefine.Direction dir)
    {
        // Currently, diamond is the only extra block available
        Vector3 blockPos = crossingPos;

        blockPos  += BlockOffset[(int)dir] * 1.5f;
        blockPos.y = 2.6f;

        BlockUnit unit = Instantiate(diamondPrefab).GetComponent <BlockUnit>();

        unit.transform.position = blockPos;
        unit.SetVisible(true);
        unit.crossingPos = crossingPos;
        unit.direction   = dir;

        return(unit);
    }
    private void OnTriggerEnter(Collider other)
    {
        // Boom effect
        Transform boomTrans = transform;

        boomTrans.eulerAngles =
            unit.direction == GameDefine.Direction.Forward ? Vector3.zero :
            unit.direction == GameDefine.Direction.Left ? new Vector3(0, 90f, 0) : new Vector3(0, -90f, 0);
        MainObjControl.Instant.boomCtrl.ShowBoom(boomTrans);
        unit.SetVisible(false);

        // Increment score
        if (blockType == BlockType.Bonus || player.smashing)
        {
            MainCanvas.Instance.inGameScript.IncrScore();
        }
        else
        {
            // TODO: GameOver
            MainCanvas.Instance.lostScript.GameOver();
        }

        if (doExtendRoad)
        {
            // Create future path
            MainObjControl.Instant.roadCtrl.ExtendPath(unit.road, 2);

            // TODO: Is recollection necessary?
            MainObjControl.Instant.blockCtrl.FreeBlock(unit);

            player.levelCounter += 1;
            if (player.levelCounter == 10)
            {
                player.levelUp();
            }
        }
    }