commit 3d12f4a8
Garbage is no longer sent directly. This will hopefully make future netplay easier.
Changed files
| M | source/code/BlockGame.cpp before |
| M | source/code/BlockGame.hpp before |
| M | source/code/main.cpp before |
diff --git a/source/code/BlockGame.cpp b/source/code/BlockGame.cpp
index b652ebb..df374b1 100644
--- a/source/code/BlockGame.cpp
+++ b/source/code/BlockGame.cpp
@@ -873,7 +873,9 @@ void BlockGame::ClearBlocks() {
grey++;
}
if ((vsMode) && (grey>2) && (board[j][i]%10000000==6)) {
- garbageTarget->CreateGreyGarbage();
+ GarbageStruct s;
+ s.setGarbage(6, 1, true);
+ this->garbageSendQueue.push_back(s);
}
if ((board[j][i]>-1)&&(board[j][i]%10000000<7)) {
board[j][i]+=BLOCKWAIT+10*FALLTIME;
@@ -925,7 +927,8 @@ void BlockGame::ClearBlocks() {
}
} //This was there text was added
- if (vsMode)
+ if (vsMode) {
+ GarbageStruct s;
switch (combo) {
case 0:
case 1:
@@ -933,53 +936,59 @@ void BlockGame::ClearBlocks() {
case 3:
break;
case 4:
- garbageTarget->CreateGarbage(3, 1);
+ s.setGarbage(3,1);
break;
case 5:
- garbageTarget->CreateGarbage(4, 1);
+ s.setGarbage(4,1);
break;
case 6:
- garbageTarget->CreateGarbage(5, 1);
+ s.setGarbage(5,1);
break;
case 7:
- garbageTarget->CreateGarbage(6, 1);
+ s.setGarbage(6,1);
break;
case 8:
- garbageTarget->CreateGarbage(4, 1);
- garbageTarget->CreateGarbage(4, 1);
+ s.setGarbage(4,1);
+ s.setGarbage(4,1);
break;
case 9:
- garbageTarget->CreateGarbage(5, 1);
- garbageTarget->CreateGarbage(4, 1);
+ s.setGarbage(5,1);
+ s.setGarbage(4,1);
break;
case 10:
- garbageTarget->CreateGarbage(5, 1);
- garbageTarget->CreateGarbage(5, 1);
+ s.setGarbage(5,1);
+ s.setGarbage(5,1);
break;
case 11:
- garbageTarget->CreateGarbage(6, 1);
- garbageTarget->CreateGarbage(5, 1);
+ s.setGarbage(6,1);
+ s.setGarbage(5,1);
break;
case 12:
- garbageTarget->CreateGarbage(6, 1);
- garbageTarget->CreateGarbage(6, 1);
+ s.setGarbage(6,1);
+ s.setGarbage(6,1);
break;
case 13:
- garbageTarget->CreateGarbage(5, 1);
- garbageTarget->CreateGarbage(5, 1);
- garbageTarget->CreateGarbage(4, 1);
+ s.setGarbage(5,1);
+ s.setGarbage(5,1);
+ s.setGarbage(4,1);
break;
default:
- garbageTarget->CreateGarbage(5, 1);
- garbageTarget->CreateGarbage(5, 1);
- garbageTarget->CreateGarbage(4, 1);
+ s.setGarbage(5,1);
+ s.setGarbage(5,1);
+ s.setGarbage(4,1);
break;
}
- for (int i=0; i<30; i++)
- for (int j=0; j<6; j++)
+ if (s.width > 0) {
+ garbageSendQueue.push_back(s);
+ }
+ }
+ for (int i=0; i<30; i++) {
+ for (int j=0; j<6; j++) {
if (garbageToBeCleared[j][i]) {
GarbageClearer(j, i, board[j][i]%1000000, true, chain); //Clears the blocks and all blocks connected to it.
}
+ }
+ }
chain=0;
@@ -1026,7 +1035,9 @@ void BlockGame::ClearBlocks() {
for (int i=0; i<NUMBEROFCHAINS; i++) {
if (chainUsed[i]==true) {
if ((vsMode)&&(chainSize[i]>1)) {
- garbageTarget->CreateGarbage(6, chainSize[i]-1);
+ GarbageStruct s;
+ s.setGarbage(6,chainSize[i]-1);
+ this->garbageSendQueue.push_back(s);
}
if (chainSize[i]>4) {
LongChainDoneEvent();
@@ -1854,6 +1865,13 @@ BlockGame* BlockGame::getGarbageTarget() const {
return garbageTarget;
}
+void BlockGame::PopSendGarbage(std::vector<GarbageStruct>& poppedData) {
+ for (const GarbageStruct& g : this->garbageSendQueue) {
+ poppedData.push_back(g);
+ }
+ this->garbageSendQueue.clear();
+}
+
//Play the next level
void nextLevel(BlockGame& g, unsigned int ticks) {
BlockGameStartInfo s;
diff --git a/source/code/BlockGame.hpp b/source/code/BlockGame.hpp
index e820cfc..c0a1475 100644
--- a/source/code/BlockGame.hpp
+++ b/source/code/BlockGame.hpp
@@ -60,8 +60,13 @@ struct BlockGameStartInfo {
struct GarbageStruct {
bool greyGarbage = false;
- int width = 6;
- int height = 1;
+ int width = 0;
+ int height = 0;
+ void setGarbage(int w, int h, bool g = false) {
+ greyGarbage = g;
+ width = w;
+ height = h;
+ }
};
////////////////////////////////////////////////////////////////////////////////
@@ -123,7 +128,8 @@ protected:
bool AI_Enabled;
int handicap;
-
+
+ std::vector<GarbageStruct> garbageSendQueue;
int AIlineToClear;
@@ -179,6 +185,7 @@ public:
bool CreateGarbage(int wide, int height);
//Creates garbage using a given wide and height
bool CreateGreyGarbage();
+ void PopSendGarbage(std::vector<GarbageStruct>& poppedData);
//prints "Game Over" and ends game
void SetGameOver();
//Moves the cursor, receaves N,S,E or W as a char an moves as desired
diff --git a/source/code/main.cpp b/source/code/main.cpp
index b7a8cf8..e923369 100644
--- a/source/code/main.cpp
+++ b/source/code/main.cpp
@@ -2254,6 +2254,26 @@ int runGame(int gametype, int level) {
theGame.setPlayerWon();
//twoPlayers = false;
}
+ vector<GarbageStruct> gs;
+ theGame.PopSendGarbage(gs);
+ for (const GarbageStruct& g : gs ) {
+ if (g.greyGarbage) {
+ theGame2.CreateGreyGarbage();
+ }
+ else {
+ theGame2.CreateGarbage(g.width, g.height);
+ }
+ }
+ gs.clear();
+ theGame2.PopSendGarbage(gs);
+ for (const GarbageStruct& g : gs ) {
+ if (g.greyGarbage) {
+ theGame.CreateGreyGarbage();
+ }
+ else {
+ theGame.CreateGarbage(g.width, g.height);
+ }
+ }
}
if (theGame.isGameOver() && registerTTHighscorePlayer1) {