From bf0b999dbc679728418108dbe5da9e7b2ee0745a Mon Sep 17 00:00:00 2001 From: Vinywar123 Date: Thu, 22 Oct 2026 14:41:55 -0700 Subject: [PATCH 01/13] implemented --- assets/cubyz/particles/flame.zig.zon | 3 +++ .../block/server/replace_block_type.zig | 4 ++++ src/callbacks/callbacks.zig | 5 +++++ src/callbacks/particles/client/_list.zig | 2 ++ src/callbacks/particles/client/destroy.zig | 16 ++++++++++++++++ src/particles.zig | 12 ++++++++++++ 6 files changed, 42 insertions(+) create mode 100644 src/callbacks/particles/client/_list.zig create mode 100644 src/callbacks/particles/client/destroy.zig diff --git a/assets/cubyz/particles/flame.zig.zon b/assets/cubyz/particles/flame.zig.zon index b5a0c4fbce..8ce79c6e3b 100644 --- a/assets/cubyz/particles/flame.zig.zon +++ b/assets/cubyz/particles/flame.zig.zon @@ -3,4 +3,7 @@ .density = .{0.00065, 0.00085}, .rotationVelocity = .{20, 35}, .dragCoefficient = .{0.2, 0.3}, + .onTouch = .{ + .type = .destroy, + } } diff --git a/src/callbacks/block/server/replace_block_type.zig b/src/callbacks/block/server/replace_block_type.zig index d39c96a86f..386ba31e73 100644 --- a/src/callbacks/block/server/replace_block_type.zig +++ b/src/callbacks/block/server/replace_block_type.zig @@ -8,6 +8,10 @@ blockType: u16, pub fn init(zon: main.ZonElement, creator: main.callbacks.Creator) ?*@This() { const replacedBlock = switch (creator) { .block => |b| b, + else => { + std.log.err("cannot use {} for replace_block_type", .{creator}); + return null; + }, }; const result = main.worldArena.create(@This()); const blockId = zon.get([]const u8, "block") orelse { diff --git a/src/callbacks/callbacks.zig b/src/callbacks/callbacks.zig index bfe870e40d..13c536ac9d 100644 --- a/src/callbacks/callbacks.zig +++ b/src/callbacks/callbacks.zig @@ -1,14 +1,17 @@ const std = @import("std"); const main = @import("main"); +const Particle = main.particles.Particle; const Block = main.blocks.Block; const vec = main.vec; +const Vec3f = vec.Vec3f; const Vec3i = vec.Vec3i; pub const ClientBlockCallback = Callback(struct { block: Block, chunk: *main.chunk.Chunk, blockPos: Vec3i }, @import("block/client/_list.zig")); pub const ServerBlockCallback = Callback(struct { block: Block, chunk: *main.chunk.ServerChunk, blockPos: main.chunk.BlockPos }, @import("block/server/_list.zig")); pub const BlockTouchCallback = Callback(struct { entity: *main.server.Entity, source: Block, blockPos: Vec3i, deltaTime: f64 }, @import("block/touch/_list.zig")); +pub const ParticleCollideCallback = Callback(struct { source: *Particle, pos: Vec3f}, @import("particles/client/_list.zig")); pub const Result = enum { handled, ignored }; @@ -16,10 +19,12 @@ pub fn init() void { ClientBlockCallback.globalInit(); ServerBlockCallback.globalInit(); BlockTouchCallback.globalInit(); + ParticleCollideCallback.globalInit(); } pub const Creator = union(enum) { block: main.blocks.Block, + particle: main.particles.Particle }; fn Callback(_Params: type, list: type) type { diff --git a/src/callbacks/particles/client/_list.zig b/src/callbacks/particles/client/_list.zig new file mode 100644 index 0000000000..ac3237b4bf --- /dev/null +++ b/src/callbacks/particles/client/_list.zig @@ -0,0 +1,2 @@ +pub const destroy = @import("destroy.zig"); + diff --git a/src/callbacks/particles/client/destroy.zig b/src/callbacks/particles/client/destroy.zig new file mode 100644 index 0000000000..c3dc5d4619 --- /dev/null +++ b/src/callbacks/particles/client/destroy.zig @@ -0,0 +1,16 @@ +const std = @import("std"); + +const main = @import("main"); +const Block = main.blocks.Block; +const vec = main.vec; +const Vec3i = vec.Vec3i; +const ZonElement = main.ZonElement; + +pub fn init(_: ZonElement, _: main.callbacks.Creator) ?*anyopaque { + return @as(*anyopaque, undefined); +} + +pub fn run(_: *anyopaque, params: main.callbacks.ParticleCollideCallback.Params) main.callbacks.Result { + params.source.currentFrame = 0; + return .handled; +} diff --git a/src/particles.zig b/src/particles.zig index c3fc559593..f0486a38a6 100644 --- a/src/particles.zig +++ b/src/particles.zig @@ -73,6 +73,12 @@ pub const particle_manager = struct { // MARK: particle_manager .rotVel = rotVel, .dragCoefficient = RandomRange(f32).fromZon(zon.getChild("dragCoefficient")) orelse .init(0.5, 0.6), .loopTime = RandomRange(f32).fromZon(zon.getChild("loopTime")), + .onTouch = blk: { + break :blk main.callbacks.ParticleCollideCallback.init(zon.getChildOrNull("onTouch") orelse break :blk .noop, .{.particle = .{.typ = @intCast(types.items.len), .pos = .{0, 0, 0}}}) orelse { + std.log.err("Failed to load onTouch event for particle {s}", .{id}); + break :blk .noop; + }; + }, }; particleTypeHashmap.put(main.worldArena.allocator, id, @intCast(types.items.len)) catch unreachable; @@ -253,8 +259,10 @@ pub const particle_system = struct { // MARK: particle_system const posDelta = particleLocal.velAndRotationVel*vecDeltaTime; + var hasColided = false; v3Pos[0] += posDelta[0]; if (physics.collision.collides(.client, .x, -posDelta[0], v3Pos, hitBox)) |box| { + hasColided = true; if (posDelta[0] < 0) { v3Pos[0] = box.max[0] - hitBox.min[0] + physics.epsilon; } else { @@ -263,6 +271,7 @@ pub const particle_system = struct { // MARK: particle_system } v3Pos[1] += posDelta[1]; if (physics.collision.collides(.client, .y, -posDelta[1], v3Pos, hitBox)) |box| { + hasColided = true; if (posDelta[1] < 0) { v3Pos[1] = box.max[1] - hitBox.min[1] + physics.epsilon; } else { @@ -271,6 +280,7 @@ pub const particle_system = struct { // MARK: particle_system } v3Pos[2] += posDelta[2]; if (physics.collision.collides(.client, .z, -posDelta[2], v3Pos, hitBox)) |box| { + hasColided = true; if (posDelta[2] < 0) { v3Pos[2] = box.max[2] - hitBox.min[2] + physics.epsilon; } else { @@ -278,6 +288,7 @@ pub const particle_system = struct { // MARK: particle_system } } pos = @as(Vec3f, @floatCast(v3Pos - playerPos)); + _ = if (hasColided) particle_manager.typesLocal.items[particle.typ].onTouch.run(.{.source = particle, .pos = pos}); } else { const posDelta = particleLocal.velAndRotationVel*vecDeltaTime; @@ -556,6 +567,7 @@ pub const ParticleTypeLocal = struct { rotVel: RandomRange(f32), dragCoefficient: RandomRange(f32), loopTime: ?RandomRange(f32), + onTouch: main.callbacks.ParticleCollideCallback, }; pub const Particle = extern struct { From 2ce8d65d67b73242c87f54843e63451f1ddc2e7e Mon Sep 17 00:00:00 2001 From: Vinywar123 Date: Sun, 25 Oct 2026 09:14:17 -0700 Subject: [PATCH 02/13] formatting --- assets/cubyz/particles/flame.zig.zon | 2 +- src/callbacks/callbacks.zig | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/cubyz/particles/flame.zig.zon b/assets/cubyz/particles/flame.zig.zon index 8ce79c6e3b..e47f95fdcc 100644 --- a/assets/cubyz/particles/flame.zig.zon +++ b/assets/cubyz/particles/flame.zig.zon @@ -5,5 +5,5 @@ .dragCoefficient = .{0.2, 0.3}, .onTouch = .{ .type = .destroy, - } + }, } diff --git a/src/callbacks/callbacks.zig b/src/callbacks/callbacks.zig index 13c536ac9d..c78df84681 100644 --- a/src/callbacks/callbacks.zig +++ b/src/callbacks/callbacks.zig @@ -11,7 +11,7 @@ pub const ClientBlockCallback = Callback(struct { block: Block, chunk: *main.chu pub const ServerBlockCallback = Callback(struct { block: Block, chunk: *main.chunk.ServerChunk, blockPos: main.chunk.BlockPos }, @import("block/server/_list.zig")); pub const BlockTouchCallback = Callback(struct { entity: *main.server.Entity, source: Block, blockPos: Vec3i, deltaTime: f64 }, @import("block/touch/_list.zig")); -pub const ParticleCollideCallback = Callback(struct { source: *Particle, pos: Vec3f}, @import("particles/client/_list.zig")); +pub const ParticleCollideCallback = Callback(struct { source: *Particle, pos: Vec3f }, @import("particles/client/_list.zig")); pub const Result = enum { handled, ignored }; @@ -24,7 +24,7 @@ pub fn init() void { pub const Creator = union(enum) { block: main.blocks.Block, - particle: main.particles.Particle + particle: main.particles.Particle, }; fn Callback(_Params: type, list: type) type { From d4065e399eee9197603e9a695570532a28ff7f3e Mon Sep 17 00:00:00 2001 From: Vinywar123 Date: Sun, 25 Oct 2026 09:17:26 -0700 Subject: [PATCH 03/13] formatting --- src/callbacks/particles/client/_list.zig | 1 - 1 file changed, 1 deletion(-) diff --git a/src/callbacks/particles/client/_list.zig b/src/callbacks/particles/client/_list.zig index ac3237b4bf..167ff5ec11 100644 --- a/src/callbacks/particles/client/_list.zig +++ b/src/callbacks/particles/client/_list.zig @@ -1,2 +1 @@ pub const destroy = @import("destroy.zig"); - From f0a1cd08edb87aab2c83908b2f448b8b1ad760e5 Mon Sep 17 00:00:00 2001 From: Crepestrom Date: Mon, 26 Oct 2026 12:46:46 -0700 Subject: [PATCH 04/13] Update src/callbacks/particles/client/destroy.zig Co-authored-by: Wunka <56411012+Wunka@users.noreply.github.com> --- src/callbacks/particles/client/destroy.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/callbacks/particles/client/destroy.zig b/src/callbacks/particles/client/destroy.zig index c3dc5d4619..9320ee65a8 100644 --- a/src/callbacks/particles/client/destroy.zig +++ b/src/callbacks/particles/client/destroy.zig @@ -6,7 +6,7 @@ const vec = main.vec; const Vec3i = vec.Vec3i; const ZonElement = main.ZonElement; -pub fn init(_: ZonElement, _: main.callbacks.Creator) ?*anyopaque { +pub fn init(_: ZonElement, _: main.callbacks.Creator) ?*@This() { return @as(*anyopaque, undefined); } From 72f0b86f3b9a159d4a7d8206f09daf6290a5e3fc Mon Sep 17 00:00:00 2001 From: Crepestrom Date: Mon, 26 Oct 2026 12:46:55 -0700 Subject: [PATCH 05/13] Update src/callbacks/particles/client/destroy.zig Co-authored-by: Wunka <56411012+Wunka@users.noreply.github.com> --- src/callbacks/particles/client/destroy.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/callbacks/particles/client/destroy.zig b/src/callbacks/particles/client/destroy.zig index 9320ee65a8..f0e80fbeeb 100644 --- a/src/callbacks/particles/client/destroy.zig +++ b/src/callbacks/particles/client/destroy.zig @@ -10,7 +10,7 @@ pub fn init(_: ZonElement, _: main.callbacks.Creator) ?*@This() { return @as(*anyopaque, undefined); } -pub fn run(_: *anyopaque, params: main.callbacks.ParticleCollideCallback.Params) main.callbacks.Result { +pub fn run(_: *@This(), params: main.callbacks.ParticleCollideCallback.Params) main.callbacks.Result { params.source.currentFrame = 0; return .handled; } From e3f7c3f3c1b0600de3e168c964d5c29d402b5609 Mon Sep 17 00:00:00 2001 From: Crepestrom Date: Mon, 26 Oct 2026 12:47:19 -0700 Subject: [PATCH 06/13] Update src/particles.zig Co-authored-by: Wunka <56411012+Wunka@users.noreply.github.com> --- src/particles.zig | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/particles.zig b/src/particles.zig index f0486a38a6..de5e92a196 100644 --- a/src/particles.zig +++ b/src/particles.zig @@ -74,10 +74,19 @@ pub const particle_manager = struct { // MARK: particle_manager .dragCoefficient = RandomRange(f32).fromZon(zon.getChild("dragCoefficient")) orelse .init(0.5, 0.6), .loopTime = RandomRange(f32).fromZon(zon.getChild("loopTime")), .onTouch = blk: { - break :blk main.callbacks.ParticleCollideCallback.init(zon.getChildOrNull("onTouch") orelse break :blk .noop, .{.particle = .{.typ = @intCast(types.items.len), .pos = .{0, 0, 0}}}) orelse { + break :blk main.callbacks.ParticleCollideCallback.init( + zon.getChildOrNull("onTouch") orelse break :blk .noop, + .{ + .particle = .{ + .typ = @intCast(types.items.len), + .pos = .{0, 0, 0}, + }, + }, + ) orelse { std.log.err("Failed to load onTouch event for particle {s}", .{id}); break :blk .noop; }; + }, }; From c792be98eb20bce37c9196e34cf06dcdeff8883b Mon Sep 17 00:00:00 2001 From: Vinywar123 Date: Wed, 28 Oct 2026 19:20:58 -0700 Subject: [PATCH 07/13] this was causing a breaking bug --- src/callbacks/particles/client/destroy.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/callbacks/particles/client/destroy.zig b/src/callbacks/particles/client/destroy.zig index f0e80fbeeb..9da6d5b6a2 100644 --- a/src/callbacks/particles/client/destroy.zig +++ b/src/callbacks/particles/client/destroy.zig @@ -7,7 +7,7 @@ const Vec3i = vec.Vec3i; const ZonElement = main.ZonElement; pub fn init(_: ZonElement, _: main.callbacks.Creator) ?*@This() { - return @as(*anyopaque, undefined); + return @as(*@This(), undefined); } pub fn run(_: *@This(), params: main.callbacks.ParticleCollideCallback.Params) main.callbacks.Result { From 69fe5b54a64ccb9eb77dbc74ae33e9986d133ab4 Mon Sep 17 00:00:00 2001 From: Vinywar123 Date: Thu, 29 Oct 2026 10:39:36 -0700 Subject: [PATCH 08/13] formatting --- src/particles.zig | 1 - 1 file changed, 1 deletion(-) diff --git a/src/particles.zig b/src/particles.zig index de5e92a196..80fa0085fd 100644 --- a/src/particles.zig +++ b/src/particles.zig @@ -86,7 +86,6 @@ pub const particle_manager = struct { // MARK: particle_manager std.log.err("Failed to load onTouch event for particle {s}", .{id}); break :blk .noop; }; - }, }; From 10cb477cadc8b78405075f35ae47b0d9f9de8828 Mon Sep 17 00:00:00 2001 From: Crepestrom Date: Sat, 31 Oct 2026 14:13:38 -0700 Subject: [PATCH 09/13] Update src/particles.zig Co-authored-by: IntegratedQuantum <43880493+IntegratedQuantum@users.noreply.github.com> --- src/particles.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/particles.zig b/src/particles.zig index 80fa0085fd..cc8b954cfd 100644 --- a/src/particles.zig +++ b/src/particles.zig @@ -267,7 +267,7 @@ pub const particle_system = struct { // MARK: particle_system const posDelta = particleLocal.velAndRotationVel*vecDeltaTime; - var hasColided = false; + var hasCollided = false; v3Pos[0] += posDelta[0]; if (physics.collision.collides(.client, .x, -posDelta[0], v3Pos, hitBox)) |box| { hasColided = true; From e022cd5e3894f0b3b291382d99e49509d944edc5 Mon Sep 17 00:00:00 2001 From: Vinywar123 Date: Sat, 31 Oct 2026 14:19:39 -0700 Subject: [PATCH 10/13] varied changes --- src/callbacks/callbacks.zig | 2 +- src/callbacks/particles/{client => }/_list.zig | 0 src/callbacks/particles/{client => }/destroy.zig | 0 src/particles.zig | 15 ++++++++------- 4 files changed, 9 insertions(+), 8 deletions(-) rename src/callbacks/particles/{client => }/_list.zig (100%) rename src/callbacks/particles/{client => }/destroy.zig (100%) diff --git a/src/callbacks/callbacks.zig b/src/callbacks/callbacks.zig index c78df84681..86a3e88f65 100644 --- a/src/callbacks/callbacks.zig +++ b/src/callbacks/callbacks.zig @@ -11,7 +11,7 @@ pub const ClientBlockCallback = Callback(struct { block: Block, chunk: *main.chu pub const ServerBlockCallback = Callback(struct { block: Block, chunk: *main.chunk.ServerChunk, blockPos: main.chunk.BlockPos }, @import("block/server/_list.zig")); pub const BlockTouchCallback = Callback(struct { entity: *main.server.Entity, source: Block, blockPos: Vec3i, deltaTime: f64 }, @import("block/touch/_list.zig")); -pub const ParticleCollideCallback = Callback(struct { source: *Particle, pos: Vec3f }, @import("particles/client/_list.zig")); +pub const ParticleCollideCallback = Callback(struct { source: *Particle, pos: Vec3f }, @import("particles/_list.zig")); pub const Result = enum { handled, ignored }; diff --git a/src/callbacks/particles/client/_list.zig b/src/callbacks/particles/_list.zig similarity index 100% rename from src/callbacks/particles/client/_list.zig rename to src/callbacks/particles/_list.zig diff --git a/src/callbacks/particles/client/destroy.zig b/src/callbacks/particles/destroy.zig similarity index 100% rename from src/callbacks/particles/client/destroy.zig rename to src/callbacks/particles/destroy.zig diff --git a/src/particles.zig b/src/particles.zig index 80fa0085fd..8ce78f15e0 100644 --- a/src/particles.zig +++ b/src/particles.zig @@ -240,13 +240,6 @@ pub const particle_system = struct { // MARK: particle_system while (i < particleCount) { const particle = &particles[i]; const particleLocal = &particlesLocal[i]; - particle.currentFrame -= particleLocal.frameRate*deltaTime; - if (particle.currentFrame < 0) { - particleCount -= 1; - particles[i] = particles[particleCount]; - particlesLocal[i] = particlesLocal[particleCount]; - continue; - } var pos: Vec3f = particle.pos; var rot = particle.rot; @@ -307,6 +300,14 @@ pub const particle_system = struct { // MARK: particle_system particle.rot = rot; particleLocal.velAndRotationVel[3] = rotVel; + particle.currentFrame -= particleLocal.frameRate*deltaTime; + if (particle.currentFrame < 0) { + particleCount -= 1; + particles[i] = particles[particleCount]; + particlesLocal[i] = particlesLocal[particleCount]; + continue; + } + const positionf64 = @as(Vec3d, @floatCast(pos)) + playerPos; const intPos: vec.Vec3i = @floor(positionf64); const light: [6]u8 = main.renderer.mesh_storage.getLight(intPos[0], intPos[1], intPos[2]) orelse @splat(0); From 6ef0f72b4f22a6d2516fe698fcebbdc01fd3de1b Mon Sep 17 00:00:00 2001 From: Vinywar123 Date: Sat, 31 Oct 2026 14:29:13 -0700 Subject: [PATCH 11/13] Update particles.zig --- src/particles.zig | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/particles.zig b/src/particles.zig index 8ce78f15e0..478097529b 100644 --- a/src/particles.zig +++ b/src/particles.zig @@ -73,9 +73,9 @@ pub const particle_manager = struct { // MARK: particle_manager .rotVel = rotVel, .dragCoefficient = RandomRange(f32).fromZon(zon.getChild("dragCoefficient")) orelse .init(0.5, 0.6), .loopTime = RandomRange(f32).fromZon(zon.getChild("loopTime")), - .onTouch = blk: { + .onCollide = blk: { break :blk main.callbacks.ParticleCollideCallback.init( - zon.getChildOrNull("onTouch") orelse break :blk .noop, + zon.getChildOrNull("onCollide") orelse break :blk .noop, .{ .particle = .{ .typ = @intCast(types.items.len), @@ -83,7 +83,7 @@ pub const particle_manager = struct { // MARK: particle_manager }, }, ) orelse { - std.log.err("Failed to load onTouch event for particle {s}", .{id}); + std.log.err("Failed to load onCollide event for particle {s}", .{id}); break :blk .noop; }; }, @@ -289,7 +289,7 @@ pub const particle_system = struct { // MARK: particle_system } } pos = @as(Vec3f, @floatCast(v3Pos - playerPos)); - _ = if (hasColided) particle_manager.typesLocal.items[particle.typ].onTouch.run(.{.source = particle, .pos = pos}); + _ = if (hasColided) particle_manager.typesLocal.items[particle.typ].onCollide.run(.{.source = particle, .pos = pos}); } else { const posDelta = particleLocal.velAndRotationVel*vecDeltaTime; @@ -576,7 +576,7 @@ pub const ParticleTypeLocal = struct { rotVel: RandomRange(f32), dragCoefficient: RandomRange(f32), loopTime: ?RandomRange(f32), - onTouch: main.callbacks.ParticleCollideCallback, + onCollide: main.callbacks.ParticleCollideCallback, }; pub const Particle = extern struct { From 38afb01fc69c7bddc2c81922656d545c00ddc02a Mon Sep 17 00:00:00 2001 From: Vinywar123 Date: Sat, 31 Oct 2026 14:29:51 -0700 Subject: [PATCH 12/13] Update particles.zig --- src/particles.zig | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/particles.zig b/src/particles.zig index 84a06e7dba..8dfbb4644f 100644 --- a/src/particles.zig +++ b/src/particles.zig @@ -263,7 +263,7 @@ pub const particle_system = struct { // MARK: particle_system var hasCollided = false; v3Pos[0] += posDelta[0]; if (physics.collision.collides(.client, .x, -posDelta[0], v3Pos, hitBox)) |box| { - hasColided = true; + hasCollided = true; if (posDelta[0] < 0) { v3Pos[0] = box.max[0] - hitBox.min[0] + physics.epsilon; } else { @@ -272,7 +272,7 @@ pub const particle_system = struct { // MARK: particle_system } v3Pos[1] += posDelta[1]; if (physics.collision.collides(.client, .y, -posDelta[1], v3Pos, hitBox)) |box| { - hasColided = true; + hasCollided = true; if (posDelta[1] < 0) { v3Pos[1] = box.max[1] - hitBox.min[1] + physics.epsilon; } else { @@ -281,7 +281,7 @@ pub const particle_system = struct { // MARK: particle_system } v3Pos[2] += posDelta[2]; if (physics.collision.collides(.client, .z, -posDelta[2], v3Pos, hitBox)) |box| { - hasColided = true; + hasCollided = true; if (posDelta[2] < 0) { v3Pos[2] = box.max[2] - hitBox.min[2] + physics.epsilon; } else { @@ -289,7 +289,7 @@ pub const particle_system = struct { // MARK: particle_system } } pos = @as(Vec3f, @floatCast(v3Pos - playerPos)); - _ = if (hasColided) particle_manager.typesLocal.items[particle.typ].onCollide.run(.{.source = particle, .pos = pos}); + _ = if (hasCollided) particle_manager.typesLocal.items[particle.typ].onCollide.run(.{.source = particle, .pos = pos}); } else { const posDelta = particleLocal.velAndRotationVel*vecDeltaTime; From a140e3253dbb17f5930874cb8fcb91a59c504975 Mon Sep 17 00:00:00 2001 From: Vinywar123 Date: Sat, 31 Oct 2026 14:58:38 -0700 Subject: [PATCH 13/13] Update particles.zig --- src/particles.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/particles.zig b/src/particles.zig index 8dfbb4644f..ee653b07e1 100644 --- a/src/particles.zig +++ b/src/particles.zig @@ -79,7 +79,7 @@ pub const particle_manager = struct { // MARK: particle_manager .{ .particle = .{ .typ = @intCast(types.items.len), - .pos = .{0, 0, 0}, + .pos = undefined, }, }, ) orelse {