Compare commits

...

2 Commits

Author SHA1 Message Date
En Yi 26cc567b7f Add emitter config to asset file loading 2023-11-06 21:36:23 +08:00
En Yi e39e549cd0 Add sound in asset info 2023-11-06 20:49:30 +08:00
5 changed files with 57 additions and 18 deletions

View File

@ -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);

View File

@ -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);

View File

@ -10,6 +10,7 @@
typedef enum PartEmitterType
{
EMITTER_BURST = 0,
EMITTER_UNKNOWN,
} PartEmitterType_t;
typedef struct Particle

View File

@ -44,18 +44,12 @@ int main(void)
#endif
init_item_creation(&engine.assets);
add_sound(&engine.assets, "snd_jump", "res/jump.ogg");
add_sound(&engine.assets, "snd_land", "res/land.ogg");
add_sound(&engine.assets, "snd_wdrop", "res/water_land.ogg");
add_sound(&engine.assets, "snd_bland", "res/boulder_move.ogg");
add_sound(&engine.assets, "snd_bubble", "res/bubble.ogg");
load_sfx(&engine, "snd_jump", PLAYER_JMP_SFX);
load_sfx(&engine, "snd_land", PLAYER_LAND_SFX);
load_sfx(&engine, "snd_wdrop", WATER_IN_SFX);
load_sfx(&engine, "snd_bland", BOULDER_LAND_SFX);
load_sfx(&engine, "snd_bubble", BUBBLE_SFX);
LevelScene_t scene;
scene.scene.engine = &engine;
init_sandbox_scene(&scene);
@ -68,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);

View File

@ -6,6 +6,8 @@ typedef enum AssetInfoType
{
TEXTURE_INFO,
SPRITE_INFO,
SOUND_INFO,
EMITTER_INFO,
LEVELPACK_INFO,
INVALID_INFO
}AssetInfoType_t;
@ -34,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;
@ -186,6 +209,14 @@ bool load_from_infofile(const char* file, Assets_t* assets)
{
info_type = SPRITE_INFO;
}
else if (strcmp(tmp, "Sound") == 0)
{
info_type = SOUND_INFO;
}
else if (strcmp(tmp, "Emitter") == 0)
{
info_type = EMITTER_INFO;
}
else if (strcmp(tmp, "LevelPack") == 0)
{
info_type = LEVELPACK_INFO;
@ -213,7 +244,16 @@ bool load_from_infofile(const char* file, Assets_t* assets)
break;
}
printf("Added texture %s as %s\n", info_str, name);
//strcpy(tmp2, name);
}
break;
case SOUND_INFO:
{
if (add_sound(assets, name, info_str) == NULL)
{
printf("Unable to add texture at line %lu\n", line_num);
break;
}
printf("Added sound %s as %s\n", info_str, name);
}
break;
case LEVELPACK_INFO:
@ -250,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;
}