[multiple files] More detailed Player struct, draw player function, draw camera compatible CG50, renamed Level.tiles -> Level.layers, removed layers test code from main, build for CG50 and FX9860 seamlessly

This commit is contained in:
KikooDX 2020-09-16 11:18:55 +02:00
parent a14e7effc1
commit 316cc26539
5 changed files with 30 additions and 10 deletions

View File

@ -7,7 +7,7 @@ typedef struct Level
{
int width; /* in tiles */
int height; /* in tiles */
const unsigned char **tiles; /* points toward the level content */
const unsigned char **layers; /* points toward the level content */
} Level;
void level_step(Level *level);

View File

@ -7,6 +7,8 @@
typedef struct Player
{
Vec pos;
Vec hbox; /* the bottom right corner of the player's hitbox */
Vec origin; /* the origin of the player (offset) */
} Player;
void player_step(Player *player);

View File

@ -12,6 +12,11 @@ void camera_step(Camera *camera)
#ifdef DEBUG
void camera_draw(Camera *camera)
{
#ifdef FX9860G
dpixel((int)camera->pos.x, (int)camera->pos.y, C_BLACK);
#endif /* FX9860G */
#ifdef FXCG50
dpixel((int)camera->pos.x, (int)camera->pos.y, C_RED);
#endif /* FXCG50 */
}
#endif

View File

@ -25,25 +25,27 @@ int play_level(int level_id)
{
/* create player */
Player player = {
.pos = {0, 0}
.pos = {16, 16},
.hbox = {7, 7},
.origin = {4, 4}
};
const unsigned char level_content[] = {127};
const unsigned char level_content2[] = {63};
const unsigned char *level_contents[] = {level_content, level_content2};
/* create level */
Level level = {
.width = 0,
.height = 0,
.tiles = level_contents
.height = 0
};
/* create camera */
Camera camera = {
//.pos = {127, 63},
.pos = {level.tiles[0][0], level.tiles[1][0]}, /* test code */
.pos = {DWIDTH, DHEIGHT},
.target = &player.pos,
#ifdef FX9860G
.speed = 0.0005
#endif /* FX9860G */
#ifdef FXCG50
.speed = 0.05
#endif /* FXCG50 */
};
//vec_cpy(&camera.pos, player.pos);
while ((int)camera.pos.x != (int)player.pos.x)

View File

@ -9,5 +9,16 @@ void player_step(Player *player)
void player_draw(Player *player, Camera *camera)
{
dpixel(player->pos.x, player->pos.y, C_BLACK);
Vec draw_pos_tl;
Vec draw_pos_br;
vec_cpy(&draw_pos_tl, player->pos);
vec_sub(&draw_pos_tl, player->origin);
vec_cpy(&draw_pos_br, draw_pos_tl);
vec_add(&draw_pos_br, player->hbox);
#ifdef FX9860G
drect(draw_pos_tl.x, draw_pos_tl.y, draw_pos_br.x, draw_pos_br.y, C_LIGHT);
#endif /* FX9860G */
#ifdef FXCG50
drect(draw_pos_tl.x, draw_pos_tl.y, draw_pos_br.x, draw_pos_br.y, C_BLACK);
#endif /* FXCG50 */
}