public void setTetrimino(BTetrisTransform tetrimino, bool val) { tetrimino.toCoordArray().ForEach(block => { setBit((int)block.x, (int)block.y, (int)block.z, val); }); }
/// <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); }
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); }
/// <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)); }
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); }
// Use this for initialization void Start() { var _constants = BGameConstants.getInstance(); this.tickInterval = _constants.startSpeed; StartCoroutine(tick()); this.movingPiece = this.getNextBrick(); }
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)); }
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; }
/// <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); }
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)); } }
public BTetri1DotPool DisposeAndPush(BTetrisTransform inst) { inst.Dispose(); instances.Push(inst); return(this); }
public BTetri1DotPool Push(BTetrisTransform inst) { inst.gameObject.SetActive(false); instances.Push(inst); return(this); }
public bool collides(BTetrisTransform tetrimino) { return(this.collides(tetrimino.toCoordArray())); }
bool canMoveAgainstField(BTetrisTransform tetrimino, Vector3 direction) { return(this.field.collides( tetrimino.toCoordArray().Select(point => point + direction).ToList() ) == false); }