@ -19,11 +19,11 @@ bool Meteos::OnUserCreate()
SPRITES [ " blocks_test.png " ] . Load ( " assets/blocks_test.png " ) ;
std : : random_device rd ; //Will be used to obtain a seed for the random number engine
gen = std : : mt19937 ( 0 ) ; //Standard mersenne_twister_engine seeded with rd()
gen = std : : mt19937 ( rd ( ) ) ; //Standard mersenne_twister_engine seeded with rd()
randBlockPos = std : : uniform_int_distribution < > ( 0 , 9 ) ;
coinFlip = std : : uniform_int_distribution < > ( 0 , 1 ) ;
gameBoard = Board ( { 10 , 14 } , 0.04f , 1.2f , - 1.f , 1.7f , 2.0f , 1.0f , { 3 , 3 , 1 , 2 , 3 , 0 , 0 , 0 , 0 , 0 } , SPRITES [ " blocks_test.png " ] ) ;
gameBoard = Board ( { 10 , 14 } , 0.04f , 1.2f , 0.04f , 0.4f , - 1.f , 1.7f , 2.0f , 1.0f , { 3 , 3 , 1 , 2 , 3 , 0 , 0 , 0 , 0 , 0 } , SPRITES [ " blocks_test.png " ] ) ;
return true ;
}
@ -58,12 +58,18 @@ void Meteos::updateGame(float fElapsedTime){
BlockClump & c = gameBoard . getBlockClumps ( ) [ i ] ;
if ( c . launchTime > 0 ) {
c . launchTime - = fElapsedTime ;
} else
if ( c . combo > 0 ) {
c . vspeed + = gameBoard . comboGravity ;
if ( c . vspeed > gameBoard . comboMaxGravity ) {
c . vspeed = gameBoard . comboMaxGravity ;
}
} else {
c . vspeed + = gameBoard . gravity ;
}
if ( c . vspeed > gameBoard . maxGravity ) {
c . vspeed = gameBoard . maxGravity ;
}
}
for ( int j = gameBoard . getBlockClumps ( ) . size ( ) - 1 ; j > = 0 ; j - - ) {
if ( i = = j ) continue ;
BlockClump & c2 = gameBoard . getBlockClumps ( ) [ j ] ;
@ -131,13 +137,9 @@ void Meteos::updateGame(float fElapsedTime){
if ( overlappingBlocks ) {
std : : cout < < " Block b3 " < < b3 . pos < < " ! " < < std : : endl ;
}
if ( c . vspeed > 0 ) {
c . vspeed / = 4 ;
}
if ( c2 . vspeed > 0 ) {
c2 . vspeed / = 4 ;
}
c . vspeed = c . vspeed * influence + c2 . vspeed * ( 1 - influence ) ;
c . vspeed = std : : min ( c . vspeed , c2 . vspeed ) ;
c . combo = std : : max ( c . combo , c2 . combo ) ;
c . landTime = std : : max ( c . landTime , c2 . landTime ) ;
c . sortBlocks ( ) ;
if ( i > = j ) {
i - - ;
@ -281,8 +283,12 @@ void Meteos::updateGame(float fElapsedTime){
for ( int i : matchedBlockIDs ) {
Block & b = c . getBlocks ( ) [ i ] ;
b . col = BlockColor : : LAUNCHED ;
}
if ( matchedBlockIDs . size ( ) > 0 ) {
c . vspeed = gameBoard . launchSpd ;
c . launchTime = gameBoard . launchTime ;
c . combo + + ;
std : : cout < < " Combo value is " < < c . combo < < std : : endl ;
}
}
std : : vector < BlockMatchingInfo > matchedBlockIDs ; //Col followed by index
@ -491,10 +497,13 @@ void Meteos::updateGame(float fElapsedTime){
for ( BlockMatchingInfo & info : matchedBlockIDs ) {
if ( info . c ! = - 1 ) {
if ( gameBoard . getBlockClumps ( ) [ info . c ] . getBlocks ( ) . size ( ) > 0 ) {
if ( c . combo < gameBoard . getBlockClumps ( ) [ info . c ] . combo ) {
c . combo = gameBoard . getBlockClumps ( ) [ info . c ] . combo ;
}
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 ( ( int ) gameBoard . getBlockClumps ( ) [ info . c ] . getBlockPosition ( b2 ) . y - ( int ) baseBlockPos ) , 12 ) ! = 0 ) {
std : : cout < < " Difference is not equal to 0! Value: " < < ( int ) fmod ( std : : abs ( ( int ) gameBoard . getBlockClumps ( ) [ info . c ] . getBlockPosition ( b2 ) . y - ( int ) 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 ) ) , 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 ;
assert ( false ) ;
}
c . addBlock ( b2 . pos . x / 12 , ( ( int ) gameBoard . getBlockClumps ( ) [ info . c ] . getBlockPosition ( b2 ) . y - ( int ) baseBlockPos ) / 12 , b2 . col ) ;
@ -525,6 +534,8 @@ void Meteos::updateGame(float fElapsedTime){
gameBoard . addClump ( c ) ;
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 ;
}
for ( int i = gameBoard . getBlockClumps ( ) . size ( ) - 1 ; i > = 0 ; i - - ) { //Resolve BlockClump movements.
BlockClump & c = gameBoard . getBlockClumps ( ) [ i ] ;
@ -643,6 +654,7 @@ void Meteos::drawGame(float fElapsedTime,bool debugView){
Block & b = c . getBlocks ( ) [ j ] ;
DrawPartialDecal ( c . getBlockPosition ( b ) + gameBoard . drawOffset , gameBoard . tileset , { ( float ) ( int ) b . col * 12 , 0 } , { 12 , 12 } , { 1 , 1 } , gameBoard . selectedBlock . col ! = - 1 & & gameBoard . selectedBlock . ind = = j & & gameBoard . selectedBlock . c = = i ? Pixel ( GREY . r , GREY . g , GREY . b , alpha ) : Pixel ( WHITE . r , WHITE . g , WHITE . b , alpha ) ) ;
}
//DrawStringDecal({32,c.y+i%4*4},std::to_string(c.landTime),WHITE,{0.4,0.4}); //Draws land times per clump.
}
for ( int i = 0 ; i < gameBoard . boardSize . x ; i + + ) {
for ( int y = 0 ; y < gameBoard . getBlocks ( i ) . size ( ) ; y + + ) {