stability I guess

This commit is contained in:
Thomas 2022-01-01 18:18:03 +01:00
parent eb25f940bd
commit a753e7a7b9
No known key found for this signature in database
GPG Key ID: E538821A6CDFDAD7
7 changed files with 39 additions and 30 deletions

View File

@ -1,7 +1,8 @@
# Players config # Players config
players: players:
width: 250 width: 250
startXPosition: 0 startXPosition: 50
fireCooldown: 50
speed: 1 speed: 1
user1: user1:
color: red color: red
@ -18,6 +19,7 @@ players:
# Enemies config # Enemies config
invaders: invaders:
fireCooldown: 20
size: 15 size: 15
speed: 2 speed: 2
distance: 10 # distance in pixels between invaders distance: 10 # distance in pixels between invaders

View File

@ -11,20 +11,25 @@ struct ConfigData {
invadersGrid grid; invadersGrid grid;
unsigned startXPosition;
unsigned playersSpeed;
unsigned playersWidth;
unsigned playersFireCooldown;
vector<PlayerDef> playerDefs;
unsigned invadersSpeed;
unsigned invadersSize; unsigned invadersSize;
unsigned invadersDistance; unsigned invadersDistance;
unsigned invadersFireCooldown;
unsigned missilesWidth; unsigned missilesWidth;
unsigned missilesLength; // auto defined from width unsigned missilesLength; // auto defined from width
unsigned missilesSpeed;
unsigned torpedosWidth; unsigned torpedosWidth;
unsigned torpedosLength; // auto defined from width unsigned torpedosLength; // auto defined from width
unsigned playersWidth; unsigned torpedosSpeed;
unsigned invadersSpeed;
unsigned playersSpeed;
vector<PlayerDef> playerDefs;
unsigned startXPosition;
}; };
#endif #endif

View File

@ -40,7 +40,7 @@ private:
bool checkTorpedosAndInvaders(); bool checkTorpedosAndInvaders();
bool invadersTouchPlayer(); bool invadersTouchPlayer();
void managePlayerMoves(PlayerDef&, unsigned&, unsigned); void manageOnePlayer(unsigned);
public: public:
// in case someone wants to mess with the code, here's a minimal API, costs nothing to us // in case someone wants to mess with the code, here's a minimal API, costs nothing to us

View File

@ -8,6 +8,7 @@ struct Player{
unsigned score=0; unsigned score=0;
unsigned deathAnimCounter=0; unsigned deathAnimCounter=0;
unsigned fireCooldown=0;
}; };
#endif #endif

View File

@ -77,6 +77,7 @@ void ConfigBuilder::readConfig() {
collectedData.playersWidth = getInt("players.width"); collectedData.playersWidth = getInt("players.width");
collectedData.startXPosition = getInt("players.startXPosition"); collectedData.startXPosition = getInt("players.startXPosition");
collectedData.playersSpeed = getInt("players.speed"); collectedData.playersSpeed = getInt("players.speed");
collectedData.playersFireCooldown = getInt("players.fireCooldown");
// 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
@ -95,13 +96,16 @@ void ConfigBuilder::readConfig() {
collectedData.invadersSize = getInt("invaders.size"); collectedData.invadersSize = getInt("invaders.size");
collectedData.invadersSpeed = getInt("invaders.speed"); collectedData.invadersSpeed = getInt("invaders.speed");
collectedData.invadersDistance = getInt("invaders.distance"); collectedData.invadersDistance = getInt("invaders.distance");
collectedData.invadersFireCooldown = getInt("invaders.fireCooldown");
// projectiles // projectiles
collectedData.missilesWidth = getInt("projectiles.missiles.width"); collectedData.missilesWidth = getInt("projectiles.missiles.width");
collectedData.missilesLength = collectedData.missilesWidth*PROJ_LENGTH_FACTOR; collectedData.missilesLength = collectedData.missilesWidth*PROJ_LENGTH_FACTOR;
collectedData.missilesSpeed = getInt("projectiles.missiles.speed");
collectedData.torpedosWidth = getInt("projectiles.torpedos.width"); collectedData.torpedosWidth = getInt("projectiles.torpedos.width");
collectedData.torpedosLength = collectedData.torpedosWidth*PROJ_LENGTH_FACTOR; collectedData.torpedosLength = collectedData.torpedosWidth*PROJ_LENGTH_FACTOR;
collectedData.torpedosSpeed = getInt("projectiles.missiles.speed");
} }
int ConfigBuilder::getInt(const configKey& key) { int ConfigBuilder::getInt(const configKey& key) {

View File

@ -1,30 +1,28 @@
#include "game.h" #include "game.h"
// TODO put in config (EVERYTHING SHALL GO IN CONFIG, THE WHOLE CODE SHALL GO IN CONFIIIIIIIIG) void Game::manageOnePlayer(unsigned id){
#define MISSILE_SPEED 5 #define ISPRESSED(ID, X) window.isPressed({confData.playerDefs[ID].keys.X, false})
#define TORPEDO_SPEED MISSILE_SPEED if (ISPRESSED(id, left)){
if(players[id].x < confData.playersSpeed) players[id].x = 0;
#define ISPRESSED(X) window.isPressed({X, false}) else players[id].x -= confData.playersSpeed;
void Game::managePlayerMoves(PlayerDef& pdef, unsigned& playerX, unsigned playerId){
if (ISPRESSED(pdef.keys.left)){
if(playerX < confData.playersSpeed) playerX = 0;
else playerX = playerX - confData.playersSpeed;
} }
if (ISPRESSED(pdef.keys.right)){ if (ISPRESSED(id, right)){
if(playerX + confData.playersSpeed >= pm.getScreenWidth()) playerX = pm.getScreenWidth() - 1; if(players[id].x + confData.playersSpeed >= pm.getScreenWidth()) players[id].x = pm.getScreenWidth() - 1;
else playerX = playerX + confData.playersSpeed; else players[id].x += confData.playersSpeed;
}
if(ISPRESSED(pdef.keys.shoot)){
torpedos.emplace_back(playerX + confData.playersWidth / 2, pm.getScreenHeight() - PLAYER_HEIGHT, playerId);
} }
if(players[id].fireCooldown==0) {
if (ISPRESSED(id, shoot)) {
torpedos.emplace_back(players[id].x + confData.playersWidth / 2, pm.getScreenHeight() - PLAYER_HEIGHT, id);
players[id].fireCooldown = confData.playersFireCooldown;
}
}else --players[id].fireCooldown;
} }
/** Makes the players play once /** Makes the players play once
*/ */
void Game::managePlayers(){ void Game::managePlayers(){
managePlayerMoves(confData.playerDefs[0], players[0].x,0); manageOnePlayer(0);
if(playMode==PlayMode::TWO_LOCAL)managePlayerMoves(confData.playerDefs[1], players[1].x, 1); if(playMode==PlayMode::TWO_LOCAL)manageOnePlayer(1);
else if(playMode==PlayMode::TWO_TCPIP){ else if(playMode==PlayMode::TWO_TCPIP){
// TODO TCPIP // TODO TCPIP
} }
@ -101,7 +99,7 @@ void Game::moveMissiles() {
while (miss != missiles.end()) { while (miss != missiles.end()) {
if (miss->getY() >= pm.getScreenHeight())missiles.erase(miss); if (miss->getY() >= pm.getScreenHeight())missiles.erase(miss);
else { else {
miss->setY(miss->getY()+MISSILE_SPEED); miss->setY(miss->getY()+confData.missilesSpeed);
++miss; ++miss;
} }
} }
@ -112,7 +110,7 @@ void Game::moveTorpedos() {
while (tor != torpedos.end()) { while (tor != torpedos.end()) {
if (tor->getY() <= 0)torpedos.erase(tor); // TODO maybe wait for it to be 100% offscreen if (tor->getY() <= 0)torpedos.erase(tor); // TODO maybe wait for it to be 100% offscreen
else{ else{
tor->setY(tor->getY() - TORPEDO_SPEED); tor->setY(tor->getY()-confData.torpedosSpeed);
++tor; ++tor;
} }
} }

View File

@ -42,7 +42,6 @@ void PixelManager::dessinerJoueur(const nsGraphics::Vec2D& baseVector, unsigned
window << nsShape::Triangle(nsGraphics::Vec2D(15+width*2, 720)+baseVector, nsGraphics::Vec2D(15+width*2, 720-PLAYER_HEIGHT/2)+baseVector, nsGraphics::Vec2D(20+width*2, 720)+baseVector, color); window << nsShape::Triangle(nsGraphics::Vec2D(15+width*2, 720)+baseVector, nsGraphics::Vec2D(15+width*2, 720-PLAYER_HEIGHT/2)+baseVector, nsGraphics::Vec2D(20+width*2, 720)+baseVector, color);
window << nsShape::Triangle(nsGraphics::Vec2D(5,720-PLAYER_HEIGHT/2)+baseVector, nsGraphics::Vec2D(5+width,720-PLAYER_HEIGHT/2)+baseVector, nsGraphics::Vec2D(5+width,720-PLAYER_HEIGHT*0.9)+baseVector, color); window << nsShape::Triangle(nsGraphics::Vec2D(5,720-PLAYER_HEIGHT/2)+baseVector, nsGraphics::Vec2D(5+width,720-PLAYER_HEIGHT/2)+baseVector, nsGraphics::Vec2D(5+width,720-PLAYER_HEIGHT*0.9)+baseVector, color);
window << nsShape::Triangle(nsGraphics::Vec2D(15+width,720-PLAYER_HEIGHT/2)+baseVector, nsGraphics::Vec2D(15+width*2,720-PLAYER_HEIGHT/2)+baseVector, nsGraphics::Vec2D(15+width,720-PLAYER_HEIGHT*0.9)+baseVector, color); window << nsShape::Triangle(nsGraphics::Vec2D(15+width,720-PLAYER_HEIGHT/2)+baseVector, nsGraphics::Vec2D(15+width*2,720-PLAYER_HEIGHT/2)+baseVector, nsGraphics::Vec2D(15+width,720-PLAYER_HEIGHT*0.9)+baseVector, color);
} }
void PixelManager::dessinerSprite(const nsGraphics::Vec2D& baseVector, const std::string& spritePath){ void PixelManager::dessinerSprite(const nsGraphics::Vec2D& baseVector, const std::string& spritePath){