cleaner input handling for cursors
This commit is contained in:
parent
1309ab1c63
commit
305491d317
2 changed files with 22 additions and 20 deletions
|
@ -43,7 +43,12 @@ public static class Mono {
|
|||
// Default.MaterialHand["color"] = cube.color;
|
||||
|
||||
// reachCursor.Step();
|
||||
supineCursor.Step();
|
||||
supineCursor.Step(
|
||||
mainHand.aim.position,
|
||||
offHand.aim.orientation,
|
||||
mainHand.aim.orientation,
|
||||
Mono.mainHand.IsStickClicked
|
||||
);
|
||||
// oriel.Step();
|
||||
|
||||
// cursor.Draw(Matrix.S(0.1f));
|
||||
|
|
|
@ -39,11 +39,10 @@ public class ReachCursor {
|
|||
}
|
||||
|
||||
public class TwistCursor : SpatialCursor {
|
||||
public void Step() {
|
||||
Quat rel = Quat.LookAt(Vec3.Zero, Mono.mainHand.aim.orientation * Vec3.Forward);
|
||||
float twist = Vec3.Dot(rel * Vec3.Up, Mono.mainHand.aim.orientation * Vec3.Up);
|
||||
twist = MathF.Max(twist - 0.05f, 0);
|
||||
pos = Mono.mainHand.aim.position + Mono.mainHand.aim.orientation * Vec3.Forward * twist;
|
||||
public void Step(Vec3 mainPos, Quat mainQuat) {
|
||||
Quat rel = Quat.LookAt(Vec3.Zero, mainQuat * Vec3.Forward);
|
||||
float twist = (Vec3.Dot(rel * -Vec3.Right, mainQuat * Vec3.Up) + 1) / 2;
|
||||
pos = mainPos + mainQuat * Vec3.Forward * twist;
|
||||
|
||||
model.Draw(Matrix.TS(pos, 0.06f));
|
||||
}
|
||||
|
@ -52,21 +51,19 @@ public class TwistCursor : SpatialCursor {
|
|||
public class SupineCursor : SpatialCursor {
|
||||
float calibStr;
|
||||
Quat calibQuat;
|
||||
|
||||
public void Step() {
|
||||
// calibration
|
||||
if (Mono.mainHand.IsStickClicked) {
|
||||
Vec3 target = Input.Head.position + Input.Head.Forward;
|
||||
calibStr = Vec3.Distance(Mono.mainHand.aim.position, target) * 2;
|
||||
|
||||
Quat calibAlign = Quat.LookAt(Mono.mainHand.aim.position, target);
|
||||
calibQuat = Mono.mainHand.aim.orientation.Inverse * calibAlign;
|
||||
}
|
||||
|
||||
Quat rel = Quat.LookAt(Vec3.Zero, Mono.offHand.aim.orientation * Vec3.Forward);
|
||||
float twist = (Vec3.Dot(rel * -Vec3.Right, Mono.offHand.aim.orientation * Vec3.Up) + 1) / 2;
|
||||
public void Step(Vec3 mainPos, Quat offQuat, Quat mainQuat, bool calibrate = false) {
|
||||
Quat rel = Quat.LookAt(Vec3.Zero, offQuat * Vec3.Forward);
|
||||
float twist = (Vec3.Dot(rel * -Vec3.Right, offQuat * Vec3.Up) + 1) / 2;
|
||||
|
||||
pos = Mono.mainHand.aim.position + Mono.mainHand.aim.orientation * calibQuat * Vec3.Forward * calibStr * twist;
|
||||
pos = mainPos + mainQuat * calibQuat * Vec3.Forward * calibStr * twist;
|
||||
|
||||
if (calibrate) {
|
||||
Vec3 target = Input.Head.position + Input.Head.Forward;
|
||||
calibStr = Vec3.Distance(mainPos, target) * 2;
|
||||
|
||||
Quat calibAlign = Quat.LookAt(mainPos, target);
|
||||
calibQuat = mainQuat.Inverse * calibAlign;
|
||||
}
|
||||
|
||||
model.Draw(Matrix.TS(pos, 0.06f));
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue