- [NEW] Ara les textures usen un std::vector i ja no hi ha limit. Espere no arrepentir-me
- [WIP] Treballant en les custom fonts
This commit is contained in:
36
mini.cpp
36
mini.cpp
@@ -6,8 +6,9 @@
|
|||||||
#include "gifenc.h"
|
#include "gifenc.h"
|
||||||
#include "jail_audio.h"
|
#include "jail_audio.h"
|
||||||
#include "jshader.h"
|
#include "jshader.h"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#define MAX_TEXTURES 100
|
//#define MAX_TEXTURES 100
|
||||||
|
|
||||||
#ifdef MACOS_BUNDLE
|
#ifdef MACOS_BUNDLE
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
@@ -24,6 +25,13 @@ struct surface_t {
|
|||||||
uint32_t size;
|
uint32_t size;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct font_t {
|
||||||
|
struct special_char_t { uint8_t character; SDL_Rect glyph; SDL_Point displacement; };
|
||||||
|
int8_t spacing;
|
||||||
|
SDL_Rect characters[96];
|
||||||
|
special_char_t specials[64];
|
||||||
|
};
|
||||||
|
|
||||||
int fps=0;
|
int fps=0;
|
||||||
int fps_counter=0;
|
int fps_counter=0;
|
||||||
uint32_t fps_timer=0;
|
uint32_t fps_timer=0;
|
||||||
@@ -38,7 +46,7 @@ bool screen_cursor = true;
|
|||||||
int desktop_width = 0;
|
int desktop_width = 0;
|
||||||
int desktop_height = 0;
|
int desktop_height = 0;
|
||||||
|
|
||||||
surface_t surfaces[MAX_TEXTURES];
|
std::vector<surface_t> surfaces;
|
||||||
surface_t *screen_surface = &surfaces[0];
|
surface_t *screen_surface = &surfaces[0];
|
||||||
surface_t *dest_surface = screen_surface;
|
surface_t *dest_surface = screen_surface;
|
||||||
surface_t *source_surface = NULL;
|
surface_t *source_surface = NULL;
|
||||||
@@ -173,12 +181,14 @@ void reinit() {
|
|||||||
ds::trans=0;
|
ds::trans=0;
|
||||||
ds::fill_pattern = 0b1111111111111111;
|
ds::fill_pattern = 0b1111111111111111;
|
||||||
ds::fill_trans = false;
|
ds::fill_trans = false;
|
||||||
for (int i=1; i<MAX_TEXTURES; ++i) {
|
for (int i=1; i<surfaces.size(); ++i) {
|
||||||
if (surfaces[i].p != NULL) free(surfaces[i].p);
|
if (surfaces[i].p != NULL) free(surfaces[i].p);
|
||||||
surfaces[i].p = NULL;
|
surfaces[i].p = NULL;
|
||||||
if (surfaces[i].name != NULL) free(surfaces[i].name);
|
if (surfaces[i].name != NULL) free(surfaces[i].name);
|
||||||
surfaces[i].name = NULL;
|
surfaces[i].name = NULL;
|
||||||
}
|
}
|
||||||
|
surfaces.clear();
|
||||||
|
|
||||||
for (int i=0;i<256;++i) ds::draw_palette[i]=i;
|
for (int i=0;i<256;++i) ds::draw_palette[i]=i;
|
||||||
if (file!=NULL) fclose(file);
|
if (file!=NULL) fclose(file);
|
||||||
file = NULL;
|
file = NULL;
|
||||||
@@ -205,8 +215,8 @@ int scrh() {
|
|||||||
|
|
||||||
uint8_t newsurf(int w, int h) {
|
uint8_t newsurf(int w, int h) {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (i<MAX_TEXTURES && surfaces[i].p != NULL) ++i;
|
while (i<surfaces.size() && surfaces[i].p != NULL) ++i;
|
||||||
//[TODO] Gestionar el cas en que no queden surfaces lliures
|
if (i==i<surfaces.size()) surfaces.emplace_back();
|
||||||
surfaces[i].name = nullptr;
|
surfaces[i].name = nullptr;
|
||||||
surfaces[i].w = w;
|
surfaces[i].w = w;
|
||||||
surfaces[i].h = h;
|
surfaces[i].h = h;
|
||||||
@@ -218,7 +228,7 @@ uint8_t newsurf(int w, int h) {
|
|||||||
|
|
||||||
uint8_t loadsurf(const char* filename, const bool external) {
|
uint8_t loadsurf(const char* filename, const bool external) {
|
||||||
// Si el gif ja s'ha carregat en una textura, tornem eixa textura
|
// Si el gif ja s'ha carregat en una textura, tornem eixa textura
|
||||||
for (int i=0; i<MAX_TEXTURES; ++i)
|
for (int i=0; i<surfaces.size(); ++i)
|
||||||
if (surfaces[i].name && strcmp(surfaces[i].name, filename)==0) {
|
if (surfaces[i].name && strcmp(surfaces[i].name, filename)==0) {
|
||||||
SDL_LogDebug(SDL_LOG_CATEGORY_APPLICATION, "Carrega de '%s' abortada: Reusant: %i.\n", filename, i);
|
SDL_LogDebug(SDL_LOG_CATEGORY_APPLICATION, "Carrega de '%s' abortada: Reusant: %i.\n", filename, i);
|
||||||
return i;
|
return i;
|
||||||
@@ -241,13 +251,8 @@ uint8_t loadsurf(const char* filename, const bool external) {
|
|||||||
|
|
||||||
// Agafar la pròxima textura lliure
|
// Agafar la pròxima textura lliure
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (i<MAX_TEXTURES && surfaces[i].p != NULL) ++i;
|
while (i<surfaces.size() && surfaces[i].p != NULL) ++i;
|
||||||
|
if (i==i<surfaces.size()) surfaces.emplace_back();
|
||||||
// Si no en queden lliures, petar
|
|
||||||
if (i==MAX_TEXTURES) {
|
|
||||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error: no queden textures lliures\n");
|
|
||||||
return 255;
|
|
||||||
}
|
|
||||||
|
|
||||||
surfaces[i].p = LoadGif(buffer, &surfaces[i].w, &surfaces[i].h);
|
surfaces[i].p = LoadGif(buffer, &surfaces[i].w, &surfaces[i].h);
|
||||||
surfaces[i].size = surfaces[i].w*surfaces[i].h;
|
surfaces[i].size = surfaces[i].w*surfaces[i].h;
|
||||||
@@ -309,7 +314,7 @@ void setmap(uint8_t surface) {
|
|||||||
|
|
||||||
uint8_t getmap()
|
uint8_t getmap()
|
||||||
{
|
{
|
||||||
for (int i=0; i<MAX_TEXTURES; ++i) if (map_surface == &surfaces[i]) return i;
|
for (int i=0; i<surfaces.size(); ++i) if (map_surface == &surfaces[i]) return i;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -568,7 +573,8 @@ int main(int argc,char*argv[]){
|
|||||||
|
|
||||||
//Mix_Quit();
|
//Mix_Quit();
|
||||||
|
|
||||||
for (int i=0;i<MAX_TEXTURES;++i) freesurf(i);
|
for (int i=0;i<surfaces.size();++i) freesurf(i);
|
||||||
|
surfaces.clear();
|
||||||
dest_surface = source_surface = map_surface = NULL;
|
dest_surface = source_surface = map_surface = NULL;
|
||||||
destroyDisplay();
|
destroyDisplay();
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
|
|||||||
Reference in New Issue
Block a user