- 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()
{
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;

View File

@@ -69,7 +69,7 @@ namespace gamestate
void carregarMapa()
{
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;

View File

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

View File

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

View File

@@ -114,7 +114,7 @@ namespace draw
// Agafem un buffer de bytes de l'arxiu especificat
// getFileBuffer() simplement ens torna el arxiu sencer dins de un array de char
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
if (buffer == nullptr)
@@ -230,7 +230,7 @@ namespace draw
// Agafem un buffer de bytes de l'arxiu especificat
// getFileBuffer() simplement ens torna el arxiu sencer dins de un array de char
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
// 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)
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...
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
filesize = toc[count].size;
if (filesize) *filesize = toc[count].size;
// obrim l'arxiu de recursos
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.
f = fopen((resource_folder + resourcename).c_str(), binary ? "rb" : "r");
fseek(f, 0, SEEK_END);
filesize = ftell(f);
if (filesize) *filesize = ftell(f);
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)
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
FILE *f = getFilePointer(resourcename, filesize, true);
FILE *f = getFilePointer(resourcename, &size, true);
// 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
fread(buffer, filesize, 1, f);
fread(buffer, size, 1, f);
// Tanquem l'arxiu
fclose(f);
if (filesize) *filesize = size;
// Tornem el buffer. OJO! recordar alliberar-lo amb free(buffer) quan acabem amb ell.
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 binary si volem obrir el arxiu en format binary
/// @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 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 filesize paràmetre de retorn. Ací es torna el tamany de l'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)
// -----------------------------------------------------------------------------------------------------------