@ -288,7 +288,8 @@ void Meteos::updateGame(float fElapsedTime){
c . vspeed = gameBoard . launchSpd ;
c . launchTime = gameBoard . launchTime ;
c . combo + + ;
std : : cout < < " Combo value is " < < c . combo < < std : : endl ;
comboDisplayList . push_back ( { c . getBlockPosition ( c . getBlocks ( ) [ matchedBlockIDs [ 0 ] ] ) , c . combo } ) ;
//std::cout<<"Combo value is "<<c.combo<<std::endl;
}
}
std : : vector < BlockMatchingInfo > matchedBlockIDs ; //Col followed by index
@ -474,21 +475,21 @@ void Meteos::updateGame(float fElapsedTime){
if ( matchedBlockIDs . size ( ) > 0 ) {
BlockClump c ;
bool firstBlock = true ;
int baseBlockPos ;
vf2d baseBlockPos ;
for ( BlockMatchingInfo & info : matchedBlockIDs ) {
if ( info . c ! = - 1 ) {
Block & b = gameBoard . getBlockClumps ( ) [ info . c ] . getBlocks ( ) [ info . ind ] ;
if ( firstBlock ) {
baseBlockPos = gameBoard . getBlockClumps ( ) [ info . c ] . getBlockPosition ( b ) . y ;
c . y = baseBlockPos - 1 ;
baseBlockPos = gameBoard . getBlockClumps ( ) [ info . c ] . getBlockPosition ( b ) ;
c . y = baseBlockPos . y - 1 ;
firstBlock = false ;
}
b . col = BlockColor : : LAUNCHED ;
} else {
Block & b = gameBoard . getBlocks ( info . col ) [ info . ind ] ;
if ( firstBlock ) {
baseBlockPos = b . pos . y ;
c . y = baseBlockPos - 1 ;
baseBlockPos = b . pos ;
c . y = baseBlockPos . y - 1 ;
firstBlock = false ;
}
b . col = BlockColor : : LAUNCHED ;
@ -502,12 +503,12 @@ void Meteos::updateGame(float fElapsedTime){
}
for ( int i = gameBoard . getBlockClumps ( ) [ info . c ] . getBlocks ( ) . size ( ) - 1 ; i > = 0 ; i - - ) {
Block & b2 = gameBoard . getBlockClumps ( ) [ info . c ] . getBlocks ( ) [ i ] ;
if ( ( int ) fmod ( std : : abs ( std : : round ( gameBoard . getBlockClumps ( ) [ info . c ] . getBlockPosition ( b2 ) . y ) - std : : round ( baseBlockPos ) ) , 12 ) ! = 0 ) {
std : : cout < < " Difference is not equal to 0! Value: " < < ( int ) fmod ( std : : abs ( std : : round ( gameBoard . getBlockClumps ( ) [ info . c ] . getBlockPosition ( b2 ) . y ) - std : : round ( baseBlockPos ) ) , 12 ) < < " " < < gameBoard . getBlockClumps ( ) [ info . c ] . getBlockPosition ( b2 ) . y < < " // " < < baseBlockPos < < std : : endl ;
if ( ( int ) fmod ( std : : abs ( std : : round ( gameBoard . getBlockClumps ( ) [ info . c ] . getBlockPosition ( b2 ) . y ) - std : : round ( baseBlockPos . y ) ) , 12 ) ! = 0 ) {
std : : cout < < " Difference is not equal to 0! Value: " < < ( int ) fmod ( std : : abs ( std : : round ( gameBoard . getBlockClumps ( ) [ info . c ] . getBlockPosition ( b2 ) . y ) - std : : round ( baseBlockPos . y ) ) , 12 ) < < " " < < gameBoard . getBlockClumps ( ) [ info . c ] . getBlockPosition ( b2 ) . y < < " // " < < baseBlockPos . y < < std : : endl ;
assert ( false ) ;
}
c . addBlock ( b2 . pos . x / 12 , ( ( int ) gameBoard . getBlockClumps ( ) [ info . c ] . getBlockPosition ( b2 ) . y - ( int ) baseBlockPos ) / 12 , b2 . col ) ;
std : : cout < < " Added block @ " < < b2 . pos . x / 12 < < ( ( int ) gameBoard . getBlockClumps ( ) [ info . c ] . getBlockPosition ( b2 ) . y - ( int ) baseBlockPos ) / 12 < < std : : endl ;
c . addBlock ( b2 . pos . x / 12 , ( ( int ) gameBoard . getBlockClumps ( ) [ info . c ] . getBlockPosition ( b2 ) . y - ( int ) baseBlockPos . y ) / 12 , b2 . col ) ;
std : : cout < < " Added block @ " < < b2 . pos . x / 12 < < ( ( int ) gameBoard . getBlockClumps ( ) [ info . c ] . getBlockPosition ( b2 ) . y - ( int ) baseBlockPos . y ) / 12 < < std : : endl ;
gameBoard . getBlockClumps ( ) [ info . c ] . removeBlock ( i ) ;
}
} else {
@ -519,12 +520,12 @@ void Meteos::updateGame(float fElapsedTime){
for ( int i = gameBoard . getBlocks ( info . col ) . size ( ) - 1 ; i > = 0 ; i - - ) {
Block & b2 = gameBoard . getBlocks ( info . col ) [ i ] ;
if ( b2 . pos . y < = yPos ) {
if ( ( int ) fmod ( ( int ) b2 . pos . y - ( int ) baseBlockPos , 12 ) ! = 0 ) {
std : : cout < < " Difference is not equal to 0! Value: " < < ( int ) fmod ( ( int ) b2 . pos . y - ( int ) baseBlockPos , 12 ) < < " " < < b2 . pos . y < < " // " < < baseBlockPos < < std : : endl ;
if ( ( int ) fmod ( ( int ) b2 . pos . y - ( int ) baseBlockPos . y , 12 ) ! = 0 ) {
std : : cout < < " Difference is not equal to 0! Value: " < < ( int ) fmod ( ( int ) b2 . pos . y - ( int ) baseBlockPos . y , 12 ) < < " " < < b2 . pos . y < < " // " < < baseBlockPos . y < < std : : endl ;
assert ( false ) ;
}
c . addBlock ( info . col , ( ( int ) b2 . pos . y - ( int ) baseBlockPos ) / 12 , b2 . col ) ;
std : : cout < < " Added block @ " < < info . col < < ( ( int ) b2 . pos . y - ( int ) baseBlockPos ) / 12 < < std : : endl ;
c . addBlock ( info . col , ( ( int ) b2 . pos . y - ( int ) baseBlockPos . y ) / 12 , b2 . col ) ;
std : : cout < < " Added block @ " < < info . col < < ( ( int ) b2 . pos . y - ( int ) baseBlockPos . y ) / 12 < < std : : endl ;
//b2.markedForRemoval=true;
gameBoard . removeBlock ( info . col , i ) ;
}
@ -535,7 +536,8 @@ void Meteos::updateGame(float fElapsedTime){
gameBoard . getBlockClumps ( ) [ gameBoard . getBlockClumps ( ) . size ( ) - 1 ] . vspeed = gameBoard . launchSpd ;
gameBoard . getBlockClumps ( ) [ gameBoard . getBlockClumps ( ) . size ( ) - 1 ] . launchTime = gameBoard . launchTime ;
gameBoard . getBlockClumps ( ) [ gameBoard . getBlockClumps ( ) . size ( ) - 1 ] . combo + + ;
std : : cout < < " Combo value is " < < gameBoard . getBlockClumps ( ) [ gameBoard . getBlockClumps ( ) . size ( ) - 1 ] . combo < < std : : endl ;
comboDisplayList . push_back ( { baseBlockPos , gameBoard . getBlockClumps ( ) [ gameBoard . getBlockClumps ( ) . size ( ) - 1 ] . combo } ) ;
//std::cout<<"Combo value is "<<gameBoard.getBlockClumps()[gameBoard.getBlockClumps().size()-1].combo<<std::endl;
}
for ( int i = gameBoard . getBlockClumps ( ) . size ( ) - 1 ; i > = 0 ; i - - ) { //Resolve BlockClump movements.
BlockClump & c = gameBoard . getBlockClumps ( ) [ i ] ;
@ -634,6 +636,13 @@ void Meteos::updateGame(float fElapsedTime){
found : ;
}
}
for ( int i = comboDisplayList . size ( ) - 1 ; i > = 0 ; i - - ) {
ComboOverlay & c = comboDisplayList [ i ] ;
c . lifetime + + ;
if ( c . lifetime > 60 ) {
comboDisplayList . erase ( comboDisplayList . begin ( ) + i ) ;
}
}
}
void Meteos : : drawGame ( float fElapsedTime , bool debugView ) {
@ -662,6 +671,12 @@ void Meteos::drawGame(float fElapsedTime,bool debugView){
DrawPartialDecal ( b . pos + gameBoard . drawOffset , gameBoard . tileset , { ( float ) ( int ) b . col * 12 , 0 } , { 12 , 12 } , { 1 , 1 } , gameBoard . selectedBlock . col ! = - 1 & & gameBoard . selectedBlock . c = = - 1 & & gameBoard . selectedBlock . col = = i & & gameBoard . selectedBlock . ind = = y ? Pixel ( GREY . r , GREY . g , GREY . b , alpha ) : Pixel ( WHITE . r , WHITE . g , WHITE . b , alpha ) ) ;
}
}
for ( int i = 0 ; i < comboDisplayList . size ( ) ; i + + ) {
ComboOverlay & c = comboDisplayList [ i ] ;
vi2d shadowOffset = { 1 , 1 } ;
DrawStringPropDecal ( c . pos + gameBoard . drawOffset + shadowOffset , " x " + std : : to_string ( c . combo ) , BLACK , { 0.8 , 0.6 } ) ;
DrawStringPropDecal ( c . pos + gameBoard . drawOffset , " x " + std : : to_string ( c . combo ) , ( c . lifetime % 6 > = 3 ) ? Pixel { 207 , 103 , 0 } : Pixel { 255 , 255 , 255 , 180 } , { 0.8 , 0.6 } ) ;
}
}
int main ( )