From eaf1d2bcb74a8175d4f385339eda94c17da78b39 Mon Sep 17 00:00:00 2001 From: peterino2 Date: Sun, 21 Sep 2025 01:09:49 -0700 Subject: [PATCH] added features for local editing of some stuff --- engine/rend/src/particles/particles.zig | 50 ++++++++++++------- projects/sampleGame/externGame/externGame.zig | 8 +++ projects/sampleGame/main.zig | 1 - 3 files changed, 41 insertions(+), 18 deletions(-) diff --git a/engine/rend/src/particles/particles.zig b/engine/rend/src/particles/particles.zig index c66e43f..36e0f4a 100644 --- a/engine/rend/src/particles/particles.zig +++ b/engine/rend/src/particles/particles.zig @@ -141,6 +141,8 @@ pub const ParticleEmitter = struct { emitterMaxLife: f64 = 0.0, emitterShape: EmitterShape = .{ .spherical = .{} }, + useLocalScene: bool = false, + _showDebug: bool = false, entity: core.Entity = undefined, @@ -180,18 +182,20 @@ pub const ParticleEmitter = struct { } } - switch (self.emitterShape) { - .spherical => |spherical| { - i = 0; - while (i < self.particlesPVA.items.len) : (i += 1) { - if (positionLength(self.particlesPVA.items[i].position) > spherical.radius) { - self.removeParticle(i); + if (self.useLocalScene) { + switch (self.emitterShape) { + .spherical => |spherical| { + i = 0; + while (i < self.particlesPVA.items.len) : (i += 1) { + if (positionLength(self.particlesPVA.items[i].position) > spherical.radius) { + self.removeParticle(i); + } } - } - }, - .conal => { - @panic("not implemented"); - }, + }, + .conal => { + @panic("not implemented"); + }, + } } } @@ -237,7 +241,7 @@ pub const ParticleEmitter = struct { const v = core.Vectorf{ .x = oneRand.getRange(), .y = oneRand.getRange(), .z = oneRand.getRange() }; const v2 = v.normalize(); - const pva: ParticlePVA = .{ + var pva: ParticlePVA = .{ .velocity = v2.fmul(self.particleVelocity.getRange()).toZm(), .position = .{ radius.getRange(), @@ -247,6 +251,11 @@ pub const ParticleEmitter = struct { }, .acceleration = v2.fmul(self.particleAcceleration.getRange()).toZm(), }; + + if (!self.useLocalScene) { + const scenePos = core.zm.mul(pva.position, self.entity.fetch(core.Scene).?.getPosRot().toTransform()); + pva.position = scenePos; + } return pva; }, .conal => |conal| { @@ -291,13 +300,20 @@ pub const ParticleEmitter = struct { } pub fn updateFinals(self: *@This()) void { - const scene = self.entity.fetch(core.Scene).?; - const transform = scene.getPosRot().toTransform(); + if (self.useLocalScene) { + const scene = self.entity.fetch(core.Scene).?; + const transform = scene.getPosRot().toTransform(); - for (self.particlesPVA.items, 0..) |pva, i| { - const p = core.zm.translationV(pva.position); + for (self.particlesPVA.items, 0..) |pva, i| { + const p = core.zm.translationV(pva.position); - self.finals.items[i] = core.zm.mul(p, transform); + self.finals.items[i] = core.zm.mul(p, transform); + } + } else { + for (self.particlesPVA.items, 0..) |pva, i| { + const p = core.zm.translationV(pva.position); + self.finals.items[i] = p; + } } } diff --git a/projects/sampleGame/externGame/externGame.zig b/projects/sampleGame/externGame/externGame.zig index 0d8e72c..3e51c77 100644 --- a/projects/sampleGame/externGame/externGame.zig +++ b/projects/sampleGame/externGame/externGame.zig @@ -217,6 +217,14 @@ pub const ExternGameObject = struct { .mass_properties_override = .{ .mass = 12 }, .override_mass_properties = .calc_inertia, }); + + const particle = box2.addComponent(rend.ParticleEmitter).?; + particle.start(); + particle.gravity = .{ .y = 1.0 }; + particle.particleVelocity = .{ .min = 0.6, .max = 1.2 }; + particle.particleLife = .{ .min = 5, .max = 6 }; + var name = core.MakeName("t_pixelSmoke"); + particle.texture = rend.getTexture(&name).?; } fn onAltFire(ctx: ?*anyopaque, _: core.ActionEvent) void { diff --git a/projects/sampleGame/main.zig b/projects/sampleGame/main.zig index ec1edf7..f929aea 100644 --- a/projects/sampleGame/main.zig +++ b/projects/sampleGame/main.zig @@ -128,7 +128,6 @@ pub const ParticleObject = struct { const e = try core.createEntity(); const particle = e.addComponent(rend.ParticleEmitter).?; - particle._showDebug = true; particle.start(); particle.gravity = .{ .y = -9.8 }; var name = core.MakeName("t_pixelSmoke");