forked from JVictorDias/FlappIA-Bird
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathColisao.h
103 lines (87 loc) · 3.2 KB
/
Colisao.h
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
void MatarPassaro(int Indice)
{
if(Passaro[Indice].Estado != 3)
{
Passaro[Indice].Estado = 3;
PassarosMortos++;
}
}
int verificarColisao( double X1, double Y1, double Larg1, double Alt1,
double X2, double Y2, double Larg2, double Alt2)
{
if(X1 + Larg1 <= X2)
{
return 0;
}
if(X1 >= X2 + Larg2)
{
return 0;
}
if(Y1 + Alt1 <= Y2)
{
return 0;
}
if(Y1 >= Y2 + Alt2)
{
return 0;
}
return 1;
}
void getAtributosProximoCanoSuperior(double PassaroX, double* X, double* Y, double* Larg, double* Alt)
{
int IndiceObstaculo = ProcurarProximoObstaculo(PassaroX);
double Correcao = 4;
*X = canoSuperior[IndiceObstaculo].X + Correcao;
*Y = canoSuperior[IndiceObstaculo].Y;
*Alt = SpriteCano.Altura;
*Larg = SpriteCano.Largura - 2*Correcao;
}
void getAtributosProximoCanoInferior(double PassaroX, double* X, double* Y, double* Larg, double* Alt)
{
int IndiceObstaculo = ProcurarProximoObstaculo(PassaroX);
double Correcao = 4;
*X = canoInferior[IndiceObstaculo].X + Correcao;
*Y = canoInferior[IndiceObstaculo].Y;
*Alt = SpriteCano.Altura;
*Larg = SpriteCano.Largura - 2*Correcao;
}
void getAtributosPassaro(int i, double* PassaroX, double* PassaroY, double* PassaroLarg, double* PassaroAlt)
{
double Correcao = 5;
*PassaroX = Passaro[i].X - Passaro[i].sprite[Passaro[i].SpriteAtual]->Largura/2.0 + Correcao;
*PassaroY = Passaro[i].Y - Passaro[i].sprite[Passaro[i].SpriteAtual]->Altura/2.0 + Correcao;
*PassaroLarg = Passaro[i].sprite[Passaro[i].SpriteAtual]->Largura - 2*Correcao;
*PassaroAlt = Passaro[i].sprite[Passaro[i].SpriteAtual]->Altura - 2*Correcao;
}
void AplicarColisao()
{
int IndiceObstaculo;
double XObstaculo, YObstaculo, AlturaObstaculo, LarguraObstaculo;
double PassaroX, PassaroY, PassaroLarg, PassaroAlt;
int FatorDeCorrecaoHorizontal = 7;
int FatorDeCorrecaoVertical = 5;
for(int i=0; i<QuantidadePassaros; i++)
{
if(Passaro[i].Estado != 3) /// MORTO
{
getAtributosPassaro(i, &PassaroX, &PassaroY, &PassaroLarg, &PassaroAlt);
getAtributosProximoCanoSuperior(Passaro[i].X,
&XObstaculo, &YObstaculo,
&LarguraObstaculo, &AlturaObstaculo);
if(verificarColisao(PassaroX, PassaroY, PassaroLarg, PassaroAlt,
XObstaculo, YObstaculo, LarguraObstaculo, AlturaObstaculo) == 1)
{
MatarPassaro(i);
continue;
}
getAtributosProximoCanoInferior(Passaro[i].X,
&XObstaculo, &YObstaculo,
&LarguraObstaculo, &AlturaObstaculo);
if(verificarColisao(PassaroX, PassaroY, PassaroLarg, PassaroAlt,
XObstaculo, YObstaculo, LarguraObstaculo, AlturaObstaculo) == 1)
{
MatarPassaro(i);
}
}
}
}