Fixed a major bug with sliding around blocks and causing invalid flicks

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
master
sigonasr2 2 years ago
parent 36b189dc50
commit 67485b006d
  1. 14
      Board.cpp
  2. BIN
      C++ProjectTemplate
  3. 39
      main.cpp

@ -21,15 +21,15 @@ maxWarningLevel(maxWarningLevel){
BlockClump newClump;
BlockClump newClump2;
newClump.addBlock(2,0,BlockColor::WHITE);
newClump.addBlock(1,0,BlockColor::WHITE);
newClump.addBlock(0,0,BlockColor::WHITE);
newClump.addBlock(1,0,BlockColor::BLUE);
newClump.addBlock(0,0,BlockColor::GREEN);
newClump.addBlock(2,-1,BlockColor::RED);
newClump.addBlock(3,-1,BlockColor::RED);
newClump2.addBlock(4,0,BlockColor::WHITE);
newClump2.addBlock(5,0,BlockColor::WHITE);
newClump2.addBlock(6,0,BlockColor::WHITE);
newClump.addBlock(3,-1,BlockColor::LIGHT);
newClump2.addBlock(4,0,BlockColor::DARK);
newClump2.addBlock(5,0,BlockColor::SOUL);
newClump2.addBlock(6,0,BlockColor::TIME);
newClump2.addBlock(7,0,BlockColor::BLUE);
newClump2.addBlock(4,-1,BlockColor::RED);
newClump2.addBlock(4,-1,BlockColor::GREEN);
newClump2.addBlock(5,-1,BlockColor::RED);
newClump.y=100;
newClump2.y=100;

Binary file not shown.

@ -57,13 +57,13 @@ void Meteos::handleInput(){
Block&b=gameBoard.getBlocks(mouseCol)[y];
if (b.pos.y/12==mouseRow){
SelectedBlockData newData={mouseCol,y,-1};
if (gameBoard.selectedBlock.col!=-1&&mouseCol==gameBoard.selectedBlock.col){
if (gameBoard.selectedBlock.col!=-1&&mouseCol==gameBoard.selectedBlock.col&&newData.col==mouseCol){
//See if these two can be swapped.
Block&b1=gameBoard.getBlock(gameBoard.selectedBlock);
Block&b2=gameBoard.getBlock(newData);
int y1=(gameBoard.selectedBlock.c!=-1)?gameBoard.getBlockClumps()[gameBoard.selectedBlock.c].getBlockPosition(gameBoard.getBlockClumps()[gameBoard.selectedBlock.c].getBlocks()[gameBoard.selectedBlock.ind]).y:gameBoard.getBlocks(gameBoard.selectedBlock.col)[gameBoard.selectedBlock.ind].pos.y;
int y2=(newData.c!=-1)?gameBoard.getBlockClumps()[newData.c].getBlockPosition(gameBoard.getBlockClumps()[newData.c].getBlocks()[newData.ind]).y:gameBoard.getBlocks(newData.col)[newData.ind].pos.y;
if (b1.pos.x==b2.pos.x&&std::abs(y1-y2)<=12){
if (b1.pos.x==b2.pos.x&&std::abs(y1-y2)<=12&&&b1!=&b2){
//Swap the two!
BlockColor tempCol=b1.col;
b1.col=b2.col;
@ -78,7 +78,7 @@ void Meteos::handleInput(){
BlockClump&c=gameBoard.getBlockClumps()[i];
for (int j=0;j<c.getBlocks().size();j++){
Block&b=c.getBlocks()[j];
if (b.pos.x/12==mouseCol&&c.getBlockPosition(b).y<=mouseY&&c.getBlockPosition(b).y+12>=mouseY){
if (b.pos.x/12==mouseCol&&c.getBlockPosition(b).y<=mouseY&&c.getBlockPosition(b).y+12>mouseY){
SelectedBlockData newData={mouseCol,j,i};
if (gameBoard.selectedBlock.col!=-1&&mouseCol==gameBoard.selectedBlock.col){
//See if these two can be swapped.
@ -86,7 +86,7 @@ void Meteos::handleInput(){
Block&b2=gameBoard.getBlock(newData);
int y1=(gameBoard.selectedBlock.c!=-1)?gameBoard.getBlockClumps()[gameBoard.selectedBlock.c].getBlockPosition(gameBoard.getBlockClumps()[gameBoard.selectedBlock.c].getBlocks()[gameBoard.selectedBlock.ind]).y:gameBoard.getBlocks(gameBoard.selectedBlock.col)[gameBoard.selectedBlock.ind].pos.y;
int y2=(newData.c!=-1)?gameBoard.getBlockClumps()[newData.c].getBlockPosition(gameBoard.getBlockClumps()[newData.c].getBlocks()[newData.ind]).y:gameBoard.getBlocks(newData.col)[newData.ind].pos.y;
if (b1.pos.x==b2.pos.x&&std::abs(y1-y2)<=12){
if (b1.pos.x==b2.pos.x&&std::abs(y1-y2)<=12&&&b1!=&b2){
//Swap the two!
BlockColor tempCol=b1.col;
b1.col=b2.col;
@ -98,9 +98,18 @@ void Meteos::handleInput(){
}
}
}
found:;
}
if (gameBoard.selectedBlock.c==-1&&gameBoard.selectedBlock.col!=-1&&gameBoard.boardSize.y-mouseRow>gameBoard.getBlocks(gameBoard.selectedBlock.col).size()&&gameBoard.getBlocks(gameBoard.selectedBlock.col)[gameBoard.selectedBlock.ind].pos.y>12){
found:
if (gameBoard.selectedBlock.c==-1&&gameBoard.selectedBlock.col!=-1&&mouseRow<gameBoard.boardSize.y&&gameBoard.selectedBlock.ind==gameBoard.getBlocks(gameBoard.selectedBlock.col).size()-1&&gameBoard.boardSize.y-mouseRow>gameBoard.getBlocks(gameBoard.selectedBlock.col).size()&&gameBoard.getBlocks(gameBoard.selectedBlock.col)[gameBoard.selectedBlock.ind].pos.y>12){
for (int i=0;i<gameBoard.getBlockClumps().size();i++){
BlockClump&c=gameBoard.getBlockClumps()[i];
for (int j=0;j<c.getBlocks().size();j++){
Block&b=c.getBlocks()[j];
if (b.pos.x/12==gameBoard.selectedBlock.col&&gameBoard.getBlocks(gameBoard.selectedBlock.col)[gameBoard.selectedBlock.ind].pos.y-b.pos.y<=12){
goto notAllowed;
}
}
}
//Fling the block upwards.
BlockClump newClump;
Block&targetBlock=gameBoard.getBlocks(gameBoard.selectedBlock.col)[gameBoard.selectedBlock.ind];
@ -113,6 +122,7 @@ void Meteos::handleInput(){
gameBoard.removeBlock(gameBoard.selectedBlock.col,gameBoard.selectedBlock.ind);
gameBoard.selectedBlock={-1,-1,-1};
}
notAllowed:;
}
if (GetMouse(0).bReleased){
gameBoard.selectedBlock={-1,-1,-1};
@ -123,7 +133,7 @@ void Meteos::spawnBlocks(float fElapsedTime){
lastBlockSpawn+=fElapsedTime;
if (lastBlockSpawn>=gameBoard.spawnRate){
lastBlockSpawn-=gameBoard.spawnRate;
gameBoard.spawnBlock(randBlockPos(gen));
//gameBoard.spawnBlock(randBlockPos(gen));
}
}
@ -745,11 +755,9 @@ void Meteos::matchGroundedBlocks(){
assert(false);
}
c.addBlock(b2.pos.x/12,((int)gameBoard.getBlockClumps()[info.c].getBlockPosition(b2).y-(int)baseBlockPos.y)/12,b2.col);
std::cout<<"Added block @"<<b2.pos.x/12<<((int)gameBoard.getBlockClumps()[info.c].getBlockPosition(b2).y-(int)baseBlockPos.y)/12<<std::endl;
//std::cout<<"Added block @"<<b2.pos.x/12<<((int)gameBoard.getBlockClumps()[info.c].getBlockPosition(b2).y-(int)baseBlockPos.y)/12<<std::endl;
gameBoard.getBlockClumps()[info.c].removeBlock(i);
}
} else {
std::cout<<"Blocks already added elsewhere"<<std::endl;
}
} else {
Block&b=gameBoard.getBlocks(info.col)[info.ind];
@ -762,7 +770,7 @@ void Meteos::matchGroundedBlocks(){
assert(false);
}
c.addBlock(info.col,((int)b2.pos.y-(int)baseBlockPos.y)/12,b2.col);
std::cout<<"Added block @"<<info.col<<((int)b2.pos.y-(int)baseBlockPos.y)/12<<std::endl;
//std::cout<<"Added block @"<<info.col<<((int)b2.pos.y-(int)baseBlockPos.y)/12<<std::endl;
//b2.markedForRemoval=true;
gameBoard.removeBlock(info.col,i);
}
@ -804,13 +812,13 @@ void Meteos::cleanupBlocks(){
score+=BONUS_ATTACK_SCORE;
}
}
std::cout<<"Removed block @"<<b.pos<<" from clump "<<i<<std::endl;
//std::cout<<"Removed block @"<<b.pos<<" from clump "<<i<<std::endl;
c.removeBlock(j);
}
}
c.y+=c.vspeed;
if (c.getBlocks().size()<=0) {
std::cout<<"Block Clump "<<i<<" is empty. Removing."<<std::endl;
//std::cout<<"Block Clump "<<i<<" is empty. Removing."<<std::endl;
gameBoard.removeClump(i);
continue;
}
@ -914,7 +922,7 @@ void Meteos::updateGame(float fElapsedTime){
tempDisplayScore/=10;
displayScoreDigits.insert(displayScoreDigits.begin(),digit);
}
std::cout<<std::endl;
//std::cout<<std::endl;
int marker=0;
while (marker<targetScoreDigits.size()||marker<displayScoreDigits.size()){
int targetScoreDigit=marker<targetScoreDigits.size()?targetScoreDigits[targetScoreDigits.size()-1-marker]:0;
@ -974,6 +982,9 @@ void Meteos::drawGame(float fElapsedTime,bool debugView){
if (accumulatedScore>0){
DrawStringDecal(gameBoard.drawOffset+vi2d{0,-8}+vi2d{1,1},"+"+std::to_string(accumulatedScore),BLACK,{0.75,0.75});
DrawStringDecal(gameBoard.drawOffset+vi2d{0,-8},"+"+std::to_string(accumulatedScore),frameTime%5>2?Pixel{224, 184, 148}:WHITE,{0.75,0.75});
GradientFillRectDecal(gameBoard.drawOffset+vi2d{gameBoard.boardSize.x*12+16,0}, {32,32}, BLACK, VERY_DARK_GREEN, VERY_DARK_GREEN, BLACK);
DrawRectDecal(gameBoard.drawOffset+vi2d{gameBoard.boardSize.x*12+16,0}, {32,32}, DARK_YELLOW);
DrawStringDecal(gameBoard.drawOffset+vi2d{gameBoard.boardSize.x*12+16,8},std::to_string(blocksInAttackQueue),{66, 125, 92});
}
}

Loading…
Cancel
Save