From f906676b21355c98db23209f1c6abff1914b091d Mon Sep 17 00:00:00 2001 From: Pihkaal Date: Wed, 11 Mar 2026 20:46:40 +0100 Subject: [PATCH] feat(zig): implement --- zig/Makefile | 2 ++ zig/README.md | 8 +++++++ zig/main.zig | 53 +++++++++++++++++++++++++++++++++++++++++++++++ zig/zig_logo.png | Bin 0 -> 4483 bytes 4 files changed, 63 insertions(+) create mode 100644 zig/Makefile create mode 100644 zig/README.md create mode 100644 zig/main.zig create mode 100644 zig/zig_logo.png diff --git a/zig/Makefile b/zig/Makefile new file mode 100644 index 0000000..4fba023 --- /dev/null +++ b/zig/Makefile @@ -0,0 +1,2 @@ +raylib_zig: main.zig + zig build-exe main.zig -I../_raylib-5.5_linux_amd64/include ../_raylib-5.5_linux_amd64/lib/libraylib.a -lm -femit-bin=raylib_zig diff --git a/zig/README.md b/zig/README.md new file mode 100644 index 0000000..32279f3 --- /dev/null +++ b/zig/README.md @@ -0,0 +1,8 @@ +# Raylib in Zig + +## Quick start + +```sh +$ make +$ ./raylib_zig +``` diff --git a/zig/main.zig b/zig/main.zig new file mode 100644 index 0000000..a699a3c --- /dev/null +++ b/zig/main.zig @@ -0,0 +1,53 @@ +const std = @import("std"); +const rl = @cImport({ + @cInclude("raylib.h"); +}); + +const WINDOW_WIDTH = 800; +const WINDOW_HEIGHT = 600; +const LOGO_HEIGHT = 64; +const LOGO_SPEED: f32 = 300; + +const BLACK = rl.Color{ .r = 0, .g = 0, .b = 0, .a = 255 }; +const WHITE = rl.Color{ .r = 255, .g = 255, .b = 255, .a = 255 }; + +pub fn main() void { + rl.InitWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "Raylib in Zig"); + rl.SetTargetFPS(60); + rl.SetRandomSeed(@intCast(std.time.timestamp())); + + var logo_image = rl.LoadImage("./zig_logo.png"); + rl.ImageResize(&logo_image, @divTrunc(logo_image.width * LOGO_HEIGHT, logo_image.height), LOGO_HEIGHT); + const logo_texture = rl.LoadTextureFromImage(logo_image); + rl.UnloadImage(logo_image); + + var x: f32 = @floatFromInt(rl.GetRandomValue(0, WINDOW_WIDTH - logo_texture.width)); + var y: f32 = @floatFromInt(rl.GetRandomValue(0, WINDOW_HEIGHT - logo_texture.height)); + + var dx: f32 = if (rl.GetRandomValue(0, 1) == 1) -LOGO_SPEED else LOGO_SPEED; + var dy: f32 = if (rl.GetRandomValue(0, 1) == 1) -LOGO_SPEED else LOGO_SPEED; + + while (!rl.WindowShouldClose()) { + const delta_time = rl.GetFrameTime(); + + x += dx * delta_time; + y += dy * delta_time; + + if (x < 0 or x + @as(f32, @floatFromInt(logo_texture.width)) >= WINDOW_WIDTH - 1) { + dx *= -1; + x += dx * delta_time; + } + if (y < 0 or y + @as(f32, @floatFromInt(logo_texture.height)) >= WINDOW_HEIGHT - 1) { + dy *= -1; + y += dy * delta_time; + } + + rl.BeginDrawing(); + rl.ClearBackground(BLACK); + rl.DrawTextureV(logo_texture, rl.Vector2{ .x = x, .y = y }, WHITE); + rl.EndDrawing(); + } + + rl.UnloadTexture(logo_texture); + rl.CloseWindow(); +} diff --git a/zig/zig_logo.png b/zig/zig_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c5eb152779646cf9f15e69a76192998f182e8a48 GIT binary patch literal 4483 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