13#define ISPRESSED(ID, X) window.isPressed({confData.playerDefs[ID].keys.X, false})
14void Game::manageOnePlayer(
playerID pID){
45void Game::managePlayers(){
46 for(
unsigned i=0;i<players.size();++i)manageOnePlayer(i);
49bool Game::manageInvaders(){
50 if(!areThereInvadersLeft())
return false;
58 missiles.push_back(basePos +
Position(
68 int end = basePos.getX();
73 unsigned relativeScreenWidth = pm->getScreenWidth();
74 size_t i = grid.size()-1;
75 while (grid[i].hasNoValid()){
85 direction = !direction;
91 unsigned relativeBasePos = basePos.getX();
92 while (grid[i].hasNoValid()){
101 direction = !direction;
109void Game::remCollidingProjectiles(){
111 auto miss = missiles.begin();
112 auto tor = torpedos.begin();
114 while(miss != missiles.end()){
115 bool wasColliding =
false;
116 while(tor != torpedos.end()){
125 missiles.erase(miss);
134 if(!wasColliding)++miss;
138void Game::moveMissiles() {
139 auto miss = missiles.begin();
140 while (miss != missiles.end()) {
141 if (miss->getY() >= pm->getScreenHeight())missiles.erase(miss);
149void Game::moveTorpedos() {
150 auto tor = torpedos.begin();
151 while (tor != torpedos.end()) {
160void Game::checkMissilesAndPlayers() {
161 auto miss_ite = missiles.begin();
162 while(miss_ite!=missiles.end()){
163 bool wasColliding =
false;
178 if(wasColliding)missiles.erase(miss_ite);
183bool Game::checkTorpedosAndInvaders() {
184 auto tor_ite = torpedos.begin();
185 while(tor_ite!=torpedos.end()){
187 for(;i<grid.size();++i){
189 unsigned alienIndex = grid[i].getOutterInvader();
190 if(alienIndex==grid[i].size())
continue;
206 players[tor_ite->owner].score += confData.
invadersDef.at(invType).points;
207 torpedos.erase(tor_ite);
211 if(!areThereInvadersLeft())
return true;
216 if(i==grid.size()) ++tor_ite;
221bool Game::invadersTouchPlayer()
const {
222 return any_of(grid.begin(), grid.end(), [
this](
const InvadersColumn& line) ->
bool {
223 unsigned outter = line.getOutterInvader();
224 return this->basePos.getY()+confData.invadersSize*(outter+1)
225 +confData.invadersDistance*outter
226 >= pm->getScreenHeight() - PLAYER_HEIGHT;
unsigned randomValidCol() const
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
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
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
unsigned fireCooldown
player's shooting cooldown
bool isEliminated() const
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 dimentionnal space
nsGraphics::Vec2D Position