123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- using Valve.VR;
- using Valve.VR.InteractionSystem;
- namespace Valve.VR.InteractionSystem.Sample
- {
- public class BuggyController : MonoBehaviour
- {
- public Transform modelJoystick;
- public float joystickRot = 20;
- public Transform modelTrigger;
- public float triggerRot = 20;
- public BuggyBuddy buggy;
- public Transform buttonBrake;
- public Transform buttonReset;
- //ui stuff
- public Canvas ui_Canvas;
- public Image ui_rpm;
- public Image ui_speed;
- public RectTransform ui_steer;
- public float ui_steerangle;
- public Vector2 ui_fillAngles;
- public Transform resetToPoint;
-
- public SteamVR_Action_Vector2 actionSteering = SteamVR_Input.GetAction<SteamVR_Action_Vector2>("buggy", "Steering");
-
- public SteamVR_Action_Single actionThrottle = SteamVR_Input.GetAction<SteamVR_Action_Single>("buggy", "Throttle");
-
- public SteamVR_Action_Boolean actionBrake = SteamVR_Input.GetAction<SteamVR_Action_Boolean>("buggy", "Brake");
-
- public SteamVR_Action_Boolean actionReset = SteamVR_Input.GetAction<SteamVR_Action_Boolean>("buggy", "Reset");
- private float usteer;
- private Interactable interactable;
- private Quaternion trigSRot;
- private Quaternion joySRot;
- private Coroutine resettingRoutine;
- private Vector3 initialScale;
- private void Start()
- {
- joySRot = modelJoystick.localRotation;
- trigSRot = modelTrigger.localRotation;
- interactable = GetComponent<Interactable>();
- StartCoroutine(DoBuzz());
- buggy.controllerReference = transform;
- initialScale = buggy.transform.localScale;
- }
- private void Update()
- {
- Vector2 steer = Vector2.zero;
- float throttle = 0;
- float brake = 0;
- bool reset = false;
- bool b_brake = false;
- bool b_reset = false;
- if (interactable.attachedToHand)
- {
- SteamVR_Input_Sources hand = interactable.attachedToHand.handType;
- steer = actionSteering.GetAxis(hand);
- throttle = actionThrottle.GetAxis(hand);
- b_brake = actionBrake.GetState(hand);
- b_reset = actionReset.GetState(hand);
- brake = b_brake ? 1 : 0;
- reset = actionReset.GetStateDown(hand);
- }
- if (reset && resettingRoutine == null)
- {
- resettingRoutine = StartCoroutine(DoReset());
- }
- if (ui_Canvas != null)
- {
- ui_Canvas.gameObject.SetActive(interactable.attachedToHand);
- usteer = Mathf.Lerp(usteer, steer.x, Time.deltaTime * 9);
- ui_steer.localEulerAngles = Vector3.forward * usteer * -ui_steerangle;
- ui_rpm.fillAmount = Mathf.Lerp(ui_rpm.fillAmount, Mathf.Lerp(ui_fillAngles.x, ui_fillAngles.y, throttle), Time.deltaTime * 4);
- float speedLim = 40;
- ui_speed.fillAmount = Mathf.Lerp(ui_fillAngles.x, ui_fillAngles.y, 1 - (Mathf.Exp(-buggy.speed / speedLim)));
- }
- modelJoystick.localRotation = joySRot;
- /*if (input.AttachedHand != null && input.AttachedHand.IsLeft)
- {
- Joystick.Rotate(steer.y * -joystickRot, steer.x * -joystickRot, 0, Space.Self);
- }
- else if (input.AttachedHand != null && input.AttachedHand.IsRight)
- {
- Joystick.Rotate(steer.y * -joystickRot, steer.x * joystickRot, 0, Space.Self);
- }
- else*/
- //{
- modelJoystick.Rotate(steer.y * -joystickRot, steer.x * -joystickRot, 0, Space.Self);
- //}
- modelTrigger.localRotation = trigSRot;
- modelTrigger.Rotate(throttle * -triggerRot, 0, 0, Space.Self);
- buttonBrake.localScale = new Vector3(1, 1, b_brake ? 0.4f : 1.0f);
- buttonReset.localScale = new Vector3(1, 1, b_reset ? 0.4f : 1.0f);
- buggy.steer = steer;
- buggy.throttle = throttle;
- buggy.handBrake = brake;
- buggy.controllerReference = transform;
- }
- private IEnumerator DoReset()
- {
- float startTime = Time.time;
- float overTime = 1f;
- float endTime = startTime + overTime;
- buggy.transform.position = resetToPoint.transform.position;
- buggy.transform.rotation = resetToPoint.transform.rotation;
- buggy.transform.localScale = initialScale * 0.1f;
- while (Time.time < endTime)
- {
- buggy.transform.localScale = Vector3.Lerp(buggy.transform.localScale, initialScale, Time.deltaTime * 5f);
- yield return null;
- }
- buggy.transform.localScale = initialScale;
- resettingRoutine = null;
- }
- private float buzztimer;
- private IEnumerator DoBuzz()
- {
- while (true)
- {
- while (buzztimer < 1)
- {
- buzztimer += Time.deltaTime * buggy.mvol * 70;
- yield return null;
- }
- buzztimer = 0;
- if (interactable.attachedToHand)
- {
- interactable.attachedToHand.TriggerHapticPulse((ushort)Mathf.RoundToInt(300 * Mathf.Lerp(1.0f, 0.6f, buggy.mvol)));
- }
- }
- }
- }
- }
|