merge
This commit is contained in:
commit
fdaa535b29
@ -68,7 +68,7 @@ players:
|
|||||||
startXPosition: 600
|
startXPosition: 600
|
||||||
fireCooldown: 10
|
fireCooldown: 10
|
||||||
speed: 10
|
speed: 10
|
||||||
lives: 3
|
lives: 100
|
||||||
user1:
|
user1:
|
||||||
color: red
|
color: red
|
||||||
keys:
|
keys:
|
||||||
|
@ -155,17 +155,17 @@ void ConfigBuilder::readInvaderType(const configKey& baseKey, InvaderTypeDef& in
|
|||||||
|
|
||||||
void ConfigBuilder::readConfig() {
|
void ConfigBuilder::readConfig() {
|
||||||
|
|
||||||
collectedData.theme = getString("general.theme");
|
collectedData.theme = getString("general.theme", "bad");
|
||||||
collectedData.maxFPS = getInt("general.maxFPS");
|
collectedData.maxFPS = getInt("general.maxFPS", 30, 1, 60);
|
||||||
|
|
||||||
readGrid("grid");
|
readGrid("grid");
|
||||||
|
|
||||||
// players
|
// players
|
||||||
collectedData.playersWidth = getInt("players.width", 100, 0, 500);
|
collectedData.playersWidth = getInt("players.width", 100, 50, 500);
|
||||||
collectedData.startXPosition = getInt("players.startXPosition",600 ,0 ,1200);
|
collectedData.startXPosition = getInt("players.startXPosition",600 ,0 ,1200);
|
||||||
collectedData.playersSpeed = getInt("players.speed",1,0,100);
|
collectedData.playersSpeed = getInt("players.speed",1,1,100);
|
||||||
collectedData.playersFireCooldown = getInt("players.fireCooldown",10,1,10000);
|
collectedData.playersFireCooldown = getInt("players.fireCooldown",10,1,100);
|
||||||
collectedData.playersLives = getInt("players.lives",3,1,1000);
|
collectedData.playersLives = getInt("players.lives",3,1,100);
|
||||||
|
|
||||||
// the scalability behind the vector of players is only an illusion, because we force player count to be 1 or 2
|
// the scalability behind the vector of players is only an illusion, because we force player count to be 1 or 2
|
||||||
// It was done so the 2+ players implementation could be easier in the future, if wanted
|
// It was done so the 2+ players implementation could be easier in the future, if wanted
|
||||||
@ -174,24 +174,24 @@ void ConfigBuilder::readConfig() {
|
|||||||
readPlayer("players.user2", collectedData.playerDefs[1]);
|
readPlayer("players.user2", collectedData.playerDefs[1]);
|
||||||
|
|
||||||
// invaders
|
// invaders
|
||||||
collectedData.invadersSize = getInt("invaders.size",30,10,1000);
|
collectedData.invadersSize = getInt("invaders.size",30,10,100);
|
||||||
collectedData.invadersSpeed = getInt("invaders.speed",7,1,1000);
|
collectedData.invadersSpeed = getInt("invaders.speed",7,1,100);
|
||||||
collectedData.invadersDistance = getInt("invaders.distance",15,5,1000);
|
collectedData.invadersDistance = getInt("invaders.distance",15,5,100);
|
||||||
collectedData.invadersFireCooldown = getInt("invaders.fireCooldown",0,0,1000);
|
collectedData.invadersFireCooldown = getInt("invaders.fireCooldown",0,0,100);
|
||||||
|
|
||||||
readInvaderType("invaders.typeA", collectedData.invadersDef[InvaderType::TYPEA]);
|
readInvaderType("invaders.typeA", collectedData.invadersDef[InvaderType::TYPEA]);
|
||||||
readInvaderType("invaders.typeB", collectedData.invadersDef[InvaderType::TYPEB]);
|
readInvaderType("invaders.typeB", collectedData.invadersDef[InvaderType::TYPEB]);
|
||||||
readInvaderType("invaders.typeC", collectedData.invadersDef[InvaderType::TYPEC]);
|
readInvaderType("invaders.typeC", collectedData.invadersDef[InvaderType::TYPEC]);
|
||||||
|
|
||||||
// projectiles
|
// projectiles
|
||||||
collectedData.missilesWidth = getInt("projectiles.missiles.width",10,5,1000);
|
collectedData.missilesWidth = getInt("projectiles.missiles.width",10,5,100);
|
||||||
collectedData.missilesLength = collectedData.missilesWidth*PROJ_LENGTH_FACTOR;
|
collectedData.missilesLength = collectedData.missilesWidth*PROJ_LENGTH_FACTOR;
|
||||||
collectedData.missilesSpeed = getInt("projectiles.missiles.speed",10,5,1000);
|
collectedData.missilesSpeed = getInt("projectiles.missiles.speed",10,5,100);
|
||||||
getColor("projectiles.missiles.color", collectedData.missilesColor);
|
getColor("projectiles.missiles.color", collectedData.missilesColor);
|
||||||
|
|
||||||
collectedData.torpedosWidth = getInt("projectiles.torpedos.width",10,1,1000);
|
collectedData.torpedosWidth = getInt("projectiles.torpedos.width",10,1,100);
|
||||||
collectedData.torpedosLength = collectedData.torpedosWidth*PROJ_LENGTH_FACTOR;
|
collectedData.torpedosLength = collectedData.torpedosWidth*PROJ_LENGTH_FACTOR;
|
||||||
collectedData.torpedosSpeed = getInt("projectiles.torpedos.speed",10,1,1000);
|
collectedData.torpedosSpeed = getInt("projectiles.torpedos.speed",10,1,100);
|
||||||
getColor("projectiles.torpedos.color", collectedData.torpedosColor);
|
getColor("projectiles.torpedos.color", collectedData.torpedosColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,10 +69,11 @@ void Game::managedGames() {
|
|||||||
if(playMode==PlayMode::NONE){
|
if(playMode==PlayMode::NONE){
|
||||||
playMode = pm->showInitialMenu();
|
playMode = pm->showInitialMenu();
|
||||||
}else{
|
}else{
|
||||||
|
DEBUG_MSG("Starting game")
|
||||||
initGame();
|
initGame();
|
||||||
enterGameLoop(); // will read the playMode
|
enterGameLoop(); // will read the playMode
|
||||||
|
DEBUG_MSG("END End of game")
|
||||||
handleScoreSaving();
|
handleScoreSaving();
|
||||||
cout << "END OF GAME" << endl;
|
|
||||||
if(!pm->showDeathMenu(sm.scores))playMode = PlayMode::NONE;
|
if(!pm->showDeathMenu(sm.scores))playMode = PlayMode::NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -113,6 +114,10 @@ void Game::initGame(){
|
|||||||
*
|
*
|
||||||
* @return @WinValue::PLAYERS if the players won, @WinValue::INVADERS is the invaders won, WinValue::NOBODY else (also in case of error)
|
* @return @WinValue::PLAYERS if the players won, @WinValue::INVADERS is the invaders won, WinValue::NOBODY else (also in case of error)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define START_TIMER() DEBUG_INSTR(debugTime = chrono::high_resolution_clock::now())
|
||||||
|
#define PRINT_TIMER(X) DEBUG_MSG((X) << " :" << chrono::duration_cast<chrono::nanoseconds>(chrono::high_resolution_clock::now()-debugTime).count())
|
||||||
|
|
||||||
WinValue Game::enterGameLoop(){ // returns when game is finished
|
WinValue Game::enterGameLoop(){ // returns when game is finished
|
||||||
// computed in advance for performance reasons
|
// computed in advance for performance reasons
|
||||||
chrono::milliseconds maxFrameTime = chrono::milliseconds(1000/confData.maxFPS);
|
chrono::milliseconds maxFrameTime = chrono::milliseconds(1000/confData.maxFPS);
|
||||||
@ -121,7 +126,11 @@ WinValue Game::enterGameLoop(){ // returns when game is finished
|
|||||||
unsigned fps = 0;
|
unsigned fps = 0;
|
||||||
typedef chrono::high_resolution_clock::time_point MyTimePoint;
|
typedef chrono::high_resolution_clock::time_point MyTimePoint;
|
||||||
MyTimePoint fpsStartTime = {};
|
MyTimePoint fpsStartTime = {};
|
||||||
|
|
||||||
|
DEBUG_INSTR(MyTimePoint debugTime);
|
||||||
while(window.isOpen()){
|
while(window.isOpen()){
|
||||||
|
DEBUG_INSTR(fflush(stdout));
|
||||||
|
DEBUG_MSG("------------")
|
||||||
|
|
||||||
MyTimePoint startTime = chrono::high_resolution_clock::now();
|
MyTimePoint startTime = chrono::high_resolution_clock::now();
|
||||||
if(fpsStartTime.time_since_epoch()==chrono::seconds(0)){
|
if(fpsStartTime.time_since_epoch()==chrono::seconds(0)){
|
||||||
@ -130,26 +139,38 @@ WinValue Game::enterGameLoop(){ // returns when game is finished
|
|||||||
|
|
||||||
pm->startFrame();
|
pm->startFrame();
|
||||||
|
|
||||||
|
START_TIMER()
|
||||||
managePlayers();
|
managePlayers();
|
||||||
|
PRINT_TIMER("manage players")
|
||||||
|
START_TIMER()
|
||||||
if(manageInvaders()) { // if they went down
|
if(manageInvaders()) { // if they went down
|
||||||
if (invadersTouchPlayer())return WinValue::INVADERS;
|
if (invadersTouchPlayer())return WinValue::INVADERS;
|
||||||
tryAwakeGod();
|
tryAwakeGod();
|
||||||
}
|
}
|
||||||
|
PRINT_TIMER("manage invaders")
|
||||||
|
|
||||||
|
START_TIMER()
|
||||||
if(manageGod())return WinValue::PLAYERS;
|
if(manageGod())return WinValue::PLAYERS;
|
||||||
if(arePlayersDead())return WinValue::GOD;
|
if(arePlayersDead())return WinValue::GOD;
|
||||||
|
PRINT_TIMER("god")
|
||||||
|
|
||||||
|
START_TIMER()
|
||||||
moveMissiles();
|
moveMissiles();
|
||||||
remCollidingProjectiles();
|
remCollidingProjectiles();
|
||||||
moveTorpedos();
|
moveTorpedos();
|
||||||
remCollidingProjectiles();
|
remCollidingProjectiles();
|
||||||
|
PRINT_TIMER("self collisions")
|
||||||
|
|
||||||
|
START_TIMER()
|
||||||
checkMissilesAndPlayers();
|
checkMissilesAndPlayers();
|
||||||
if(checkTorpedosAndInvaders())return WinValue::PLAYERS;
|
if(checkTorpedosAndInvaders())return WinValue::PLAYERS;
|
||||||
|
PRINT_TIMER("collisions between entities")
|
||||||
|
|
||||||
if(arePlayersDead())return WinValue::INVADERS;
|
if(arePlayersDead())return WinValue::INVADERS;
|
||||||
|
|
||||||
|
START_TIMER()
|
||||||
displayAll(fps);
|
displayAll(fps);
|
||||||
|
PRINT_TIMER("display")
|
||||||
|
|
||||||
pm->endFrame();
|
pm->endFrame();
|
||||||
|
|
||||||
|
@ -62,6 +62,7 @@ bool Game::manageInvaders(){
|
|||||||
}else --fireCooldown;
|
}else --fireCooldown;
|
||||||
|
|
||||||
// moving
|
// moving
|
||||||
|
// TODO fix this lol
|
||||||
if(direction){ // go to the right
|
if(direction){ // go to the right
|
||||||
int end = basePos.getX(); // start Position
|
int end = basePos.getX(); // start Position
|
||||||
end+= grid.size() * confData.invadersSize; // add the invaders
|
end+= grid.size() * confData.invadersSize; // add the invaders
|
||||||
|
Loading…
Reference in New Issue
Block a user