Skip to content

Commit

Permalink
feat(Controller): disable walking per controller
Browse files Browse the repository at this point in the history
Adds a property that allows you to toggle whether or not the left or
right controller will allow walking.
  • Loading branch information
drifio committed Jun 9, 2016
1 parent f94d789 commit 52578c3
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 12 deletions.
80 changes: 68 additions & 12 deletions Assets/SteamVR_Unity_Toolkit/Scripts/VRTK_TouchpadWalking.cs
@@ -1,14 +1,46 @@
using UnityEngine;
using System.Collections;

public class VRTK_TouchpadWalking : MonoBehaviour {
public class VRTK_TouchpadWalking : MonoBehaviour
{
[SerializeField]
private bool leftController = true;
public bool LeftController
{
get { return leftController; }
set
{
leftController = value;
SetControllerListeners(controllerManager.left);
}
}

[SerializeField]
private bool rightController = true;
public bool RightController
{
get { return rightController; }
set
{
rightController = value;
SetControllerListeners(controllerManager.right);
}
}

public float maxWalkSpeed = 3f;
public float deceleration = 0.1f;

private SteamVR_ControllerManager controllerManager;
private Vector2 touchAxis;
private float movementSpeed = 0f;
private float strafeSpeed = 0f;

private bool leftSubscribed;
private bool rightSubscribed;

private ControllerClickedEventHandler touchpadAxisChanged;
private ControllerClickedEventHandler touchpadUntouched;

private VRTK_PlayerPresence playerPresence;

private void Awake()
Expand All @@ -21,14 +53,21 @@ private void Awake()
{
Debug.LogError("The VRTK_TouchpadWalking script requires the VRTK_PlayerPresence script to be attached to the [CameraRig]");
}

touchpadAxisChanged = new ControllerClickedEventHandler(DoTouchpadAxisChanged);
touchpadUntouched = new ControllerClickedEventHandler(DoTouchpadUntouched);

controllerManager = this.GetComponent<SteamVR_ControllerManager>();
}

private void Start () {
private void Start ()
{
this.name = "PlayerObject_" + this.name;

var controllerManager = GameObject.FindObjectOfType<SteamVR_ControllerManager>();
InitControllerListeners(controllerManager.left);
InitControllerListeners(controllerManager.right);

SetControllerListeners(controllerManager.left);
SetControllerListeners(controllerManager.right);
}

private void DoTouchpadAxisChanged(object sender, ControllerClickedEventArgs e)
Expand Down Expand Up @@ -91,16 +130,33 @@ private void FixedUpdate()
Move();
}

private void InitControllerListeners(GameObject controller)
private void SetControllerListeners(GameObject controller)
{
if (controller && controller == controllerManager.left)
{
ToggleControllerListeners(controller, leftController, ref leftSubscribed);
}
else if (controller && controller == controllerManager.right)
{
ToggleControllerListeners(controller, rightController, ref rightSubscribed);
}
}

private void ToggleControllerListeners(GameObject controller, bool toggle, ref bool subscribed)
{
if (controller)
var controllerEvent = controller.GetComponent<VRTK_ControllerEvents>();
if (controllerEvent && toggle && !subscribed)
{
controllerEvent.TouchpadAxisChanged += touchpadAxisChanged;
controllerEvent.TouchpadUntouched += touchpadUntouched;
subscribed = true;
}
else if (controllerEvent && !toggle && subscribed)
{
var controllerEvent = controller.GetComponent<VRTK_ControllerEvents>();
if (controllerEvent)
{
controllerEvent.TouchpadAxisChanged += new ControllerClickedEventHandler(DoTouchpadAxisChanged);
controllerEvent.TouchpadUntouched += new ControllerClickedEventHandler(DoTouchpadUntouched);
}
controllerEvent.TouchpadAxisChanged -= touchpadAxisChanged;
controllerEvent.TouchpadUntouched -= touchpadUntouched;
touchAxis = Vector2.zero;
subscribed = false;
}
}
}
6 changes: 6 additions & 0 deletions README.md
Expand Up @@ -602,6 +602,12 @@ immersion but the user is doing something that isn't natural.

The following script parameters are available:

* **Left Controller:** If this is checked then the left controller
touchpad will be enabled to move the play area. It can also be
toggled at runtime.
* **Right Controller:** If this is checked then the right controller
touchpad will be enabled to move the play area. It can also be
toggled at runtime.
* **Max Walk Speed:** The maximum speed the play area will be moved
when the touchpad is being touched at the extremes of the axis. If
a lower part of the touchpad axis is touched (nearer the centre)
Expand Down

0 comments on commit 52578c3

Please sign in to comment.