-
Notifications
You must be signed in to change notification settings - Fork 0
/
powerUp.cpp
137 lines (115 loc) · 4.69 KB
/
powerUp.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include "declarations.h"
#include "prototype.h"
extern Application app;
/// This function either activates the timers or resets the timer back to 0 if the user obtains the same power up
/// before the power up is over
/// Need to pass the power up and character struct
/// Returns an int
int activatePowerUp(PowerUp &userPowerUps, Character &userCharacter) {
if (userPowerUps.powerUpInvincibility) {
// When you start a timer that was stopped, it automatically starts the timer from 0
al_stop_timer(app.invincibleTimer);
al_set_timer_count(app.invincibleTimer, 0);
al_start_timer(app.invincibleTimer);
} else if (userPowerUps.powerUpMini) {
al_stop_timer(app.miniTimer);
al_set_timer_count(app.miniTimer, 0);
al_start_timer(app.miniTimer);
// Make the user turn small
userCharacter.bitmap = al_load_bitmap("miniMainCharacter.bmp");
al_convert_mask_to_alpha(userCharacter.bitmap, PINK);
// Check for loading erros
if (!userCharacter.bitmap) {
al_show_native_message_box(app.display, "Error", "Error", "Failed to mini character image!", nullptr, ALLEGRO_MESSAGEBOX_ERROR);
al_destroy_display(app.display);
return ERROR_MINI_CHARACTER_IMG;
}
// Start or reset the slow motion power up
} else if (userPowerUps.powerUpSlowmo) {
al_stop_timer(app.slowmoTimer);
al_set_timer_count(app.slowmoTimer, 0);
al_start_timer(app.slowmoTimer);
}
// Set a new power up if the user collided with one
setupPowerUps(userPowerUps);
return 0;
}
/// Set ups the power ups at the start and throughout the game
/// Need to pass the power up struct
/// Returns an int (0) if no errors
int setupPowerUps(PowerUp &powerUpSetup) {
// Declare variables
int powerUpType;
// Initializing the power up bool
powerUpSetup.collision = false;
powerUpSetup.powerUpInvincibility = false;
powerUpSetup.powerUpMini = false;
powerUpSetup.powerUpSlowmo = false;
// Generates a random number to chose a timer
// NOTE: If the user is on level 1 a slow motion power up will not generate
if (al_get_timer_count(app.speedIncreaser) < 1) {
powerUpType = rand() % 2 + 1;
} else {
powerUpType = rand() % 3 + 1;
}
// Convert the rnd int to activate the power up
switch (powerUpType) {
case 1:
powerUpSetup.powerUpMini = true;
break;
case 2:
powerUpSetup.powerUpInvincibility = true;
break;
case 3:
powerUpSetup.powerUpSlowmo = true;
break;
}
// Generate spawn location
powerUpSetup.powerupXCoordinate = rand() % GENERATE_RANGE;
powerUpSetup.powerupYCoordinate = (rand() % 5000) - 5000;
// Load the image for the appropriate power up
if(powerUpSetup.powerUpInvincibility) {
powerUpSetup.bitmap = al_load_bitmap("powerUpInvincibility.bmp");
}else if (powerUpSetup.powerUpMini){
powerUpSetup.bitmap = al_load_bitmap("powerUpMini.bmp");
}else if (powerUpSetup.powerUpSlowmo){
powerUpSetup.bitmap = al_load_bitmap("powerUpSlowmo.bmp");
}
if (!powerUpSetup.bitmap) {
al_show_native_message_box(app.display, "Error", "Error", "Failed to load power up image!", nullptr, ALLEGRO_MESSAGEBOX_ERROR);
al_destroy_display(app.display);
return ERROR_POWERUP_IMG;
}
//Remove Pink Mask
al_convert_mask_to_alpha(powerUpSetup.bitmap, PINK);
return 0;
}
/// This function checks if the power ups are over based on their timer
/// Need to pass the character struct to reset the image if the character was small
/// Return an int
int checkIfPowerUpOver(Character &userCharacter){
// Check invincible timer
if (al_get_timer_count(app.invincibleTimer) > 0) {
al_stop_timer(app.invincibleTimer);
al_set_timer_count(app.invincibleTimer, 0);
}
// Check slowmo timer
if (al_get_timer_count(app.slowmoTimer) > 0) {
al_stop_timer(app.slowmoTimer);
al_set_timer_count(app.slowmoTimer, 0);
}
// Check mini timer & load back the regular image
if (al_get_timer_count(app.miniTimer) > 0) {
al_stop_timer(app.miniTimer);
al_set_timer_count(app.miniTimer, 0);
userCharacter.bitmap = al_load_bitmap("mainCharacter.bmp");
al_convert_mask_to_alpha(userCharacter.bitmap, PINK);
// Check for loading erros
if (!userCharacter.bitmap) {
al_show_native_message_box(app.display, "Error", "Error", "Failed to load character image!", nullptr, ALLEGRO_MESSAGEBOX_ERROR);
al_destroy_display(app.display);
return ERROR_CHARACTER_IMG;
}
}
return 0;
}