diff --git a/source/gamestate_menu.cpp b/source/gamestate_menu.cpp new file mode 100644 index 0000000..9bcee3d --- /dev/null +++ b/source/gamestate_menu.cpp @@ -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); + } + } +} \ No newline at end of file diff --git a/source/gamestate_sequence.cpp b/source/gamestate_sequence.cpp index 7e9e0ec..69175f6 100644 --- a/source/gamestate_sequence.cpp +++ b/source/gamestate_sequence.cpp @@ -1,4 +1,4 @@ -#include "gamestate_sequence.h" +#include "gamestates.h" #include "jgame.h" #include "jfile.h" #include "jinput.h" @@ -20,7 +20,8 @@ namespace gamestate namespace sequence { int num_diapositives = 0; - const char *sequence_file = nullptr; + char *sequence_file = nullptr; + char *sfpointer = nullptr; uint32_t wait_until = 0; uint8_t getByte() @@ -80,16 +81,20 @@ namespace gamestate { 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; - } - else - { + if (input::keyPressed(SDL_SCANCODE_ESCAPE)) num_diapositives=0; + } else { draw::render(); return true; } } + if (num_diapositives==0) { + gamestate::menu::init(); + free(sfpointer); + return true; + } + const char tipo_diapositiva = *(sequence_file++); switch ( tipo_diapositiva ) { @@ -149,6 +154,7 @@ namespace gamestate printf("- FadeOutMusic()\n"); break; } + num_diapositives--; return true; } @@ -172,6 +178,7 @@ namespace gamestate int filesize; sequence_file = file::getFileBuffer(filename, filesize); + sfpointer = sequence_file; num_diapositives = *(sequence_file++); game::setState(&gamestate::sequence::loop); diff --git a/source/main.cpp b/source/main.cpp index 8209155..6ffb0b8 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -3,7 +3,7 @@ #include "jinput.h" #include "jaudio.h" -#include "gamestate_sequence.h" +#include "gamestates.h" void game::init() {