- Ara al carregar un arxiu la variable on guardar el tamany s'envia com un punter, així es pot ignorar.

This commit is contained in:
2023-10-16 18:39:41 +02:00
parent 262761e832
commit 4c430ec512
7 changed files with 28 additions and 20 deletions

View File

@@ -140,7 +140,7 @@ namespace gamestate
char *ObtenerPasswordDeFase() char *ObtenerPasswordDeFase()
{ {
int filesize = 0; int filesize = 0;
const char *buffer = file::getFileBuffer("offsets.bal", filesize); const char *buffer = file::getFileBuffer("offsets.bal", &filesize);
int punter = (game::getConfig("fase")-1)*11; int punter = (game::getConfig("fase")-1)*11;

View File

@@ -69,7 +69,7 @@ namespace gamestate
void carregarMapa() void carregarMapa()
{ {
int filesize = 0; int filesize = 0;
char *buffer = file::getFileBuffer("MAPES.BAL", filesize); char *buffer = file::getFileBuffer("MAPES.BAL", &filesize);
char *punter = buffer + (game::getConfig("fase") * 212) + 3; char *punter = buffer + (game::getConfig("fase") * 212) + 3;

View File

@@ -43,7 +43,7 @@ namespace gamestate
} }
int filesize; int filesize;
sequence_file = file::getFilePointer(filename, filesize); sequence_file = file::getFilePointer(filename, &filesize);
game::setState(&gamestate::sequence::loop); game::setState(&gamestate::sequence::loop);
} }
@@ -87,26 +87,31 @@ namespace gamestate
std::string command(text); std::string command(text);
if (command=="ESPERAR") { if (command=="ESPERAR") {
int res = fscanf(sequence_file, "%i", &val); //int res =
fscanf(sequence_file, "%i", &val);
printf("ESPERAR %i\n", val); printf("ESPERAR %i\n", val);
wait_until = SDL_GetTicks() + val; wait_until = SDL_GetTicks() + val;
} else if (command=="FADEIN") { } else if (command=="FADEIN") {
int res = fscanf(sequence_file, " '%[^']'", text); //int res =
fscanf(sequence_file, " '%[^']'", text);
drawPic(text); drawPic(text);
draw::fadein(); draw::fadein();
} else if (command=="SHOW") { } else if (command=="SHOW") {
int res = fscanf(sequence_file, " '%[^']'", text); //int res =
fscanf(sequence_file, " '%[^']'", text);
drawPic(text); drawPic(text);
draw::render(); draw::render();
} else if (command=="PRINT") { } else if (command=="PRINT") {
int res = fscanf(sequence_file, " %i %i %i '%[^']'", &x, &y, &val, text); //int res =
fscanf(sequence_file, " %i %i %i '%[^']'", &x, &y, &val, text);
drawText(x, y, val, text); drawText(x, y, val, text);
} else if (command=="PLAYMUSIC") { } else if (command=="PLAYMUSIC") {
int res = fscanf(sequence_file, " '%[^']'", text); //int res =
fscanf(sequence_file, " '%[^']'", text);
audio::loadMusic(text); audio::loadMusic(text);
audio::playMusic(); audio::playMusic();

View File

@@ -42,7 +42,7 @@ namespace audio
free(buffer); free(buffer);
} }
int filesize=0; int filesize=0;
buffer = file::getFileBuffer(filename, filesize); buffer = file::getFileBuffer(filename, &filesize);
music = Mix_LoadMUS_RW(SDL_RWFromMem(buffer, filesize), 1); music = Mix_LoadMUS_RW(SDL_RWFromMem(buffer, filesize), 1);
if (music==nullptr) return false; if (music==nullptr) return false;

View File

@@ -114,7 +114,7 @@ namespace draw
// Agafem un buffer de bytes de l'arxiu especificat // Agafem un buffer de bytes de l'arxiu especificat
// getFileBuffer() simplement ens torna el arxiu sencer dins de un array de char // getFileBuffer() simplement ens torna el arxiu sencer dins de un array de char
int size; int size;
uint8_t *buffer = (uint8_t *)file::getFileBuffer(filename, size); uint8_t *buffer = (uint8_t *)file::getFileBuffer(filename, &size);
// Si ens ha tornat nullptr, es que no l'ha trobat, tornem nosaltres també nullptr ja que no s'ha pogut crear la superficie // Si ens ha tornat nullptr, es que no l'ha trobat, tornem nosaltres també nullptr ja que no s'ha pogut crear la superficie
if (buffer == nullptr) if (buffer == nullptr)
@@ -230,7 +230,7 @@ namespace draw
// Agafem un buffer de bytes de l'arxiu especificat // Agafem un buffer de bytes de l'arxiu especificat
// getFileBuffer() simplement ens torna el arxiu sencer dins de un array de char // getFileBuffer() simplement ens torna el arxiu sencer dins de un array de char
int size; int size;
uint8_t *buffer = (uint8_t *)file::getFileBuffer(filename, size); uint8_t *buffer = (uint8_t *)file::getFileBuffer(filename, &size);
// Li passem el array del arxiu a LoadPalette. Ell ens torna un array de uint32_t amb la paleta // Li passem el array del arxiu a LoadPalette. Ell ens torna un array de uint32_t amb la paleta
// Van a ser 256 entrades de 32 bits, cada entrada es un color, amb el format 0xAARRGGBB // Van a ser 256 entrades de 32 bits, cada entrada es un color, amb el format 0xAARRGGBB

View File

@@ -193,7 +193,7 @@ namespace file
} }
// Obté un "FILE*" al arxiu que se li demana, independentment de la font (arxius individual en carpeta, o arxiu de recursos) // Obté un "FILE*" al arxiu que se li demana, independentment de la font (arxius individual en carpeta, o arxiu de recursos)
FILE *getFilePointer(const std::string resourcename, int &filesize, const bool binary) FILE *getFilePointer(const std::string resourcename, int *filesize, const bool binary)
{ {
// Si tenim configurat agafar els recursos de arxiu, pero encara no tenim la taula de continguts carregada... // Si tenim configurat agafar els recursos de arxiu, pero encara no tenim la taula de continguts carregada...
if (file_source == SOURCE_FILE and toc.size() == 0) if (file_source == SOURCE_FILE and toc.size() == 0)
@@ -231,7 +231,7 @@ namespace file
} }
// Agafem el tamany del recurs de la taula de continguts // Agafem el tamany del recurs de la taula de continguts
filesize = toc[count].size; if (filesize) *filesize = toc[count].size;
// obrim l'arxiu de recursos // obrim l'arxiu de recursos
f = fopen(resource_filename.c_str(), binary ? "rb" : "r"); f = fopen(resource_filename.c_str(), binary ? "rb" : "r");
@@ -252,7 +252,7 @@ namespace file
// Si estem pillant els recursos de carpeta, simplement obrim el arxiu en questió i tornem el FILE* associat. // Si estem pillant els recursos de carpeta, simplement obrim el arxiu en questió i tornem el FILE* associat.
f = fopen((resource_folder + resourcename).c_str(), binary ? "rb" : "r"); f = fopen((resource_folder + resourcename).c_str(), binary ? "rb" : "r");
fseek(f, 0, SEEK_END); fseek(f, 0, SEEK_END);
filesize = ftell(f); if (filesize) *filesize = ftell(f);
fseek(f, 0, SEEK_SET); fseek(f, 0, SEEK_SET);
} }
@@ -261,20 +261,23 @@ namespace file
} }
// Obté un buffer de memòria en format "char*" del arxiu que se li demana, independentment de la font (arxius individual en carpeta, o arxiu de recursos) // Obté un buffer de memòria en format "char*" del arxiu que se li demana, independentment de la font (arxius individual en carpeta, o arxiu de recursos)
char *getFileBuffer(const std::string resourcename, int &filesize) char *getFileBuffer(const std::string resourcename, int *filesize)
{ {
int size;
// Usem la funció anterior per a obtinde un FILE*, independentment de on pillem els recursos // Usem la funció anterior per a obtinde un FILE*, independentment de on pillem els recursos
FILE *f = getFilePointer(resourcename, filesize, true); FILE *f = getFilePointer(resourcename, &size, true);
// Reservem memòria per al buffer // Reservem memòria per al buffer
char *buffer = (char *)malloc(filesize); char *buffer = (char *)malloc(size);
// llegim el contingut del arxiu i el fiquem en el buffer // llegim el contingut del arxiu i el fiquem en el buffer
fread(buffer, filesize, 1, f); fread(buffer, size, 1, f);
// Tanquem l'arxiu // Tanquem l'arxiu
fclose(f); fclose(f);
if (filesize) *filesize = size;
// Tornem el buffer. OJO! recordar alliberar-lo amb free(buffer) quan acabem amb ell. // Tornem el buffer. OJO! recordar alliberar-lo amb free(buffer) quan acabem amb ell.
return buffer; return buffer;
} }

View File

@@ -28,14 +28,14 @@ namespace file
/// @param filesize paràmetre de retorn. Ací es torna el tamany de l'arxiu /// @param filesize paràmetre de retorn. Ací es torna el tamany de l'arxiu
/// @param binary si volem obrir el arxiu en format binary /// @param binary si volem obrir el arxiu en format binary
/// @return un punter FILE* al arxiu /// @return un punter FILE* al arxiu
FILE *getFilePointer(const std::string resourcename, int &filesize, const bool binary = false); FILE *getFilePointer(const std::string resourcename, int *filesize = nullptr, const bool binary = false);
/// @brief Obté un buffer de memòria en format "char*" del arxiu que se li demana, independentment de la font (arxius individual en carpeta, o arxiu de recursos). /// @brief Obté un buffer de memòria en format "char*" del arxiu que se li demana, independentment de la font (arxius individual en carpeta, o arxiu de recursos).
/// @brief Recordar alliberar la memoria del buffer amb free(buffer) al acabar amb ell. /// @brief Recordar alliberar la memoria del buffer amb free(buffer) al acabar amb ell.
/// @param resourcename el nom de l'arxiu del que volem obrindre el buffer /// @param resourcename el nom de l'arxiu del que volem obrindre el buffer
/// @param filesize paràmetre de retorn. Ací es torna el tamany de l'arxiu /// @param filesize paràmetre de retorn. Ací es torna el tamany de l'arxiu
/// @return un array de "filesize" bytes amb el contingut del arxiu /// @return un array de "filesize" bytes amb el contingut del arxiu
char *getFileBuffer(const std::string resourcename, int &filesize); char *getFileBuffer(const std::string resourcename, int *filesize = nullptr);
// Funcions d'access a la configuració (clau = valor) // Funcions d'access a la configuració (clau = valor)
// ----------------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------------