From 0e64ca99fa78897657fad62f420e92b19d22cf19 Mon Sep 17 00:00:00 2001 From: Nic Gaffney Date: Wed, 15 Oct 2025 01:52:18 -0500 Subject: Loading and saving rules now works --- src/imgui.zig | 10 +++++++--- src/main.zig | 2 +- src/rules.zig | 18 ++++++++---------- 3 files changed, 16 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/imgui.zig b/src/imgui.zig index f086f2a..66bf41e 100644 --- a/src/imgui.zig +++ b/src/imgui.zig @@ -9,7 +9,7 @@ const c = @cImport({ @cInclude("rlImGui.h"); }); -pub fn update(alloc: std.mem.Allocator, buf: [:0]u8) !void { +pub fn update(buf: [:0]u8) !void { c.rlImGuiBegin(); defer c.rlImGuiEnd(); @@ -78,12 +78,16 @@ pub fn update(alloc: std.mem.Allocator, buf: [:0]u8) !void { _ = z.inputText("Save Path", .{ .buf = buf }); if (z.button("Save", .{})) { const path = buf; - _ = rul.saveRules(path) catch void; + rul.saveRules(path) catch |err| { + std.debug.print("Failed to save rule. Error: {}\n", .{err}); + }; } _ = z.inputText("Load Path", .{ .buf = buf }); if (z.button("Load", .{})) { const path = buf; - _ = rul.loadRules(alloc, path) catch void; + rul.loadRules(path) catch |err| { + std.debug.print("Failed to load rule. Error: {}\n", .{err}); + }; } } } diff --git a/src/main.zig b/src/main.zig index aa410a1..4aaea4c 100644 --- a/src/main.zig +++ b/src/main.zig @@ -124,6 +124,6 @@ pub fn main() !void { part.updatePosition(&particles); part.draw(particles); - try img.update(allocator, buf); + try img.update(buf); } } diff --git a/src/rules.zig b/src/rules.zig index 4e2628a..26ca65a 100644 --- a/src/rules.zig +++ b/src/rules.zig @@ -38,49 +38,47 @@ pub fn printRules(rules: [cfg.colorAmnt][cfg.colorAmnt]f32) void { } /// Loads rules from a csv -pub fn loadRules(allocator: std.mem.Allocator, absolutePath: [:0]u8) !void { +pub fn loadRules(absolutePath: [:0]u8) !void { var buffer: [256]u8 = undefined; const file = try std.fs.openFileAbsoluteZ(absolutePath, .{ .mode = .read_only }); defer file.close(); - var reader = file.reader(&buffer).interface; + var file_reader = file.reader(&buffer); + const reader = &file_reader.interface; for (&cfg.rules) |*row| { for (row) |*col| { const buf = try reader.takeDelimiterExclusive(','); - defer allocator.free(buf); col.* = try std.fmt.parseFloat(f32, buf); } reader.toss(1); } for (&cfg.speed) |*s| { const buf = try reader.takeDelimiterExclusive(','); - defer allocator.free(buf); s.* = try std.fmt.parseInt(i32, buf, 10); } reader.toss(1); for (&cfg.radius) |*r| { const buf = try reader.takeDelimiterExclusive(','); - defer allocator.free(buf); r.* = try std.fmt.parseInt(i32, buf, 10); } reader.toss(1); { const buf = try reader.takeDelimiterExclusive(','); - defer allocator.free(buf); cfg.minDistance = try std.fmt.parseInt(i32, buf, 10); } { const buf = try reader.takeDelimiterExclusive(','); - defer allocator.free(buf); cfg.friction = try std.fmt.parseFloat(f32, buf); } } /// Save rules to a csv pub fn saveRules(absolutePath: [:0]u8) !void { - var buffer: [256]u8 = undefined; - const file = try std.fs.createFileAbsoluteZ(absolutePath, .{ .read = true }); + const file = try std.fs.createFileAbsoluteZ(absolutePath, .{}); defer file.close(); - var writer = file.writer(&buffer).interface; + var buffer: [256]u8 = undefined; + var file_writer = file.writer(&buffer); + const writer = &file_writer.interface; + for (cfg.rules) |row| { for (row) |col| { try writer.print("{d:.3},", .{col}); -- cgit v1.2.3