raylib-zig/examples/shapes/lines_bezier.zig
2025-03-12 21:21:15 +01:00

76 lines
2.8 KiB
Zig

const rl = @import("raylib");
fn collisionFmt(isColliding: bool) f32 {
if (isColliding) return 14.0;
return 8.0;
}
fn movingFmt(isMoving: bool) rl.Color {
if (isMoving) return .red;
return .blue;
}
pub fn main() anyerror!void {
// Initialization
//--------------------------------------------------------------------------------------
const screenWidth = 800;
const screenHeight = 450;
//rl.setConfigFlags(@enumFromInt(rl.ConfigFlags.flag_msaa_4x_hint));
rl.initWindow(screenWidth, screenHeight, "raylib-zig [shapes] example - cubic-bezier lines");
defer rl.closeWindow(); // Close window and OpenGL context
var startPoint = rl.Vector2{ .x = 30, .y = 30 };
var endPoint = rl.Vector2{ .x = screenWidth - 30, .y = screenHeight - 30 };
var moveStartPoint = false;
var moveEndPoint = false;
rl.setTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// Main game loop
while (!rl.windowShouldClose()) { // Detect window close button or ESC key
// Update
//----------------------------------------------------------------------------------
const mouse: rl.Vector2 = rl.getMousePosition();
if (rl.checkCollisionPointCircle(mouse, startPoint, 10.0) and rl.isMouseButtonDown(.left)) {
moveStartPoint = true;
} else if (rl.checkCollisionPointCircle(mouse, endPoint, 10.0) and rl.isMouseButtonDown(.left)) {
moveEndPoint = true;
}
if (moveStartPoint) {
startPoint = mouse;
if (rl.isMouseButtonReleased(.left)) {
moveStartPoint = false;
}
}
if (moveEndPoint) {
endPoint = mouse;
if (rl.isMouseButtonReleased(.left)) {
moveEndPoint = false;
}
}
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
rl.beginDrawing();
defer rl.endDrawing();
rl.clearBackground(.ray_white);
rl.drawText("MOVE START-END POINTS WITH MOUSE", 15, 20, 20, .gray);
// Draw line Cubic Bezier, in-out interpolation (easing), no control points
rl.drawLineBezier(startPoint, endPoint, 4.0, .blue);
// Draw start-end spline circles with some details
rl.drawCircleV(startPoint, collisionFmt(rl.checkCollisionPointCircle(mouse, startPoint, 10.0)), movingFmt(moveStartPoint));
rl.drawCircleV(endPoint, collisionFmt(rl.checkCollisionPointCircle(mouse, endPoint, 10.0)), movingFmt(moveEndPoint));
//----------------------------------------------------------------------------------
}
}