generated from sigonasr2/CPlusPlusProjectTemplate
Interjoining of two block clumps
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
9ae5505993
commit
9ada6ed0e0
21
Board.cpp
21
Board.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);
|
||||
}
|
1
Board.h
1
Board.h
@ -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.
31
main.cpp
31
main.cpp
@ -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…
x
Reference in New Issue
Block a user