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(
|
Mesh.Cube.Draw(
|
||||||
mat_mono,
|
mat_justcolor,
|
||||||
Stretch.cursor.ToMatrix(3 * U.cm)
|
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
|
// 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 float stretch = 0.0f;
|
||||||
public static Pose cursor;
|
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()
|
public static void Init()
|
||||||
{
|
{
|
||||||
to_grab = new(-0.3f, -0.25f, -0.5f, true);
|
to_grab = new(-0.3f, -0.25f, -0.5f, true);
|
||||||
from_grab = new(-0.3f, -0.25f, -0.4f, 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()
|
public static void Frame()
|
||||||
|
@ -25,6 +36,29 @@ static class Stretch
|
||||||
|
|
||||||
Vec3 dir = delta.Normalized;
|
Vec3 dir = delta.Normalized;
|
||||||
cursor.position = to_grab.pose.position + dir * stretch * strength;
|
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
|
// design
|
||||||
|
|
Loading…
Add table
Reference in a new issue