5dof joysticks and Digging Mechanic

This commit is contained in:
spatialfree 2020-09-21 08:06:46 -07:00
parent 57c47c815f
commit 642a863f1a
2 changed files with 68 additions and 12 deletions

View file

@ -61,10 +61,12 @@ public class Monolith : MonoBehaviour
simulate.Step(this); simulate.Step(this);
} }
InputDevice headset; InputDevice headset, offCon, mainCon;
void Start() void Start()
{ {
headset = InputDevices.GetDeviceAtXRNode(XRNode.Head); headset = InputDevices.GetDeviceAtXRNode(XRNode.Head);
offCon = InputDevices.GetDeviceAtXRNode(XRNode.LeftHand);
mainCon = InputDevices.GetDeviceAtXRNode(XRNode.RightHand);
testPos = piece.pos + Vector3.forward * 0.4f; testPos = piece.pos + Vector3.forward * 0.4f;
testVel = Vector3.down; testVel = Vector3.down;
@ -90,7 +92,7 @@ public class Monolith : MonoBehaviour
} }
Vector3 testPos; Vector3 testPos;
Vector3Int voxelPos(Vector3 pos) Vector3Int VoxelPos(Vector3 pos)
{ {
return new Vector3Int(Mathf.RoundToInt(pos.x), Mathf.RoundToInt(pos.y), Mathf.RoundToInt(pos.z)); return new Vector3Int(Mathf.RoundToInt(pos.x), Mathf.RoundToInt(pos.y), Mathf.RoundToInt(pos.z));
} }
@ -106,7 +108,7 @@ public class Monolith : MonoBehaviour
{ {
Vector3 d = (Vector3)allDirs[i] * 0.2f; Vector3 d = (Vector3)allDirs[i] * 0.2f;
d[axis] = 0; d[axis] = 0;
Vector3 vPos = Voxelcast(voxelPos(pos + d), step); Vector3 vPos = Voxelcast(VoxelPos(pos + d), step);
float dist = Mathf.Abs(vPos[axis] - pos[axis]); float dist = Mathf.Abs(vPos[axis] - pos[axis]);
if (dist < closest) if (dist < closest)
{ {
@ -141,6 +143,8 @@ public class Monolith : MonoBehaviour
float delay; float delay;
[ReadOnly] [ReadOnly]
public bool movePiece; public bool movePiece;
[ReadOnly]
public Vector3 voxelCenter;
void Update() void Update()
{ {
Vector3 mousePos = Input.mousePosition; Vector3 mousePos = Input.mousePosition;
@ -153,20 +157,64 @@ public class Monolith : MonoBehaviour
{ {
camForm.rotation = headsetRot; camForm.rotation = headsetRot;
} }
camForm.position = camForm.rotation * Vector3.back * 10; camForm.position = voxelCenter + (camForm.rotation * Vector3.back * 10);
// cursor
Quaternion mainRot = Quaternion.identity;
mainCon.TryGetFeatureValue(CommonUsages.deviceRotation, out mainRot);
InputDevice mainCon = InputDevices.GetDeviceAtXRNode(XRNode.RightHand); Vector2 mainStick = Vector2.zero;
Vector2 wasd = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")); mainCon.TryGetFeatureValue(CommonUsages.primary2DAxis, out mainStick);
Vector2 joystick = Vector2.zero; Vector3 mainDir = new Vector3(mainStick.x, 0, mainStick.y);
mainCon.TryGetFeatureValue(CommonUsages.primary2DAxis, out joystick); if (mainDir.sqrMagnitude > 0)
{
mainRot *= Quaternion.LookRotation(mainDir);
}
Vector2 input = wasd + joystick; Vector3 mainCursor = testPos + (mainRot * Vector3.forward);
Vector3Int cvPos = VoxelPos(mainCursor);
testVel.x += input.x * 6 * Time.deltaTime; bool mainTrigger = false;
testVel.z += input.y * 6 * Time.deltaTime; mainCon.TryGetFeatureValue(CommonUsages.triggerButton, out mainTrigger);
if (mainTrigger)
{
if (!InVoxel(cvPos))
{
voxels[vIndex].pos = cvPos;
vIndex++;
if (vIndex == voxels.Length) { vIndex = 0; }
if (input.sqrMagnitude == 0) simulate.Step(this);
}
}
Graphics.DrawMesh(render.meshPieceDebug,
mainCursor, Quaternion.identity,
render.matPieceDebug, 0
);
if (!InVoxel(cvPos))
Graphics.DrawMesh(render.meshPieceDebug,
cvPos, Quaternion.identity,
render.matPieceDebug, 0
);
// Movement
Quaternion offRot = Quaternion.identity;
offCon.TryGetFeatureValue(CommonUsages.deviceRotation, out offRot);
Vector2 offStick = Vector2.zero;
offCon.TryGetFeatureValue(CommonUsages.primary2DAxis, out offStick);
offStick += new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
Vector3 offDir = new Vector3(offStick.x, 0, offStick.y);
if (offDir.sqrMagnitude > 0)
{
offRot *= Quaternion.LookRotation(offDir);
}
testVel += offRot * Vector3.forward * offStick.magnitude * 6 * Time.deltaTime;
if (offStick.sqrMagnitude == 0)
{ {
testVel.x *= 1 - (60 * Time.deltaTime); testVel.x *= 1 - (60 * Time.deltaTime);
testVel.z *= 1 - (60 * Time.deltaTime); testVel.z *= 1 - (60 * Time.deltaTime);

View file

@ -9,6 +9,14 @@ public class Simulate
public void Step(Monolith mono) public void Step(Monolith mono)
{ {
generate.Step(mono); generate.Step(mono);
Vector3 center = Vector3.zero;
for (int i = 0; i < mono.voxels.Length; i++)
{
center += mono.voxels[i].pos;
}
mono.voxelCenter = center / mono.voxels.Length;
} }
} }