Пример #1
0
 public void setTetrimino(BTetrisTransform tetrimino, bool val)
 {
     tetrimino.toCoordArray().ForEach(block =>
     {
         setBit((int)block.x, (int)block.y, (int)block.z, val);
     });
 }
Пример #2
0
    /// <summary>
    /// rotates this tetrimino 90 degrees to a rotationVector
    /// </summary>
    /// <param name="rotationVector">direction to rotate. use right hand screw rule. relative to tetriminoGroup</param>
    /// <returns>chainable self</returns>
    public BTetrisTransform rotate(Vector3 rotationVector)
    {
        int index = BTetrisTransform.RotationVectorToInt(rotationVector);

        this.rotate(index);
        return(this);
    }
Пример #3
0
    public BTetrisTransform updateShape()
    {
        this.children.ForEach(child =>
        {
            tetri1DotPool.DisposeAndPush(child);
        });
        this.children.Clear();

        var points = this.tetriminoConfig.toPoints(this._shapeID);

        points.ForEach(point =>
        {
            BTetrisTransform cube_go = tetri1DotPool.Pop();
            cube_go.transform.SetParent(this.transform, false);
            cube_go.position = point;

            // HACK: updates rotation here to override remaining value from pool. may have a better implementation?
            cube_go.transform.localRotation            = this.transform.localRotation;
            cube_go.transform.localScale               = Vector3.one;
            cube_go.GetComponent <Renderer>().material = this.tetriminoConfig.mySkin;
            this.children.Add(cube_go);
            cube_go.parent = this;
        });
        return(this);
    }
Пример #4
0
    /// <summary>
    /// creates a tetrimino and return its tetrimino behaviour
    /// </summary>
    /// <param name="brickName">name of the brick</param>
    /// <param name="basePrefab"></param>
    /// <param name="cube"></param>
    /// <param name="startPos">starting position</param>
    /// <returns></returns>
    public BTetrisTransform createBrick(string brickName, BTetrisTransform basePrefab, BTetrisTransform cube, Vector3 startPos)
    {
        TetriminoConfig tetriminoConfig;

        tetriminoConfigsByName.TryGetValue(brickName, out tetriminoConfig);
        return(createBrick(tetriminoConfig, basePrefab, cube, startPos));
    }
Пример #5
0
    bool canMoveWall(BTetrisTransform tetrimino, Vector3 direction)
    {
        var _constants = BGameConstants.getInstance();
        var d          = direction.normalized;
        var bound      = tetrimino.getBound();

        if (d.x > 0)
        {
            return(bound.right < _constants.width - 1);
        }
        if (d.x < 0)
        {
            return(bound.left > 0);
        }
        if (d.y > 0)
        {
            return(bound.up < _constants.height - 1);
        }
        if (d.y < 0)
        {
            return(bound.down > 1);
        }
        if (d.z > 0)
        {
            return(bound.back < _constants.depth - 1);
        }
        if (d.z < 0)
        {
            return(bound.forward > 0);
        }
        return(true);
    }
Пример #6
0
    // Use this for initialization
    void Start()
    {
        var _constants = BGameConstants.getInstance();

        this.tickInterval = _constants.startSpeed;
        StartCoroutine(tick());
        this.movingPiece = this.getNextBrick();
    }
Пример #7
0
    bool canRotate(BTetrisTransform tetrimino, TetriminoConfig.RotationType rotationType, Vector3 translation)
    {
        //if(tetrimino)
        var points = tetrimino.toCoordArray(translation, rotationType);

        return(
            points.All(point => this.field.pointInField(point)) &&
            !this.field.collides(points));
    }
Пример #8
0
    public void Dispose()
    {
        // HACK: only considering 1 level shape and 1 level dots

        // return children
        this.children.ForEach(child =>
        {
            tetri1DotPool.DisposeAndPush(child);
        });
        this.children.Clear();
        this._position        = Vector3.zero;
        this.transform.parent = null;
    }
Пример #9
0
    /// <summary>
    /// creates a tetrimino and return its tetrimino behaviour
    /// </summary>
    /// <param name="config">Config defined in BTetriminoBuilder.cs</param>
    /// <param name="basePrefab"></param>
    /// <param name="cube"></param>
    /// <param name="startPos">starting position</param>
    /// <returns></returns>
    public BTetrisTransform createBrick(TetriminoConfig config, BTetrisTransform basePrefab, BTetrisTransform cube, Vector3 startPos)
    {
        BTetrisTransform result = MonoBehaviour.Instantiate(basePrefab.gameObject).GetComponent <BTetrisTransform>();

        result.cubePrefab      = this.cubePrefab;
        result.tetriminoConfig = config;
        result.setRotation(0);
        result.name = "Tetrimino " + config.name;
        result.transform.SetParent(this.nextGroup, false);
        result.position = startPos - config.center;

        this.nextGroup = this.tetriminoGroup;
        return(result);
    }
Пример #10
0
    protected virtual IEnumerator tick()
    {
        while (true)
        {
            if (this.movingPiece)
            {
                // if reach bottom
                //print(this.movingPiece.position.y);
                //print(this.movingPiece.most(new Vector3(0, -1, 0)));
                if (this.movingPiece.position.y - this.movingPiece.most(new Vector3(0, -1, 0)) == 0)
                {
                    field.setTetrimino(this.movingPiece, true);
                    Destroy(this.movingPiece.gameObject);
                    this.movingPiece = getNextBrick();
                }
                // if cannot move down
                else
                {
                    if (!this.canMoveAgainstField(this.movingPiece, new Vector3(0, -1, 0)))
                    {
                        field.setTetrimino(this.movingPiece, true);
                        Destroy(this.movingPiece.gameObject);
                        this.movingPiece = getNextBrick();
                    }
                    else
                    {
                        // move freely
                        this.movingPiece.move(new Vector3(0, -1, 0));
                    }
                }
            }

            var fullLevels = this.field.getFullLevels();
            if (fullLevels.Count > 0)
            {
                this.field.clearLines(fullLevels);
            }

            yield return(new WaitForSeconds(this.tickInterval));
        }
    }
Пример #11
0
 public BTetri1DotPool DisposeAndPush(BTetrisTransform inst)
 {
     inst.Dispose();
     instances.Push(inst);
     return(this);
 }
Пример #12
0
 public BTetri1DotPool Push(BTetrisTransform inst)
 {
     inst.gameObject.SetActive(false);
     instances.Push(inst);
     return(this);
 }
Пример #13
0
 public bool collides(BTetrisTransform tetrimino)
 {
     return(this.collides(tetrimino.toCoordArray()));
 }
Пример #14
0
 bool canMoveAgainstField(BTetrisTransform tetrimino, Vector3 direction)
 {
     return(this.field.collides(
                tetrimino.toCoordArray().Select(point => point + direction).ToList()
                ) == false);
 }