[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:
parent
a14e7effc1
commit
316cc26539
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
18
src/main.c
18
src/main.c
|
@ -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)
|
||||
|
|
13
src/player.c
13
src/player.c
|
@ -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 */
|
||||
}
|
||||
|
|
Reference in New Issue