From e9833645236b561e37588c5060cd80b245299d13 Mon Sep 17 00:00:00 2001 From: huaqo-games Date: Tue, 11 Nov 2025 12:13:01 +0100 Subject: [PATCH] update bird position when too far away --- include/engine.h | 1 + src/appGameBirds.c | 7 +++++-- src/enginePhysics.c | 7 +++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/include/engine.h b/include/engine.h index 5de25d0..6aa987d 100644 --- a/include/engine.h +++ b/include/engine.h @@ -208,6 +208,7 @@ void SwapAndPopObjectsArrayOnPointCollision(ObjectArray *objects, const Vector2 void RenderObjectArray(const ObjectArray *objects); Vector2 GetDirectionBetweenTwoVectors(Vector2 vec1, Vector2 vec2); +float GetDistanceBetweenTwoVectors(Vector2 vec1, Vector2 vec2); void UpdatePhysicsDirection(Vector2 *direction, Vector2 vector); void UpdatePhysicsVelocity(Vector2 *velocity, Vector2 *direction, float *speed); void UpdatePhysicsPosition(Vector2 *position, Vector2 *velocity); diff --git a/src/appGameBirds.c b/src/appGameBirds.c index 25e5eb9..00ce117 100644 --- a/src/appGameBirds.c +++ b/src/appGameBirds.c @@ -37,7 +37,7 @@ Birds CreateBirds(void){ Rectangle cameraRec = GetCameraRectangle(); birds.physics[i] = (Physics){ - .position = GetPositionOutsideRectangle(cameraRec, 1, 100), + .position = GetPositionOutsideRectangle(cameraRec, 100, 1000), .direction = (Vector2){0.0f, 0.0f}, .speed = 5.0f }; @@ -58,13 +58,16 @@ void UpdateBirds(Birds *birds){ { if(birds->arrived[i]) { - birds->destPos[i] = GetPositionOutsideRectangle(cameraRec, 1, 100); + birds->destPos[i] = GetPositionOutsideRectangle(cameraRec, 100, 1000); birds->arrived[i] = false; } if(CheckCollisionPointCircle(birds->physics[i].position, birds->destPos[i], 10.0F)) { birds->arrived[i] = true; } + if(GetDistanceBetweenTwoVectors(birds->physics[i].position, camera->target) > 1000){ + birds->physics[i].position = GetPositionOutsideRectangle(cameraRec, 100, 1000); + } Vector2 dir = GetDirectionBetweenTwoVectors(birds->physics[i].position, birds->destPos[i]); UpdatePhysics(&birds->physics[i], dir); printf("birdsPos: %f, %f", birds->physics[i].position.x, birds->physics[i].position.y); diff --git a/src/enginePhysics.c b/src/enginePhysics.c index cdfd2b6..20873b8 100644 --- a/src/enginePhysics.c +++ b/src/enginePhysics.c @@ -7,6 +7,13 @@ Vector2 GetDirectionBetweenTwoVectors(Vector2 vec1, Vector2 vec2) return dir; } +float GetDistanceBetweenTwoVectors(Vector2 vec1, Vector2 vec2) +{ + float dx = vec1.x - vec2.x; + float dy = vec1.y - vec2.y; + return sqrtf(dx * dx + dy * dy); +} + void UpdatePhysicsDirection(Vector2 *direction, Vector2 vector) { *direction = Vector2Normalize(vector);