commit a3a8b2b4
Made the game previewable in the thme change menu. It does not look good but it is there.
Changed files
diff --git a/source/code/BlockGameSdl.inc b/source/code/BlockGameSdl.inc
index 6ad974b..03f17ac 100644
--- a/source/code/BlockGameSdl.inc
+++ b/source/code/BlockGameSdl.inc
@@ -24,7 +24,12 @@ https://blockattack.net
#include "BlockGame.hpp"
#include "global.hpp"
#include "sago/SagoTextField.hpp"
-#include "mainVars.inc"
+#include "BallManager.hpp"
+#include "puzzlehandler.hpp"
+
+extern BallManager theBallManager;
+
+extern ExplosionManager theExplosionManager;
static void setScoreboardFont(const sago::SagoDataHolder* holder, sago::SagoTextField& field, const char* text){
@@ -133,7 +138,7 @@ public:
if (!globalData.SoundEnabled) {
return;
}
- Mix_PlayChannel(1, applause.get(), 0);
+ Mix_PlayChannel(1, globalData.applause.get(), 0);
}
void DrawEvent() const override {
@@ -144,19 +149,19 @@ public:
if (!globalData.SoundEnabled) {
return;
}
- Mix_PlayChannel(0, boing.get(), 0);
+ Mix_PlayChannel(0, globalData.boing.get(), 0);
}
void LongChainDoneEvent() const override {
if (!globalData.SoundEnabled) {
return;
}
- Mix_PlayChannel(1, applause.get(), 0);
+ Mix_PlayChannel(1, globalData.applause.get(), 0);
}
void TimeTrialEndEvent() const override {
if (!globalData.NoSound && globalData.SoundEnabled) {
- Mix_PlayChannel(1,counterFinalChunk.get(),0);
+ Mix_PlayChannel(1,globalData.counterFinalChunk.get(),0);
}
}
@@ -164,7 +169,7 @@ public:
if (!globalData.SoundEnabled) {
return;
}
- Mix_PlayChannel(1, applause.get(), 0);
+ Mix_PlayChannel(1, globalData.applause.get(), 0);
}
private:
@@ -248,33 +253,33 @@ private:
if (size_y == 1) {
//single line
- garbageML.Draw(globalData.screen, draw_time, 0, 0);
+ globalData.garbageML.Draw(globalData.screen, draw_time, 0, 0);
for (int i = 1; i < size_x-1; ++i) {
- garbageM.Draw(globalData.screen, draw_time, i*bsize, 0);
+ globalData.garbageM.Draw(globalData.screen, draw_time, i*bsize, 0);
}
- garbageMR.Draw(globalData.screen, draw_time, (size_x-1)*bsize, 0);
+ globalData.garbageMR.Draw(globalData.screen, draw_time, (size_x-1)*bsize, 0);
}
if (size_y > 1) {
// Top line
- garbageTL.Draw(globalData.screen, draw_time, 0, 0);
+ globalData.garbageTL.Draw(globalData.screen, draw_time, 0, 0);
for (int i = 1; i < size_x-1; ++i) {
- garbageT.Draw(globalData.screen, draw_time, i*bsize, 0);
+ globalData.garbageT.Draw(globalData.screen, draw_time, i*bsize, 0);
}
- garbageTR.Draw(globalData.screen, draw_time, (size_x-1)*bsize, 0);
+ globalData.garbageTR.Draw(globalData.screen, draw_time, (size_x-1)*bsize, 0);
// Middle lines (if any)
for (int j=1; j < size_y-1; ++j) {
- garbageL.Draw(globalData.screen, draw_time, 0, j*bsize);
+ globalData.garbageL.Draw(globalData.screen, draw_time, 0, j*bsize);
for (int i = 1; i < size_x-1; ++i) {
- garbageFill.Draw(globalData.screen, draw_time, i*bsize, j*bsize);
+ globalData.garbageFill.Draw(globalData.screen, draw_time, i*bsize, j*bsize);
}
- garbageR.Draw(globalData.screen, draw_time, (size_x-1)*bsize, j*bsize);
+ globalData.garbageR.Draw(globalData.screen, draw_time, (size_x-1)*bsize, j*bsize);
}
//Buttom line
- garbageBL.Draw(globalData.screen, draw_time, 0, (size_y-1)*bsize);
+ globalData.garbageBL.Draw(globalData.screen, draw_time, 0, (size_y-1)*bsize);
for (int i = 1; i < size_x-1; ++i) {
- garbageB.Draw(globalData.screen, draw_time, i*bsize, (size_y-1)*bsize);
+ globalData.garbageB.Draw(globalData.screen, draw_time, i*bsize, (size_y-1)*bsize);
}
- garbageBR.Draw(globalData.screen, draw_time, (size_x-1)*bsize, (size_y-1)*bsize);
+ globalData.garbageBR.Draw(globalData.screen, draw_time, (size_x-1)*bsize, (size_y-1)*bsize);
}
SDL_SetRenderTarget( globalData.screen, nullptr );
@@ -295,13 +300,13 @@ private:
for (int j=0; j < size_y; ++j) {
if (j==0) {
- garbageGML.Draw(globalData.screen, draw_time, j*bsize, 0);
+ globalData.garbageGML.Draw(globalData.screen, draw_time, j*bsize, 0);
}
else if (j==5) {
- garbageGMR.Draw(globalData.screen, draw_time, j*bsize, 0);
+ globalData.garbageGMR.Draw(globalData.screen, draw_time, j*bsize, 0);
}
else {
- garbageGM.Draw(globalData.screen, draw_time, j*bsize, 0);
+ globalData.garbageGM.Draw(globalData.screen, draw_time, j*bsize, 0);
}
}
@@ -334,12 +339,12 @@ private:
for (int j=0; j<6; ++j) {
int basicBrick = board[j][i]%10; //The basic brick, stored on the least significant digit
if ((basicBrick > -1) && (basicBrick < 7) && ((board[j][i]/1000000)%10==0)) {
- DrawImgBoardBounded(bricks[basicBrick], j*bsize, bsize*12-i*bsize-pixels);
+ DrawImgBoardBounded(globalData.bricks[basicBrick], j*bsize, bsize*12-i*bsize-pixels);
if ((board[j][i]/BLOCKWAIT)%10==1) {
- DrawImgBoard(bomb, j*bsize, bsize*12-i*bsize-pixels);
+ DrawImgBoard(globalData.bomb, j*bsize, bsize*12-i*bsize-pixels);
}
if ((board[j][i]/BLOCKHANG)%10==1) {
- DrawImgBoardBounded(ready, j*bsize, bsize*12-i*bsize-pixels);
+ DrawImgBoardBounded(globalData.ready, j*bsize, bsize*12-i*bsize-pixels);
}
}
@@ -399,7 +404,7 @@ private:
}
for (int i=0; i<6; i++) {
if (board[i][0]!=-1) {
- DrawImgBoardBounded(transCover, i*bsize, 12*bsize-pixels); //Make the appering blocks transperant
+ DrawImgBoardBounded(globalData.transCover, i*bsize, 12*bsize-pixels); //Make the appering blocks transperant
}
}
@@ -407,7 +412,7 @@ private:
public:
//Draws everything
void DoPaintJob() {
- DrawIMG(boardBackBack,globalData.screen,this->GetTopX()-60,this->GetTopY()-68);
+ DrawIMG(globalData.boardBackBack,globalData.screen,this->GetTopX()-60,this->GetTopY()-68);
this->scoreLabel.Draw(globalData.screen, this->GetTopX()+310,this->GetTopY()-68+148);
this->timeLabel.Draw(globalData.screen, this->GetTopX()+310,this->GetTopY()-68+197);
@@ -417,7 +422,7 @@ public:
PaintBricks();
if (stageClear) {
- DrawImgBoard(blackLine, 0, bsize*(12+2)+bsize*(stageClearLimit-linesCleared)-pixels-1);
+ DrawImgBoard(globalData.blackLine, 0, bsize*(12+2)+bsize*(stageClearLimit-linesCleared)-pixels-1);
}
if (puzzleMode&&(!bGameOver)) {
//We need to write nr. of moves left!
@@ -429,16 +434,16 @@ public:
}
if (puzzleMode && stageButtonStatus == SBpuzzleMode) {
- DrawImgBoard(bRetry, cordRetryButton.x, cordRetryButton.y);
- PrintTextCenteredBoard(cordRetryButton.x, cordRetryButton.y, buttonRetry);
+ DrawImgBoard(globalData.bRetry, globalData.cordRetryButton.x, globalData.cordRetryButton.y);
+ PrintTextCenteredBoard(globalData.cordRetryButton.x, globalData.cordRetryButton.y, buttonRetry);
if (getLevel()<PuzzleGetNumberOfPuzzles()-1) {
if (hasWonTheGame) {
- DrawImgBoard(globalData.bNext, cordNextButton.x, cordNextButton.y);
- PrintTextCenteredBoard(cordNextButton.x, cordNextButton.y, buttonNext);
+ DrawImgBoard(globalData.bNext, globalData.cordNextButton.x, globalData.cordNextButton.y);
+ PrintTextCenteredBoard(globalData.cordNextButton.x, globalData.cordNextButton.y, buttonNext);
}
else {
- DrawImgBoard(bSkip,cordNextButton.x, cordNextButton.y);
- PrintTextCenteredBoard(cordNextButton.x, cordNextButton.y, buttonSkip);
+ DrawImgBoard(globalData.bSkip, globalData.cordNextButton.x, globalData.cordNextButton.y);
+ PrintTextCenteredBoard(globalData.cordNextButton.x, globalData.cordNextButton.y, buttonSkip);
}
}
else {
@@ -449,16 +454,16 @@ public:
}
}
if (stageClear && stageButtonStatus == SBstageClear) {
- DrawImgBoard(bRetry, cordRetryButton.x, cordRetryButton.y);
- PrintTextCenteredBoard(cordRetryButton.x, cordRetryButton.y, buttonRetry);
+ DrawImgBoard(globalData.bRetry, globalData.cordRetryButton.x, globalData.cordRetryButton.y);
+ PrintTextCenteredBoard(globalData.cordRetryButton.x, globalData.cordRetryButton.y, buttonRetry);
if (getLevel()<50-1) {
if (hasWonTheGame) {
- DrawImgBoard(globalData.bNext, cordNextButton.x, cordNextButton.y);
- PrintTextCenteredBoard(cordNextButton.x, cordNextButton.y, buttonNext);
+ DrawImgBoard(globalData.bNext, globalData.cordNextButton.x, globalData.cordNextButton.y);
+ PrintTextCenteredBoard(globalData.cordNextButton.x, globalData.cordNextButton.y, buttonNext);
}
else {
- DrawImgBoard(bSkip,cordNextButton.x, cordNextButton.y);
- PrintTextCenteredBoard(cordNextButton.x, cordNextButton.y, buttonSkip);
+ DrawImgBoard(globalData.bSkip, globalData.cordNextButton.x, globalData.cordNextButton.y);
+ PrintTextCenteredBoard(globalData.cordNextButton.x, globalData.cordNextButton.y, buttonSkip);
}
}
else {
@@ -490,24 +495,24 @@ public:
DrawImgBoard(globalData.spriteHolder->GetSprite("touchcursor"),mx*bsize, 11*bsize-my*bsize-pixels);
}
else {
- DrawImgBoard(cursor,cursorx*bsize,11*bsize-cursory*bsize-pixels);
+ DrawImgBoard(globalData.cursor,cursorx*bsize,11*bsize-cursory*bsize-pixels);
}
}
if (ticks<gameStartedAt) {
int currentCounter = abs((int)ticks-(int)gameStartedAt)/1000;
if ( (currentCounter!=lastCounter) && (globalData.SoundEnabled)&&(!globalData.NoSound)) {
- Mix_PlayChannel(1, counterChunk.get(), 0);
+ Mix_PlayChannel(1, globalData.counterChunk.get(), 0);
}
lastCounter = currentCounter;
switch (currentCounter) {
case 2:
- DrawImgBoard(counter[2], 2*bsize, 5*bsize);
+ DrawImgBoard(globalData.counter[2], 2*bsize, 5*bsize);
break;
case 1:
- DrawImgBoard(counter[1], 2*bsize, 5*bsize);
+ DrawImgBoard(globalData.counter[1], 2*bsize, 5*bsize);
break;
case 0:
- DrawImgBoard(counter[0], 2*bsize, 5*bsize);
+ DrawImgBoard(globalData.counter[0], 2*bsize, 5*bsize);
break;
default:
break;
@@ -518,14 +523,14 @@ public:
int currentCounter = (ticks-(int)gameStartedAt)/1000;
if (currentCounter!=lastCounter) {
if (currentCounter>115 && currentCounter<120) {
- Mix_PlayChannel(1, counterChunk.get(), 0);
+ Mix_PlayChannel(1, globalData.counterChunk.get(), 0);
}
}
lastCounter = currentCounter;
}
else {
if ( (0==lastCounter) && (globalData.SoundEnabled)&&(!globalData.NoSound)) {
- Mix_PlayChannel(1, counterFinalChunk.get(), 0);
+ Mix_PlayChannel(1, globalData.counterFinalChunk.get(), 0);
}
lastCounter = -1;
}
@@ -533,14 +538,14 @@ public:
if (bGameOver) {
if (hasWonTheGame) {
- tbWinner.Draw(globalData.screen, topx+150, topy+200, sago::SagoTextField::Alignment::center);
+ globalData.tbWinner.Draw(globalData.screen, topx+150, topy+200, sago::SagoTextField::Alignment::center);
}
else {
if (bDraw) {
- tbDraw.Draw(globalData.screen, topx+150, topy+200, sago::SagoTextField::Alignment::center);
+ globalData.tbDraw.Draw(globalData.screen, topx+150, topy+200, sago::SagoTextField::Alignment::center);
}
else {
- tbGameOver.Draw(globalData.screen, topx+150, topy+200, sago::SagoTextField::Alignment::center);
+ globalData.tbGameOver.Draw(globalData.screen, topx+150, topy+200, sago::SagoTextField::Alignment::center);
}
}
}
diff --git a/source/code/HelpHowtoState.cpp b/source/code/HelpHowtoState.cpp
index 579bcff..f705ed6 100644
--- a/source/code/HelpHowtoState.cpp
+++ b/source/code/HelpHowtoState.cpp
@@ -27,7 +27,6 @@ https://blockattack.net
#include "MenuSystem.h"
#include <cmath>
-extern sago::SagoSprite bricks[7];
/**
* Draws bricks with a string like:
@@ -49,7 +48,7 @@ static void RenderRowOfBricks(SDL_Renderer* target, const std::string& brickStr,
brickChar = brickChar + 'a' - 'A';
}
if (brickChar >= 'a' && brickChar <= 'g') {
- bricks[brickChar - 'a'].Draw(target, tick, x+i*50, y);
+ globalData.bricks[brickChar - 'a'].Draw(target, tick, x+i*50, y);
if (bomb) {
globalData.spriteHolder->GetSprite("block_bomb").Draw(target, tick, x+i*50, y);
}
@@ -189,4 +188,4 @@ void HelpHowtoState::Draw(SDL_Renderer* target) {
void HelpHowtoState::Update() {
switchAnimation.Update(SDL_GetTicks());
HelpCommonState::Update();
-}
\ No newline at end of file
+}
diff --git a/source/code/global.hpp b/source/code/global.hpp
index 4a1a102..64e8376 100644
--- a/source/code/global.hpp
+++ b/source/code/global.hpp
@@ -31,6 +31,7 @@ http://www.blockattack.net
#include "TextManager.hpp"
#include "ExplosionManager.hpp"
#include "sago/SagoTextField.hpp"
+#include "sago/SagoTextBox.hpp"
#include "ModInfo.hpp"
#include "themes.hpp"
@@ -73,6 +74,15 @@ const int SCREEN_HIGHT = 768;
const int BOARD_WIDTH = 300;
const int BOARD_HEIGHT = 600;
+struct ButtonCords
+{
+ int x;
+ int y;
+ int xsize;
+ int ysize;
+};
+
+
struct GlobalData {
sago::SagoSprite bHighScore;
@@ -106,6 +116,53 @@ struct GlobalData {
int ysize = SCREEN_HIGHT;
int mousex = 0;
int mousey = 0;
+
+ sago::SoundHandler applause; //Applause, then the player is good
+ sago::SoundHandler boing; //boing sound when clearing
+ sago::SoundHandler photoClick; //clickSound
+ sago::SoundHandler counterChunk; //When counting down
+ sago::SoundHandler counterFinalChunk;
+
+ sago::SagoSprite garbageTL; //the Garbage Blocks
+ sago::SagoSprite garbageT;
+ sago::SagoSprite garbageTR;
+ sago::SagoSprite garbageR;
+ sago::SagoSprite garbageBR;
+ sago::SagoSprite garbageB;
+ sago::SagoSprite garbageBL;
+ sago::SagoSprite garbageL;
+ sago::SagoSprite garbageFill;
+ sago::SagoSprite garbageM;
+ sago::SagoSprite garbageML;
+ sago::SagoSprite garbageMR;
+ sago::SagoSprite garbageGM;
+ sago::SagoSprite garbageGML;
+ sago::SagoSprite garbageGMR;
+ sago::SagoSprite transCover; //The transperant block, covers the upcomming
+ sago::SagoSprite bSkip;
+ sago::SagoSprite bRetry;
+
+ sago::SagoSprite blackLine; //The seperator in stage clear
+ sago::SagoSprite stageBobble; //The bobble instage clear
+ sago::SagoTextBox tbGameOver;
+ sago::SagoTextBox tbWinner;
+ sago::SagoTextBox tbDraw;
+ sago::SagoSprite iChainFrame;
+ //Animations:
+ sago::SagoSprite cursor; //The animated cursor
+ sago::SagoSprite bomb;
+ sago::SagoSprite ready; //Before the blocks fall
+ sago::SagoSprite explosion[4]; //Then a block explodes
+ //Animations end
+ sago::SagoSprite counter[3]; //Counts down from 3
+ sago::SagoSprite bricks[7]; //The bricks, saved in an array of pointers
+ sago::SagoSprite crossover; //Cross the bricks that will be cleared soon
+ sago::SagoSprite balls[7]; //The balls (the small ones that jump around)
+
+ sago::SagoSprite boardBackBack;
+
+ ButtonCords cordNextButton;
+ ButtonCords cordRetryButton;
};
#include "BallManager.hpp"
diff --git a/source/code/main.cpp b/source/code/main.cpp
index 1d96809..2036f16 100644
--- a/source/code/main.cpp
+++ b/source/code/main.cpp
@@ -115,65 +115,65 @@ static void setGameOverFont(const sago::SagoDataHolder* holder, sago::SagoTextBo
//Load all image files to memory
static int InitImages(sago::SagoSpriteHolder& holder) {
- bricks[0] = holder.GetSprite("block_blue");
- bricks[1] = holder.GetSprite("block_green");
- bricks[2] = holder.GetSprite("block_purple");
- bricks[3] = holder.GetSprite("block_red");
- bricks[4] = holder.GetSprite("block_turkish");
- bricks[5] = holder.GetSprite("block_yellow");
- bricks[6] = holder.GetSprite("block_grey");
- bomb = holder.GetSprite("block_bomb");
+ globalData.bricks[0] = holder.GetSprite("block_blue");
+ globalData.bricks[1] = holder.GetSprite("block_green");
+ globalData.bricks[2] = holder.GetSprite("block_purple");
+ globalData.bricks[3] = holder.GetSprite("block_red");
+ globalData.bricks[4] = holder.GetSprite("block_turkish");
+ globalData.bricks[5] = holder.GetSprite("block_yellow");
+ globalData.bricks[6] = holder.GetSprite("block_grey");
+ globalData.bomb = holder.GetSprite("block_bomb");
globalData.bHighScore = holder.GetSprite("b_highscore");
globalData.bBack = holder.GetSprite("b_blank");
bForward = holder.GetSprite("b_forward");
- blackLine = holder.GetSprite("black_line");
- stageBobble = holder.GetSprite("i_stage_clear_limit");
- crossover = holder.GetSprite("crossover");
- balls[0] = holder.GetSprite("ball_blue");
- balls[1] = holder.GetSprite("ball_green");
- balls[2] = holder.GetSprite("ball_purple");
- balls[3] = holder.GetSprite("ball_red");
- balls[4] = holder.GetSprite("ball_turkish");
- balls[5] = holder.GetSprite("ball_yellow");
- balls[6] = holder.GetSprite("ball_gray");
- cursor = holder.GetSprite("cursor");
- ready = holder.GetSprite("block_ready");
- explosion[0] = holder.GetSprite("explosion0");
- explosion[1] = holder.GetSprite("explosion1");
- explosion[2] = holder.GetSprite("explosion2");
- explosion[3] = holder.GetSprite("explosion3");
- counter[0] = holder.GetSprite("counter_1");
- counter[1] = holder.GetSprite("counter_2");
- counter[2] = holder.GetSprite("counter_3");
- setGameOverFont(&holder.GetDataHolder(),tbGameOver, _("GAME OVER"));
- setGameOverFont(&holder.GetDataHolder(),tbWinner, _("WINNER"));
- setGameOverFont(&holder.GetDataHolder(),tbDraw, _("DRAW"));
- iChainFrame = holder.GetSprite("chain_frame");
+ globalData.blackLine = holder.GetSprite("black_line");
+ globalData.stageBobble = holder.GetSprite("i_stage_clear_limit");
+ globalData.crossover = holder.GetSprite("crossover");
+ globalData.balls[0] = holder.GetSprite("ball_blue");
+ globalData.balls[1] = holder.GetSprite("ball_green");
+ globalData.balls[2] = holder.GetSprite("ball_purple");
+ globalData.balls[3] = holder.GetSprite("ball_red");
+ globalData.balls[4] = holder.GetSprite("ball_turkish");
+ globalData.balls[5] = holder.GetSprite("ball_yellow");
+ globalData.balls[6] = holder.GetSprite("ball_gray");
+ globalData.cursor = holder.GetSprite("cursor");
+ globalData.ready = holder.GetSprite("block_ready");
+ globalData.explosion[0] = holder.GetSprite("explosion0");
+ globalData.explosion[1] = holder.GetSprite("explosion1");
+ globalData.explosion[2] = holder.GetSprite("explosion2");
+ globalData.explosion[3] = holder.GetSprite("explosion3");
+ globalData.counter[0] = holder.GetSprite("counter_1");
+ globalData.counter[1] = holder.GetSprite("counter_2");
+ globalData.counter[2] = holder.GetSprite("counter_3");
+ setGameOverFont(&holder.GetDataHolder(),globalData.tbGameOver, _("GAME OVER"));
+ setGameOverFont(&holder.GetDataHolder(),globalData.tbWinner, _("WINNER"));
+ setGameOverFont(&holder.GetDataHolder(),globalData.tbDraw, _("DRAW"));
+ globalData.iChainFrame = holder.GetSprite("chain_frame");
globalData.iLevelCheck = holder.GetSprite("i_level_check");
globalData.iLevelCheckBox = holder.GetSprite("i_level_check_box");
globalData.iLevelCheckBoxMarked = holder.GetSprite("i_level_check_box_marked");
globalData.iCheckBoxArea = holder.GetSprite("i_check_box_area");
- boardBackBack = holder.GetSprite("board_back_back");
- garbageTL = holder.GetSprite("garbage_tl");
- garbageT = holder.GetSprite("garbage_t");
- garbageTR = holder.GetSprite("garbage_tr");
- garbageR = holder.GetSprite("garbage_r");
- garbageBR = holder.GetSprite("garbage_br");
- garbageB = holder.GetSprite("garbage_b");
- garbageBL = holder.GetSprite("garbage_bl");
- garbageL = holder.GetSprite("garbage_l");
- garbageFill = holder.GetSprite("garbage_fill");
- garbageML = holder.GetSprite("garbage_ml");
- garbageM = holder.GetSprite("garbage_m");
- garbageMR = holder.GetSprite("garbage_mr");
- garbageGM = holder.GetSprite("garbage_gm");
- garbageGML = holder.GetSprite("garbage_gml");
- garbageGMR = holder.GetSprite("garbage_gmr");
- transCover = holder.GetSprite("trans_cover");
+ globalData.boardBackBack = holder.GetSprite("board_back_back");
+ globalData.garbageTL = holder.GetSprite("garbage_tl");
+ globalData.garbageT = holder.GetSprite("garbage_t");
+ globalData.garbageTR = holder.GetSprite("garbage_tr");
+ globalData.garbageR = holder.GetSprite("garbage_r");
+ globalData.garbageBR = holder.GetSprite("garbage_br");
+ globalData.garbageB = holder.GetSprite("garbage_b");
+ globalData.garbageBL = holder.GetSprite("garbage_bl");
+ globalData.garbageL = holder.GetSprite("garbage_l");
+ globalData.garbageFill = holder.GetSprite("garbage_fill");
+ globalData.garbageML = holder.GetSprite("garbage_ml");
+ globalData.garbageM = holder.GetSprite("garbage_m");
+ globalData.garbageMR = holder.GetSprite("garbage_mr");
+ globalData.garbageGM = holder.GetSprite("garbage_gm");
+ globalData.garbageGML = holder.GetSprite("garbage_gml");
+ globalData.garbageGMR = holder.GetSprite("garbage_gmr");
+ globalData.transCover = holder.GetSprite("trans_cover");
bExit = holder.GetSprite("b_exit");
- bSkip = holder.GetSprite("b_blank");
+ globalData.bSkip = holder.GetSprite("b_blank");
globalData.bNext = holder.GetSprite("b_blank");
- bRetry = holder.GetSprite("b_blank");
+ globalData.bRetry = holder.GetSprite("b_blank");
globalData.mouse = holder.GetSprite("mouse");
sagoTextSetBlueFont(player1name);
@@ -187,6 +187,17 @@ static int InitImages(sago::SagoSpriteHolder& holder) {
sagoTextSetBlueFont(player1speed);
sagoTextSetBlueFont(player2speed);
+ globalData.cordNextButton.x = 3*bsize+(3*bsize-buttonXsize)/2;
+ globalData.cordNextButton.y = 10*bsize;
+ globalData.cordNextButton.xsize = buttonXsize;
+ globalData.cordNextButton.ysize = buttonYsize;
+
+
+ globalData.cordRetryButton.x = (3*bsize-buttonXsize)/2;
+ globalData.cordRetryButton.y = 10*bsize;
+ globalData.cordRetryButton.xsize = buttonXsize;
+ globalData.cordRetryButton.ysize = buttonYsize;
+
//Loads the sound if sound present
if (!globalData.NoSound) {
@@ -195,20 +206,20 @@ static int InitImages(sago::SagoSpriteHolder& holder) {
highbeatMusic = holder.GetDataHolder().getMusicHandler("highbeat");
//the music... we just hope it exists, else the user won't hear anything
//Same goes for the sounds
- boing = holder.GetDataHolder().getSoundHandler("pop");
- applause = holder.GetDataHolder().getSoundHandler("applause");
- photoClick = holder.GetDataHolder().getSoundHandler("cameraclick");
+ globalData.boing = holder.GetDataHolder().getSoundHandler("pop");
+ globalData.applause = holder.GetDataHolder().getSoundHandler("applause");
+ globalData.photoClick = holder.GetDataHolder().getSoundHandler("cameraclick");
globalData.typingChunk = holder.GetDataHolder().getSoundHandler("typing");
- counterChunk = holder.GetDataHolder().getSoundHandler("counter");
- counterFinalChunk = holder.GetDataHolder().getSoundHandler("counter_final");
+ globalData.counterChunk = holder.GetDataHolder().getSoundHandler("counter");
+ globalData.counterFinalChunk = holder.GetDataHolder().getSoundHandler("counter_final");
Config::getInstance()->setDefault("volume_sound", "24"); //0-128
int soundVolume = Config::getInstance()->getInt("volume_sound");
- Mix_VolumeChunk(boing.get(), soundVolume);
- Mix_VolumeChunk(applause.get(), soundVolume);
- Mix_VolumeChunk(photoClick.get(), soundVolume);
+ Mix_VolumeChunk(globalData.boing.get(), soundVolume);
+ Mix_VolumeChunk(globalData.applause.get(), soundVolume);
+ Mix_VolumeChunk(globalData.photoClick.get(), soundVolume);
Mix_VolumeChunk(globalData.typingChunk.get(), soundVolume);
- Mix_VolumeChunk(counterChunk.get(), soundVolume);
- Mix_VolumeChunk(counterFinalChunk.get(), soundVolume);
+ Mix_VolumeChunk(globalData.counterChunk.get(), soundVolume);
+ Mix_VolumeChunk(globalData.counterFinalChunk.get(), soundVolume);
} //All sound has been loaded or not
return 0;
} //InitImages()
@@ -314,9 +325,9 @@ void UpdateMouseCoordinates(const SDL_Event& event, int& mousex, int& mousey) {
}
}
-static BallManager theBallManager;
+BallManager theBallManager;
-static ExplosionManager theExplosionManager;
+ExplosionManager theExplosionManager;
//Here comes the Block Game object
@@ -355,7 +366,7 @@ void writeScreenShot() {
SDL_FreeSurface(sreenshotSurface);
if (!globalData.NoSound) {
if (globalData.SoundEnabled) {
- Mix_PlayChannel(1, photoClick.get(), 0);
+ Mix_PlayChannel(1, globalData.photoClick.get(), 0);
}
}
}
@@ -435,19 +446,19 @@ static sago::SagoTextField* getSmallInt(size_t number) {
static void DrawBalls() {
for (size_t i = 0; i< theBallManager.ballArray.size(); i++) {
if (theBallManager.ballArray[i].inUse) {
- DrawIMG(balls[theBallManager.ballArray[i].getColor()],globalData.screen,theBallManager.ballArray[i].getX(),theBallManager.ballArray[i].getY());
+ DrawIMG(globalData.balls[theBallManager.ballArray[i].getColor()], globalData.screen, theBallManager.ballArray[i].getX(), theBallManager.ballArray[i].getY());
} //if used
}
for (size_t i = 0; i< theExplosionManager.explosionArray.size(); i++) {
if (theExplosionManager.explosionArray[i].inUse) {
- DrawIMG(explosion[theExplosionManager.explosionArray[i].getFrame()],globalData.screen,theExplosionManager.explosionArray[i].getX(),theExplosionManager.explosionArray[i].getY());
+ DrawIMG(globalData.explosion[theExplosionManager.explosionArray[i].getFrame()], globalData.screen, theExplosionManager.explosionArray[i].getX(), theExplosionManager.explosionArray[i].getY());
}
} //for
for (size_t i = 0; i < globalData.theTextManager.textArray.size(); ++i) {
if (globalData.theTextManager.textArray[i].inUse) {
int x = globalData.theTextManager.textArray[i].getX()-12;
int y = globalData.theTextManager.textArray[i].getY()-12;
- DrawIMG(iChainFrame,globalData.screen,x,y);
+ DrawIMG(globalData.iChainFrame, globalData.screen, x, y);
getSmallInt(globalData.theTextManager.textArray[i].getText())->Draw(globalData.screen, x+12, y+7,
sago::SagoTextField::Alignment::center);
@@ -548,7 +559,7 @@ void DrawEverything(int xsize, int ysize,BlockGameSdl* theGame, BlockGameSdl* th
if ((theGame->isStageClear()) &&(theGame->GetTopY()+700+50*(theGame->GetStageClearLimit()-theGame->GetLinesCleared())-theGame->GetPixels()-1<600+theGame->GetTopY())) {
oldBubleX = theGame->GetTopX()+280;
oldBubleY = theGame->GetTopY()+650+50*(theGame->GetStageClearLimit()-theGame->GetLinesCleared())-theGame->GetPixels()-1;
- DrawIMG(stageBobble,globalData.screen,theGame->GetTopX()+280,theGame->GetTopY()+650+50*(theGame->GetStageClearLimit()-theGame->GetLinesCleared())-theGame->GetPixels()-1);
+ DrawIMG(globalData.stageBobble,globalData.screen,theGame->GetTopX()+280,theGame->GetTopY()+650+50*(theGame->GetStageClearLimit()-theGame->GetLinesCleared())-theGame->GetPixels()-1);
}
//player1 finnish, player2 start
if (true ) {
@@ -1715,18 +1726,18 @@ int runGame(Gametype gametype, int level) {
bMouseUp = false;
DrawBackground(globalData.screen);
- if (stageButtonStatus != SBdontShow && (globalData.mousex > theGame.GetTopX()+cordNextButton.x)
- && (globalData.mousex < theGame.GetTopX()+cordNextButton.x+cordNextButton.xsize)
- && (globalData.mousey > theGame.GetTopY()+cordNextButton.y)
- && (globalData.mousey < theGame.GetTopY()+cordNextButton.y+cordNextButton.ysize)) {
+ if (stageButtonStatus != SBdontShow && (globalData.mousex > theGame.GetTopX()+globalData.cordNextButton.x)
+ && (globalData.mousex < theGame.GetTopX()+globalData.cordNextButton.x+globalData.cordNextButton.xsize)
+ && (globalData.mousey > theGame.GetTopY()+globalData.cordNextButton.y)
+ && (globalData.mousey < theGame.GetTopY()+globalData.cordNextButton.y+globalData.cordNextButton.ysize)) {
//Clicked the next button after a stage clear or puzzle
nextLevel(theGame, SDL_GetTicks());
}
- if (stageButtonStatus != SBdontShow && (globalData.mousex > theGame.GetTopX()+cordRetryButton .x)
- &&(globalData.mousex < theGame.GetTopX()+cordRetryButton.x+cordRetryButton.xsize)
- &&(globalData.mousey > theGame.GetTopY()+cordRetryButton.y)
- &&(globalData.mousey < theGame.GetTopY()+cordRetryButton.y+cordRetryButton.ysize)) {
+ if (stageButtonStatus != SBdontShow && (globalData.mousex > theGame.GetTopX()+globalData.cordRetryButton .x)
+ &&(globalData.mousex < theGame.GetTopX()+globalData.cordRetryButton.x+globalData.cordRetryButton.xsize)
+ &&(globalData.mousey > theGame.GetTopY()+globalData.cordRetryButton.y)
+ &&(globalData.mousey < theGame.GetTopY()+globalData.cordRetryButton.y+globalData.cordRetryButton.ysize)) {
//Clicked the retry button
retryLevel(theGame, SDL_GetTicks());
}
diff --git a/source/code/mainVars.inc b/source/code/mainVars.inc
index 542c0f9..53ff2a7 100644
--- a/source/code/mainVars.inc
+++ b/source/code/mainVars.inc
@@ -51,53 +51,14 @@ static sago::SagoSprite bForward; //The "forward" button
//static sago::SagoSprite bConnect;
//static sago::SagoSprite bHost;
#endif
-static sago::SagoSprite blackLine; //The seperator in stage clear
-static sago::SagoSprite stageBobble; //The bobble instage clear
+
SDL_Renderer *screen; //The whole screen;
-static sago::SagoTextBox tbGameOver;
-static sago::SagoTextBox tbWinner;
-static sago::SagoTextBox tbDraw;
-static sago::SagoSprite iChainFrame;
-//Animations:
-static sago::SagoSprite cursor; //The animated cursor
-static sago::SagoSprite bomb;
-static sago::SagoSprite ready; //Before the blocks fall
-static sago::SagoSprite explosion[4]; //Then a block explodes
-//Animations end
-static sago::SagoSprite counter[3]; //Counts down from 3
-sago::SagoSprite bricks[7]; //The bricks, saved in an array of pointers
-static sago::SagoSprite crossover; //Cross the bricks that will be cleared soon
-static sago::SagoSprite balls[7]; //The balls (the small ones that jump around)
-
-static sago::SagoSprite boardBackBack;
-static sago::SagoSprite garbageTL; //the Garbage Blocks
-static sago::SagoSprite garbageT;
-static sago::SagoSprite garbageTR;
-static sago::SagoSprite garbageR;
-static sago::SagoSprite garbageBR;
-static sago::SagoSprite garbageB;
-static sago::SagoSprite garbageBL;
-static sago::SagoSprite garbageL;
-static sago::SagoSprite garbageFill;
-static sago::SagoSprite garbageM;
-static sago::SagoSprite garbageML;
-static sago::SagoSprite garbageMR;
-static sago::SagoSprite garbageGM;
-static sago::SagoSprite garbageGML;
-static sago::SagoSprite garbageGMR;
-static sago::SagoSprite transCover; //The transperant block, covers the upcomming
-static sago::SagoSprite bSkip;
-static sago::SagoSprite bRetry;
+
const int bExitSize = 100; //height and width of the exit button
const int bExitOffset = 140; //pixels from the buttom right corner to the top left of the exit button
static sago::MusicHandler bgMusic; //backgroundMusic
static sago::MusicHandler highbeatMusic; //Background music with higher beat
-static sago::SoundHandler boing; //boing sound when clearing
-static sago::SoundHandler applause; //Applause, then the player is good
-static sago::SoundHandler photoClick; //clickSound
-static sago::SoundHandler counterChunk; //When counting down
-static sago::SoundHandler counterFinalChunk;
static bool bMouseUp; //true if the mouse(1) is unpressed
static bool bMouseUp2; //true if the mouse(2) is unpressed
@@ -164,29 +125,6 @@ control keySettings[3]; //array to hold the controls (default and two custom)
static const int buttonXsize = 120;
static const int buttonYsize = 40;
-struct ButtonCords
-{
- int x;
- int y;
- int xsize;
- int ysize;
-};
-
-ButtonCords cordNextButton =
-{
- cordNextButton.x = 3*bsize+(3*bsize-buttonXsize)/2,
- cordNextButton.y = 10*bsize,
- cordNextButton.xsize = buttonXsize,
- cordNextButton.ysize = buttonYsize
-};
-
-ButtonCords cordRetryButton =
-{
- cordRetryButton.x = (3*bsize-buttonXsize)/2,
- cordRetryButton.y = 10*bsize,
- cordRetryButton.xsize = buttonXsize,
- cordRetryButton.ysize = buttonYsize
-};
static sago::SagoTextField player1name;
static sago::SagoTextField player2name;
diff --git a/source/code/menudef.cpp b/source/code/menudef.cpp
index b59b494..72009c5 100644
--- a/source/code/menudef.cpp
+++ b/source/code/menudef.cpp
@@ -31,6 +31,7 @@ http://blockattack.net
#include "HelpAboutState.hpp"
#include "ShowFileState.hpp"
#include <fmt/core.h>
+#include "BlockGameSdl.inc"
#if 0
@@ -440,13 +441,16 @@ static void switchTheme() {
}
class ThemesMenu : public Menu {
+private:
+ std::shared_ptr<BlockGameSdl> game;
public:
ThemesMenu(SDL_Renderer* screen, const std::string& title, bool submenu) : Menu(screen, title, submenu) {
-
+ game = std::make_shared<BlockGameSdl>(1024-500,100,&globalData.spriteHolder->GetDataHolder());
}
void Draw(SDL_Renderer* target) override {
Menu::Draw(target);
+ game->DoPaintJob();
}
};