public static Tetromino createTetromino(GameField field) { Tetromino newTetromino = TetrominoControls.ttm_create_new(field); TetrominoControls.bn_map_forEachTrue(GraphicDefs.blk_draw, newTetromino); return(newTetromino); }
public static void bn_map_forEachTrue(Action <BlockGroup, int, int> fn, BlockGroup blkG, List <string> bin = null) { if (bin == null) { bin = TetrominoControls.mapTetromino(blkG.GetPiece()); } bool read_row(int curr) { if (curr < bin.Count) { return(read_col(bin[curr], curr, 0)); } return(true); } bool read_col(string s, int r, int curr) //read all columns of a row { if (curr < s.Length) { if (s[curr] == '1') { fn(blkG, curr, r); } return(read_col(s, r, curr + 1)); } return(read_row(r + 1)); } read_row(0); }
void Start() { field = createField(new GameField((10, 20), gamePanel)); hold = createField(new GameField((5, 4), holdPanel)); next = createField(new GameField((5, 4), nextPanel)); nextTetromino = TetrominoControls.createTetromino(next); score = scoreCounter; score.text = 0.ToString(); }
public static Tetromino cloneTetromino(Tetromino ttm, GameField field) { if (ttm == null) { return(null); } Tetromino clone = TetrominoControls.ttm_create_copy(ttm, field); TetrominoControls.bn_map_forEachTrue(GraphicDefs.blk_draw, clone); return(clone); }
public static void CreateGhost(Tetromino ttm) { if (ttm.ghost != null) { blockControl.blk_cnj_clear(ttm.ghost.GetBlocks()); } Ghost ghost = new Ghost(ttm); TetrominoControls.bn_map_forEachTrue(GraphicDefs.blk_drawGhost, ghost, TetrominoControls.mapTetromino(ttm.GetPiece())); TetrominoControls.fitPiece(ghost, ghost.GetField()); ttm.ghost = ghost; }
void Update() { if (currentTetromino == null) //the tetromino is never generated on its own, it is cloned from the next tetromino { StopAllCoroutines(); currentTetromino = TetrominoControls.cloneTetromino(nextTetromino, field); TetrominoControls.CreateGhost(currentTetromino); blockControl.blk_cnj_clear(nextTetromino.GetBlocks()); nextTetromino = TetrominoControls.createTetromino(next); StartCoroutine(goDown()); changeColor(currentTetromino.GetBlocks()); } if (Input.GetKeyDown("d")) // Moves to the right { if (blockControl.blk_cnj_foreach(blockControl.blk_solo_checkRight, currentTetromino.GetBlocks(), 0)) { blockControl.blk_cnj_foreach(blockControl.blk_solo_moveRight, currentTetromino.GetBlocks(), 0); currentTetromino.SetLocation(new Vector2Int(1, 0)); TetrominoControls.CreateGhost(currentTetromino); } } if (Input.GetKeyDown("a"))// Moves to the left { if (blockControl.blk_cnj_foreach(blockControl.blk_solo_checkLeft, currentTetromino.GetBlocks(), 0)) { blockControl.blk_cnj_foreach(blockControl.blk_solo_moveLeft, currentTetromino.GetBlocks(), 0); currentTetromino.SetLocation(new Vector2Int(-1, 0)); TetrominoControls.CreateGhost(currentTetromino); } } if (Input.GetKeyDown("s"))// Moves Down { if (currentTetromino != null) { StopAllCoroutines(); tick = 0.05f; StartCoroutine(goDown()); } } if (Input.GetKeyUp("s"))// Moves Down { StopAllCoroutines(); tick = 1f; StartCoroutine(goDown()); } if (Input.GetKeyDown("w")) { rotation(); TetrominoControls.CreateGhost(currentTetromino); } if (Input.GetKeyDown("f")) { TetrominoControls.fitPiece(currentTetromino, currentTetromino.GetField()); UiControl.scr_add(score, 36); checkDown(currentTetromino); } if (Input.GetKeyDown("c") && recentlyChanged == false) { Tetromino cloneAux = null; if (holdTetromino != null) { cloneAux = holdTetromino; blockControl.blk_cnj_clear(holdTetromino.GetBlocks()); } holdTetromino = TetrominoControls.cloneTetromino(currentTetromino, hold); blockControl.blk_cnj_clear(currentTetromino.GetBlocks()); blockControl.blk_cnj_clear(currentTetromino.GetGhost().GetBlocks()); currentTetromino = TetrominoControls.cloneTetromino(cloneAux, field); TetrominoControls.CreateGhost(currentTetromino); recentlyChanged = true; } }