private void placeBricks(Vector3 origin, Direction direction, int gridLimit, int steps = 3)
    {
        if (steps <= 0)
        {
            return;
        }
        setPreviewFromTemplate(prefabs[count++ % prefabs.Length], origin);
        Lego script = lego.gameObject.GetComponent <Lego>();

        script.setPosition(origin);
        script.rotate(true);
        rotateBrickByDirection(direction, script);
        int tries = 0;

        Vector3 from = origin;

        while (script.placeSolid() && tries < gridLimit)
        {
            from = from + (toVector(direction) * script.getCubeGridCellWith() * script.getLengthCount() * randomizeLength());

            if (tryIf(0.2f))
            {
                placeBricks(from, randomFrom2(rightAngle(direction), leftAngle(direction), 7f), gridLimit, steps - 1);
            }

            if (tryIf(0.18f) || outsideMap(from))
            {
                return;
            }
            script = swapBrickMaybe(0.4f, from, direction, script);
            tries++;
        }
    }
    protected void placeBrick()
    {
        if (ButtonsManager.getAmount() < script.getValue())
        {
            ButtonsManager.flash();
            return;
        }

        timeout = 0.5f;
        if (script.placeSolid())
        {
            lego.transform.position += Vector3.up * script.getHeight();
            ButtonsManager.spend(script.getValue());
        }
    }