-
Notifications
You must be signed in to change notification settings - Fork 0
/
Pipes.cpp
89 lines (74 loc) · 1.62 KB
/
Pipes.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include "Pipes.h"
Pipe::Pipe()
{
pos = 0;
}
bool Pipe::loadImage(string path, SDL_Renderer* ren)
{
bool load = Object::loadImage(path, ren);
return load;
}
void Pipe::render(SDL_Renderer* ren, int pos)
{
rect.x = pos;
Object::render(ren, NULL);
}
void Pipe::setPos(int ypos)
{
pos = ypos;
}
Pipe::~Pipe()
{
free();
}
PipePair::PipePair()
{
upperPipe.setPos(0);
lowerPipe.setPos(0);
posX = 0;
offset = 0;
}
bool PipePair::spawnPipes(SDL_Renderer* ren)
{
bool load1 = upperPipe.loadImage("image/UpperPipe.png", ren);
bool load2 = lowerPipe.loadImage("image/LowerPipe.png", ren);
lowerPipe.setPos(rand()%210 +(SCREEN_HEIGHT - PIPE_HEIGHT));
cout << "Pipes' initial position: " << lowerPipe.getPos() << endl;
upperPipe.setPos(lowerPipe.getPos() - 450);
lowerPipe.setRect(posX, lowerPipe.getPos());
upperPipe.setRect(posX, upperPipe.getPos());
return(load1 && load2);
}
void PipePair::render(SDL_Renderer* ren)
{
lowerPipe.render(ren, posX);
upperPipe.render(ren, posX);
}
void PipePair::roll(SDL_Renderer* ren)
{
offset -= 5;
posX = offset;
if(posX + PIPE_WIDTH < 0)
{
spawnPipes(ren);
offset = SCREEN_WIDTH;
}
}
bool PipePair::collided(SDL_Rect player)
{
bool upper = Object::checkCollision(player, upperPipe.getRect());
bool lower = Object::checkCollision(player, lowerPipe.getRect());
if(upper || lower)
return true;
return false;
}
bool PipePair::passed(SDL_Rect player)
{
if(!collided(player) && player.x == posX +70)
return true;
return false;
}
PipePair::~PipePair()
{
free();
}