cursor trail
This commit is contained in:
parent
741f2ee713
commit
d1cb1bd452
2 changed files with 57 additions and 2 deletions
25
src/Arts.cs
25
src/Arts.cs
|
@ -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
|
||||
|
|
34
src/Dofs.cs
34
src/Dofs.cs
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue