aboutsummaryrefslogtreecommitdiff
path: root/src/games/tetris/Tetromino.cpp
diff options
context:
space:
mode:
authorfschildt <florian.schildt@protonmail.com>2025-10-09 16:13:28 +0200
committerfschildt <florian.schildt@protonmail.com>2025-10-09 16:13:28 +0200
commit6f3590341312b0ffff2304d02b24ac6a5d14b182 (patch)
tree40a6f66ea548377f0114af29cc17a8692e83a141 /src/games/tetris/Tetromino.cpp
parent606d028dac5118329e7561af33b15988db84465f (diff)
tetris: optimize next tetromino, fix first count
Diffstat (limited to 'src/games/tetris/Tetromino.cpp')
-rw-r--r--src/games/tetris/Tetromino.cpp42
1 files changed, 20 insertions, 22 deletions
diff --git a/src/games/tetris/Tetromino.cpp b/src/games/tetris/Tetromino.cpp
index 97c8808..2cde231 100644
--- a/src/games/tetris/Tetromino.cpp
+++ b/src/games/tetris/Tetromino.cpp
@@ -2,7 +2,6 @@
#include <renderer/Renderer.hpp>
#include <random>
-#include <cstdlib>
// layout of a left_aligned_bitmap: xxxx000000000000
// layout of a board_bitmap is 111xxxxxxxxxx111
@@ -58,26 +57,30 @@ static const uint16_t s_left_aligned_bitmaps[7][4][4] = {
}
};
+Tetromino::Tetromino(uint16_t* board_bitmap)
+ : m_board_bitmap{board_bitmap}
+{
+}
-Tetromino::TetrominoId Tetromino::GetRandomId()
+Tetromino::Id
+Tetromino::GenerateRandomId()
{
- 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));
+ static std::uniform_int_distribution<int> s_dist(0, id_count-1);
+ static std::mt19937 s_rng((std::random_device()()));
+ Id id = static_cast<Id>(s_dist(s_rng));
return id;
}
void
-Tetromino::Reinit(uint16_t* board_bitmap)
+Tetromino::Reset(Id id)
{
- m_id = GetRandomId();
+ m_id = id;
m_pos = {6, 20};
m_ori = {0};
- m_board_bitmap = board_bitmap;
}
-Tetromino::TetrominoId
+Tetromino::Id
Tetromino::GetId()
{
return m_id;
@@ -103,7 +106,7 @@ Tetromino::IsCollisionWithBoard()
}
void
-Tetromino::MaybeRotate(TetrominoRotation rotation)
+Tetromino::MaybeRotate(Rotation rotation)
{
int32_t ori = (m_ori + rotation) % 4;
if (!IsCollisionWithBoard(m_id, m_pos, ori, m_board_bitmap)) {
@@ -112,7 +115,7 @@ Tetromino::MaybeRotate(TetrominoRotation rotation)
}
void
-Tetromino::MaybeMoveHorizontally(TetrominoDirection direction)
+Tetromino::MaybeMoveHorizontally(Direction direction)
{
BoardPos pos = m_pos;
pos.x += static_cast<int32_t>(direction);
@@ -152,7 +155,7 @@ Tetromino::Draw()
}
bool
-Tetromino::IsCollisionWithBoard(TetrominoId id, BoardPos pos, int32_t ori, uint16_t *board_bitmap)
+Tetromino::IsCollisionWithBoard(Id id, BoardPos pos, int32_t ori, uint16_t *board_bitmap)
{
uint16_t tetromino_bitmap[16];
GetBitmap(id, pos, ori, tetromino_bitmap);
@@ -164,19 +167,16 @@ Tetromino::IsCollisionWithBoard(TetrominoId id, BoardPos pos, int32_t ori, uint1
}
void
-Tetromino::GetBitmap(TetrominoId id, BoardPos pos, int32_t ori, uint16_t *bitmap)
+Tetromino::GetBitmap(Id 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 *src = (uint64_t*)s_left_aligned_bitmaps[id][ori];
uint64_t *dest = (uint64_t*)bitmap;
*dest = *src >> pos.x;
}
Color
-Tetromino::GetColor(TetrominoId id)
+Tetromino::GetColor(Id id)
{
- using enum TetrominoId;
-
Color color;
switch (id) {
@@ -200,16 +200,14 @@ Tetromino::GetColor(TetrominoId id)
}
void
-Tetromino::Draw(TetrominoId id, int32_t ori, V2F32 pos, float scale)
+Tetromino::Draw(Id id, int32_t ori, V2F32 pos, float scale)
{
- int32_t id_ = static_cast<int32_t>(id);
-
float world_height = 3.0f;
float tetromino_size_with_border = scale * world_height / 20.0f;
float tetromino_size = 0.8f * tetromino_size_with_border;
float tetromino_offset = 0.1f * tetromino_size_with_border;
- uint16_t *left_aligned_bitmap = (uint16_t*)s_left_aligned_bitmaps[id_][ori];
+ uint16_t *left_aligned_bitmap = (uint16_t*)s_left_aligned_bitmaps[id][ori];
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
if (left_aligned_bitmap[y] & (0x8000 >> x)) {