- Comencem a treballar en el gamestate de les sequencies
This commit is contained in:
87
source/gamestate_sequence.cpp
Normal file
87
source/gamestate_sequence.cpp
Normal file
@@ -0,0 +1,87 @@
|
||||
#include "gamestate_sequence.h"
|
||||
#include "jgame.h"
|
||||
#include "jfile.h"
|
||||
#include "jinput.h"
|
||||
#include "jdraw.h"
|
||||
#include <string>
|
||||
#include <SDL2/SDL.h>
|
||||
|
||||
#define DIAPO_ESPERAR 0
|
||||
#define DIAPO_FADEIN 1
|
||||
#define DIAPO_SHOW 2
|
||||
#define DIAPO_PRINT 3
|
||||
#define DIAPO_MUSICA 4
|
||||
#define DIAPO_FADEOUT 5
|
||||
#define DIAPO_FADEMUSIC 6
|
||||
|
||||
namespace gamestate
|
||||
{
|
||||
namespace sequence
|
||||
{
|
||||
int num_diapositives = 0;
|
||||
const char *sequence_file = nullptr;
|
||||
uint32_t wait_until = 0;
|
||||
|
||||
bool loop()
|
||||
{
|
||||
if (wait_until>0 && SDL_GetTicks() < wait_until)
|
||||
{
|
||||
if (input::anyKey() || input::mouseBtn(1))
|
||||
{
|
||||
wait_until=0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
const char tipo_diapositiva = *(sequence_file++);
|
||||
switch ( tipo_diapositiva )
|
||||
{
|
||||
case DIAPO_ESPERAR:
|
||||
const uint32_t wait_time = (uint16_t)((uint8_t(*(sequence_file++)) << 8) + uint8_t(*(sequence_file++)));
|
||||
wait_until = SDL_GetTicks() + wait_time;
|
||||
break;
|
||||
case DIAPO_FADEIN:
|
||||
{
|
||||
uint8_t tamanyCadena = *(sequence_file++);
|
||||
char *filename = (char *)malloc(tamanyCadena + 1);
|
||||
for (int i=0; i<tamanyCadena; i++) filename[i] = *(sequence_file++);
|
||||
filename[tamanyCadena] = '\0';
|
||||
draw::surface *pic = draw::loadSurface(filename);
|
||||
draw::setSource(pic);
|
||||
draw::draw(0, 0, 320, 200, 0, 0);
|
||||
draw::freeSurface(pic);
|
||||
free(filename);
|
||||
draw::fadein();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void init()
|
||||
{
|
||||
const int fase = game::getConfig("fase");
|
||||
std::string filename;
|
||||
|
||||
switch (fase)
|
||||
{
|
||||
case -1: filename = "seqIN.seq"; break;
|
||||
case 0: filename = "seq00.seq"; break;
|
||||
case 5: filename = "seq05.seq"; break;
|
||||
case 10: filename = "seq10.seq"; break;
|
||||
case 15: filename = "seq15.seq"; break;
|
||||
case 20: filename = "seq20.seq"; break;
|
||||
case 25: filename = "seq25.seq"; break;
|
||||
case 30: filename = "seq30.seq"; break;
|
||||
}
|
||||
|
||||
int filesize;
|
||||
sequence_file = file::getFileBuffer(filename, filesize);
|
||||
num_diapositives = *(sequence_file++);
|
||||
|
||||
game::setState(&gamestate::sequence::loop);
|
||||
}
|
||||
}
|
||||
}
|
||||
9
source/gamestate_sequence.h
Normal file
9
source/gamestate_sequence.h
Normal file
@@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
namespace gamestate
|
||||
{
|
||||
namespace sequence
|
||||
{
|
||||
void init();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user