aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNic Gaffney <gaffney_nic@protonmail.com>2025-10-15 01:52:18 -0500
committerNic Gaffney <gaffney_nic@protonmail.com>2025-10-15 01:52:18 -0500
commit0e64ca99fa78897657fad62f420e92b19d22cf19 (patch)
treea4862b97d4c6b1f0db3512839ab42953ab3747d8
parenta6b7451d7f144fc0658354e3dbd297cb9aeb9e6c (diff)
downloadparticle-sim-0e64ca99fa78897657fad62f420e92b19d22cf19.tar.gz
Loading and saving rules now works
-rw-r--r--src/imgui.zig10
-rw-r--r--src/main.zig2
-rw-r--r--src/rules.zig18
3 files changed, 16 insertions, 14 deletions
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});