Cleaner modifier system almost done.

This commit is contained in:
KikooDX 2021-01-16 10:43:39 +01:00
parent 0ec3cb12f8
commit 5c54b13a6e
3 changed files with 17 additions and 15 deletions

View File

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

View File

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

View File

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