13#define ISPRESSED(ID, X) window.isPressed({confData.playerDefs[ID].keys.X, false})
14void Game::manageOnePlayer(
playerID pID){
44void Game::managePlayers(){
45 for(
unsigned i=0;i<players.size();++i)manageOnePlayer(i);
48bool Game::manageInvaders(){
49 if(!areThereInvadersLeft())
return false;
57 missiles.push_back(baseInvPos +
Position(
65 int end = baseInvPos.getX();
70 size_t i = grid.size()-1;
71 while (grid[i].hasNoValid()){
81 direction = !direction;
87 unsigned relativeBasePos = baseInvPos.getX();
88 while (grid[i].hasNoValid()){
97 direction = !direction;
105void Game::remCollidingProjectiles(){
107 auto miss = missiles.begin();
108 auto tor = torpedos.begin();
110 while(miss != missiles.end()){
111 bool wasColliding =
false;
112 while(tor != torpedos.end()){
121 missiles.erase(miss);
130 if(!wasColliding)++miss;
134void Game::moveMissiles() {
135 auto miss = missiles.begin();
136 while (miss != missiles.end()) {
137 if (miss->getY() >= pm->getScreenHeight())missiles.erase(miss);
145void Game::moveTorpedos() {
146 auto tor = torpedos.begin();
147 while (tor != torpedos.end()) {
156void Game::checkMissilesAndPlayers() {
157 auto miss_ite = missiles.begin();
158 while(miss_ite!=missiles.end()){
159 bool wasColliding =
false;
174 if(wasColliding)missiles.erase(miss_ite);
179bool Game::checkTorpedosAndInvaders() {
180 auto tor_ite = torpedos.begin();
181 while(tor_ite!=torpedos.end()){
183 for(;i<grid.size();++i){
185 unsigned alienIndex = grid[i].getOutterInvader();
186 if(alienIndex==grid[i].size())
continue;
202 players[tor_ite->owner].score += confData.
invadersDef.at(invType).points;
203 torpedos.erase(tor_ite);
207 if(!areThereInvadersLeft())
return true;
212 if(i==grid.size()) ++tor_ite;
217bool Game::invadersTouchPlayer()
const {
218 return any_of(grid.begin(), grid.end(), [
this](
const InvadersColumn& line) ->
bool {
219 unsigned outter = line.getOutterInvader();
220 return this->baseInvPos.getY() + confData.invadersSize * (outter + 1)
221 +confData.invadersDistance*outter
222 >= pm->getScreenHeight() - PLAYER_HEIGHT;
unsigned randomValidCol() const
Returns a random valid column in the grid.
full game logic and display management
InvaderType
List of all invader type.
unsigned invadersFireCooldown
wait time between two invader missile
unsigned playersSpeed
player movement speed
unsigned missilesWidth
invaders missiles width in pixel
unsigned torpedosLength
virtual value : players torpedos length in pixel - auto defined from width
unsigned playersFireCooldown
player shooting wait time
unsigned torpedosSpeed
players topedos movement speed
unsigned invadersDistance
distance in pixel between two invader
unsigned invadersSpeed
invader movement speed
unsigned playersWidth
player horizontal size in pixel
unsigned invadersSize
invader radius size in pixel
unsigned missilesSpeed
invaders missiles movement speed
unsigned missilesLength
virtual value : invaders missiles length in pixel - auto defined from width
unsigned torpedosWidth
players torpedos width in pixel
map< InvaderType, InvaderTypeDef > invadersDef
link between an invader type, and its data
unsigned deathAnimCounter
counter used for the death animation of players undefined once the player is eliminated
bool hasDeathAnimation() const
Tells if the player has a death animation ongoing.
unsigned fireCooldown
player's shooting cooldown
bool isEliminated() const
Tells if the player is eliminated (no more lives)
unsigned x
x coordinate of the player
bool areLinesColliding(unsigned start1, unsigned end1, unsigned start2, unsigned end2)
tells if 2 lines are colliding in a 1 dimensional space. Didn't want to use Position because of the s...
nsGraphics::Vec2D Position