From 21dc42d2ad02cafed83cd39afd7305212787c114 Mon Sep 17 00:00:00 2001 From: Ray Date: Thu, 9 Nov 2023 09:53:25 +0100 Subject: [PATCH] Updated examples --- examples/shapes/shapes_lines_bezier.c | 41 ++++++++++++----------- examples/shapes/shapes_lines_bezier.png | Bin 17537 -> 17953 bytes examples/shapes/shapes_splines_drawing.c | 12 +++---- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/examples/shapes/shapes_lines_bezier.c b/examples/shapes/shapes_lines_bezier.c index 785d73a64..aaad68047 100644 --- a/examples/shapes/shapes_lines_bezier.c +++ b/examples/shapes/shapes_lines_bezier.c @@ -26,11 +26,10 @@ int main(void) SetConfigFlags(FLAG_MSAA_4X_HINT); InitWindow(screenWidth, screenHeight, "raylib [shapes] example - cubic-bezier lines"); - Vector2 start = { 0, 0 }; - Vector2 end = { (float)screenWidth, (float)screenHeight }; - - Vector2 startControl = { 100, 0 }; - Vector2 endControl = { GetScreenWidth() - 100, GetScreenHeight() }; + Vector2 startPoint = { 30, 30 }; + Vector2 endPoint = { (float)screenWidth - 30, (float)screenHeight - 30 }; + bool moveStartPoint = false; + bool moveEndPoint = false; SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- @@ -40,15 +39,21 @@ int main(void) { // Update //---------------------------------------------------------------------------------- - if (IsKeyDown(KEY_LEFT_CONTROL)) + Vector2 mouse = GetMousePosition(); + + if (CheckCollisionPointCircle(mouse, startPoint, 10.0f) && IsMouseButtonDown(MOUSE_BUTTON_LEFT)) moveStartPoint = true; + else if (CheckCollisionPointCircle(mouse, endPoint, 10.0f) && IsMouseButtonDown(MOUSE_BUTTON_LEFT)) moveEndPoint = true; + + if (moveStartPoint) { - if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) startControl = GetMousePosition(); - else if (IsMouseButtonDown(MOUSE_BUTTON_RIGHT)) endControl = GetMousePosition(); + startPoint = mouse; + if (IsMouseButtonReleased(MOUSE_BUTTON_LEFT)) moveStartPoint = false; } - else + + if (moveEndPoint) { - if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) start = GetMousePosition(); - else if (IsMouseButtonDown(MOUSE_BUTTON_RIGHT)) end = GetMousePosition(); + endPoint = mouse; + if (IsMouseButtonReleased(MOUSE_BUTTON_LEFT)) moveEndPoint = false; } //---------------------------------------------------------------------------------- @@ -58,18 +63,14 @@ int main(void) ClearBackground(RAYWHITE); - DrawText("USE MOUSE LEFT-RIGHT CLICK to DEFINE LINE START and END POINTS", 15, 20, 20, GRAY); + DrawText("MOVE START-END POINTS WITH MOUSE", 15, 20, 20, GRAY); // Draw line Cubic Bezier, in-out interpolation (easing), no control points - DrawLineBezier(start, end, 3.0f, BLUE); + DrawLineBezier(startPoint, endPoint, 4.0f, BLUE); - // Draw spline Cubic Bezier with control points - DrawSplineSegmentBezierCubic(start, startControl, endControl, end, 2.0f, RED); - - DrawLineEx(start, startControl, 1.0, LIGHTGRAY); - DrawLineEx(end, endControl, 1.0, LIGHTGRAY); - DrawCircleV(startControl, 10, RED); - DrawCircleV(endControl, 10, RED); + // Draw start-end spline circles with some details + DrawCircleV(startPoint, CheckCollisionPointCircle(mouse, startPoint, 10.0f)? 14 : 8, moveStartPoint? RED : BLUE); + DrawCircleV(endPoint, CheckCollisionPointCircle(mouse, endPoint, 10.0f)? 14 : 8, moveEndPoint? RED : BLUE); EndDrawing(); //---------------------------------------------------------------------------------- diff --git a/examples/shapes/shapes_lines_bezier.png b/examples/shapes/shapes_lines_bezier.png index 390a49adf62b8220c72db7a4ebc6298c977df202..aa5edf3185edc84fe3cf7d2613a2983ecbce574c 100644 GIT binary patch literal 17953 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 Sk53E?3=E#GelF{r5}E)+@PDWP literal 17537 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