Attempt #7?!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Meteos/Board.cpp

71 lines
1.9 KiB

#include "gameDefines.h"
extern Meteos*game;
Board::Board(vi2d boardSize,float gravity,float spawnRate)
:boardSize(boardSize),gravity(gravity),spawnRate(spawnRate){
drawOffset={(float)game->ScreenWidth()/2-boardSize.x/2*12,(float)game->ScreenHeight()/2-boardSize.y/2*12};
yBottom=(boardSize.y-1)*12;
for (int i=0;i<boardSize.x;i++) {
cols.push_back(std::vector<Block>());
}
}
void Board::spawnBlock(int col){
BlockClump c=BlockClump();
c.addBlock(col);
if (game->coinFlip(game->gen)==0) {
if (col>0) {
c.addBlock(col-1);
}
}
if (game->coinFlip(game->gen)==0) {
if (col<boardSize.x-1) {
c.addBlock(col+1);
}
}
clumps.push_back(c);
}
std::vector<Block>&Board::getBlocks(int col){
return cols[col];
}
std::vector<BlockClump>&Board::getBlockClumps(){
return clumps;
}
void Board::removeClump(int ind){
BlockClump&c=clumps[ind];
for (Block&b:c.getBlocks()){
if (b.markedForDeletion) continue;
vf2d relativePos=b.pos;
b.pos=c.getBlockPosition(b);
bool emptyAirBelow=true;
for (int i=0;i<cols[b.pos.x/12].size();i++) {
Block&b2=cols[b.pos.x/12][i];
if (b.pos.y+12>=b2.pos.y&&b.pos.y<=b2.pos.y+12) {
emptyAirBelow=false;
break;
}
}
if (b.pos.y>=yBottom) {
emptyAirBelow=false;
}
if (emptyAirBelow) {
BlockClump c2;
for (int i=0;i<c.getBlocks().size();i++) {
Block&b2=c.getBlocks()[i];
if (b.pos.x==b2.pos.x) {
b2.markedForDeletion=true;
c2.addBlock(relativePos);
}
c2.y=c.y;
}
clumps.push_back(c2);
} else {
cols[b.pos.x/12].push_back(b);
}
}
clumps.erase(clumps.begin()+ind);
}