- creat gamestate_menu

This commit is contained in:
2023-10-12 17:08:59 +02:00
parent 9f623b249f
commit 183c095f6d
3 changed files with 93 additions and 8 deletions

78
source/gamestate_menu.cpp Normal file
View File

@@ -0,0 +1,78 @@
#include "gamestates.h"
#include "jgame.h"
#include "jdraw.h"
#include "jaudio.h"
#include "jinput.h"
namespace gamestate
{
namespace menu
{
draw::surface *fondo = nullptr;
draw::surface *cursor = nullptr;
int exit = 0;
bool loop()
{
if (exit) {
if (!draw::isfading()) {
draw::freeSurface(fondo);
draw::freeSurface(cursor);
if (exit==1) gamestate::sequence::init();
//if (exit==2) gamestate::password::init();
}
draw::render();
return true;
}
const int x = input::mouseX();
const int y = input::mouseY();
draw::setTrans(255);
draw::setSource(fondo);
draw::draw(0, 0, 320, 200, 0, 0);
draw::setTrans(0);
draw::setSource(cursor);
draw::draw(x, y, cursor->w, cursor->h, 0, 0);
draw::render();
if (input::mouseClk(1))
{
if (x >= 200 && y >= 100 && x <= 270 && y <= 120) {
draw::fadeout();
game::setConfig("fase", 0);
exit = 1;
return true;
} else if (x >= 175 && y >= 125 && x <= 290 && y <= 145) {
draw::fadeout();
game::setConfig("fase", 0);
exit = 2;
return true;
} else if (x >= 200 && y >= 150 && x <= 265 && y <= 170) {
return false;
}
}
return true;
}
void init()
{
exit = 0;
fondo = draw::loadSurface("menuprin.gif");
draw::loadPalette("menuprin.gif");
cursor = draw::loadSurface("cursor.gif");
if (audio::getMusicState() != audio::music_state::MUSIC_PLAYING) {
audio::playMusic(audio::loadMusic("mus3.ogg"));
}
draw::setSource(fondo);
draw::draw(0,0,320,200,0,0);
draw::fadein();
game::setState(&gamestate::menu::loop);
}
}
}

View File

@@ -1,4 +1,4 @@
#include "gamestate_sequence.h" #include "gamestates.h"
#include "jgame.h" #include "jgame.h"
#include "jfile.h" #include "jfile.h"
#include "jinput.h" #include "jinput.h"
@@ -20,7 +20,8 @@ namespace gamestate
namespace sequence namespace sequence
{ {
int num_diapositives = 0; int num_diapositives = 0;
const char *sequence_file = nullptr; char *sequence_file = nullptr;
char *sfpointer = nullptr;
uint32_t wait_until = 0; uint32_t wait_until = 0;
uint8_t getByte() uint8_t getByte()
@@ -80,16 +81,20 @@ namespace gamestate
{ {
if ( (wait_until > 0) && (SDL_GetTicks() < wait_until) ) if ( (wait_until > 0) && (SDL_GetTicks() < wait_until) )
{ {
if (input::anyKey() || input::mouseBtn(1)) if (!draw::isfading() && (input::anyKeyPressed() || input::mouseBtn(1))) {
{
wait_until=0; wait_until=0;
} if (input::keyPressed(SDL_SCANCODE_ESCAPE)) num_diapositives=0;
else } else {
{
draw::render(); draw::render();
return true; return true;
} }
} }
if (num_diapositives==0) {
gamestate::menu::init();
free(sfpointer);
return true;
}
const char tipo_diapositiva = *(sequence_file++); const char tipo_diapositiva = *(sequence_file++);
switch ( tipo_diapositiva ) switch ( tipo_diapositiva )
{ {
@@ -149,6 +154,7 @@ namespace gamestate
printf("- FadeOutMusic()\n"); printf("- FadeOutMusic()\n");
break; break;
} }
num_diapositives--;
return true; return true;
} }
@@ -172,6 +178,7 @@ namespace gamestate
int filesize; int filesize;
sequence_file = file::getFileBuffer(filename, filesize); sequence_file = file::getFileBuffer(filename, filesize);
sfpointer = sequence_file;
num_diapositives = *(sequence_file++); num_diapositives = *(sequence_file++);
game::setState(&gamestate::sequence::loop); game::setState(&gamestate::sequence::loop);

View File

@@ -3,7 +3,7 @@
#include "jinput.h" #include "jinput.h"
#include "jaudio.h" #include "jaudio.h"
#include "gamestate_sequence.h" #include "gamestates.h"
void game::init() void game::init()
{ {