|
|
@ -14,14 +14,23 @@ Board::Board(vi2d boardSize,float gravity,float spawnRate) |
|
|
|
void Board::spawnBlock(int col){ |
|
|
|
void Board::spawnBlock(int col){ |
|
|
|
BlockClump c=BlockClump(); |
|
|
|
BlockClump c=BlockClump(); |
|
|
|
c.addBlock(col); |
|
|
|
c.addBlock(col); |
|
|
|
|
|
|
|
for(int counter=1;game->coinFlip(game->gen)==0;counter++) { |
|
|
|
|
|
|
|
c.addBlock(col,-counter); |
|
|
|
|
|
|
|
} |
|
|
|
if (game->coinFlip(game->gen)==0) { |
|
|
|
if (game->coinFlip(game->gen)==0) { |
|
|
|
if (col>0) { |
|
|
|
if (col>0) { |
|
|
|
c.addBlock(col-1); |
|
|
|
c.addBlock(col-1); |
|
|
|
|
|
|
|
for(int counter=1;game->coinFlip(game->gen)==0;counter++) { |
|
|
|
|
|
|
|
c.addBlock(col-1,-counter); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (game->coinFlip(game->gen)==0) { |
|
|
|
if (game->coinFlip(game->gen)==0) { |
|
|
|
if (col<boardSize.x-1) { |
|
|
|
if (col<boardSize.x-1) { |
|
|
|
c.addBlock(col+1); |
|
|
|
c.addBlock(col+1); |
|
|
|
|
|
|
|
for(int counter=1;game->coinFlip(game->gen)==0;counter++) { |
|
|
|
|
|
|
|
c.addBlock(col+1,-counter); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
clumps.push_back(c); |
|
|
|
clumps.push_back(c); |
|
|
@ -39,31 +48,30 @@ void Board::removeClump(int ind){ |
|
|
|
BlockClump&c=clumps[ind]; |
|
|
|
BlockClump&c=clumps[ind]; |
|
|
|
for (Block&b:c.getBlocks()){ |
|
|
|
for (Block&b:c.getBlocks()){ |
|
|
|
if (b.markedForDeletion) continue; |
|
|
|
if (b.markedForDeletion) continue; |
|
|
|
vf2d relativePos=b.pos; |
|
|
|
|
|
|
|
b.pos=c.getBlockPosition(b); |
|
|
|
|
|
|
|
bool emptyAirBelow=true; |
|
|
|
bool emptyAirBelow=true; |
|
|
|
for (int i=0;i<cols[b.pos.x/12].size();i++) { |
|
|
|
for (int i=0;i<cols[b.pos.x/12].size();i++) { |
|
|
|
Block&b2=cols[b.pos.x/12][i]; |
|
|
|
Block&b2=cols[b.pos.x/12][i]; |
|
|
|
if (b.pos.y+12>=b2.pos.y&&b.pos.y<=b2.pos.y+12) { |
|
|
|
if (c.getBlockPosition(b).y+12>=b2.pos.y&&c.getBlockPosition(b).y<=b2.pos.y+12) { |
|
|
|
emptyAirBelow=false; |
|
|
|
emptyAirBelow=false; |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (b.pos.y>=yBottom) { |
|
|
|
if (c.getBlockPosition(b).y>=yBottom) { |
|
|
|
emptyAirBelow=false; |
|
|
|
emptyAirBelow=false; |
|
|
|
} |
|
|
|
} |
|
|
|
if (emptyAirBelow) { |
|
|
|
if (emptyAirBelow) { |
|
|
|
BlockClump c2; |
|
|
|
BlockClump c2; |
|
|
|
for (int i=0;i<c.getBlocks().size();i++) { |
|
|
|
for (int i=0;i<c.getBlocks().size();i++) { |
|
|
|
Block&b2=c.getBlocks()[i]; |
|
|
|
Block&b2=c.getBlocks()[i]; |
|
|
|
if (b.pos.x==b2.pos.x) { |
|
|
|
if (c.getBlockPosition(b).x==b2.pos.x) { |
|
|
|
b2.markedForDeletion=true; |
|
|
|
b2.markedForDeletion=true; |
|
|
|
c2.addBlock(relativePos); |
|
|
|
c2.addBlock(b2.pos); |
|
|
|
} |
|
|
|
} |
|
|
|
c2.y=c.y; |
|
|
|
c2.y=c.y; |
|
|
|
} |
|
|
|
} |
|
|
|
clumps.push_back(c2); |
|
|
|
clumps.push_back(c2); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
|
|
|
|
b.pos=c.getBlockPosition(b); |
|
|
|
cols[b.pos.x/12].push_back(b); |
|
|
|
cols[b.pos.x/12].push_back(b); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|