From 6d69fa8898fc32dd002e3f54caf51e04da3eb3bc Mon Sep 17 00:00:00 2001 From: Vicente Ferrari Smith Date: Thu, 29 Jan 2026 23:00:03 +0100 Subject: [PATCH] w/e --- build.zig | 220 ++++++++++++++++++++++++++++--------------- src/client/c.zig | 5 + src/client/main.zig | 66 +++++++------ src/server/c.zig | 3 + src/server/chunk.zig | 17 ++-- src/server/main.zig | 53 +++++------ 6 files changed, 224 insertions(+), 140 deletions(-) create mode 100644 src/server/c.zig diff --git a/build.zig b/build.zig index eceae5b..fdf41ca 100644 --- a/build.zig +++ b/build.zig @@ -46,94 +46,166 @@ pub fn build(b: *std.Build) void { }); server.root_module.strip = true; - const ztracy = b.dependency( - "ztracy", - .{ - .enable_ztracy = true, - .enable_fibers = false, - .on_demand = false, + // ztracy + { + const ztracy = b.dependency( + "ztracy", + .{ + .enable_ztracy = true, + .enable_fibers = false, + .on_demand = false, + } + ); + client.root_module.addImport("ztracy", ztracy.module("root")); + client.linkLibrary(ztracy.artifact("tracy")); + } + + // mach-freetype + { + const mach_freetype = b.dependency("mach_freetype", .{ + .target = target, + .optimize = optimize, + }); + client.root_module.addImport("mach-freetype", mach_freetype.module("mach-freetype")); + client.root_module.addImport("mach-harfbuzz", mach_freetype.module("mach-harfbuzz")); + } + + // kb_text_shape + { + client.root_module.addCSourceFile(.{ + .file = b.path("vendor/kb_text_shape/kb_text_shape.h"), + .language = .c, + .flags = &.{ + "-DKB_TEXT_SHAPE_IMPLEMENTATION", + "-O3", // Maximum optimization + // "-ffast-math", // Allows algebraic reorganizations (risky for precision, great for speed) + // "-fno-plt", // Reduces overhead for library calls + // "-march=native", // Use every instruction your CPU has + // "-flto", // Enable LTO for the C side specifically + }, + }); + const kb_text_shape = b.addTranslateC(.{ + .root_source_file = b.path("vendor/kb_text_shape/kb_text_shape.h"), + .target = target, + .optimize = optimize, + }); + client.root_module.addImport("kb", kb_text_shape.createModule()); + } + + // stb_rect_pack + { + client.root_module.addCSourceFile(.{ .file = b.path("vendor/stb/stb_rect_pack.h"), .language = .c, .flags = &.{} }); + const stb_rect_pack = b.addTranslateC(.{ + .root_source_file = b.path("vendor/stb/stb_rect_pack.h"), + .target = target, + .optimize = optimize, + }); + client.root_module.addImport("stb_rect_pack", stb_rect_pack.createModule()); + } + + // zmath + { + const zmath = b.dependency( + "zmath", + .{ + .target = target, + .optimize = optimize, + } + ); + client.root_module.addImport("zmath", zmath.module("root")); + server.root_module.addImport("zmath", zmath.module("root")); + shared.addImport("zmath", zmath.module("root")); + } + + + // ENet + { + client.addCSourceFiles(.{ + .root = b.path("vendor/enet"), + .files = &[_][]const u8{ + "callbacks.c", + "compress.c", + "host.c", + "list.c", + "packet.c", + "peer.c", + "protocol.c", + "unix.c", + "win32.c", + }, + }); + + if (target.result.os.tag == .windows) { + // client.root_module.linkSystemLibrary("ws2_32", .{}); + // client.root_module.linkSystemLibrary("winmm", .{}); } - ); - client.root_module.addImport("ztracy", ztracy.module("root")); - client.linkLibrary(ztracy.artifact("tracy")); - const mach_freetype = b.dependency("mach_freetype", .{ - .target = target, - .optimize = optimize, - }); - client.root_module.addImport("mach-freetype", mach_freetype.module("mach-freetype")); - client.root_module.addImport("mach-harfbuzz", mach_freetype.module("mach-harfbuzz")); + client.root_module.addIncludePath(b.path("vendor/enet/include/")); - client.root_module.addCSourceFile(.{ - .file = b.path("vendor/kb_text_shape/kb_text_shape.h"), - .language = .c, - .flags = &.{ - "-DKB_TEXT_SHAPE_IMPLEMENTATION", - "-O3", // Maximum optimization - // "-ffast-math", // Allows algebraic reorganizations (risky for precision, great for speed) - // "-fno-plt", // Reduces overhead for library calls - // "-march=native", // Use every instruction your CPU has - // "-flto", // Enable LTO for the C side specifically - }, - }); - const kb_text_shape = b.addTranslateC(.{ - .root_source_file = b.path("vendor/kb_text_shape/kb_text_shape.h"), - .target = target, - .optimize = optimize, - }); - client.root_module.addImport("kb", kb_text_shape.createModule()); + server.addCSourceFiles(.{ + .root = b.path("vendor/enet"), + .files = &[_][]const u8{ + "callbacks.c", + "compress.c", + "host.c", + "list.c", + "packet.c", + "peer.c", + "protocol.c", + "unix.c", + "win32.c", + }, + }); - client.root_module.addCSourceFile(.{ .file = b.path("vendor/stb/stb_rect_pack.h"), .language = .c, .flags = &.{} }); - const stb_rect_pack = b.addTranslateC(.{ - .root_source_file = b.path("vendor/stb/stb_rect_pack.h"), - .target = target, - .optimize = optimize, - }); - client.root_module.addImport("stb_rect_pack", stb_rect_pack.createModule()); + if (target.result.os.tag == .windows) { + server.root_module.linkSystemLibrary("ws2_32", .{}); + server.root_module.linkSystemLibrary("winmm", .{}); + } - const zmath = b.dependency( - "zmath", + server.root_module.addIncludePath(b.path("vendor/enet/include/")); + + // const znet = b.dependency( + // "znet", + // .{ + // .target = target, + // .optimize = optimize, + // } + // ); + // client.root_module.addImport("znet", znet.module("znet")); + // server.root_module.addImport("znet", znet.module("znet")); + } + + // Bufzilla + { + const bufzilla = b.dependency( + "bufzilla", .{ .target = target, .optimize = optimize, - } - ); - client.root_module.addImport("zmath", zmath.module("root")); - server.root_module.addImport("zmath", zmath.module("root")); - shared.addImport("zmath", zmath.module("root")); + }); + client.root_module.addImport("bufzilla", bufzilla.module("bufzilla")); + server.root_module.addImport("bufzilla", bufzilla.module("bufzilla")); + } - const znet = b.dependency( - "znet", - .{ + // Raylib + { + const raylib_dep = b.dependency("raylib_zig", .{ .target = target, .optimize = optimize, - } - ); - client.root_module.addImport("znet", znet.module("znet")); - server.root_module.addImport("znet", znet.module("znet")); + }); - const bufzilla = b.dependency( - "bufzilla", - .{ - .target = target, - .optimize = optimize, - }); - client.root_module.addImport("bufzilla", bufzilla.module("bufzilla")); - server.root_module.addImport("bufzilla", bufzilla.module("bufzilla")); + const raylib = raylib_dep.module("raylib"); // main raylib module + const raygui = raylib_dep.module("raygui"); // raygui module + const raylib_artifact = raylib_dep.artifact("raylib"); // raylib C library + raylib_artifact.root_module.addCMacro("SUPPORT_CUSTOM_FRAME_CONTROL", ""); - const raylib_dep = b.dependency("raylib_zig", .{ - .target = target, - .optimize = optimize, - }); + client.linkLibrary(raylib_artifact); + client.root_module.addImport("raylib", raylib); + client.root_module.addImport("raygui", raygui); + } - const raylib = raylib_dep.module("raylib"); // main raylib module - const raygui = raylib_dep.module("raygui"); // raygui module - const raylib_artifact = raylib_dep.artifact("raylib"); // raylib C library - raylib_artifact.root_module.addCMacro("SUPPORT_CUSTOM_FRAME_CONTROL", ""); - - client.linkLibrary(raylib_artifact); - client.root_module.addImport("raylib", raylib); - client.root_module.addImport("raygui", raygui); + client.root_module.link_libc = true; + server.root_module.link_libc = true; b.installArtifact(client); b.installArtifact(server); diff --git a/src/client/c.zig b/src/client/c.zig index 3e17dcf..3de2a3a 100644 --- a/src/client/c.zig +++ b/src/client/c.zig @@ -3,3 +3,8 @@ pub const c = @cImport({ @cInclude("raymath.h"); @cInclude("rlgl.h"); }); + +pub const enet = @cImport({ + @cDefine("WIN32_LEAN_AND_MEAN", ""); + @cInclude("enet/enet.h"); +}); diff --git a/src/client/main.zig b/src/client/main.zig index 4514bb1..f2abdff 100644 --- a/src/client/main.zig +++ b/src/client/main.zig @@ -1,6 +1,5 @@ const std = @import("std"); const zm = @import("zmath"); -const znet = @import("znet"); const rl = @import("raylib"); const bufzilla = @import("bufzilla"); const ft = @import("mach-freetype"); @@ -9,6 +8,8 @@ const kb = @import("kb"); const shared = @import("shared"); +const c = @import("c.zig").c; +const enet = @import("c.zig").enet; const client = @import("client.zig"); const entity = @import("entity.zig"); const misc = @import("misc.zig"); @@ -47,10 +48,15 @@ pub fn main() !void { var stdout = std.fs.File.stdout(); _ = try stdout.write("Hello, Client!\n"); - - try znet.init(); - defer znet.deinit(); - // rl.setConfigFlags(.{ .window_highdpi = true, .vsync_hint = true }); + + if (enet.enet_initialize() != 0) { + std.log.info("Failed to load ENet", .{}); + return; + } + + defer enet.enet_deinitialize(); + + rl.setConfigFlags(.{ .window_highdpi = true, .vsync_hint = false }); rl.initWindow(screen_width, screen_height, "zzz"); defer rl.closeWindow(); @@ -107,14 +113,14 @@ pub fn main() !void { // const tx = try rl.loadTextureFromImage(img); // rl.unloadImage(img); - const host = try znet.Host.init(.{ - .addr = null, - .peer_limit = 1, - .channel_limit = .max, - .incoming_bandwidth = .unlimited, - .outgoing_bandwidth = .unlimited, - }); - defer host.deinit(); + // const host = try znet.Host.init(.{ + // .addr = null, + // .peer_limit = 1, + // .channel_limit = .max, + // .incoming_bandwidth = .unlimited, + // .outgoing_bandwidth = .unlimited, + // }); + // defer host.deinit(); // const peer = try host.connect(.{ // .addr = try .init(.{ @@ -195,27 +201,27 @@ pub fn main() !void { // std.log.info("t: {}", .{t}); - while (try host.service(0)) |event| switch (event) { - .connect => |data| { - _ = data; - // std.log.info("{}", .{data.peer}); - }, - .disconnect => |data| { - _ = data; - // std.log.info("{}", .{data.peer}); - }, - .receive => |data| { - defer data.packet.deinit(); + // while (try host.service(0)) |event| switch (event) { + // .connect => |data| { + // _ = data; + // // std.log.info("{}", .{data.peer}); + // }, + // .disconnect => |data| { + // _ = data; + // // std.log.info("{}", .{data.peer}); + // }, + // .receive => |data| { + // defer data.packet.deinit(); - const slice = data.packet.dataSlice(); + // const slice = data.packet.dataSlice(); - var reader = bufzilla.Reader(.{}).init(slice); + // var reader = bufzilla.Reader(.{}).init(slice); - const id = try reader.readPath("id"); + // const id = try reader.readPath("id"); - std.log.info("{any}", .{id}); - }, - }; + // std.log.info("{any}", .{id}); + // }, + // }; rl.pollInputEvents(); diff --git a/src/server/c.zig b/src/server/c.zig new file mode 100644 index 0000000..bde1670 --- /dev/null +++ b/src/server/c.zig @@ -0,0 +1,3 @@ +pub const c = @cImport({ + // @cInclude("enet/enet.h"); +}); diff --git a/src/server/chunk.zig b/src/server/chunk.zig index 2920c9b..8d4e041 100644 --- a/src/server/chunk.zig +++ b/src/server/chunk.zig @@ -1,5 +1,4 @@ const std = @import("std"); -const znet = @import("znet"); const bufzilla = @import("bufzilla"); const shared = @import("shared"); @@ -30,14 +29,14 @@ pub fn spawn(chunk: *shared.chunk.Chunk, comptime T: type, allocator: std.mem.Al var writer = bufzilla.Writer.init(&fixed); try writer.writeAny(msg); - const encoded = fixed.buffered(); + // const encoded = fixed.buffered(); - const packet = try znet.Packet.init(encoded, 0, .reliable); - var iterator = server.host.iterPeers(); + // const packet = try znet.Packet.init(encoded, 0, .reliable); + // var iterator = server.host.iterPeers(); - while (iterator.next()) |peer| { - if (peer.state() == .connected) { - try peer.send(packet); - } - } + // while (iterator.next()) |peer| { + // if (peer.state() == .connected) { + // try peer.send(packet); + // } + // } } diff --git a/src/server/main.zig b/src/server/main.zig index 7d7384f..acbf0be 100644 --- a/src/server/main.zig +++ b/src/server/main.zig @@ -1,6 +1,5 @@ const std = @import("std"); const zm = @import("zmath"); -const znet = @import("znet"); const shared = @import("shared"); @@ -28,19 +27,19 @@ pub fn main() !void { try stdout.flush(); - try znet.init(); - defer znet.deinit(); + // try znet.init(); + // defer znet.deinit(); - server.host = try znet.Host.init(.{ - .addr = try .init(.{ - .ip = .any, - .port = .{ .uint = 5000 }, - }), - .peer_limit = 32, - .channel_limit = .max, - .incoming_bandwidth = .unlimited, - .outgoing_bandwidth = .unlimited, - }); + // server.host = try znet.Host.init(.{ + // .addr = try .init(.{ + // .ip = .any, + // .port = .{ .uint = 5000 }, + // }), + // .peer_limit = 32, + // .channel_limit = .max, + // .incoming_bandwidth = .unlimited, + // .outgoing_bandwidth = .unlimited, + // }); // const address = try std.net.Address.parseIp4("127.0.0.1", shared.protocol.SERVER_PORT); // var tcp_server = try address.listen(.{}); @@ -65,20 +64,20 @@ pub fn main() !void { // std.log.info("t: {}", .{t}); - while (try server.host.service(0)) |event| switch (event) { - .connect => |data| { - _ = data; - // std.log.info("{}", .{data.peer}); - }, - .disconnect => |data| { - _ = data; - // std.log.info("{}", .{data.peer}); - }, - .receive => |data| { - std.log.info("{s}", .{data.packet.dataSlice()}); - defer data.packet.deinit(); - }, - }; + // while (try server.host.service(0)) |event| switch (event) { + // .connect => |data| { + // _ = data; + // // std.log.info("{}", .{data.peer}); + // }, + // .disconnect => |data| { + // _ = data; + // // std.log.info("{}", .{data.peer}); + // }, + // .receive => |data| { + // std.log.info("{s}", .{data.packet.dataSlice()}); + // defer data.packet.deinit(); + // }, + // }; // const connection = try tcp_server.accept(); // defer connection.stream.close();