generated from sigonasr2/CPlusPlusProjectTemplate
Fixed a major bug with sliding around blocks and causing invalid flicks
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
36b189dc50
commit
67485b006d
14
Board.cpp
14
Board.cpp
@ -21,15 +21,15 @@ maxWarningLevel(maxWarningLevel){
|
|||||||
BlockClump newClump;
|
BlockClump newClump;
|
||||||
BlockClump newClump2;
|
BlockClump newClump2;
|
||||||
newClump.addBlock(2,0,BlockColor::WHITE);
|
newClump.addBlock(2,0,BlockColor::WHITE);
|
||||||
newClump.addBlock(1,0,BlockColor::WHITE);
|
newClump.addBlock(1,0,BlockColor::BLUE);
|
||||||
newClump.addBlock(0,0,BlockColor::WHITE);
|
newClump.addBlock(0,0,BlockColor::GREEN);
|
||||||
newClump.addBlock(2,-1,BlockColor::RED);
|
newClump.addBlock(2,-1,BlockColor::RED);
|
||||||
newClump.addBlock(3,-1,BlockColor::RED);
|
newClump.addBlock(3,-1,BlockColor::LIGHT);
|
||||||
newClump2.addBlock(4,0,BlockColor::WHITE);
|
newClump2.addBlock(4,0,BlockColor::DARK);
|
||||||
newClump2.addBlock(5,0,BlockColor::WHITE);
|
newClump2.addBlock(5,0,BlockColor::SOUL);
|
||||||
newClump2.addBlock(6,0,BlockColor::WHITE);
|
newClump2.addBlock(6,0,BlockColor::TIME);
|
||||||
newClump2.addBlock(7,0,BlockColor::BLUE);
|
newClump2.addBlock(7,0,BlockColor::BLUE);
|
||||||
newClump2.addBlock(4,-1,BlockColor::RED);
|
newClump2.addBlock(4,-1,BlockColor::GREEN);
|
||||||
newClump2.addBlock(5,-1,BlockColor::RED);
|
newClump2.addBlock(5,-1,BlockColor::RED);
|
||||||
newClump.y=100;
|
newClump.y=100;
|
||||||
newClump2.y=100;
|
newClump2.y=100;
|
||||||
|
Binary file not shown.
39
main.cpp
39
main.cpp
@ -57,13 +57,13 @@ void Meteos::handleInput(){
|
|||||||
Block&b=gameBoard.getBlocks(mouseCol)[y];
|
Block&b=gameBoard.getBlocks(mouseCol)[y];
|
||||||
if (b.pos.y/12==mouseRow){
|
if (b.pos.y/12==mouseRow){
|
||||||
SelectedBlockData newData={mouseCol,y,-1};
|
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.
|
//See if these two can be swapped.
|
||||||
Block&b1=gameBoard.getBlock(gameBoard.selectedBlock);
|
Block&b1=gameBoard.getBlock(gameBoard.selectedBlock);
|
||||||
Block&b2=gameBoard.getBlock(newData);
|
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 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;
|
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!
|
//Swap the two!
|
||||||
BlockColor tempCol=b1.col;
|
BlockColor tempCol=b1.col;
|
||||||
b1.col=b2.col;
|
b1.col=b2.col;
|
||||||
@ -78,7 +78,7 @@ void Meteos::handleInput(){
|
|||||||
BlockClump&c=gameBoard.getBlockClumps()[i];
|
BlockClump&c=gameBoard.getBlockClumps()[i];
|
||||||
for (int j=0;j<c.getBlocks().size();j++){
|
for (int j=0;j<c.getBlocks().size();j++){
|
||||||
Block&b=c.getBlocks()[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};
|
SelectedBlockData newData={mouseCol,j,i};
|
||||||
if (gameBoard.selectedBlock.col!=-1&&mouseCol==gameBoard.selectedBlock.col){
|
if (gameBoard.selectedBlock.col!=-1&&mouseCol==gameBoard.selectedBlock.col){
|
||||||
//See if these two can be swapped.
|
//See if these two can be swapped.
|
||||||
@ -86,7 +86,7 @@ void Meteos::handleInput(){
|
|||||||
Block&b2=gameBoard.getBlock(newData);
|
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 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;
|
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!
|
//Swap the two!
|
||||||
BlockColor tempCol=b1.col;
|
BlockColor tempCol=b1.col;
|
||||||
b1.col=b2.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.
|
//Fling the block upwards.
|
||||||
BlockClump newClump;
|
BlockClump newClump;
|
||||||
Block&targetBlock=gameBoard.getBlocks(gameBoard.selectedBlock.col)[gameBoard.selectedBlock.ind];
|
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.removeBlock(gameBoard.selectedBlock.col,gameBoard.selectedBlock.ind);
|
||||||
gameBoard.selectedBlock={-1,-1,-1};
|
gameBoard.selectedBlock={-1,-1,-1};
|
||||||
}
|
}
|
||||||
|
notAllowed:;
|
||||||
}
|
}
|
||||||
if (GetMouse(0).bReleased){
|
if (GetMouse(0).bReleased){
|
||||||
gameBoard.selectedBlock={-1,-1,-1};
|
gameBoard.selectedBlock={-1,-1,-1};
|
||||||
@ -123,7 +133,7 @@ void Meteos::spawnBlocks(float fElapsedTime){
|
|||||||
lastBlockSpawn+=fElapsedTime;
|
lastBlockSpawn+=fElapsedTime;
|
||||||
if (lastBlockSpawn>=gameBoard.spawnRate){
|
if (lastBlockSpawn>=gameBoard.spawnRate){
|
||||||
lastBlockSpawn-=gameBoard.spawnRate;
|
lastBlockSpawn-=gameBoard.spawnRate;
|
||||||
gameBoard.spawnBlock(randBlockPos(gen));
|
//gameBoard.spawnBlock(randBlockPos(gen));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -745,11 +755,9 @@ void Meteos::matchGroundedBlocks(){
|
|||||||
assert(false);
|
assert(false);
|
||||||
}
|
}
|
||||||
c.addBlock(b2.pos.x/12,((int)gameBoard.getBlockClumps()[info.c].getBlockPosition(b2).y-(int)baseBlockPos.y)/12,b2.col);
|
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);
|
gameBoard.getBlockClumps()[info.c].removeBlock(i);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
std::cout<<"Blocks already added elsewhere"<<std::endl;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Block&b=gameBoard.getBlocks(info.col)[info.ind];
|
Block&b=gameBoard.getBlocks(info.col)[info.ind];
|
||||||
@ -762,7 +770,7 @@ void Meteos::matchGroundedBlocks(){
|
|||||||
assert(false);
|
assert(false);
|
||||||
}
|
}
|
||||||
c.addBlock(info.col,((int)b2.pos.y-(int)baseBlockPos.y)/12,b2.col);
|
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;
|
//b2.markedForRemoval=true;
|
||||||
gameBoard.removeBlock(info.col,i);
|
gameBoard.removeBlock(info.col,i);
|
||||||
}
|
}
|
||||||
@ -804,13 +812,13 @@ void Meteos::cleanupBlocks(){
|
|||||||
score+=BONUS_ATTACK_SCORE;
|
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.removeBlock(j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c.y+=c.vspeed;
|
c.y+=c.vspeed;
|
||||||
if (c.getBlocks().size()<=0) {
|
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);
|
gameBoard.removeClump(i);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -914,7 +922,7 @@ void Meteos::updateGame(float fElapsedTime){
|
|||||||
tempDisplayScore/=10;
|
tempDisplayScore/=10;
|
||||||
displayScoreDigits.insert(displayScoreDigits.begin(),digit);
|
displayScoreDigits.insert(displayScoreDigits.begin(),digit);
|
||||||
}
|
}
|
||||||
std::cout<<std::endl;
|
//std::cout<<std::endl;
|
||||||
int marker=0;
|
int marker=0;
|
||||||
while (marker<targetScoreDigits.size()||marker<displayScoreDigits.size()){
|
while (marker<targetScoreDigits.size()||marker<displayScoreDigits.size()){
|
||||||
int targetScoreDigit=marker<targetScoreDigits.size()?targetScoreDigits[targetScoreDigits.size()-1-marker]:0;
|
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){
|
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}+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});
|
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…
x
Reference in New Issue
Block a user