|
|
@ -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}); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|