Add particle emitter to assets
parent
ad421d724a
commit
7939b8753e
|
@ -8,7 +8,7 @@
|
|||
#include "zstd.h"
|
||||
#include <stdio.h>
|
||||
|
||||
uint8_t n_loaded[5] = {0};
|
||||
uint8_t n_loaded[6] = {0};
|
||||
|
||||
// Hard limit number of
|
||||
typedef struct TextureData
|
||||
|
@ -36,12 +36,18 @@ typedef struct LevelPackData
|
|||
LevelPack_t pack;
|
||||
char name[MAX_NAME_LEN];
|
||||
}LevelPackData_t;
|
||||
typedef struct PartEmitterData
|
||||
{
|
||||
ParticleEmitter_t emitter;
|
||||
char name[MAX_NAME_LEN];
|
||||
}ParticleEmitterData_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];
|
||||
static LevelPackData_t levelpacks[MAX_LEVEL_PACK];
|
||||
static ParticleEmitterData_t emitters[MAX_PARTICLE_EMITTER];
|
||||
|
||||
#define DECOMPRESSOR_INBUF_LEN 4096
|
||||
#define DECOMPRESSOR_OUTBUF_LEN 4096
|
||||
|
@ -106,7 +112,7 @@ Sprite_t* add_sprite(Assets_t* assets, const char* name, Texture2D* texture)
|
|||
{
|
||||
uint8_t spr_idx = n_loaded[1];
|
||||
assert(spr_idx < MAX_SPRITES);
|
||||
memset(sprites + spr_idx, 0, sizeof(Sprite_t));
|
||||
memset(sprites + spr_idx, 0, sizeof(SpriteData_t));
|
||||
sprites[spr_idx].sprite.texture = texture;
|
||||
strncpy(sprites[spr_idx].name, name, MAX_NAME_LEN);
|
||||
sc_map_put_s64(&assets->m_sprites, sprites[spr_idx].name, spr_idx);
|
||||
|
@ -136,6 +142,18 @@ Font* add_font(Assets_t* assets, const char* name, const char* path)
|
|||
return &fonts[fnt_idx].font;
|
||||
}
|
||||
|
||||
ParticleEmitter_t* add_part_emitter(Assets_t* assets, const char* name, Sprite_t* sprite)
|
||||
{
|
||||
uint8_t emitter_idx = n_loaded[5];
|
||||
assert(emitter_idx < MAX_PARTICLE_EMITTER);
|
||||
memset(emitters + emitter_idx, 0, sizeof(ParticleEmitterData_t));
|
||||
emitters[emitter_idx].emitter.spr = sprite;
|
||||
strncpy(emitters[emitter_idx].name, name, MAX_NAME_LEN);
|
||||
sc_map_put_s64(&assets->m_emitters, emitters[emitter_idx].name, emitter_idx);
|
||||
n_loaded[5]++;
|
||||
return &emitters[emitter_idx].emitter;
|
||||
}
|
||||
|
||||
LevelPack_t* add_level_pack(Assets_t* assets, const char* name, const char* path)
|
||||
{
|
||||
FILE* file = fopen(path, "rb");
|
||||
|
@ -165,6 +183,7 @@ LevelPack_t* add_level_pack(Assets_t* assets, const char* name, const char* path
|
|||
return &levelpacks[pack_idx].pack;
|
||||
}
|
||||
|
||||
|
||||
static LevelPack_t* add_level_pack_zst(Assets_t* assets, const char* name, FILE* file)
|
||||
{
|
||||
LevelPackData_t* pack_info = levelpacks + n_loaded[4];
|
||||
|
@ -338,6 +357,7 @@ void init_assets(Assets_t* assets)
|
|||
sc_map_init_s64(&assets->m_textures, MAX_TEXTURES, 0);
|
||||
sc_map_init_s64(&assets->m_sounds, MAX_SOUNDS, 0);
|
||||
sc_map_init_s64(&assets->m_levelpacks, MAX_LEVEL_PACK, 0);
|
||||
sc_map_init_s64(&assets->m_emitters, MAX_PARTICLE_EMITTER, 0);
|
||||
level_decompressor.ctx = ZSTD_createDCtx();
|
||||
}
|
||||
|
||||
|
@ -365,6 +385,7 @@ void free_all_assets(Assets_t* assets)
|
|||
sc_map_clear_s64(&assets->m_sounds);
|
||||
sc_map_clear_s64(&assets->m_sprites);
|
||||
sc_map_clear_s64(&assets->m_levelpacks);
|
||||
sc_map_clear_s64(&assets->m_emitters);
|
||||
memset(n_loaded, 0, sizeof(n_loaded));
|
||||
}
|
||||
|
||||
|
@ -376,6 +397,7 @@ void term_assets(Assets_t* assets)
|
|||
sc_map_term_s64(&assets->m_sounds);
|
||||
sc_map_term_s64(&assets->m_sprites);
|
||||
sc_map_term_s64(&assets->m_levelpacks);
|
||||
sc_map_term_s64(&assets->m_emitters);
|
||||
ZSTD_freeDCtx(level_decompressor.ctx);
|
||||
}
|
||||
|
||||
|
@ -399,6 +421,17 @@ Sprite_t* get_sprite(Assets_t* assets, const char* name)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
ParticleEmitter_t* get_emitter(Assets_t* assets, const char* name)
|
||||
{
|
||||
uint8_t emitter_idx = sc_map_get_s64(&assets->m_emitters, name);
|
||||
if (sc_map_found(&assets->m_emitters))
|
||||
{
|
||||
return &emitters[emitter_idx].emitter;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
Sound* get_sound(Assets_t* assets, const char* name)
|
||||
{
|
||||
uint8_t snd_idx = sc_map_get_s64(&assets->m_sounds, name);
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "EC.h"
|
||||
#include "raylib.h"
|
||||
#include "rres.h"
|
||||
#include "particle_sys.h"
|
||||
|
||||
typedef struct Assets
|
||||
{
|
||||
|
@ -12,6 +13,7 @@ typedef struct Assets
|
|||
struct sc_map_s64 m_fonts;
|
||||
struct sc_map_s64 m_sprites;
|
||||
struct sc_map_s64 m_levelpacks;
|
||||
struct sc_map_s64 m_emitters;
|
||||
}Assets_t;
|
||||
|
||||
typedef struct LevelTileInfo
|
||||
|
@ -57,6 +59,7 @@ Texture2D* add_texture_rres(Assets_t* assets, const char* name, const char* file
|
|||
LevelPack_t* add_level_pack_rres(Assets_t* assets, const char* name, const char* filename, const RresFileInfo_t* rres_file);
|
||||
|
||||
Sprite_t* add_sprite(Assets_t* assets, const char* name, Texture2D* texture);
|
||||
ParticleEmitter_t* add_part_emitter(Assets_t* assets, const char* name, Sprite_t* sprite);
|
||||
|
||||
Texture2D* get_texture(Assets_t* assets, const char* name);
|
||||
Sprite_t* get_sprite(Assets_t* assets, const char* name);
|
||||
|
|
Loading…
Reference in New Issue