71 lines
No EOL
2 KiB
C#
71 lines
No EOL
2 KiB
C#
using StereoKit;
|
|
using System;
|
|
|
|
namespace slash;
|
|
|
|
static class VFX
|
|
{
|
|
public static Particle[] particles = new Particle[64];
|
|
static int index = 0;
|
|
|
|
public static void Init()
|
|
{
|
|
for (int i = 0; i < particles.Length; i++)
|
|
{
|
|
particles[i] = new();
|
|
}
|
|
}
|
|
|
|
public static void Play(Vec3 pos)
|
|
{
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
index = (index + 1) % particles.Length;
|
|
Particle particle = particles[index];
|
|
particle.pos = pos;
|
|
particle.vel = Quat.FromAngles(Random.Shared.NextSingle() * 360, 0, 0) * Quat.FromAngles(0, Random.Shared.NextSingle() * 360, 0) * Vec3.Forward * 6.0f;
|
|
particle.ori = Quat.Identity;
|
|
particle.scl = (1.0f / 3) * Maths.smooth_start(Random.Shared.NextSingle());
|
|
}
|
|
}
|
|
|
|
public static void Frame()
|
|
{
|
|
for (int i = 0; i < particles.Length; i++)
|
|
{
|
|
Particle particle = particles[i];
|
|
if (particle.vel.MagnitudeSq > float.Epsilon)
|
|
{
|
|
particle.pos += particle.vel * Time.Stepf;
|
|
particle.vel *= 1 - (3 * Time.Stepf);
|
|
particle.scl *= 1 - (3 * Time.Stepf);
|
|
// float scl_rad = particle.scl * 0.5f * 0.333f;
|
|
// Vec3 next_pos = V.XYZ(
|
|
// Maths.s_clamp(particle.pos.x, 2 - scl_rad),
|
|
// Maths.s_clamp(particle.pos.y, 2 - scl_rad),
|
|
// Maths.s_clamp(particle.pos.z, 2 - scl_rad)
|
|
// );
|
|
// if (next_pos.x != particle.pos.x || next_pos.y != particle.pos.y || next_pos.z != particle.pos.z)
|
|
// {
|
|
// particle.pos = next_pos;
|
|
// particle.vel = Vec3.Zero;
|
|
// }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public class Particle
|
|
{
|
|
public Vec3 pos, vel;
|
|
public Quat ori;
|
|
public float scl;
|
|
|
|
public Particle()
|
|
{
|
|
this.pos = Vec3.Zero;
|
|
this.vel = Vec3.Zero;
|
|
this.ori = Quat.Identity;
|
|
this.scl = 0.0f;
|
|
}
|
|
} |