cursor trail

This commit is contained in:
ethan merchant 2024-12-08 00:08:29 -05:00
parent 741f2ee713
commit d1cb1bd452
2 changed files with 57 additions and 2 deletions

View file

@ -89,9 +89,30 @@ static class Arts
);
Mesh.Cube.Draw(
mat_mono,
Stretch.cursor.ToMatrix(3 * U.cm)
mat_justcolor,
Stretch.cursor.ToMatrix(V.XYZ(-1, 1, 1) * 1.2f * U.cm),
Color.Hex(0x000000FF).ToLinear()
);
Mesh.Cube.Draw(
mat_mono,
Stretch.cursor.ToMatrix(1 * U.cm)
);
// particles
Particle[] particles = Stretch.particles;
for (int i = 0; i < particles.Length; i++)
{
Particle particle = particles[i];
Mesh.Sphere.Draw(
mat_unlit,
Matrix.TRS(
particle.pos,
particle.ori,
particle.scl
),
Color.Hex(0xFFFFFFFF).ToLinear()
);
}
}
// color_cube

View file

@ -12,10 +12,21 @@ static class Stretch
public static float stretch = 0.0f;
public static Pose cursor;
// vfx
public static Particle[] particles = new Particle[64];
static int index = 0;
static float trail_dist = 3 * U.cm;
static Vec3 last_particle_pos = Vec3.Zero;
public static void Init()
{
to_grab = new(-0.3f, -0.25f, -0.5f, true);
from_grab = new(-0.3f, -0.25f, -0.4f, true);
for (int i = 0; i < particles.Length; i++)
{
particles[i] = new();
}
}
public static void Frame()
@ -25,6 +36,29 @@ static class Stretch
Vec3 dir = delta.Normalized;
cursor.position = to_grab.pose.position + dir * stretch * strength;
if (Vec3.Distance(cursor.position, last_particle_pos) > trail_dist)
{
index = (index + 1) % particles.Length;
Particle particle = particles[index];
particle.pos = last_particle_pos + Vec3.Direction(cursor.position, last_particle_pos) * trail_dist;
// 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 = 3 * U.mm;
last_particle_pos = particle.pos;
}
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.0f - (3 * Time.Stepf);
}
}
// design