mirror of
https://github.com/raylib-zig/raylib-zig.git
synced 2025-12-06 06:13:08 +00:00
example: add easings_rectange_array
This commit is contained in:
parent
be3790195a
commit
346e87c8aa
@ -244,6 +244,11 @@ pub fn build(b: *std.Build) !void {
|
||||
.path = "examples/shapes/easings_box_anim.zig",
|
||||
.desc = "Renders a box that demonstrates various easing functions",
|
||||
},
|
||||
.{
|
||||
.name = "easings_rectangle_array",
|
||||
.path = "examples/shapes/easings_rectangle_array.zig",
|
||||
.desc = "Renders a box that demonstrates various easing functions",
|
||||
},
|
||||
.{
|
||||
.name = "following_eyes",
|
||||
.path = "examples/shapes/following_eyes.zig",
|
||||
|
||||
91
examples/shapes/easings_rectangle_array.zig
Normal file
91
examples/shapes/easings_rectangle_array.zig
Normal file
@ -0,0 +1,91 @@
|
||||
const rl = @import("raylib");
|
||||
const reasings = @import("reasings.zig");
|
||||
|
||||
const RECS_WIDTH = 50;
|
||||
const RECS_HEIGHT = 50;
|
||||
const SCREEN_WIDTH = 800;
|
||||
const SCREEN_HEIGHT = 450;
|
||||
|
||||
const MAX_RECS_X = SCREEN_WIDTH / RECS_WIDTH;
|
||||
const MAX_RECS_Y = SCREEN_HEIGHT / RECS_HEIGHT;
|
||||
|
||||
const PLAY_TIME_IN_FRAMES = 240; // At 60 fps = 4 seconds
|
||||
|
||||
//------------------------------------------------------------------------------------
|
||||
// Program main entry point
|
||||
//------------------------------------------------------------------------------------
|
||||
pub fn main() anyerror!void {
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
rl.initWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "raylib [shapes] example - easings rectangle array");
|
||||
defer rl.closeWindow(); // Close window and OpenGL context
|
||||
|
||||
var recs: [MAX_RECS_X * MAX_RECS_Y]rl.Rectangle = undefined;
|
||||
|
||||
for (0..MAX_RECS_Y) |y| {
|
||||
for (0..MAX_RECS_X) |x| {
|
||||
recs[y * MAX_RECS_X + x].x = RECS_WIDTH / 2.0 + RECS_WIDTH * @as(f32, @floatFromInt(x));
|
||||
recs[y * MAX_RECS_X + x].y = RECS_HEIGHT / 2.0 + RECS_HEIGHT * @as(f32, @floatFromInt(y));
|
||||
recs[y * MAX_RECS_X + x].width = RECS_WIDTH;
|
||||
recs[y * MAX_RECS_X + x].height = RECS_HEIGHT;
|
||||
}
|
||||
}
|
||||
|
||||
var rotation: f32 = 0.0;
|
||||
var framesCounter: i32 = 0;
|
||||
var state: i32 = 0; // Rectangles animation state: 0-Playing, 1-Finished
|
||||
|
||||
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
|
||||
//----------------------------------------------------------------------------------
|
||||
if (state == 0) {
|
||||
framesCounter += 1;
|
||||
|
||||
for (&recs) |*rec| {
|
||||
rec.height = reasings.circOut(@floatFromInt(framesCounter), RECS_HEIGHT, -RECS_HEIGHT, PLAY_TIME_IN_FRAMES);
|
||||
rec.width = reasings.circOut(@floatFromInt(framesCounter), RECS_WIDTH, -RECS_WIDTH, PLAY_TIME_IN_FRAMES);
|
||||
|
||||
if (rec.height < 0) rec.height = 0;
|
||||
if (rec.width < 0) rec.width = 0;
|
||||
|
||||
if ((rec.height == 0) and (rec.width == 0)) state = 1; // Finish playing
|
||||
|
||||
rotation = reasings.linearIn(@floatFromInt(framesCounter), 0.0, 360.0, PLAY_TIME_IN_FRAMES);
|
||||
}
|
||||
} else if ((state == 1) and rl.isKeyPressed(.space)) {
|
||||
// When animation has finished, press space to restart
|
||||
framesCounter = 0;
|
||||
|
||||
for (&recs) |*rec| {
|
||||
rec.height = RECS_HEIGHT;
|
||||
rec.width = RECS_WIDTH;
|
||||
}
|
||||
|
||||
state = 0;
|
||||
}
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
rl.beginDrawing();
|
||||
defer rl.endDrawing();
|
||||
|
||||
rl.clearBackground(.ray_white);
|
||||
if (state == 0) {
|
||||
for (recs) |rec| {
|
||||
rl.drawRectanglePro(rec, rl.Vector2{
|
||||
.x = rec.width / 2,
|
||||
.y = rec.height / 2,
|
||||
}, rotation, .red);
|
||||
}
|
||||
} else if (state == 1) rl.drawText("PRESS [SPACE] TO PLAY AGAIN!", 240, 200, 20, .gray);
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user