Block matching info implemented for clumbs

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
sigonasr2 2022-12-13 22:02:26 -06:00
parent fc563a25aa
commit 80328a7855
3 changed files with 30 additions and 20 deletions

View File

@ -17,6 +17,15 @@ maxWarningLevel(maxWarningLevel){
warningFlashingLevel.push_back(0.f); warningFlashingLevel.push_back(0.f);
} }
clumps.reserve(100); clumps.reserve(100);
BlockClump test1;
test1.addBlock(4,BlockColor::WHITE);
test1.addBlock(5,BlockColor::WHITE);
BlockClump test2;
test2.y=0;
test2.addBlock(6,BlockColor::WHITE);
test2.addBlock(7,BlockColor::WHITE);
addClump(test1);
addClump(test2);
} }
void Board::spawnBlock(int col){ void Board::spawnBlock(int col){

Binary file not shown.

View File

@ -24,7 +24,7 @@ bool Meteos::OnUserCreate()
coinFlip=std::uniform_int_distribution<>(0, 1); coinFlip=std::uniform_int_distribution<>(0, 1);
comboOverlayOffset=std::uniform_int_distribution<>(-16,16); comboOverlayOffset=std::uniform_int_distribution<>(-16,16);
gameBoard=Board({10,14},0.02f,0.04f,1.2f,0.04f,0.4f,{-1.f,-1.5f,-2.f,-2.5f,-4.f},1.7f,2.0f,1.0f,{3,3,1,2,3,0,0,0,0,0}, gameBoard=Board({10,14},0.02f,0.04f,1.2f,0.04f,0.4f,{-1.f,-1.5f,-2.f,-2.5f,-4.f},1.7f,2.0f,0.2f,{3,3,1,2,3,0,0,0,0,0},
60*10,SPRITES["blocks_test.png"]); 60*10,SPRITES["blocks_test.png"]);
return true; return true;
@ -98,7 +98,7 @@ void Meteos::handleInput(){
} }
found:; found:;
} }
if (gameBoard.selectedBlock.c==-1&&gameBoard.selectedBlock.col!=-1&&gameBoard.boardSize.y-mouseRow>gameBoard.getBlocks(gameBoard.selectedBlock.col).size()){ 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){
//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];
@ -121,7 +121,7 @@ void Meteos::updateGame(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));
} }
for (int i=gameBoard.getBlockClumps().size()-1;i>=0;i--){ for (int i=gameBoard.getBlockClumps().size()-1;i>=0;i--){
BlockClump&c=gameBoard.getBlockClumps()[i]; BlockClump&c=gameBoard.getBlockClumps()[i];
@ -261,20 +261,21 @@ void Meteos::updateGame(float fElapsedTime){
c.landTime=0; c.landTime=0;
nextClump:; nextClump:;
} }
for (BlockClump&c:gameBoard.getBlockClumps()){ for (int g=0;g<gameBoard.getBlockClumps().size();g++){
std::vector<int>matchedBlockIDs; BlockClump&c=gameBoard.getBlockClumps()[g];
std::vector<BlockMatchingInfo>matchedBlockIDs;
for (Block&b:c.getBlocks()) { for (Block&b:c.getBlocks()) {
b.addedToLaunchList=false; b.addedToLaunchList=false;
} }
for (int i=0;i<c.getBlocks().size();i++) { for (int i=0;i<c.getBlocks().size();i++) {
Block&b=c.getBlocks()[i]; Block&b=c.getBlocks()[i];
std::vector<int>tempMatchIDsX; std::vector<BlockMatchingInfo>tempMatchIDsX;
std::vector<int>tempMatchIDsY; std::vector<BlockMatchingInfo>tempMatchIDsY;
float targetX=b.pos.x; float targetX=b.pos.x;
float targetY=b.pos.y; float targetY=b.pos.y;
bool found=false; bool found=false;
tempMatchIDsX.push_back(i); tempMatchIDsX.push_back({(int)b.pos.x/12,i,g});
tempMatchIDsY.push_back(i); tempMatchIDsY.push_back({(int)b.pos.x/12,i,g});
rightCheck: rightCheck:
float checkX=targetX+12; float checkX=targetX+12;
float checkY=targetY; float checkY=targetY;
@ -286,7 +287,7 @@ void Meteos::updateGame(float fElapsedTime){
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) { if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) {
found=true; found=true;
checkX+=12; checkX+=12;
tempMatchIDsX.push_back(j); tempMatchIDsX.push_back({(int)b.pos.x/12,j,g});
break; break;
} }
} }
@ -302,7 +303,7 @@ void Meteos::updateGame(float fElapsedTime){
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) { if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) {
found=true; found=true;
checkX-=12; checkX-=12;
tempMatchIDsX.push_back(j); tempMatchIDsX.push_back({(int)b.pos.x/12,j,g});
break; break;
} }
} }
@ -318,7 +319,7 @@ void Meteos::updateGame(float fElapsedTime){
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) { if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) {
found=true; found=true;
checkY-=12; checkY-=12;
tempMatchIDsY.push_back(j); tempMatchIDsY.push_back({(int)b.pos.x/12,j,g});
break; break;
} }
} }
@ -334,15 +335,15 @@ void Meteos::updateGame(float fElapsedTime){
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) { if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) {
found=true; found=true;
checkY+=12; checkY+=12;
tempMatchIDsY.push_back(j); tempMatchIDsY.push_back({(int)b.pos.x/12,j,g});
break; break;
} }
} }
}while(found); }while(found);
if (tempMatchIDsX.size()>2||tempMatchIDsY.size()>2) { if (tempMatchIDsX.size()>2||tempMatchIDsY.size()>2) {
if (tempMatchIDsX.size()>2) { if (tempMatchIDsX.size()>2) {
for (int i:tempMatchIDsX) { for (BlockMatchingInfo i:tempMatchIDsX) {
Block&bb=c.getBlocks()[i]; Block&bb=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind];
if (!bb.addedToLaunchList) { if (!bb.addedToLaunchList) {
bb.addedToLaunchList=true; bb.addedToLaunchList=true;
matchedBlockIDs.push_back(i); matchedBlockIDs.push_back(i);
@ -350,8 +351,8 @@ void Meteos::updateGame(float fElapsedTime){
} }
} }
if (tempMatchIDsY.size()>2) { if (tempMatchIDsY.size()>2) {
for (int i:tempMatchIDsY) { for (BlockMatchingInfo i:tempMatchIDsY) {
Block&bb=c.getBlocks()[i]; Block&bb=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind];
if (!bb.addedToLaunchList) { if (!bb.addedToLaunchList) {
bb.addedToLaunchList=true; bb.addedToLaunchList=true;
matchedBlockIDs.push_back(i); matchedBlockIDs.push_back(i);
@ -360,8 +361,8 @@ void Meteos::updateGame(float fElapsedTime){
} }
} }
} }
for (int i:matchedBlockIDs) { for (BlockMatchingInfo i:matchedBlockIDs) {
Block&b=c.getBlocks()[i]; Block&b=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind];
b.col=BlockColor::LAUNCHED; b.col=BlockColor::LAUNCHED;
} }
if (matchedBlockIDs.size()>0){ if (matchedBlockIDs.size()>0){
@ -369,7 +370,7 @@ void Meteos::updateGame(float fElapsedTime){
c.launchTime=gameBoard.launchTime; c.launchTime=gameBoard.launchTime;
c.combo++; c.combo++;
vi2d randomOffset={comboOverlayOffset(gen),comboOverlayOffset(gen)}; vi2d randomOffset={comboOverlayOffset(gen),comboOverlayOffset(gen)};
comboDisplayList.push_back({c.getBlockPosition(c.getBlocks()[matchedBlockIDs[0]])+randomOffset,c.combo}); comboDisplayList.push_back({c.getBlockPosition(gameBoard.getBlockClumps()[matchedBlockIDs[0].c].getBlocks()[matchedBlockIDs[0].ind])+randomOffset,c.combo});
//std::cout<<"Combo value is "<<c.combo<<std::endl; //std::cout<<"Combo value is "<<c.combo<<std::endl;
} }
} }