forked from kdx/jtmm2-old
Cleaner modifier system almost done.
This commit is contained in:
parent
0ec3cb12f8
commit
5c54b13a6e
|
@ -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);
|
||||
|
|
28
src/player.c
28
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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue