|
|
|
@ -291,6 +291,24 @@ void Meteos::updateGame(float fElapsedTime){ |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (c.landTime>0){ |
|
|
|
|
for (int h=0;h<gameBoard.getBlockClumps().size();h++){ |
|
|
|
|
if (g==h)continue; |
|
|
|
|
BlockClump&c2=gameBoard.getBlockClumps()[h]; |
|
|
|
|
if (c2.landTime>0){ |
|
|
|
|
for (int j=0;j<c2.getBlocks().size();j++){ |
|
|
|
|
Block&b2=c2.getBlocks()[j]; |
|
|
|
|
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) { |
|
|
|
|
found=true; |
|
|
|
|
checkX+=12; |
|
|
|
|
tempMatchIDsX.push_back({(int)b2.pos.x/12,j,h}); |
|
|
|
|
goto outerRightCheck; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
outerRightCheck:; |
|
|
|
|
}while(found); |
|
|
|
|
leftCheck: |
|
|
|
|
checkX=targetX-12; |
|
|
|
@ -307,6 +325,23 @@ void Meteos::updateGame(float fElapsedTime){ |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (c.landTime>0){ |
|
|
|
|
for (int h=0;h<gameBoard.getBlockClumps().size();h++){ |
|
|
|
|
if (g==h)continue; |
|
|
|
|
BlockClump&c2=gameBoard.getBlockClumps()[h]; |
|
|
|
|
if (c2.landTime>0){ |
|
|
|
|
for (int j=0;j<c2.getBlocks().size();j++){ |
|
|
|
|
Block&b2=c2.getBlocks()[j]; |
|
|
|
|
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) { |
|
|
|
|
found=true; |
|
|
|
|
checkX-=12; |
|
|
|
|
tempMatchIDsX.push_back({(int)b2.pos.x/12,j,h}); |
|
|
|
|
goto outerRightCheck; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}while(found); |
|
|
|
|
upCheck: |
|
|
|
|
checkX=targetX; |
|
|
|
@ -323,6 +358,23 @@ void Meteos::updateGame(float fElapsedTime){ |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (c.landTime>0){ |
|
|
|
|
for (int h=0;h<gameBoard.getBlockClumps().size();h++){ |
|
|
|
|
if (g==h)continue; |
|
|
|
|
BlockClump&c2=gameBoard.getBlockClumps()[h]; |
|
|
|
|
if (c2.landTime>0){ |
|
|
|
|
for (int j=0;j<c2.getBlocks().size();j++){ |
|
|
|
|
Block&b2=c2.getBlocks()[j]; |
|
|
|
|
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) { |
|
|
|
|
found=true; |
|
|
|
|
checkY-=12; |
|
|
|
|
tempMatchIDsY.push_back({(int)b2.pos.x/12,j,h}); |
|
|
|
|
goto outerRightCheck; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}while(found); |
|
|
|
|
downCheck: |
|
|
|
|
checkX=targetX; |
|
|
|
@ -339,6 +391,23 @@ void Meteos::updateGame(float fElapsedTime){ |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (c.landTime>0){ |
|
|
|
|
for (int h=0;h<gameBoard.getBlockClumps().size();h++){ |
|
|
|
|
if (g==h)continue; |
|
|
|
|
BlockClump&c2=gameBoard.getBlockClumps()[h]; |
|
|
|
|
if (c2.landTime>0){ |
|
|
|
|
for (int j=0;j<c2.getBlocks().size();j++){ |
|
|
|
|
Block&b2=c2.getBlocks()[j]; |
|
|
|
|
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) { |
|
|
|
|
found=true; |
|
|
|
|
checkY+=12; |
|
|
|
|
tempMatchIDsY.push_back({(int)b2.pos.x/12,j,h}); |
|
|
|
|
goto outerRightCheck; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}while(found); |
|
|
|
|
if (tempMatchIDsX.size()>2||tempMatchIDsY.size()>2) { |
|
|
|
|
if (tempMatchIDsX.size()>2) { |
|
|
|
@ -362,8 +431,18 @@ void Meteos::updateGame(float fElapsedTime){ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for (BlockMatchingInfo i:matchedBlockIDs) { |
|
|
|
|
if (g==i.c){ |
|
|
|
|
Block&b=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind]; |
|
|
|
|
b.col=BlockColor::LAUNCHED; |
|
|
|
|
} else { |
|
|
|
|
Block&b=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind]; |
|
|
|
|
if (!b.markedForRemoval){ |
|
|
|
|
b.col=BlockColor::LAUNCHED; |
|
|
|
|
c.addBlock(i.col,(gameBoard.getBlockClumps()[i.c].getBlockPosition(b).y-c.y)/12,BlockColor::LAUNCHED); |
|
|
|
|
} |
|
|
|
|
b.col=BlockColor::LAUNCHED; |
|
|
|
|
b.markedForRemoval=true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (matchedBlockIDs.size()>0){ |
|
|
|
|
c.vspeed=gameBoard.launchSpd[std::min(c.combo,(int)gameBoard.launchSpd.size()-1)]/(1+(c.getBlocks().size()*gameBoard.blockWeight)); |
|
|
|
@ -374,6 +453,15 @@ void Meteos::updateGame(float fElapsedTime){ |
|
|
|
|
//std::cout<<"Combo value is "<<c.combo<<std::endl;
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for (int g=0;g<gameBoard.getBlockClumps().size();g++){ |
|
|
|
|
BlockClump&c=gameBoard.getBlockClumps()[g]; |
|
|
|
|
for (int i=0;i<c.getBlocks().size();i++){ |
|
|
|
|
Block&b=c.getBlocks()[i]; |
|
|
|
|
if (b.markedForRemoval){ |
|
|
|
|
c.removeBlock(i--); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
std::vector<BlockMatchingInfo>matchedBlockIDs; //Col followed by index
|
|
|
|
|
for (int i=0;i<gameBoard.boardSize.x;i++){ |
|
|
|
|
for (Block&b:gameBoard.getBlocks(i)) { |
|
|
|
|