diff --git a/include/app.h b/include/app.h index 7ece17a..160240e 100644 --- a/include/app.h +++ b/include/app.h @@ -247,9 +247,9 @@ Projectiles CreateProjectiles(void); void UpdateProjectiles(Projectiles *projectiles); void RenderProjectiles(Projectiles *projectiles); -void CheckPlayerEnemyCollisions(Player *player, Enemies *enemies); -void CheckEnemyEnemyCollisions(Enemies *enemies); -void CheckProjectileEnemyCollisions(Projectiles *projectiles, Enemies *enemies); +void CheckPlayerCollisions(Player *player, Enemies *enemies); +void CheckEnemyCollisions(Enemies *enemies); +void CheckProjectileCollisions(Projectiles *projectiles, Enemies *enemies, Player *player); void InitGame(App *app); void UpdateGame(App *app); diff --git a/src/appGame.c b/src/appGame.c index e6f8b9e..ec1d939 100644 --- a/src/appGame.c +++ b/src/appGame.c @@ -69,9 +69,9 @@ void UpdateGame(App *app) { UpdateEnemies(&g->enemies); UpdateIslands(&g->islands); UpdateProjectiles(&g->projectiles); - CheckPlayerEnemyCollisions(GetPlayer(), &app->game.enemies); - CheckEnemyEnemyCollisions(&app->game.enemies); - CheckProjectileEnemyCollisions(&app->game.projectiles, &app->game.enemies); + CheckPlayerCollisions(GetPlayer(), &app->game.enemies); + CheckEnemyCollisions(&app->game.enemies); + CheckProjectileCollisions(&app->game.projectiles, &app->game.enemies, GetPlayer()); } void RenderComponents(App *app) { diff --git a/src/appGameCollisions.c b/src/appGameCollisions.c index e109769..259873a 100644 --- a/src/appGameCollisions.c +++ b/src/appGameCollisions.c @@ -1,24 +1,25 @@ #include "app.h" #include -void CheckPlayerEnemyCollisions(Player *player, Enemies *enemies) { +float playerCollisionRadius = 8.0f; +float enemiesCollisionRadius = 8.0f; +float projectilesCollisionRadius = 2.0f; + +void CheckPlayerCollisions(Player *player, Enemies *enemies) { for (int i = 0; i < enemies->count; i++) { Vector2 playerPos = player->physics.position; Vector2 enemiesPos = enemies->physics[i].position; - float playerRadius = 8.0f; - float enemiesRadius = 8.0f; - float minDist = playerRadius + enemiesRadius; + float minDist = playerCollisionRadius + enemiesCollisionRadius; - if (CheckCollisionCircles(playerPos, playerRadius, enemiesPos, - enemiesRadius)) { + if (CheckCollisionCircles(playerPos, playerCollisionRadius, enemiesPos, + enemiesCollisionRadius)) { float dist = GetDistanceBetweenTwoVectors(playerPos, enemiesPos); float overlap = minDist - dist; if (dist > 0.0f) { - Vector2 collisionVector = GetDirectionBetweenTwoVectors( - enemies->physics[i].position, player->physics.position); + Vector2 collisionVector = GetDirectionBetweenTwoVectors(enemies->physics[i].position, player->physics.position); player->physics.position.x += collisionVector.x * overlap; player->physics.position.y += collisionVector.y * overlap; Vector2 forward = RotationToVector2(player->rotation - 90.0f); @@ -28,17 +29,17 @@ void CheckPlayerEnemyCollisions(Player *player, Enemies *enemies) { } } } -void CheckEnemyEnemyCollisions(Enemies *enemies) { + +void CheckEnemyCollisions(Enemies *enemies) { for (int a = 0; a < enemies->count; a++) { for (int b = a + 1; b < enemies->count; b++) { Vector2 posA = enemies->physics[a].position; Vector2 posB = enemies->physics[b].position; - float enemiesRadius = 8.0f; - float minDist = enemiesRadius * 2; + float minDist = enemiesCollisionRadius * 2; - if (CheckCollisionCircles(posA, enemiesRadius, posB, enemiesRadius)) { + if (CheckCollisionCircles(posA, enemiesCollisionRadius, posB, enemiesCollisionRadius)) { Vector2 collisionVectorA = GetDirectionBetweenTwoVectors(posB, posA); Vector2 collisionVectorB = GetDirectionBetweenTwoVectors(posA, posB); @@ -66,10 +67,22 @@ void CheckEnemyEnemyCollisions(Enemies *enemies) { } } -void CheckProjectileEnemyCollisions(Projectiles *projectiles, - Enemies *enemies) { - for (int i = 0; i < projectiles->count; i++) { - for (int j = 0; j < enemies->count; j++) { +void CheckProjectileCollisions(Projectiles *projectiles, Enemies *enemies, Player *player) { + for (int i = 0; i < projectiles->count; i++) { + for (int j = 0; j < enemies->count; j++) { + Vector2 projectilePos = projectiles->physics[i].position; + Vector2 enemyPos = enemies->physics[j].position; + Vector2 playerPos = player->physics.position; + + if (CheckCollisionCircles(projectilePos, projectilesCollisionRadius, enemyPos, enemiesCollisionRadius)) { + Rectangle cameraRec = GetCameraRectangle(); + enemies->physics[j].position = GetPositionOutsideRectangle(cameraRec, 100, 1000); + } + + if (CheckCollisionCircles(projectilePos, projectilesCollisionRadius, playerPos, playerCollisionRadius)){ + // End screen or player health reduction here + } + + } } - } } diff --git a/src/appGameShip.c b/src/appGameShip.c deleted file mode 100644 index 0487067..0000000 --- a/src/appGameShip.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "app.h" - -Ship InitShip(int shipID) { - Config config; - InitConfig(&config, "config/ships.ini"); - Ship ship; -}