public void Init() { blocks = new Block[Data.Columns * Data.Rows]; time = 0.0f; oldTime = Time.time; player = MonoBehaviour.FindObjectOfType <Player>(); // Tetriminoの生成 current = CreateTetrimino(); next = CreateTetrimino(); // 各Tetriminoの初期化 current.Launch(); next.Standby(); player.OnRotated = (dir) => { if (current == null) { return; } current.Rotate(dir); }; player.OnTranslated = (dir) => { if (current == null) { return; } current.Translate(dir); }; player.OnWarped = () => { if (current == null) { return; } current.Warp(); }; }
private void Next() { var bitboard = StoreManager.Instance.BoardStore.BitBoard; var typeboard = StoreManager.Instance.BoardStore.TypeBoard; // 置かれたBlockのビットを立てる foreach (var block in current.Blocks) { TetrisBitBoard.SetPositionFlag(ref bitboard, block); TetrisBitBoard.SetTypeFlag(ref typeboard, block); // 置いたブロックを保存 blocks[block.Position.y * Data.Columns + block.Position.x] = block; } var removeRow = TetrisBitBoard.CheckLine(bitboard, typeboard); // Lineの更新 UpdateScoreAndLine(removeRow.Count); // ブロックの状態を更新 UpdateView(removeRow); // ゲームが終了したか判定 if (IsFinished(bitboard)) { current = next = null; OnFinished(); return; } // 現在,次のテトリミノの更新 current = next; next = CreateTetrimino(); // 現在の状態を保存 TetrisBitBoard.SaveCurrentData(current, next, bitboard, typeboard); // 次の操作へ current.Launch(); next.Standby(); }