-
Notifications
You must be signed in to change notification settings - Fork 0
/
block.cpp
67 lines (55 loc) · 1.64 KB
/
block.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "block.h"
Block::Block()
{
colors = { GetCellColors() };
rotationState = { 0 };
offsets[0] = { Position(0,0), Position(0,0), Position(0, 0), Position(0,0), Position(0,0) };
offsets[1] = { Position(0,0), Position(0,-1), Position(-1,-1), Position(2,0), Position(2,-1) };
offsets[2] = { Position(0,0), Position(0,0), Position(0, 0), Position(0,0), Position(0,0) };
offsets[3] = { Position(0,0), Position(0,1), Position(-1,1), Position(2,0), Position(2,1) };
}
void Block::Draw() {
std::vector<Position> tiles = GetCellPosition();
for (const Position& tilePosition : tiles) {
DrawRectangle(tilePosition.column * CELL_SIZE + GRID_OFFSET, tilePosition.row * CELL_SIZE + GRID_OFFSET,
CELL_SIZE - GRID_OFFSET, CELL_SIZE - GRID_OFFSET, colors[static_cast<unsigned int>(id)]);
}
}
void Block::Move(int row, int column)
{
rowOffset += row;
columnOffset += column;
}
void Block::UndoMove(int row, int column)
{
rowOffset -= row;
columnOffset -= column;
}
std::vector<Position> Block::GetCellPosition() // Gets current position of block
{
// Denotes how far the block moved from its initial position
std::vector<Position> movedTiles{};
// New Position
for (const Position& tilePosition : cells[rotationState])
{
Position newPosition = Position(tilePosition.row + rowOffset, tilePosition.column + columnOffset);
movedTiles.push_back(newPosition);
}
return movedTiles;
}
void Block::ResetPosition() // Occurs when block is held
{
rotationState = 0;
// Move the current block back to its initial position
switch (id)
{
case 1:
rowOffset = 0;
columnOffset = 2;
break;
default:
rowOffset = 1;
columnOffset = 3;
break;
}
}