} break;
case SDLK_1: {
- if (level->current_platforms > 0) {
+ if (level->current_platforms > 0
+ && !platforms_overlap_with_rect(
+ level->platform_layers[level->current_platforms - 1],
+ player_hitbox(level->player))) {
level->a = 0.0f;
level->da = PLATFORM_LAYERS_SPEED;
level->prev_platform = level->current_platforms;
} break;
case SDLK_2: {
- if (level->current_platforms + 1 < PLATFORM_LAYERS_COUNT) {
+ if (level->current_platforms + 1 < PLATFORM_LAYERS_COUNT
+ && !platforms_overlap_with_rect(
+ level->platform_layers[level->current_platforms + 1],
+ player_hitbox(level->player))) {
level->a = 0.0f;
level->da = -PLATFORM_LAYERS_SPEED;
level->prev_platform = level->current_platforms;
return result;
}
+
+int platforms_overlap_with_rect(const Platforms *platforms,
+ Rect rect)
+{
+ for (size_t i = 0; i < platforms->rects_size; ++i) {
+ if (rects_overlap(platforms->rects[i], rect)) {
+ return 1;
+ }
+ }
+
+ return 0;
+}