Implement player sprite info loading from file
parent
98450d0bba
commit
b0e1d33ad6
|
@ -1,5 +1,6 @@
|
||||||
#include "mempool.h"
|
#include "mempool.h"
|
||||||
#include "scene_impl.h"
|
#include "scene_impl.h"
|
||||||
|
#include "ent_impl.h"
|
||||||
#include "assets_loader.h"
|
#include "assets_loader.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
@ -25,6 +26,7 @@ int main(void)
|
||||||
|
|
||||||
init_assets(&engine.assets);
|
init_assets(&engine.assets);
|
||||||
load_from_infofile("res/assets.info", &engine.assets);
|
load_from_infofile("res/assets.info", &engine.assets);
|
||||||
|
init_player_creation("res/player_spr.info", &engine.assets);
|
||||||
|
|
||||||
LevelScene_t scene;
|
LevelScene_t scene;
|
||||||
scene.scene.engine = &engine;
|
scene.scene.engine = &engine;
|
||||||
|
@ -34,6 +36,7 @@ int main(void)
|
||||||
scenes[0] = &scene.scene;
|
scenes[0] = &scene.scene;
|
||||||
change_scene(&engine, 0);
|
change_scene(&engine, 0);
|
||||||
|
|
||||||
|
|
||||||
while(true)
|
while(true)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -42,9 +42,8 @@ bool load_from_infofile(const char* file, Assets_t* assets)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char buffer[256];
|
char buffer[256];
|
||||||
char* tmp;
|
char* tmp;
|
||||||
char tmp2[32];
|
|
||||||
size_t line_num = 0;
|
size_t line_num = 0;
|
||||||
AssetInfoType_t info_type = INVALID_INFO;
|
AssetInfoType_t info_type = INVALID_INFO;
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "entManager.h"
|
#include "entManager.h"
|
||||||
#include "assets.h"
|
#include "assets.h"
|
||||||
|
|
||||||
|
bool init_player_creation(const char* info_file, Assets_t* assets);
|
||||||
Entity_t* create_player(EntityManager_t* ent_manager, Assets_t* assets);
|
Entity_t* create_player(EntityManager_t* ent_manager, Assets_t* assets);
|
||||||
Entity_t* create_crate(EntityManager_t* ent_manager, Assets_t* assets, bool metal);
|
Entity_t* create_crate(EntityManager_t* ent_manager, Assets_t* assets, bool metal);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "ent_impl.h"
|
#include "ent_impl.h"
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#define N_PLAYER_SPRITES 2
|
#define N_PLAYER_SPRITES 2
|
||||||
enum PlayerSpriteEnum
|
enum PlayerSpriteEnum
|
||||||
|
@ -47,11 +49,58 @@ Entity_t* create_player(EntityManager_t* ent_manager, Assets_t* assets)
|
||||||
};
|
};
|
||||||
CSprite_t* p_cspr = add_component(ent_manager, p_ent, CSPRITE_T);
|
CSprite_t* p_cspr = add_component(ent_manager, p_ent, CSPRITE_T);
|
||||||
p_cspr->sprites = player_sprite_map;
|
p_cspr->sprites = player_sprite_map;
|
||||||
p_cspr->sprites[0].sprite = get_sprite(assets, "plr_stand");
|
|
||||||
p_cspr->sprites[0].offset = (Vector2){0, -20};
|
|
||||||
p_cspr->sprites[1].sprite = get_sprite(assets, "plr_stand");
|
|
||||||
p_cspr->sprites[1].offset = (Vector2){0, -20};
|
|
||||||
p_cspr->transition_func = &player_sprite_transition_func;
|
p_cspr->transition_func = &player_sprite_transition_func;
|
||||||
|
|
||||||
return p_ent;
|
return p_ent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool init_player_creation(const char* info_file, Assets_t* assets)
|
||||||
|
{
|
||||||
|
static bool already_init = false;
|
||||||
|
|
||||||
|
if (already_init) return false;
|
||||||
|
|
||||||
|
FILE* in_file = fopen(info_file, "r");
|
||||||
|
if (in_file == NULL)
|
||||||
|
{
|
||||||
|
printf("Unable to open file %s\n", info_file);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
char buffer[256];
|
||||||
|
char* tmp;
|
||||||
|
size_t line_num = 0;
|
||||||
|
uint8_t i = 0;
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
tmp = fgets(buffer, 256, in_file);
|
||||||
|
if (tmp == NULL) break;
|
||||||
|
tmp[strcspn(tmp, "\r\n")] = '\0';
|
||||||
|
|
||||||
|
if (i == N_PLAYER_SPRITES) break;
|
||||||
|
|
||||||
|
char* name = strtok(buffer, ":");
|
||||||
|
char* info_str = strtok(NULL, ":");
|
||||||
|
if (name == NULL || info_str == NULL) return false;
|
||||||
|
|
||||||
|
while(*name == ' ' || *name == '\t') name++;
|
||||||
|
while(*info_str == ' ' || *info_str == '\t') info_str++;
|
||||||
|
|
||||||
|
Vector2 offset;
|
||||||
|
int data_count = sscanf(
|
||||||
|
info_str, "%f,%f",
|
||||||
|
&offset.x, &offset.y
|
||||||
|
);
|
||||||
|
if (data_count !=2)
|
||||||
|
{
|
||||||
|
printf("Unable to parse info for player at line %lu\n", line_num);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Sprite_t* spr = get_sprite(assets, name);
|
||||||
|
player_sprite_map[i].sprite = spr;
|
||||||
|
player_sprite_map[i].offset = offset;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
already_init = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue