Skip to content

Instantly share code, notes, and snippets.

@rocky1138
Created May 14, 2017 03:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rocky1138/a4f7e979b69e370bfd76bd66e7ccfdee to your computer and use it in GitHub Desktop.
Save rocky1138/a4f7e979b69e370bfd76bd66e7ccfdee to your computer and use it in GitHub Desktop.
The easy-peasy method of creating a light-switch type button using VRTK
/**
* Copyright 2017 John Rockefeller.
*
* License: "Simplified" BSD, two clause.
*
* Redistribution and use in source and binary forms, with
* or without modification, are permitted provided that the
* following conditions are met:
*
* 1. Redistributions of source code must retain the above
* copyright notice, this list of conditions and the
* following disclaimer.
*
* 2. Redistributions in binary form must reproduce the
* above copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
* THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RadioOnOffSwitch : MonoBehaviour
{
public Radio radio;
public VRTK.VRTK_InteractableObject vrtkInteractableObject;
public bool isRadioOn = true;
public int rotationOn = -10;
public int rotationOff = 10;
private float lastTimePowerSwitchFlippedInSeconds = 0.0f;
private float cooldownInSeconds = 0.4f;
private void Start ()
{
if (radio == null) {
Debug.Log (GameLogic.instance.LogPrefix () + "Radio is not set.");
}
if (vrtkInteractableObject == null) {
Debug.Log (GameLogic.instance.LogPrefix () + "VRTK Interactable Object not set.");
} else {
vrtkInteractableObject.InteractableObjectTouched += PressSwitch;
}
if (isRadioOn) {
radio.RadioTurnOn ();
}
}
public void PressSwitch (object obj, VRTK.InteractableObjectEventArgs args)
{
if (Time.time - lastTimePowerSwitchFlippedInSeconds > cooldownInSeconds) {
lastTimePowerSwitchFlippedInSeconds = Time.time;
} else {
return;
}
if (isRadioOn) {
transform.localRotation = Quaternion.Euler (0.0f, 0.0f, rotationOff);
isRadioOn = false;
radio.RadioTurnOff ();
} else {
transform.localRotation = Quaternion.Euler (0.0f, 0.0f, rotationOn);
isRadioOn = true;
radio.RadioTurnOn ();
}
Debug.Log (GameLogic.instance.LogPrefix () + "Switched radio on/off.");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment