#pragma once #include #include #include class Tetromino { public: enum TetrominoId : uint8_t { o_piece, s_piece, z_piece, t_piece, l_piece, j_piece, i_piece, id_count, id_none, }; enum TetrominoRotation { rotate_clockwise = 1, rotate_counter_clockwise = 3 }; enum TetrominoDirection { left = -1, right = 1 }; public: void Reinit(uint16_t* board_bitmap); TetrominoId GetId(); BoardPos GetPos(); int32_t GetOri(); void GetBitmap(uint16_t *bitmap); bool IsCollisionWithBoard(); bool MaybeMoveDown(); void MaybeMoveHorizontally(TetrominoDirection direction); void MaybeRotate(TetrominoRotation rotation); void Draw(); public: static bool IsCollisionWithBoard(TetrominoId id, BoardPos pos, int32_t ori, uint16_t *board_bitmap); static void GetBitmap(TetrominoId id, BoardPos pos, int32_t ori, uint16_t *bitmap); static Color GetColor(TetrominoId id); static void Draw(TetrominoId id, int32_t ori, V2F32 pos, float scale); private: static TetrominoId GetRandomId(); private: TetrominoId m_id; BoardPos m_pos; int32_t m_ori; uint16_t *m_board_bitmap; };