slash hit detection
This commit is contained in:
parent
dd28bb598d
commit
4992a39ba0
2 changed files with 46 additions and 3 deletions
47
src/Arts.cs
47
src/Arts.cs
|
@ -153,8 +153,8 @@ static class Arts
|
||||||
|
|
||||||
// enemy
|
// enemy
|
||||||
Enemy enemy_test = Mono.enemy_types[(int)(Time.Totalf % Mono.enemy_types.Length)];
|
Enemy enemy_test = Mono.enemy_types[(int)(Time.Totalf % Mono.enemy_types.Length)];
|
||||||
Quat enemy_orbit = Quat.FromAngles(0, 0, 45) * Quat.FromAngles(0, (Time.Totalf * 90) % 360, 0);
|
Quat enemy_orbit = Quat.FromAngles(0, 0, 45) * Quat.FromAngles(0, (Time.Totalf * 30) % 360, 0);
|
||||||
enemy_test.pose.position = V.XYZ(0, 0, -3.0f) + enemy_orbit * V.XYZ(0, 0, -2);
|
enemy_test.pose.position = V.XYZ(0, 0, -3.0f) + enemy_orbit * V.XYZ(0, 0, -3);
|
||||||
// V.XYZ(SKMath.Sin(Time.Totalf * 1f) * 1.0f, 0.666f, -3.0f);
|
// V.XYZ(SKMath.Sin(Time.Totalf * 1f) * 1.0f, 0.666f, -3.0f);
|
||||||
for (int i = 0; i < enemy_test.cols.Count; i++)
|
for (int i = 0; i < enemy_test.cols.Count; i++)
|
||||||
{
|
{
|
||||||
|
@ -196,8 +196,51 @@ static class Arts
|
||||||
Matrix.Identity,
|
Matrix.Identity,
|
||||||
Color.Hex(0xF9BF05FF).ToLinear()
|
Color.Hex(0xF9BF05FF).ToLinear()
|
||||||
);
|
);
|
||||||
|
Ray slash_ray = new Ray(tip_pos, Vec3.Direction(tip_pos, last_tip_pos));
|
||||||
|
float ray_dist = Vec3.Distance(tip_pos, last_tip_pos);
|
||||||
last_tip_pos = Vec3.Lerp(last_tip_pos, tip_pos, Time.Stepf / 0.1f);
|
last_tip_pos = Vec3.Lerp(last_tip_pos, tip_pos, Time.Stepf / 0.1f);
|
||||||
|
|
||||||
|
if (true) // hit test
|
||||||
|
{
|
||||||
|
Matrix enemy_m4 = enemy_test.pose.ToMatrix();
|
||||||
|
Ray local_ray = enemy_m4.Inverse.Transform(slash_ray);
|
||||||
|
bool hit = false;
|
||||||
|
float min_dist = ray_dist;
|
||||||
|
Vec3 min_hit_pos = Vec3.Zero;
|
||||||
|
for (int i = 0; i < enemy_test.cols.Count; i++)
|
||||||
|
{
|
||||||
|
Sphere col = enemy_test.cols[i];
|
||||||
|
Vec3 hit_pos = Vec3.Zero;
|
||||||
|
if (col.Intersect(local_ray, out hit_pos))
|
||||||
|
{
|
||||||
|
float hit_dist = Vec3.Distance(hit_pos, local_ray.position);
|
||||||
|
if (hit_dist < min_dist)
|
||||||
|
{
|
||||||
|
hit = true;
|
||||||
|
min_dist = hit_dist;
|
||||||
|
min_hit_pos = hit_pos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
min_hit_pos = enemy_m4.Transform(min_hit_pos);
|
||||||
|
|
||||||
|
if (hit)
|
||||||
|
{
|
||||||
|
Mesh.Sphere.Draw(
|
||||||
|
mat_unlit,
|
||||||
|
Matrix.TS(
|
||||||
|
min_hit_pos,
|
||||||
|
4 * U.cm
|
||||||
|
),
|
||||||
|
Color.White
|
||||||
|
);
|
||||||
|
if (Rig.btn_select.state)
|
||||||
|
{
|
||||||
|
VFX.Play(min_hit_pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// revolver
|
// revolver
|
||||||
Quat rvolv_ori = Rig.l_aim.orientation;
|
Quat rvolv_ori = Rig.l_aim.orientation;
|
||||||
Vec3 rvolv_pos = Rig.l_aim.position;
|
Vec3 rvolv_pos = Rig.l_aim.position;
|
||||||
|
|
|
@ -37,7 +37,7 @@ static class Rig
|
||||||
Quat.FromAngles(0, 0, 45) * Quat.FromAngles(0, SKMath.Sin(Time.Totalf * 6f) * 60f, 0)
|
Quat.FromAngles(0, 0, 45) * Quat.FromAngles(0, SKMath.Sin(Time.Totalf * 6f) * 60f, 0)
|
||||||
);
|
);
|
||||||
l_aim = new Pose(
|
l_aim = new Pose(
|
||||||
V.XYZ(0.0f, 0.5f, 0.5f), // V.XYZ(SKMath.Sin(Time.Totalf * 2f) * 0.6f, 0.5f, 0.5f),
|
V.XYZ(1.0f, 0.5f, 0.5f), // V.XYZ(SKMath.Sin(Time.Totalf * 2f) * 0.6f, 0.5f, 0.5f),
|
||||||
Quat.Identity
|
Quat.Identity
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue