From fcdf8b106640f769aa894ef887ee4c5931598fd8 Mon Sep 17 00:00:00 2001 From: SemvdH Date: Mon, 23 Aug 2021 18:22:44 +0200 Subject: [PATCH] [ADD] player enemy collision --- src/main.c | 30 ++++++++++++++++++++++++++---- src/sprites/sprites.h | 3 +++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main.c b/src/main.c index de9a440..e5e715c 100644 --- a/src/main.c +++ b/src/main.c @@ -137,6 +137,18 @@ uint8_t bullet_hit_enemy(BULLET *bullet, ENEMY_SPRITE *enemy) return 0; } +uint8_t enemy_hit_player(ENEMY_SPRITE *enemy) +{ + if (enemy->enemy_type == SIMPLE) + { + return toolbox_is_collision(enemy->x, enemy->y, SIMPLE_ENEMY_SIZE, SIMPLE_ENEMY_SIZE, player_x, player_y - PLAYER_Y_OFFSET, PLAYER_WIDTH, PLAYER_HEIGTH); + } + else if (enemy->enemy_type == COMPLEX) + { + return toolbox_is_collision(enemy->x, enemy->y, COMPLEX_ENEMY_SIZE, COMPLEX_ENEMY_SIZE, player_x, player_y - PLAYER_Y_OFFSET, PLAYER_WIDTH, PLAYER_HEIGTH); + } +} + /** * @brief checks the collision for all bullets * @@ -174,8 +186,18 @@ void check_bullet_collisions() SceBool check_player_collisions() { SceBool res = SCE_FALSE; - - + for (int i = 0; i < enemy_count; i++) + { + if (enemies[i].active == ACTIVE) + { + if (enemy_hit_player(&enemies[i])) + { + res = SCE_TRUE; + break; + } + } + } + return res; } // ################################################################ @@ -274,12 +296,12 @@ void update_game() if (player_y >= SCREEN_HEIGTH) player_y = SCREEN_HEIGTH - 1; - SceBool player_collision = check_player_collisions(); - if (player_collision == SCE_TRUE) + if (check_player_collisions() == SCE_TRUE) { current_state = GAMEOVER; return; } + check_bullet_collisions(); for (int i = 0; i < 255; i++) diff --git a/src/sprites/sprites.h b/src/sprites/sprites.h index 4973f8b..b5f25be 100644 --- a/src/sprites/sprites.h +++ b/src/sprites/sprites.h @@ -20,6 +20,9 @@ #define BULLET_HEIGTH 8 #define PLAYER_SCALE 3.0 +#define PLAYER_WIDTH (2.0 * 2 * PLAYER_SCALE) +#define PLAYER_HEIGTH (5.0 * PLAYER_SCALE) +#define PLAYER_Y_OFFSET (PLAYER_HEIGTH / 2) // the center y of the player is in the middle #define SIMPLE_ENEMY_SIZE 9.0 #define COMPLEX_ENEMY_SIZE 9.0