LaserTank pause menu added

git-svn-id: svn://kolibrios.org@5297 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
ZblCoder 2014-12-30 16:48:31 +00:00
parent 62d9d697a9
commit 2f1fab6ff3
4 changed files with 82 additions and 26 deletions

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -8,6 +8,7 @@
#define MODE_MENU 0 #define MODE_MENU 0
#define MODE_LEVELS 1 #define MODE_LEVELS 1
#define MODE_GAME 2 #define MODE_GAME 2
#define MODE_PAUSE 4
#define GAME_NONE 0 #define GAME_NONE 0
#define GAME_VICTORY 1 #define GAME_VICTORY 1
@ -84,6 +85,7 @@ RGB img_menu[147456];
RGBA img_explosion[8064]; RGBA img_explosion[8064];
RGBA img_gun[576]; RGBA img_gun[576];
RGB img_gamebg[9216]; RGB img_gamebg[9216];
RGBA img_black[576];
RGBA img_number_box[2550]; RGBA img_number_box[2550];
RGBA img_numbers[3500]; RGBA img_numbers[3500];
@ -92,10 +94,15 @@ RGBA img_button_arrow[375];
RGB img_levels[147456]; RGB img_levels[147456];
RGB img_buttons[3][13053];
Player player; Player player;
CKosRender* renderPlayer; CKosRender* renderPlayer;
CKosImage* objPlayer; CKosImage* objPlayer;
CKosImage* objPlayer1;
CKosRender* renderBox; CKosRender* renderBox;
@ -107,6 +114,8 @@ CKosImage* objBox;
CKosImage* objGun; CKosImage* objGun;
CKosImage* objExplosion; CKosImage* objExplosion;
CKosImage* objblack;
CKosRender* renderLevels; CKosRender* renderLevels;
CKosImage* objnumber_box; CKosImage* objnumber_box;
CKosImage* objnumbers; CKosImage* objnumbers;
@ -157,6 +166,12 @@ char GetField(Point position, bool din)
return level[position.Y][position.X].s; return level[position.Y][position.X].s;
} }
void SetMode(int mode)
{
gameMode = mode;
draw_window();
}
RGB* GetImg(Point position, bool din) RGB* GetImg(Point position, bool din)
{ {
switch (GetField(position, din)) switch (GetField(position, din))
@ -575,7 +590,7 @@ void Laser(Point pos, Point vec, RGB color)
} }
level[player.position.Y][player.position.X].s = FIELD_CRATER; level[player.position.Y][player.position.X].s = FIELD_CRATER;
gameStatus = GAME_DEFEAT; gameStatus = GAME_DEFEAT;
draw_window(); SetMode(MODE_PAUSE);
return; return;
} }
else else
@ -779,6 +794,7 @@ void player_move(Point vector, float angle)
break; break;
case FIELD_FINISH: case FIELD_FINISH:
gameStatus = GAME_VICTORY; gameStatus = GAME_VICTORY;
SetMode(MODE_PAUSE);
draw_window(); draw_window();
break; break;
case FIELD_NONE: case FIELD_NONE:
@ -833,12 +849,6 @@ void player_move(Point vector, float angle)
} }
} }
void SetMode(int mode)
{
gameMode = mode;
draw_window();
}
void key_press(int key) void key_press(int key)
{ {
//rtlDebugOutString(ftoa(key)); //rtlDebugOutString(ftoa(key));
@ -892,7 +902,7 @@ void key_press(int key)
break; break;
case 27: case 27:
SetMode(MODE_LEVELS); SetMode(MODE_PAUSE);
} }
break; break;
} }
@ -948,6 +958,22 @@ void MousePress(int button, Point position)
} }
} }
break; break;
case MODE_PAUSE:
if (CollRecrVsPoint(position, Rect(77, 318, 229, 57)))
SetMode(MODE_LEVELS);
else
if (CollRecrVsPoint(position, Rect(77, 255, 229, 57)))
{
openLevel(levelIndex);
SetMode(MODE_GAME);
}
else
if (gameStatus != GAME_DEFEAT && CollRecrVsPoint(position, Rect(77, 192, 229, 57)))
{
if (gameStatus == GAME_VICTORY)
openLevel(levelIndex + 1);
SetMode(MODE_GAME);
}
case MODE_GAME: case MODE_GAME:
break; break;
@ -1015,36 +1041,57 @@ void draw_window(void)
} }
renderLevels->Draw(Point(0, 0)); renderLevels->Draw(Point(0, 0));
//kos_PutImage((RGB*)img_ground, 24, 24, 100, 100); //kos_PutImage((RGB*)img_ground, 24, 24, 100, 100);
break;
case MODE_PAUSE:
for (int y = 0; y < 4; y++)
for (int x = 0; x < 4; x++)
renderLevels->RenderImg((RGB*)img_gamebg, Point(96 * x, 96 * y), 96, 96);
for (int y = 0; y < 16; y++)
for (int x = 0; x < 16; x++)
if (level[y][x].s != FIELD_NONE)
renderLevels->RenderImg(GetImg(Point(x, y), true), Point(24 * x, 24 * y), 24, 24);
switch (gameStatus)
{
case GAME_NONE:
objPlayer1->Draw(player.position * 24, player.angle);
break;
case GAME_VICTORY:
kos_WriteTextToWindow(30, 10, 0x80, 0xFFFFFF, "VICTORY", 0);
break;
case GAME_DEFEAT:
kos_WriteTextToWindow(30, 10, 0x80, 0xFFFFFF, "DEFEAT", 0);
break;
}
for (int y = 0; y < 16; y++)
for (int x = 0; x < 16; x++)
objblack->Draw(Point(24 * x, 24 * y), 0);
if (gameStatus != GAME_DEFEAT)
renderLevels->RenderImg((RGB*)img_buttons[1], Point(77, 192), 229, 57);
renderLevels->RenderImg((RGB*)img_buttons[2], Point(77, 255), 229, 57);
renderLevels->RenderImg((RGB*)img_buttons[0], Point(77, 318), 229, 57);
renderLevels->Draw(Point(0, 0));
break; break;
case MODE_GAME: case MODE_GAME:
for (int y = 0; y < 4; y++) for (int y = 0; y < 4; y++)
for (int x = 0; x < 4; x++) for (int x = 0; x < 4; x++)
kos_PutImage((RGB*)img_gamebg, 96, 96, 96 * x, 96 * y); kos_PutImage((RGB*)img_gamebg, 96, 96, 96 * x, 96 * y);
for (int y = 0; y < 16; y++) for (int y = 0; y < 16; y++)
for (int x = 0; x < 16; x++) for (int x = 0; x < 16; x++)
{
if (level[y][x].s != FIELD_NONE) if (level[y][x].s != FIELD_NONE)
kos_PutImage(GetImg(Point(x, y), true), 24, 24, 24 * x, 24 * y); kos_PutImage(GetImg(Point(x, y), true), 24, 24, 24 * x, 24 * y);
}
switch (gameStatus) if(gameStatus != GAME_DEFEAT)
{ {
case GAME_NONE:
renderPlayer->RenderImg(GetImg(player.position, false), Point(0, 0), 24, 24); renderPlayer->RenderImg(GetImg(player.position, false), Point(0, 0), 24, 24);
objPlayer->Draw(Point(0, 0), player.angle); objPlayer->Draw(Point(0, 0), player.angle);
renderPlayer->Draw(player.position * 24); renderPlayer->Draw(player.position * 24);
break;
case GAME_VICTORY:
kos_WriteTextToWindow(30, 10, 0x80, 0xFFFFFF, "VICTORY", 0);
break;
case GAME_DEFEAT:
kos_WriteTextToWindow(30, 10, 0x80, 0xFFFFFF, "DEFEAT", 0);
break;
} }
break; break;
} }
@ -1188,6 +1235,11 @@ void kos_Main()
file->LoadTex((Byte*)img_crater, 3, 24, 24); file->LoadTex((Byte*)img_crater, 3, 24, 24);
file->LoadTex((Byte*)img_black, 4, 24, 24);
for (int i = 0; i < 3; ++i)
file->LoadTex((Byte*)img_buttons[i], 3, 229, 57);
delete file; delete file;
renderPlayer = new CKosRender(24, 24); renderPlayer = new CKosRender(24, 24);
@ -1212,6 +1264,8 @@ void kos_Main()
objExplosion->SetFrameSize(24, 24); objExplosion->SetFrameSize(24, 24);
renderLevels = new CKosRender(384, 384); renderLevels = new CKosRender(384, 384);
objPlayer1 = new CKosImage(renderLevels, (RGBA*)img_tank, 24, 24);
objnumber_box = new CKosImage(renderLevels, (RGBA*)img_number_box, 51, 50); objnumber_box = new CKosImage(renderLevels, (RGBA*)img_number_box, 51, 50);
objnumbers = new CKosImage(renderLevels, (RGBA*)img_numbers, 14, 25); objnumbers = new CKosImage(renderLevels, (RGBA*)img_numbers, 14, 25);
objnumbers->SetFrameSize(14, 25); objnumbers->SetFrameSize(14, 25);
@ -1219,6 +1273,8 @@ void kos_Main()
objbutton1 = new CKosImage(renderLevels, (RGBA*)img_button1, 57, 57); objbutton1 = new CKosImage(renderLevels, (RGBA*)img_button1, 57, 57);
objbutton_arrow = new CKosImage(renderLevels, (RGBA*)img_button_arrow, 25, 15); objbutton_arrow = new CKosImage(renderLevels, (RGBA*)img_button_arrow, 25, 15);
objblack = new CKosImage(renderLevels, (RGBA*)img_black, 24, 24);
LevelsLoad(); LevelsLoad();
openLevel(0); openLevel(0);

View File

@ -25,7 +25,7 @@ void CKosRender::RenderImg(RGB *img, Point position, int width, int height)
for (int y = position.Y; y < position.Y + height; y++) for (int y = position.Y; y < position.Y + height; y++)
for (int x = position.X; x < position.X + width; x++) for (int x = position.X; x < position.X + width; x++)
if (x >= 0 && y >= 0 && x < this->width && y < this->height) if (x >= 0 && y >= 0 && x < this->width && y < this->height)
this->buffer[y * width + x] = img[(y - position.Y) * width + (x - position.X)]; this->buffer[y * this->width + x] = img[(y - position.Y) * width + (x - position.X)];
} }
int CKosRender::getPixel(int x, int y) int CKosRender::getPixel(int x, int y)