# ifndef METEOS_H
# define METEOS_H
# include "pixelGameEngine.h"
# include "Board.h"
# include <random>
# include "ComboOverlay.h"
# include "Star.h"
class Meteos : public olc : : PixelGameEngine {
public :
Meteos ( ) {
sAppName = " Meteos " ;
}
long frameTime = 0 ;
const int BASE_SCORE = 60 ; //Cleared score is BASE_SCORE*combo.
const int MATCH_SCORE = 10 ; //Points earned when making a block match*combo.
const int BONUS_ATTACK_SCORE = 1000 ; //for every 10 blocks released at once, an extra 1000 BASE_SCORE is added.
float lastBlockLaunched = 0.0f ; //When enough time has passed, the attack is released to the opponent.
float blockLaunchWaitPeriod = 3.0f ;
int blocksInAttackQueue = 0 ;
int accumulatedScore = 0 ;
float lastBlockSpawn = 0.0f ;
float accumulatedTime = 0.0f ;
const float SCORE_DISPLAY_UPDATE_RATE = 0.05f ;
float lastScoreDisplayUpdate = 0.0f ;
std : : uniform_int_distribution < > randBlockPos , coinFlip , comboOverlayOffset ;
std : : mt19937 gen ;
Board gameBoard ;
bool gameCanRun = true ;
std : : map < std : : string , Renderable > SPRITES ;
std : : vector < ComboOverlay > comboDisplayList ;
std : : vector < Star > starField ;
int score = 0 ;
int displayTargetScore = 0 ; //While technically the displayed score should be what the score actually is, if we're showing how many points we earn for a combo we want to delay adding it to our actual score display for flair and show a side bonus counter.
int displayScore = 0 ;
bool OnUserCreate ( ) override ;
void updateGame ( float fElapsedTime ) ;
void handleInput ( ) ;
void drawGame ( float fElapsedTime , bool debugView ) ;
bool OnUserUpdate ( float fElapsedTime ) override ;
void spawnBlocks ( float fElapsedTime ) ;
void handleBlockGravity ( float fElapsedTime ) ;
void matchBlocks ( ) ;
void matchFlyingBlockClumps ( ) ;
void cleanupBlockClumps ( ) ;
void matchGroundedBlocks ( ) ;
void cleanupBlocks ( ) ;
void handleWarningLevels ( float fElapsedTime ) ;
void validateSelectedBlock ( ) ;
void handleComboAnimations ( ) ;
void updateScoreDisplay ( float fElapsedTime ) ;
} ;
# endif