Interjoining of two block clumps

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
master
sigonasr2 2 years ago
parent 9ae5505993
commit 9ada6ed0e0
  1. 21
      Board.cpp
  2. 1
      Board.h
  3. BIN
      C++ProjectTemplate
  4. 31
      main.cpp

@ -9,6 +9,21 @@ Board::Board(vi2d boardSize,float gravity,float spawnRate)
for (int i=0;i<boardSize.x;i++) {
cols.push_back(std::vector<Block>());
}
BlockClump c=BlockClump();
c.addBlock(0,0);
c.addBlock(1,0);
c.addBlock(2,0);
c.vspeed=-20;
c.y=yBottom-12;
BlockClump c2=BlockClump();
c2.addBlock(0,0);
c2.addBlock(1,0);
c2.addBlock(1,-1);
c2.addBlock(2,0);
c2.vspeed=20;
c2.y=24;
clumps.push_back(c);
clumps.push_back(c2);
}
void Board::spawnBlock(int col){
@ -45,6 +60,10 @@ std::vector<BlockClump>&Board::getBlockClumps(){
}
void Board::removeClump(int ind){
clumps.erase(clumps.begin()+ind);
}
void Board::convertClump(int ind){
BlockClump&c=clumps[ind];
for (Block&b:c.getBlocks()){
if (b.markedForDeletion) continue;
@ -75,5 +94,5 @@ void Board::removeClump(int ind){
cols[b.pos.x/12].push_back(b);
}
}
clumps.erase(clumps.begin()+ind);
removeClump(ind);
}

@ -19,6 +19,7 @@ class Board{
void spawnBlock(int col);
std::vector<Block>&getBlocks(int col);
std::vector<BlockClump>&getBlockClumps();
void convertClump(int ind);
void removeClump(int ind);
};
#endif

Binary file not shown.

@ -38,6 +38,33 @@ bool Meteos::OnUserUpdate(float fElapsedTime)
for (int i=0;i<gameBoard.getBlockClumps().size();i++){
BlockClump&c=gameBoard.getBlockClumps()[i];
c.vspeed+=gameBoard.gravity*fElapsedTime;
for (int j=0;j<gameBoard.getBlockClumps().size();j++) {
if (i==j) continue;
BlockClump&c2=gameBoard.getBlockClumps()[j];
for (int k=0;k<c2.getBlocks().size();k++) {
Block&b2=c2.getBlocks()[k];
for (int l=0;l<c.getBlocks().size();l++) {
Block&b3=c.getBlocks()[l];
if (c2.getBlockPosition(b2).x==c.getBlockPosition(b3).x&&
c2.getBlockPosition(b2).y+12>=c.getBlockPosition(b3).y&&
c2.getBlockPosition(b2).y<=c.getBlockPosition(b3).y+12) {
float yDiff=c2.getBlockPosition(b2).y;
float snapYPos=c.getBlockPosition(b3).y;
yDiff-=snapYPos;
c2.y+=yDiff;
//Copy every block from one clump to the other
for (int m=0;m<c2.getBlocks().size();m++) {
Block&b4=c2.getBlocks()[m];
c.addBlock(b4.pos.x/12,(c2.getBlockPosition(b4).y-c.y)/12);
}
c.vspeed+=c2.vspeed;
gameBoard.removeClump(j--);
goto nextClumpCollisionCheck;
}
}
}
}
nextClumpCollisionCheck:;
for (int j=0;j<c.getBlocks().size();j++){
Block&b=c.getBlocks()[j];
int col=b.pos.x/12;
@ -46,14 +73,14 @@ bool Meteos::OnUserUpdate(float fElapsedTime)
if (c.getBlockPosition(b).y+12>=b2.pos.y&&c.getBlockPosition(b).y<=b2.pos.y+12){
c.y=b2.pos.y-12;
c.vspeed=0;
gameBoard.removeClump(i--);
gameBoard.convertClump(i--);
goto nextClump;
}
}
if (c.getBlockPosition(b).y>=gameBoard.yBottom) {
c.y=gameBoard.yBottom;
c.vspeed=0;
gameBoard.removeClump(i--);
gameBoard.convertClump(i--);
goto nextClump;
}
}

Loading…
Cancel
Save