|
|
|
@ -24,7 +24,7 @@ bool Meteos::OnUserCreate() |
|
|
|
|
coinFlip=std::uniform_int_distribution<>(0, 1); |
|
|
|
|
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"]); |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
@ -98,7 +98,7 @@ void Meteos::handleInput(){ |
|
|
|
|
} |
|
|
|
|
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.
|
|
|
|
|
BlockClump newClump; |
|
|
|
|
Block&targetBlock=gameBoard.getBlocks(gameBoard.selectedBlock.col)[gameBoard.selectedBlock.ind]; |
|
|
|
@ -121,7 +121,7 @@ void Meteos::updateGame(float fElapsedTime){ |
|
|
|
|
lastBlockSpawn+=fElapsedTime; |
|
|
|
|
if (lastBlockSpawn>=gameBoard.spawnRate){ |
|
|
|
|
lastBlockSpawn-=gameBoard.spawnRate; |
|
|
|
|
gameBoard.spawnBlock(randBlockPos(gen)); |
|
|
|
|
//gameBoard.spawnBlock(randBlockPos(gen));
|
|
|
|
|
} |
|
|
|
|
for (int i=gameBoard.getBlockClumps().size()-1;i>=0;i--){ |
|
|
|
|
BlockClump&c=gameBoard.getBlockClumps()[i]; |
|
|
|
@ -261,20 +261,21 @@ void Meteos::updateGame(float fElapsedTime){ |
|
|
|
|
c.landTime=0; |
|
|
|
|
nextClump:; |
|
|
|
|
} |
|
|
|
|
for (BlockClump&c:gameBoard.getBlockClumps()){ |
|
|
|
|
std::vector<int>matchedBlockIDs; |
|
|
|
|
for (int g=0;g<gameBoard.getBlockClumps().size();g++){ |
|
|
|
|
BlockClump&c=gameBoard.getBlockClumps()[g]; |
|
|
|
|
std::vector<BlockMatchingInfo>matchedBlockIDs; |
|
|
|
|
for (Block&b:c.getBlocks()) { |
|
|
|
|
b.addedToLaunchList=false; |
|
|
|
|
} |
|
|
|
|
for (int i=0;i<c.getBlocks().size();i++) { |
|
|
|
|
Block&b=c.getBlocks()[i]; |
|
|
|
|
std::vector<int>tempMatchIDsX; |
|
|
|
|
std::vector<int>tempMatchIDsY; |
|
|
|
|
std::vector<BlockMatchingInfo>tempMatchIDsX; |
|
|
|
|
std::vector<BlockMatchingInfo>tempMatchIDsY; |
|
|
|
|
float targetX=b.pos.x; |
|
|
|
|
float targetY=b.pos.y; |
|
|
|
|
bool found=false; |
|
|
|
|
tempMatchIDsX.push_back(i); |
|
|
|
|
tempMatchIDsY.push_back(i); |
|
|
|
|
tempMatchIDsX.push_back({(int)b.pos.x/12,i,g}); |
|
|
|
|
tempMatchIDsY.push_back({(int)b.pos.x/12,i,g}); |
|
|
|
|
rightCheck: |
|
|
|
|
float checkX=targetX+12; |
|
|
|
|
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) { |
|
|
|
|
found=true; |
|
|
|
|
checkX+=12; |
|
|
|
|
tempMatchIDsX.push_back(j); |
|
|
|
|
tempMatchIDsX.push_back({(int)b.pos.x/12,j,g}); |
|
|
|
|
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) { |
|
|
|
|
found=true; |
|
|
|
|
checkX-=12; |
|
|
|
|
tempMatchIDsX.push_back(j); |
|
|
|
|
tempMatchIDsX.push_back({(int)b.pos.x/12,j,g}); |
|
|
|
|
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) { |
|
|
|
|
found=true; |
|
|
|
|
checkY-=12; |
|
|
|
|
tempMatchIDsY.push_back(j); |
|
|
|
|
tempMatchIDsY.push_back({(int)b.pos.x/12,j,g}); |
|
|
|
|
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) { |
|
|
|
|
found=true; |
|
|
|
|
checkY+=12; |
|
|
|
|
tempMatchIDsY.push_back(j); |
|
|
|
|
tempMatchIDsY.push_back({(int)b.pos.x/12,j,g}); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}while(found); |
|
|
|
|
if (tempMatchIDsX.size()>2||tempMatchIDsY.size()>2) { |
|
|
|
|
if (tempMatchIDsX.size()>2) { |
|
|
|
|
for (int i:tempMatchIDsX) { |
|
|
|
|
Block&bb=c.getBlocks()[i]; |
|
|
|
|
for (BlockMatchingInfo i:tempMatchIDsX) { |
|
|
|
|
Block&bb=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind]; |
|
|
|
|
if (!bb.addedToLaunchList) { |
|
|
|
|
bb.addedToLaunchList=true; |
|
|
|
|
matchedBlockIDs.push_back(i); |
|
|
|
@ -350,8 +351,8 @@ void Meteos::updateGame(float fElapsedTime){ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (tempMatchIDsY.size()>2) { |
|
|
|
|
for (int i:tempMatchIDsY) { |
|
|
|
|
Block&bb=c.getBlocks()[i]; |
|
|
|
|
for (BlockMatchingInfo i:tempMatchIDsY) { |
|
|
|
|
Block&bb=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind]; |
|
|
|
|
if (!bb.addedToLaunchList) { |
|
|
|
|
bb.addedToLaunchList=true; |
|
|
|
|
matchedBlockIDs.push_back(i); |
|
|
|
@ -360,8 +361,8 @@ void Meteos::updateGame(float fElapsedTime){ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for (int i:matchedBlockIDs) { |
|
|
|
|
Block&b=c.getBlocks()[i]; |
|
|
|
|
for (BlockMatchingInfo i:matchedBlockIDs) { |
|
|
|
|
Block&b=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind]; |
|
|
|
|
b.col=BlockColor::LAUNCHED; |
|
|
|
|
} |
|
|
|
|
if (matchedBlockIDs.size()>0){ |
|
|
|
@ -369,7 +370,7 @@ void Meteos::updateGame(float fElapsedTime){ |
|
|
|
|
c.launchTime=gameBoard.launchTime; |
|
|
|
|
c.combo++; |
|
|
|
|
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;
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|