-
Notifications
You must be signed in to change notification settings - Fork 1
/
paddle.ino
58 lines (54 loc) · 1.37 KB
/
paddle.ino
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
static paddle paddleObj;
static paddle *paddlePtr = &paddleObj;
void initPaddle() {
paddlePtr -> x = INIT_PADDLE_X;
paddlePtr -> y = PADDLE_Y;
paddlePtr -> dir = 0;
}
void drawPaddle() {
setPaddleDir(getMotionDir());
int dir = paddlePtr -> dir;
if(dir) {
showPaddle(false);
paddlePtr -> x += (dir * PADDLE_SPEED);
}
showPaddle(true);
}
void showPaddle(boolean makeVisible) {
// show or hide paddle
int pattern;
if(makeVisible) {
pattern = iptnSolid;
}
else {
pattern = iptnBlank;
}
OrbitOledSetFillPattern(OrbitOledGetStdPattern(pattern));
// draw rectangle from "fromX" and "fromY" to "toX" and "toY"
int fromY = paddlePtr -> y;
int fromX;
if(paddlePtr -> x < 0) {
fromX = (paddlePtr -> x % -OLED_HEIGHT) + OLED_HEIGHT - 1;
}
else {
fromX = paddlePtr -> x % OLED_HEIGHT;
}
OrbitOledMoveTo(fromY, fromX);
int toY = fromY - PADDLE_HEIGHT + 1;
int toX = fromX + PADDLE_WIDTH - 1;
// wrap paddle to other side of screen
if(toX >= OLED_HEIGHT) {
OrbitOledFillRect(toY, OLED_HEIGHT - 1);
OrbitOledMoveTo(fromY, 0);
OrbitOledFillRect(toY, toX % OLED_HEIGHT);
}
else {
OrbitOledFillRect(toY, toX);
}
}
void setPaddleDir(int dir) {
paddlePtr -> dir = dir;
}
paddle *getPaddlePtr() {
return paddlePtr;
}