Add particle emitter to assets
parent
ad421d724a
commit
7939b8753e
|
@ -8,7 +8,7 @@
|
||||||
#include "zstd.h"
|
#include "zstd.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
uint8_t n_loaded[5] = {0};
|
uint8_t n_loaded[6] = {0};
|
||||||
|
|
||||||
// Hard limit number of
|
// Hard limit number of
|
||||||
typedef struct TextureData
|
typedef struct TextureData
|
||||||
|
@ -36,12 +36,18 @@ typedef struct LevelPackData
|
||||||
LevelPack_t pack;
|
LevelPack_t pack;
|
||||||
char name[MAX_NAME_LEN];
|
char name[MAX_NAME_LEN];
|
||||||
}LevelPackData_t;
|
}LevelPackData_t;
|
||||||
|
typedef struct PartEmitterData
|
||||||
|
{
|
||||||
|
ParticleEmitter_t emitter;
|
||||||
|
char name[MAX_NAME_LEN];
|
||||||
|
}ParticleEmitterData_t;
|
||||||
|
|
||||||
static TextureData_t textures[MAX_TEXTURES];
|
static TextureData_t textures[MAX_TEXTURES];
|
||||||
static FontData_t fonts[MAX_FONTS];
|
static FontData_t fonts[MAX_FONTS];
|
||||||
static SoundData_t sfx[MAX_SOUNDS];
|
static SoundData_t sfx[MAX_SOUNDS];
|
||||||
static SpriteData_t sprites[MAX_SPRITES];
|
static SpriteData_t sprites[MAX_SPRITES];
|
||||||
static LevelPackData_t levelpacks[MAX_LEVEL_PACK];
|
static LevelPackData_t levelpacks[MAX_LEVEL_PACK];
|
||||||
|
static ParticleEmitterData_t emitters[MAX_PARTICLE_EMITTER];
|
||||||
|
|
||||||
#define DECOMPRESSOR_INBUF_LEN 4096
|
#define DECOMPRESSOR_INBUF_LEN 4096
|
||||||
#define DECOMPRESSOR_OUTBUF_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];
|
uint8_t spr_idx = n_loaded[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(SpriteData_t));
|
||||||
sprites[spr_idx].sprite.texture = texture;
|
sprites[spr_idx].sprite.texture = texture;
|
||||||
strncpy(sprites[spr_idx].name, name, MAX_NAME_LEN);
|
strncpy(sprites[spr_idx].name, name, MAX_NAME_LEN);
|
||||||
sc_map_put_s64(&assets->m_sprites, sprites[spr_idx].name, spr_idx);
|
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;
|
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)
|
LevelPack_t* add_level_pack(Assets_t* assets, const char* name, const char* path)
|
||||||
{
|
{
|
||||||
FILE* file = fopen(path, "rb");
|
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;
|
return &levelpacks[pack_idx].pack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static LevelPack_t* add_level_pack_zst(Assets_t* assets, const char* name, FILE* file)
|
static LevelPack_t* add_level_pack_zst(Assets_t* assets, const char* name, FILE* file)
|
||||||
{
|
{
|
||||||
LevelPackData_t* pack_info = levelpacks + n_loaded[4];
|
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_textures, MAX_TEXTURES, 0);
|
||||||
sc_map_init_s64(&assets->m_sounds, MAX_SOUNDS, 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_levelpacks, MAX_LEVEL_PACK, 0);
|
||||||
|
sc_map_init_s64(&assets->m_emitters, MAX_PARTICLE_EMITTER, 0);
|
||||||
level_decompressor.ctx = ZSTD_createDCtx();
|
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_sounds);
|
||||||
sc_map_clear_s64(&assets->m_sprites);
|
sc_map_clear_s64(&assets->m_sprites);
|
||||||
sc_map_clear_s64(&assets->m_levelpacks);
|
sc_map_clear_s64(&assets->m_levelpacks);
|
||||||
|
sc_map_clear_s64(&assets->m_emitters);
|
||||||
memset(n_loaded, 0, sizeof(n_loaded));
|
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_sounds);
|
||||||
sc_map_term_s64(&assets->m_sprites);
|
sc_map_term_s64(&assets->m_sprites);
|
||||||
sc_map_term_s64(&assets->m_levelpacks);
|
sc_map_term_s64(&assets->m_levelpacks);
|
||||||
|
sc_map_term_s64(&assets->m_emitters);
|
||||||
ZSTD_freeDCtx(level_decompressor.ctx);
|
ZSTD_freeDCtx(level_decompressor.ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -399,6 +421,17 @@ Sprite_t* get_sprite(Assets_t* assets, const char* name)
|
||||||
return NULL;
|
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)
|
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);
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include "EC.h"
|
#include "EC.h"
|
||||||
#include "raylib.h"
|
#include "raylib.h"
|
||||||
#include "rres.h"
|
#include "rres.h"
|
||||||
|
#include "particle_sys.h"
|
||||||
|
|
||||||
typedef struct Assets
|
typedef struct Assets
|
||||||
{
|
{
|
||||||
|
@ -12,6 +13,7 @@ typedef struct Assets
|
||||||
struct sc_map_s64 m_fonts;
|
struct sc_map_s64 m_fonts;
|
||||||
struct sc_map_s64 m_sprites;
|
struct sc_map_s64 m_sprites;
|
||||||
struct sc_map_s64 m_levelpacks;
|
struct sc_map_s64 m_levelpacks;
|
||||||
|
struct sc_map_s64 m_emitters;
|
||||||
}Assets_t;
|
}Assets_t;
|
||||||
|
|
||||||
typedef struct LevelTileInfo
|
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);
|
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);
|
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);
|
Texture2D* get_texture(Assets_t* assets, const char* name);
|
||||||
Sprite_t* get_sprite(Assets_t* assets, const char* name);
|
Sprite_t* get_sprite(Assets_t* assets, const char* name);
|
||||||
|
|
Loading…
Reference in New Issue