diff --git a/include/player_modifiers.h b/include/player_modifiers.h index 043c0b5..8d2acb1 100644 --- a/include/player_modifiers.h +++ b/include/player_modifiers.h @@ -8,6 +8,7 @@ #define D_CEIL 0b1000 #define D_WALL (D_LEFT | D_RIGHT) #define D_ANY (D_LEFT | D_RIGHT | D_FLOOR | D_CEIL) + #include "player.h" void player_mod_ice(Player *player, uint8_t sides); diff --git a/src/player.c b/src/player.c index 30e4ce7..80da904 100644 --- a/src/player.c +++ b/src/player.c @@ -59,21 +59,23 @@ void player_set_vars(Player *player, const Level *level) { flags_floor = player_collide_or(player, pos, level); pos.y -= 2; flags_ceil = player_collide_or(player, pos, level); - /* test for each flag */ + uint8_t side_flags[sizeof(Tile_flags) * 8]; + /* make sum for each flag */ for (uint i = 0; i < sizeof(Tile_flags) * 8; i++) { - if (flags_floor & 1) { - switch (1 << i) { - case F_ICE: - player_mod_ice(player, D_FLOOR); - break; - case F_GLUE: - player_mod_glue(player, D_FLOOR); - break; - default: break; - } - } - flags_floor >>= 1; + Tile_flags cur_flag = 1 << i; + side_flags[i] = 0; + if (flags_left & cur_flag) + side_flags[i] |= D_LEFT; + if (flags_right & cur_flag) + side_flags[i] |= D_RIGHT; + if (flags_floor & cur_flag) + side_flags[i] |= D_FLOOR; + if (flags_ceil & cur_flag) + side_flags[i] |= D_CEIL; } + /* apply modifiers TODO: Don't harcode this */ + player_mod_ice(player, side_flags[2]); + player_mod_glue(player, side_flags[3]); } void player_move(Player *player, const Level *level) { diff --git a/src/player_modifiers.c b/src/player_modifiers.c index 1afa6b5..54a796c 100644 --- a/src/player_modifiers.c +++ b/src/player_modifiers.c @@ -14,7 +14,6 @@ void player_mod_glue(Player *player, uint8_t sides) { player->vars.friction = 1; } if (sides & (D_LEFT | D_RIGHT | D_CEIL)) { - player->vars.gravity = 0; - player->vars.acceleration = 0; + player->spd.y = 0; } }