From 76fbe75242f5422dd3ace055e697c9c8b1ac360a Mon Sep 17 00:00:00 2001 From: spatialfree Date: Wed, 4 Dec 2024 18:19:16 -0500 Subject: [PATCH] map to xr hardware --- src/Arts.cs | 30 ++++++++++++++++++------------ src/Rig.cs | 17 +++++++++++++++++ 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/Arts.cs b/src/Arts.cs index 7940f1f..7c790ea 100644 --- a/src/Arts.cs +++ b/src/Arts.cs @@ -76,14 +76,14 @@ static class Arts ); // unit cube - Mesh.Cube.Draw( - mat_unlit, - Matrix.Identity, - Color.Hex(0x13180AFF).ToLinear() - ); + // Mesh.Cube.Draw( + // mat_unlit, + // Matrix.Identity, + // Color.Hex(0x13180AFF).ToLinear() + // ); // enemy - Vec3 enemy_pos = V.XYZ(SKMath.Sin(Time.Totalf * 1f) * 1.0f, 0.5f, -1.0f); + Vec3 enemy_pos = V.XYZ(SKMath.Sin(Time.Totalf * 1f) * 1.0f, 0.5f, -3.0f); float enemy_rad = 0.5f; Mesh.Sphere.Draw( mat_unlit, @@ -91,11 +91,18 @@ static class Arts Color.Hex(0x13180AFF).ToLinear() ); + // eyes + // Mesh.Cube.Draw( + // mat_unlit, + // Rig.head.ToMatrix().Transform(), + // Color.Hex(0x13180AFF).ToLinear() + // ); + // blade Mesh mesh = new(); - Quat blade_ori = Quat.FromAngles(0, 0, SKMath.Sin(Time.Totalf * 6f) * 30f); - Vec3 blade_pos = V.XYZ(SKMath.Sin(Time.Totalf * 1f) * 0.1f, 0.5f, 1.0f); - Vec3 tip_pos = blade_pos + blade_ori * V.XYZ(0, 1, 0); + Quat blade_ori = Rig.r_hld.orientation; + Vec3 blade_pos = Rig.r_hld.position; + Vec3 tip_pos = blade_pos + blade_ori * V.XYZ(0, 0, 1); mesh.SetData( new Vertex[] { new( blade_pos, V.XYZ(0,0,1)), @@ -114,8 +121,8 @@ static class Arts last_tip_pos = Vec3.Lerp(last_tip_pos, tip_pos, Time.Stepf / 0.1f); // revolver - Quat rvolv_ori = Quat.Identity; - Vec3 rvolv_pos = V.XYZ(SKMath.Sin(Time.Totalf * 2f) * 0.6f, 0.5f, 0.5f); + Quat rvolv_ori = Rig.l_aim.orientation; + Vec3 rvolv_pos = Rig.l_aim.position; Lines.Add( rvolv_pos, @@ -133,7 +140,6 @@ static class Arts bool hit = hit_mag < enemy_rad; if (hit) { - Log.Info("" + hit_mag); float hit_dist = flat_z + (Maths.smooth_stop((enemy_rad - hit_mag) / enemy_rad) * enemy_rad); Vec3 hit_pos = rvolv_pos + rvolv_ori * V.XYZ(0, 0, hit_dist); Mesh.Sphere.Draw( diff --git a/src/Rig.cs b/src/Rig.cs index 752eea6..9b8b4e8 100644 --- a/src/Rig.cs +++ b/src/Rig.cs @@ -10,6 +10,8 @@ static class Rig public static DeltaBool btn_grip = new(false); public static DeltaBool btn_back = new(false); + public static Pose l_hld, l_aim, r_hld, r_aim; + public static Vec3 fullstick = Vec3.Up; public static Pose r_con_stick = Pose.Identity; @@ -30,6 +32,15 @@ static class Rig btn_select.Step(Input.Key(Key.MouseLeft).IsActive()); btn_back.Step(Input.Key(Key.MouseRight).IsActive()); + r_hld = new Pose( + V.XYZ(SKMath.Sin(Time.Totalf * 1f) * 0.1f, 0.5f, 1.0f), + Quat.FromAngles(0, 0, SKMath.Sin(Time.Totalf * 6f) * 30f) + ); + l_aim = new Pose( + V.XYZ(SKMath.Sin(Time.Totalf * 2f) * 0.6f, 0.5f, 0.5f), + Quat.Identity + ); + if (Input.Key(Key.A).IsJustActive()) new_dir = new(-1, 0, 0); if (Input.Key(Key.S).IsJustActive()) new_dir = new(+1, 0, 0); if (Input.Key(Key.W).IsJustActive()) new_dir = new(0, 0, -1); @@ -43,6 +54,12 @@ static class Rig // Hand r_hand = Input.Hand(Handed.Right); // [!] hand input simulates controller... Controller r_con = Input.Controller(Handed.Right); + r_hld = r_con.pose; + r_aim = r_con.aim; + + Controller l_con = Input.Controller(Handed.Left); + l_hld = l_con.pose; + l_aim = l_con.aim; bool con_tracked = r_con.trackedPos > TrackState.Lost; // bool hand_tracked = Input.HandSource(Handed.Right) > HandSource.None;