Fix incorrect usage of s64 map
Changelog: - Turns out, the map doesnt make a copy of the string for storage. Therefore, need to store the name somewhere before inserting into the map. - Add struct for each assets to retain the name. - Update assets functions to maintain interfacescene_man
parent
e9d9ffff20
commit
57c9eb0216
|
@ -5,23 +5,50 @@
|
||||||
#define MAX_SPRITES 16
|
#define MAX_SPRITES 16
|
||||||
#define MAX_SOUNDS 16
|
#define MAX_SOUNDS 16
|
||||||
#define MAX_FONTS 4
|
#define MAX_FONTS 4
|
||||||
|
#define MAX_NAME_LEN 32
|
||||||
uint8_t free_idx[4] = {0};
|
uint8_t free_idx[4] = {0};
|
||||||
|
|
||||||
// Hard limit number of
|
// Hard limit number of
|
||||||
static Texture2D textures[MAX_TEXTURES];
|
typedef struct TextureData
|
||||||
static Font fonts[MAX_FONTS];
|
{
|
||||||
static Sound sfx[MAX_SOUNDS];
|
Texture2D texture;
|
||||||
static Sprite_t sprites[MAX_SPRITES];
|
char name[MAX_NAME_LEN];
|
||||||
|
}TextureData_t;
|
||||||
|
typedef struct SpriteData
|
||||||
|
{
|
||||||
|
Sprite_t sprite;
|
||||||
|
char name[MAX_NAME_LEN];
|
||||||
|
}SpriteData_t;
|
||||||
|
typedef struct FontData
|
||||||
|
{
|
||||||
|
Font font;
|
||||||
|
char name[MAX_NAME_LEN];
|
||||||
|
}FontData_t;
|
||||||
|
typedef struct SoundData
|
||||||
|
{
|
||||||
|
Sound sound;
|
||||||
|
char name[MAX_NAME_LEN];
|
||||||
|
}SoundData_t;
|
||||||
|
|
||||||
|
|
||||||
|
static TextureData_t textures[MAX_TEXTURES];
|
||||||
|
static FontData_t fonts[MAX_FONTS];
|
||||||
|
static SoundData_t sfx[MAX_SOUNDS];
|
||||||
|
static SpriteData_t sprites[MAX_SPRITES];
|
||||||
|
|
||||||
// Maybe need a circular buffer??
|
// Maybe need a circular buffer??
|
||||||
Texture2D* add_texture(Assets_t* assets, const char* name, const char* path)
|
Texture2D* add_texture(Assets_t* assets, const char* name, const char* path)
|
||||||
{
|
{
|
||||||
uint8_t tex_idx = free_idx[0];
|
uint8_t tex_idx = free_idx[0];
|
||||||
assert(tex_idx < MAX_TEXTURES);
|
assert(tex_idx < MAX_TEXTURES);
|
||||||
textures[tex_idx] = LoadTexture(path);
|
Texture2D tex = LoadTexture(path);
|
||||||
sc_map_put_s64(&assets->m_textures, name, tex_idx);
|
if (tex.width == 0 || tex.height == 0) return NULL;
|
||||||
|
|
||||||
|
textures[tex_idx].texture = tex;
|
||||||
|
strncpy(textures[tex_idx].name, name, MAX_NAME_LEN);
|
||||||
|
sc_map_put_s64(&assets->m_textures, textures[tex_idx].name, tex_idx);
|
||||||
free_idx[0]++;
|
free_idx[0]++;
|
||||||
return textures + tex_idx;
|
return &textures[tex_idx].texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
Sprite_t* add_sprite(Assets_t* assets, const char* name, Texture2D* texture)
|
Sprite_t* add_sprite(Assets_t* assets, const char* name, Texture2D* texture)
|
||||||
|
@ -29,30 +56,33 @@ Sprite_t* add_sprite(Assets_t* assets, const char* name, Texture2D* texture)
|
||||||
uint8_t spr_idx = free_idx[1];
|
uint8_t spr_idx = free_idx[1];
|
||||||
assert(spr_idx < MAX_SPRITES);
|
assert(spr_idx < MAX_SPRITES);
|
||||||
memset(sprites + spr_idx, 0, sizeof(Sprite_t));
|
memset(sprites + spr_idx, 0, sizeof(Sprite_t));
|
||||||
sprites[spr_idx].texture = texture;
|
sprites[spr_idx].sprite.texture = texture;
|
||||||
sc_map_put_s64(&assets->m_sprites, name, spr_idx);
|
strncpy(sprites[spr_idx].name, name, MAX_NAME_LEN);
|
||||||
|
sc_map_put_s64(&assets->m_sprites, sprites[spr_idx].name, spr_idx);
|
||||||
free_idx[1]++;
|
free_idx[1]++;
|
||||||
return sprites + spr_idx;
|
return &sprites[spr_idx].sprite;
|
||||||
}
|
}
|
||||||
|
|
||||||
Sound* add_sound(Assets_t* assets, const char* name, const char* path)
|
Sound* add_sound(Assets_t* assets, const char* name, const char* path)
|
||||||
{
|
{
|
||||||
uint8_t snd_idx = free_idx[2];
|
uint8_t snd_idx = free_idx[2];
|
||||||
assert(snd_idx < MAX_SOUNDS);
|
assert(snd_idx < MAX_SOUNDS);
|
||||||
sfx[snd_idx] = LoadSound(path);
|
sfx[snd_idx].sound = LoadSound(path);
|
||||||
sc_map_put_s64(&assets->m_sounds, name, snd_idx);
|
strncpy(sfx[snd_idx].name, name, MAX_NAME_LEN);
|
||||||
|
sc_map_put_s64(&assets->m_sounds, sfx[snd_idx].name, snd_idx);
|
||||||
free_idx[2]++;
|
free_idx[2]++;
|
||||||
return sfx + snd_idx;
|
return &sfx[snd_idx].sound;
|
||||||
}
|
}
|
||||||
|
|
||||||
Font* add_font(Assets_t* assets, const char* name, const char* path)
|
Font* add_font(Assets_t* assets, const char* name, const char* path)
|
||||||
{
|
{
|
||||||
uint8_t fnt_idx = free_idx[3];
|
uint8_t fnt_idx = free_idx[3];
|
||||||
assert(fnt_idx < MAX_FONTS);
|
assert(fnt_idx < MAX_FONTS);
|
||||||
fonts[fnt_idx] = LoadFont(path);
|
fonts[fnt_idx].font = LoadFont(path);
|
||||||
sc_map_put_s64(&assets->m_fonts, name, fnt_idx);
|
strncpy(fonts[fnt_idx].name, name, MAX_NAME_LEN);
|
||||||
|
sc_map_put_s64(&assets->m_fonts, fonts[fnt_idx].name, fnt_idx);
|
||||||
free_idx[3]++;
|
free_idx[3]++;
|
||||||
return fonts + fnt_idx;
|
return &fonts[fnt_idx].font;
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_assets(Assets_t* assets)
|
void init_assets(Assets_t* assets)
|
||||||
|
@ -86,7 +116,7 @@ Texture2D* get_texture(Assets_t* assets, const char* name)
|
||||||
uint8_t tex_idx = sc_map_get_s64(&assets->m_textures, name);
|
uint8_t tex_idx = sc_map_get_s64(&assets->m_textures, name);
|
||||||
if (sc_map_found(&assets->m_textures))
|
if (sc_map_found(&assets->m_textures))
|
||||||
{
|
{
|
||||||
return textures + tex_idx;
|
return &textures[tex_idx].texture;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -96,7 +126,7 @@ Sprite_t* get_sprite(Assets_t* assets, const char* name)
|
||||||
uint8_t spr_idx = sc_map_get_s64(&assets->m_sprites, name);
|
uint8_t spr_idx = sc_map_get_s64(&assets->m_sprites, name);
|
||||||
if (sc_map_found(&assets->m_sprites))
|
if (sc_map_found(&assets->m_sprites))
|
||||||
{
|
{
|
||||||
return sprites + spr_idx;
|
return &sprites[spr_idx].sprite;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -106,7 +136,7 @@ Sound* get_sound(Assets_t* assets, const char* name)
|
||||||
uint8_t snd_idx = sc_map_get_s64(&assets->m_sounds, name);
|
uint8_t snd_idx = sc_map_get_s64(&assets->m_sounds, name);
|
||||||
if (sc_map_found(&assets->m_sounds))
|
if (sc_map_found(&assets->m_sounds))
|
||||||
{
|
{
|
||||||
return sfx + snd_idx;
|
return &sfx[snd_idx].sound;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -116,7 +146,7 @@ Font* get_font(Assets_t* assets, const char* name)
|
||||||
uint8_t fnt_idx = sc_map_get_s64(&assets->m_fonts, name);
|
uint8_t fnt_idx = sc_map_get_s64(&assets->m_fonts, name);
|
||||||
if (sc_map_found(&assets->m_fonts))
|
if (sc_map_found(&assets->m_fonts))
|
||||||
{
|
{
|
||||||
return fonts + fnt_idx;
|
return &fonts[fnt_idx].font;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue