Compare commits
3 Commits
d3f413ebbb
...
7b40d4fad4
| Author | SHA1 | Date | |
|---|---|---|---|
| 7b40d4fad4 | |||
| eb5e2abf75 | |||
| d33db04d3b |
@@ -3,6 +3,7 @@
|
|||||||
#include "jfile.h"
|
#include "jfile.h"
|
||||||
#include "jinput.h"
|
#include "jinput.h"
|
||||||
#include "jdraw.h"
|
#include "jdraw.h"
|
||||||
|
#include "jaudio.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
|
|
||||||
@@ -22,6 +23,38 @@ namespace gamestate
|
|||||||
const char *sequence_file = nullptr;
|
const char *sequence_file = nullptr;
|
||||||
uint32_t wait_until = 0;
|
uint32_t wait_until = 0;
|
||||||
|
|
||||||
|
uint8_t getByte()
|
||||||
|
{
|
||||||
|
return *(sequence_file++);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t getWord()
|
||||||
|
{
|
||||||
|
return (getByte() << 8) + getByte();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string getString()
|
||||||
|
{
|
||||||
|
uint8_t tamanyCadena = getByte();
|
||||||
|
char filename[256];
|
||||||
|
for (int i=0; i<tamanyCadena; i++) filename[i] = getByte();
|
||||||
|
filename[tamanyCadena] = '\0';
|
||||||
|
return std::string(filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawPic(std::string filename)
|
||||||
|
{
|
||||||
|
draw::surface *pic = draw::loadSurface(filename);
|
||||||
|
draw::setSource(pic);
|
||||||
|
draw::draw(0, 0, 320, 200, 0, 0);
|
||||||
|
draw::freeSurface(pic);
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawText(const int x, const int y, const uint8_t color, std::string text)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
bool loop()
|
bool loop()
|
||||||
{
|
{
|
||||||
if (wait_until>0 && SDL_GetTicks() < wait_until)
|
if (wait_until>0 && SDL_GetTicks() < wait_until)
|
||||||
@@ -40,23 +73,31 @@ namespace gamestate
|
|||||||
switch ( tipo_diapositiva )
|
switch ( tipo_diapositiva )
|
||||||
{
|
{
|
||||||
case DIAPO_ESPERAR:
|
case DIAPO_ESPERAR:
|
||||||
const uint32_t wait_time = (uint16_t)((uint8_t(*(sequence_file++)) << 8) + uint8_t(*(sequence_file++)));
|
wait_until = SDL_GetTicks() + getWord();
|
||||||
wait_until = SDL_GetTicks() + wait_time;
|
|
||||||
break;
|
break;
|
||||||
case DIAPO_FADEIN:
|
case DIAPO_FADEIN:
|
||||||
{
|
drawPic(getString());
|
||||||
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();
|
draw::fadein();
|
||||||
|
wait_until = SDL_GetTicks() + 250;
|
||||||
|
break;
|
||||||
|
case DIAPO_SHOW:
|
||||||
|
drawPic(getString());
|
||||||
|
break;
|
||||||
|
case DIAPO_PRINT:
|
||||||
|
drawText(getWord(), getWord(), getByte(), getString());
|
||||||
|
break;
|
||||||
|
case DIAPO_MUSICA:
|
||||||
|
audio::playMusic(audio::loadMusic(getString()));
|
||||||
|
break;
|
||||||
|
case DIAPO_FADEOUT:
|
||||||
|
draw::fadeout();
|
||||||
|
wait_until = SDL_GetTicks() + 250;
|
||||||
|
break;
|
||||||
|
case DIAPO_FADEMUSIC:
|
||||||
|
draw::fadeout();
|
||||||
|
audio::fadeoutMusic();
|
||||||
|
wait_until = SDL_GetTicks() + 250;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ namespace audio
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Comença a reproduïr la música en questió
|
// Comença a reproduïr la música en questió
|
||||||
void playMusic(music *mus, const int loop)
|
void playMusic(const music *mus, const int loop)
|
||||||
{
|
{
|
||||||
Mix_PlayMusic((Mix_Music *)mus, loop);
|
Mix_PlayMusic((Mix_Music *)mus, loop);
|
||||||
}
|
}
|
||||||
@@ -58,6 +58,12 @@ namespace audio
|
|||||||
Mix_HaltMusic();
|
Mix_HaltMusic();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Para la música que estava sonant fent un fade
|
||||||
|
void fadeoutMusic()
|
||||||
|
{
|
||||||
|
Mix_FadeOutMusic(250);
|
||||||
|
}
|
||||||
|
|
||||||
// Obté el estat actual de la música
|
// Obté el estat actual de la música
|
||||||
const music_state getMusicState()
|
const music_state getMusicState()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ namespace audio
|
|||||||
/// @brief Comença a reproduïr la música en questió
|
/// @brief Comença a reproduïr la música en questió
|
||||||
/// @param mus punter a la música
|
/// @param mus punter a la música
|
||||||
/// @param loop quants bucles farà (-1=infinit, 0=no repeteix, 1=repeteix 1 vegada...)
|
/// @param loop quants bucles farà (-1=infinit, 0=no repeteix, 1=repeteix 1 vegada...)
|
||||||
void playMusic(music *mus, const int loop = -1);
|
void playMusic(const music *mus, const int loop = -1);
|
||||||
|
|
||||||
/// @brief Pausa la música que està sonant ara
|
/// @brief Pausa la música que està sonant ara
|
||||||
void pauseMusic();
|
void pauseMusic();
|
||||||
@@ -50,6 +50,9 @@ namespace audio
|
|||||||
/// @brief Para la música que estava sonant
|
/// @brief Para la música que estava sonant
|
||||||
void stopMusic();
|
void stopMusic();
|
||||||
|
|
||||||
|
/// @brief Para la música que estava sonant fent un fade
|
||||||
|
void fadeoutMusic();
|
||||||
|
|
||||||
/// @brief Obté el estat actual de la música
|
/// @brief Obté el estat actual de la música
|
||||||
/// @return estat actual de la música (MUSIC_INVALID, MUSIC_PLAYING, MUSIC_PAUSED o MUSIC_STOPPED)
|
/// @return estat actual de la música (MUSIC_INVALID, MUSIC_PLAYING, MUSIC_PAUSED o MUSIC_STOPPED)
|
||||||
const music_state getMusicState();
|
const music_state getMusicState();
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ namespace draw
|
|||||||
surface *pushedSource = nullptr; // Punter a la superficie d'oritge que s'ha pushat
|
surface *pushedSource = nullptr; // Punter a la superficie d'oritge que s'ha pushat
|
||||||
|
|
||||||
uint32_t palette[256]; // La paleta de colors
|
uint32_t palette[256]; // La paleta de colors
|
||||||
|
uint32_t aux_palette[256]; // La paleta de colors
|
||||||
uint8_t color_indices[256]; // Indices dels colors per defecte
|
uint8_t color_indices[256]; // Indices dels colors per defecte
|
||||||
uint8_t sel_color = 0; // Color seleccionat per defecte
|
uint8_t sel_color = 0; // Color seleccionat per defecte
|
||||||
uint8_t transparent = 0; // El color transparent
|
uint8_t transparent = 0; // El color transparent
|
||||||
@@ -353,24 +354,57 @@ namespace draw
|
|||||||
vline(x+w-1,y,h);
|
vline(x+w-1,y,h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool decPalEntry(const uint8_t index, const uint8_t val)
|
||||||
|
{
|
||||||
|
const uint32_t entry = palette[index];
|
||||||
|
uint8_t r = (entry >> 16) & 0xff;
|
||||||
|
uint8_t g = (entry >> 8) & 0xff;
|
||||||
|
uint8_t b = entry & 0xff;
|
||||||
|
|
||||||
|
r = r>=val ? r-val : 0;
|
||||||
|
g = g>=val ? g-val : 0;
|
||||||
|
b = b>=val ? b-val : 0;
|
||||||
|
palette[index] = (r << 16) + (g << 8) + b;
|
||||||
|
|
||||||
|
return palette[index] != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool incPalEntry(const uint8_t index, const uint8_t val)
|
||||||
|
{
|
||||||
|
const uint32_t entry = palette[index];
|
||||||
|
uint8_t r = (entry >> 16) & 0xff;
|
||||||
|
uint8_t g = (entry >> 8) & 0xff;
|
||||||
|
uint8_t b = entry & 0xff;
|
||||||
|
|
||||||
|
const uint32_t dest_entry = aux_palette[index];
|
||||||
|
const uint8_t dr = (dest_entry >> 16) & 0xff;
|
||||||
|
const uint8_t dg = (dest_entry >> 8) & 0xff;
|
||||||
|
const uint8_t db = dest_entry & 0xff;
|
||||||
|
|
||||||
|
r = (r+val > dr) ? dr : r+val;
|
||||||
|
g = (g+val > dg) ? dg : g+val;
|
||||||
|
b = (b+val > db) ? db : b+val;
|
||||||
|
palette[index] = (r << 16) + (g << 8) + b;
|
||||||
|
|
||||||
|
return palette[index] != aux_palette[index];
|
||||||
|
}
|
||||||
|
|
||||||
void fadein()
|
void fadein()
|
||||||
{
|
{
|
||||||
|
if (!fading_in) {
|
||||||
|
for (int i=0;i<256;++i) {
|
||||||
|
aux_palette[i] = palette[i];
|
||||||
|
palette[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fading_in = false;
|
||||||
|
for (int i=0; i<256; ++i) if (incPalEntry(i, 16)) fading_in = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fadeout()
|
void fadeout()
|
||||||
{
|
{
|
||||||
fading_out = false;
|
fading_out = false;
|
||||||
for (int i=0; i<256; ++i)
|
for (int i=0; i<256; ++i) if (decPalEntry(i, 16)) fading_out = true;
|
||||||
{
|
|
||||||
// [TODO] ARREGLAR, les entrades en la paleta son uint32_t, hi ha que separar en rgba i decrementar cada canal per separat
|
|
||||||
if (palette[i] > 16) {
|
|
||||||
palette[i] = palette[i]-16;
|
|
||||||
fading_out = true;
|
|
||||||
} else {
|
|
||||||
palette[i] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void print(const char* text, const int x, const int y, const Uint8 color, const Uint8 borde)
|
void print(const char* text, const int x, const int y, const Uint8 color, const Uint8 borde)
|
||||||
|
|||||||
Reference in New Issue
Block a user