Add emitter config to asset file loading
parent
e39e549cd0
commit
26cc567b7f
|
@ -142,7 +142,7 @@ Font* add_font(Assets_t* assets, const char* name, const char* path)
|
|||
return &fonts[fnt_idx].font;
|
||||
}
|
||||
|
||||
EmitterConfig_t* add_emitter_conf(Assets_t* assets, const char* name, Sprite_t* sprite)
|
||||
EmitterConfig_t* add_emitter_conf(Assets_t* assets, const char* name)
|
||||
{
|
||||
uint8_t emitter_idx = n_loaded[5];
|
||||
assert(emitter_idx < MAX_EMITTER_CONF);
|
||||
|
|
|
@ -59,7 +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);
|
||||
EmitterConfig_t* add_emitter_conf(Assets_t* assets, const char* name, Sprite_t* sprite);
|
||||
EmitterConfig_t* add_emitter_conf(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);
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
typedef enum PartEmitterType
|
||||
{
|
||||
EMITTER_BURST = 0,
|
||||
EMITTER_UNKNOWN,
|
||||
} PartEmitterType_t;
|
||||
|
||||
typedef struct Particle
|
||||
|
|
|
@ -62,15 +62,6 @@ int main(void)
|
|||
scenes[0] = &scene.scene;
|
||||
change_scene(&engine, 0);
|
||||
|
||||
EmitterConfig_t* conf = add_emitter_conf(&engine.assets, "pe_burst", get_sprite(&engine.assets, "bomb"));
|
||||
conf->launch_range[0] = 240;
|
||||
conf->launch_range[1] = 300;
|
||||
conf->one_shot = true;
|
||||
conf->speed_range[0] = 200;
|
||||
conf->speed_range[1] = 300;
|
||||
conf->particle_lifetime[0] = 30;
|
||||
conf->particle_lifetime[1] = 110;
|
||||
|
||||
#if defined(PLATFORM_WEB)
|
||||
puts("Setting emscripten main loop");
|
||||
emscripten_set_main_loop(update_loop, 0, 1);
|
||||
|
|
|
@ -36,6 +36,27 @@ static bool parse_sprite_info(char* sprite_info_str, SpriteInfo_t* spr_info)
|
|||
return data_count == 6;
|
||||
}
|
||||
|
||||
static bool parse_emitter_info(char* emitter_info_str, EmitterConfig_t* conf)
|
||||
{
|
||||
char emitter_type;
|
||||
uint8_t one_shot;
|
||||
int data_count = sscanf(
|
||||
emitter_info_str, "%c,%f-%f,%f-%f,%u-%u,%c",
|
||||
&emitter_type,
|
||||
conf->launch_range, conf->launch_range + 1,
|
||||
conf->speed_range, conf->speed_range + 1,
|
||||
conf->particle_lifetime, conf->particle_lifetime + 1,
|
||||
&one_shot
|
||||
);
|
||||
|
||||
if (data_count == 8)
|
||||
{
|
||||
conf->type = (emitter_type == 'b') ? EMITTER_BURST : EMITTER_UNKNOWN;
|
||||
conf->one_shot = (one_shot == 1);
|
||||
}
|
||||
return data_count == 8;
|
||||
}
|
||||
|
||||
bool load_from_rres(const char* file, Assets_t* assets)
|
||||
{
|
||||
RresFileInfo_t rres_file;
|
||||
|
@ -192,6 +213,10 @@ bool load_from_infofile(const char* file, Assets_t* assets)
|
|||
{
|
||||
info_type = SOUND_INFO;
|
||||
}
|
||||
else if (strcmp(tmp, "Emitter") == 0)
|
||||
{
|
||||
info_type = EMITTER_INFO;
|
||||
}
|
||||
else if (strcmp(tmp, "LevelPack") == 0)
|
||||
{
|
||||
info_type = LEVELPACK_INFO;
|
||||
|
@ -265,6 +290,19 @@ bool load_from_infofile(const char* file, Assets_t* assets)
|
|||
spr->speed = spr_info.speed;
|
||||
}
|
||||
break;
|
||||
case EMITTER_INFO:
|
||||
{
|
||||
EmitterConfig_t parsed_conf;
|
||||
if (!parse_emitter_info(info_str, &parsed_conf))
|
||||
{
|
||||
printf("Parse error for emitter %s", name);
|
||||
break;
|
||||
}
|
||||
EmitterConfig_t* conf = add_emitter_conf(assets, name);
|
||||
*conf = parsed_conf;
|
||||
printf("Added Emitter %s\n", name);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue