This commit is contained in:
2026-05-08 09:39:13 +02:00
parent 40428104e4
commit b5122a8da8
6 changed files with 180 additions and 0 deletions

72
build.zig Normal file
View File

@ -0,0 +1,72 @@
const std = @import("std");
const rlz = @import("raylib_zig");
pub fn build(b: *std.Build) !void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
const raylib_dep = b.dependency("raylib_zig", .{
.target = target,
.optimize = optimize,
// Fixes panic from weird joystick OOB crap on hello world project
// panic: index -255 out of bounds for type 'int[512]'
// js->linjs.keyMap[code - BTN_MISC] in glfw/src/linux_joystick.c
.config = "-fno-sanitize=undefined",
});
const raylib = raylib_dep.module("raylib");
const raylib_artifact = raylib_dep.artifact("raylib");
const exe_mod = b.createModule(.{
.root_source_file = b.path("src/main.zig"),
.target = target,
.optimize = optimize,
});
exe_mod.addImport("raylib", raylib);
const run_step = b.step("run", "Run the app");
//web exports are completely separate
if (target.query.os_tag == .emscripten) {
const emsdk = rlz.emsdk;
const wasm = b.addLibrary(.{
.name = "zig-frugg",
.root_module = exe_mod,
});
const install_dir: std.Build.InstallDir = .{ .custom = "web" };
const emcc_flags = emsdk.emccDefaultFlags(b.allocator, .{ .optimize = optimize });
const emcc_settings = emsdk.emccDefaultSettings(b.allocator, .{ .optimize = optimize });
const emcc_step = emsdk.emccStep(b, raylib_artifact, wasm, .{
.optimize = optimize,
.flags = emcc_flags,
.settings = emcc_settings,
.shell_file_path = emsdk.shell(raylib_dep),
.install_dir = install_dir,
.embed_paths = &.{.{ .src_path = "resources/" }},
});
b.getInstallStep().dependOn(emcc_step);
const html_filename = try std.fmt.allocPrint(b.allocator, "{s}.html", .{wasm.name});
const emrun_step = emsdk.emrunStep(
b,
b.getInstallPath(install_dir, html_filename),
&.{},
);
emrun_step.dependOn(emcc_step);
run_step.dependOn(emrun_step);
} else {
const exe = b.addExecutable(.{
.name = "zig-frugg",
.root_module = exe_mod,
});
b.installArtifact(exe);
const run_cmd = b.addRunArtifact(exe);
run_cmd.step.dependOn(b.getInstallStep());
run_step.dependOn(&run_cmd.step);
}
}

52
build.zig.zon Normal file
View File

@ -0,0 +1,52 @@
.{
// This is the default name used by packages depending on this one. For
// example, when a user runs `zig fetch --save <url>`, this field is used
// as the key in the `dependencies` table. Although the user can choose a
// different name, most users will stick with this provided value.
//
// It is redundant to include "zig" in this name because it is already
// within the Zig package namespace.
.name = .zig_frugg,
// This is a [Semantic Version](https://semver.org/).
// In a future version of Zig it will be used for package deduplication.
.version = "0.0.0",
// Together with name, this represents a globally unique package
// identifier. This field is generated by the Zig toolchain when the
// package is first created, and then *never changes*. This allows
// unambiguous detection of one package being an updated version of
// another.
//
// When forking a Zig project, this id should be regenerated (delete the
// field and run `zig build`) if the upstream project is still maintained.
// Otherwise, the fork is *hostile*, attempting to take control over the
// original project's identity. Thus it is recommended to leave the comment
// on the following line intact, so that it shows up in code reviews that
// modify the field.
.fingerprint = 0x83fd67e65259ef3a, // Changing this has security and trust implications.
// Tracks the earliest Zig version that the package considers to be a
// supported use case.
.minimum_zig_version = "0.16.0",
// This field is optional.
// Each dependency must either provide a `url` and `hash`, or a `path`.
// `zig build --fetch` can be used to fetch all dependencies of a package, recursively.
// Once all dependencies are fetched, `zig build` no longer requires
// internet connectivity.
.dependencies = .{
.raylib_zig = .{
.url = "git+https://github.com/raylib-zig/raylib-zig?ref=devel#58f3c0fa328fc9ff48d17c2c3771ab9c5114aaa6",
.hash = "raylib_zig-6.0.0-KE8REMNkBQCpxwqT9ubVNf5aEOcWRUVIaH2sgt_sDDoZ",
},
.emsdk = .{
.url = "git+https://github.com/emscripten-core/emsdk?ref=4.0.9#3bcf1dcd01f040f370e10fe673a092d9ed79ebb5",
.hash = "N-V-__8AAJl1DwBezhYo_VE6f53mPVm00R-Fk28NPW7P14EQ",
},
},
.paths = .{
"build.zig",
"build.zig.zon",
"src",
// For example...
//"LICENSE",
//"README.md",
},
}

BIN
resources/PlayerSprite2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
resources/burp.mp3 Normal file

Binary file not shown.

View File

56
src/main.zig Normal file
View File

@ -0,0 +1,56 @@
const std = @import("std");
const rl = @import("raylib");
const Vec3 = rl.Vector3;
const Vec2 = rl.Vector2;
const Frug = struct {
pos: Vec3,
radius: f32 = 24,
pub fn draw(self: @This()) void {
rl.drawCircleV(
Vec2.init(self.pos.x, self.pos.y),
self.radius,
.green,
);
}
pub fn init() Frug {
return Frug{
.pos = .{ .x = 200, .y = 400, .z = 10 },
.radius = 24,
};
}
};
pub fn main(init: std.process.Init) anyerror!void {
const io = init.io;
try std.Io.File.stdout().writeStreamingAll(io, "FRUGG!\n");
const screenWidth = 800;
const screenHeight = 600;
rl.initWindow(screenWidth, screenHeight, "Zig Frugger");
defer rl.closeWindow();
rl.initAudioDevice();
defer rl.closeAudioDevice();
const frugBurp = try rl.loadSound("resources/burp.mp3");
defer rl.unloadSound(frugBurp);
rl.setTargetFPS(60);
const frug = Frug.init();
while (!rl.windowShouldClose()) {
rl.beginDrawing();
defer rl.endDrawing();
if (rl.isKeyPressed(.space)) rl.playSound(frugBurp);
rl.clearBackground(.sky_blue);
frug.draw();
rl.drawText("FRUGG!", 10, 10, 40, .green);
}
}