aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNic Gaffney <gaffney_nic@protonmail.com>2024-06-11 21:48:36 -0500
committerNic Gaffney <gaffney_nic@protonmail.com>2024-06-11 21:48:36 -0500
commitd26fb18e04d4a02a4e9c186a00a1db1969330a1b (patch)
tree59adb427488f6cc19df6a9ce57f07e34fd5666e0 /src
downloadparticle-sim-d26fb18e04d4a02a4e9c186a00a1db1969330a1b.tar.gz
Initial Commit
Diffstat (limited to 'src')
-rw-r--r--src/main.zig82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/main.zig b/src/main.zig
new file mode 100644
index 0000000..f021181
--- /dev/null
+++ b/src/main.zig
@@ -0,0 +1,82 @@
+const std = @import("std");
+const rl = @import("raylib");
+var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+
+const particle = struct {
+ color: rl.Color,
+ attrs: particleAttrs,
+ x: i32,
+ y: i32,
+ xvel: i32,
+ yvel: i32,
+};
+
+const particleAttrs = struct {};
+const screenWidth = 1920;
+const screenHeight = 1080;
+
+pub fn main() !void {
+ rl.initWindow(screenWidth, screenHeight, "Particle Simulator");
+ defer rl.closeWindow();
+
+ rl.setTargetFPS(60);
+
+ var particles = try initParticles(200);
+ defer particles.deinit();
+ defer {
+ switch (gpa.deinit()) {
+ std.heap.Check.leak => std.debug.print("\n\nLEAKS!!!!\n\n", .{}),
+ std.heap.Check.ok => std.debug.print("No leaks :3", .{}),
+ }
+ }
+ std.debug.print("{}\n", .{particles.items.len});
+
+ while (!rl.windowShouldClose()) {
+ rl.beginDrawing();
+ if (rl.isKeyPressed(rl.KeyboardKey.key_q)) break;
+
+ defer rl.endDrawing();
+
+ for (0..particles.items.len) |i| {
+ updateParticle(&particles.items[i]);
+ drawParticle(particles.items[i]);
+ }
+
+ rl.clearBackground(rl.Color.white);
+ }
+}
+
+inline fn drawParticle(p: particle) void {
+ rl.drawCircle(p.x, p.y, 1, p.color);
+}
+
+fn updateParticle(p: *particle) void {
+ p.x = @mod((p.x + p.xvel), screenWidth);
+ p.y = @mod((p.y + p.yvel), screenHeight);
+}
+
+fn createParticle(x: i32, y: i32, color: rl.Color, attrs: particleAttrs) particle {
+ return particle{
+ .color = color,
+ .attrs = attrs,
+ .x = x,
+ .y = y,
+ .xvel = 5,
+ .yvel = -7,
+ };
+}
+
+fn initParticles(amnt: u32) !std.ArrayList(particle) {
+ const colors = [_]rl.Color{ rl.Color.red, rl.Color.blue, rl.Color.green };
+ const seed = @as(u64, @truncate(@as(u128, @bitCast(std.time.nanoTimestamp()))));
+ var prng = std.rand.DefaultPrng.init(seed);
+
+ var particles = std.ArrayList(particle).init(gpa.allocator());
+ for (0..amnt) |_| {
+ const x = prng.random().uintLessThan(u32, screenWidth);
+ const y = prng.random().uintLessThan(u32, screenHeight);
+ const color = colors[prng.random().uintLessThan(u32, 3)];
+ try particles.append(createParticle(@intCast(x), @intCast(y), color, .{}));
+ }
+ return particles;
+}