aboutsummaryrefslogtreecommitdiff
path: root/src/games/tetris/Tetromino.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/games/tetris/Tetromino.cpp')
-rw-r--r--src/games/tetris/Tetromino.cpp100
1 files changed, 61 insertions, 39 deletions
diff --git a/src/games/tetris/Tetromino.cpp b/src/games/tetris/Tetromino.cpp
index 9179d6d..97c8808 100644
--- a/src/games/tetris/Tetromino.cpp
+++ b/src/games/tetris/Tetromino.cpp
@@ -59,85 +59,101 @@ static const uint16_t s_left_aligned_bitmaps[7][4][4] = {
};
-Tetromino::TetrominoId Tetromino::GetRandomId() {
- static std::uniform_int_distribution<int> s_Dist(0, tetromino_id_count-1);
+Tetromino::TetrominoId Tetromino::GetRandomId()
+{
+ static std::uniform_int_distribution<int> s_Dist(0, id_count-1);
static std::mt19937 s_Rng((std::random_device()()));
TetrominoId id = static_cast<TetrominoId>(s_Dist(s_Rng));
return id;
}
-Tetromino::Tetromino(uint16_t *board_bitmap) :
- m_Id(GetRandomId()),
- m_Pos{6, 20},
- m_Ori{0},
- m_BoardBitmap(board_bitmap)
-{
-}
-Tetromino::Tetromino(Board &board) :
- Tetromino(board.m_Bitmap)
+void
+Tetromino::Reinit(uint16_t* board_bitmap)
{
+ m_id = GetRandomId();
+ m_pos = {6, 20};
+ m_ori = {0};
+ m_board_bitmap = board_bitmap;
}
-Tetromino::TetrominoId Tetromino::GetId() {
- return m_Id;
+Tetromino::TetrominoId
+Tetromino::GetId()
+{
+ return m_id;
}
-BoardPos Tetromino::GetPos() {
- return m_Pos;
+BoardPos
+Tetromino::GetPos()
+{
+ return m_pos;
}
-void Tetromino::GetBitmap(uint16_t *bitmap) {
- GetBitmap(m_Id, m_Pos, m_Ori, bitmap);
+void
+Tetromino::GetBitmap(uint16_t* bitmap)
+{
+ GetBitmap(m_id, m_pos, m_ori, bitmap);
}
-bool Tetromino::IsCollisionWithBoard() {
- bool is_collision = IsCollisionWithBoard(m_Id, m_Pos, m_Ori, m_BoardBitmap);
+bool
+Tetromino::IsCollisionWithBoard()
+{
+ bool is_collision = IsCollisionWithBoard(m_id, m_pos, m_ori, m_board_bitmap);
return is_collision;
}
-void Tetromino::MaybeRotate(TetrominoRotation rotation) {
- int32_t ori = (m_Ori + rotation) % 4;
- if (!IsCollisionWithBoard(m_Id, m_Pos, ori, m_BoardBitmap)) {
- m_Ori = ori;
+void
+Tetromino::MaybeRotate(TetrominoRotation rotation)
+{
+ int32_t ori = (m_ori + rotation) % 4;
+ if (!IsCollisionWithBoard(m_id, m_pos, ori, m_board_bitmap)) {
+ m_ori = ori;
}
}
-void Tetromino::MaybeMoveHorizontally(TetrominoDirection direction) {
- BoardPos pos = m_Pos;
+void
+Tetromino::MaybeMoveHorizontally(TetrominoDirection direction)
+{
+ BoardPos pos = m_pos;
pos.x += static_cast<int32_t>(direction);
- if (!IsCollisionWithBoard(m_Id, pos, m_Ori, m_BoardBitmap)) {
- m_Pos.x = pos.x;
+ if (!IsCollisionWithBoard(m_id, pos, m_ori, m_board_bitmap)) {
+ m_pos.x = pos.x;
}
}
-bool Tetromino::MaybeMoveDown() {
- BoardPos pos = m_Pos;
+bool
+Tetromino::MaybeMoveDown()
+{
+ BoardPos pos = m_pos;
pos.y -= 1;
- if (!IsCollisionWithBoard(m_Id, pos, m_Ori, m_BoardBitmap)) {
- m_Pos.y = pos.y;
+ if (!IsCollisionWithBoard(m_id, pos, m_ori, m_board_bitmap)) {
+ m_pos.y = pos.y;
return true;
}
return false;
}
-void Tetromino::Draw() const {
+void
+Tetromino::Draw()
+{
float world_width = 4.0f;
float world_height = 3.0f;
float tetromino_size_with_border = world_height / 20.0f;
- float x0 = static_cast<float>(m_Pos.x - 3);
- float y0 = static_cast<float>(m_Pos.y - 2);
+ float x0 = static_cast<float>(m_pos.x - 3);
+ float y0 = static_cast<float>(m_pos.y - 2);
V2F32 world_pos = {
((world_width - tetromino_size_with_border*10) / 2.0f) + x0 * tetromino_size_with_border,
y0 * tetromino_size_with_border
};
- Tetromino::Draw(m_Id, m_Ori, world_pos, 1.0f);
+ Tetromino::Draw(m_id, m_ori, world_pos, 1.0f);
}
-bool Tetromino::IsCollisionWithBoard(TetrominoId id, BoardPos pos, int32_t ori, uint16_t *board_bitmap) {
+bool
+Tetromino::IsCollisionWithBoard(TetrominoId id, BoardPos pos, int32_t ori, uint16_t *board_bitmap)
+{
uint16_t tetromino_bitmap[16];
GetBitmap(id, pos, ori, tetromino_bitmap);
@@ -147,14 +163,18 @@ bool Tetromino::IsCollisionWithBoard(TetrominoId id, BoardPos pos, int32_t ori,
return is_collision;
}
-void Tetromino::GetBitmap(TetrominoId id, BoardPos pos, int32_t ori, uint16_t *bitmap) {
+void
+Tetromino::GetBitmap(TetrominoId id, BoardPos pos, int32_t ori, uint16_t *bitmap)
+{
size_t id_ = static_cast<size_t>(id);
uint64_t *src = (uint64_t*)s_left_aligned_bitmaps[id_][ori];
uint64_t *dest = (uint64_t*)bitmap;
*dest = *src >> pos.x;
}
-Color Tetromino::GetColor(TetrominoId id) {
+Color
+Tetromino::GetColor(TetrominoId id)
+{
using enum TetrominoId;
Color color;
@@ -179,7 +199,9 @@ Color Tetromino::GetColor(TetrominoId id) {
return color;
}
-void Tetromino::Draw(TetrominoId id, int32_t ori, V2F32 pos, float scale) {
+void
+Tetromino::Draw(TetrominoId id, int32_t ori, V2F32 pos, float scale)
+{
int32_t id_ = static_cast<int32_t>(id);
float world_height = 3.0f;