feat: add enemies projectile interaction

This commit is contained in:
2026-03-05 13:09:25 +01:00
parent da19b55430
commit aa7aeefc93
5 changed files with 59 additions and 38 deletions
+39 -26
View File
@@ -36,46 +36,59 @@ Enemies CreateEnemies(void) {
enemies.arrived[i] = true;
enemies.destPos[i] = (Vector2){0.0f, 0.0f};
enemies.alive[i] = true;
}
return enemies;
}
void UpdateEnemies(Enemies *enemies) {
void UpdateEnemies(Enemies *enemies, Projectiles *projectiles) {
Camera2D *camera = GetCamera();
Rectangle cameraRec = GetCameraRectangle();
for (int i = 0; i < enemies->count; i++) {
if (enemies->arrived[i]) {
enemies->destPos[i] = GetPositionOutsideRectangle(cameraRec, 100, 1000);
enemies->arrived[i] = false;
if (enemies->alive[i]) {
for (int j = 0; j < projectiles->count; j++){
if (!projectiles->active[j]) continue;
if (CheckCollisionCircleRec(projectiles->physics[j].position, projectiles->radius[j], enemies->sprite[i].destRec)){
enemies->alive[i] = false;
break;
}
}
if (enemies->arrived[i]) {
enemies->destPos[i] = GetPositionOutsideRectangle(cameraRec, 100, 1000);
enemies->arrived[i] = false;
}
if (CheckCollisionPointCircle(enemies->physics[i].position,
enemies->destPos[i], 10.0F)) {
enemies->arrived[i] = true;
}
if (GetDistanceBetweenTwoVectors(enemies->physics[i].position,
camera->target) > 1000) {
enemies->physics[i].position =
GetPositionOutsideRectangle(cameraRec, 100, 1000);
}
Vector2 dir = GetDirectionBetweenTwoVectors(enemies->physics[i].position,
enemies->destPos[i]);
UpdatePhysics(&enemies->physics[i], dir);
UpdateSpriteDestRec(&enemies->sprite[i], &enemies->physics[i].position);
float rotation = Vector2ToRotation(dir);
UpdateSpriteRotation(&enemies->sprite[i], rotation + 90.0f);
UpdateAnimation(&enemies->animation[i], GetFrameTime());
UpdateSpriteSourceRec(&enemies->sprite[i],
&(Vector2){enemies->sprite[i].frameSize.x *
enemies->animation[i].currentFrame,
enemies->sprite[i].frameSize.y});
}
if (CheckCollisionPointCircle(enemies->physics[i].position,
enemies->destPos[i], 10.0F)) {
enemies->arrived[i] = true;
}
if (GetDistanceBetweenTwoVectors(enemies->physics[i].position,
camera->target) > 1000) {
enemies->physics[i].position =
GetPositionOutsideRectangle(cameraRec, 100, 1000);
}
Vector2 dir = GetDirectionBetweenTwoVectors(enemies->physics[i].position,
enemies->destPos[i]);
UpdatePhysics(&enemies->physics[i], dir);
UpdateSpriteDestRec(&enemies->sprite[i], &enemies->physics[i].position);
float rotation = Vector2ToRotation(dir);
UpdateSpriteRotation(&enemies->sprite[i], rotation + 90.0f);
UpdateAnimation(&enemies->animation[i], GetFrameTime());
UpdateSpriteSourceRec(&enemies->sprite[i],
&(Vector2){enemies->sprite[i].frameSize.x *
enemies->animation[i].currentFrame,
enemies->sprite[i].frameSize.y});
}
}
void RenderEnemies(Enemies *enemies) {
for (int i = 0; i < enemies->count; i++) {
RenderSprite(&enemies->sprite[i]);
if (enemies->alive[i]){
RenderSprite(&enemies->sprite[i]);
}
}
}