holopy3/Assets/SteamVR/InteractionSystem/Core/Scripts/ControllerHoverHighlight.cs
2020-12-10 15:25:12 +01:00

132 lines
No EOL
3.6 KiB
C#

//======= Copyright (c) Valve Corporation, All rights reserved. ===============
//
// Purpose: Highlights the controller when hovering over interactables
//
//=============================================================================
using UnityEngine;
using System.Collections;
namespace Valve.VR.InteractionSystem
{
//-------------------------------------------------------------------------
public class ControllerHoverHighlight : MonoBehaviour
{
public Material highLightMaterial;
public bool fireHapticsOnHightlight = true;
protected Hand hand;
protected RenderModel renderModel;
protected SteamVR_Events.Action renderModelLoadedAction;
protected void Awake()
{
hand = GetComponentInParent<Hand>();
}
protected void OnHandInitialized(int deviceIndex)
{
GameObject renderModelGameObject = GameObject.Instantiate(hand.renderModelPrefab);
renderModelGameObject.transform.parent = this.transform;
renderModelGameObject.transform.localPosition = Vector3.zero;
renderModelGameObject.transform.localRotation = Quaternion.identity;
renderModelGameObject.transform.localScale = hand.renderModelPrefab.transform.localScale;
renderModel = renderModelGameObject.GetComponent<RenderModel>();
renderModel.SetInputSource(hand.handType);
renderModel.OnHandInitialized(deviceIndex);
renderModel.SetMaterial(highLightMaterial);
hand.SetHoverRenderModel(renderModel);
renderModel.onControllerLoaded += RenderModel_onControllerLoaded;
renderModel.Hide();
}
private void RenderModel_onControllerLoaded()
{
renderModel.Hide();
}
//-------------------------------------------------
protected void OnParentHandHoverBegin(Interactable other)
{
if (!this.isActiveAndEnabled)
{
return;
}
if (other.transform.parent != transform.parent)
{
ShowHighlight();
}
}
//-------------------------------------------------
private void OnParentHandHoverEnd(Interactable other)
{
HideHighlight();
}
//-------------------------------------------------
private void OnParentHandInputFocusAcquired()
{
if (!this.isActiveAndEnabled)
{
return;
}
if (hand.hoveringInteractable && hand.hoveringInteractable.transform.parent != transform.parent)
{
ShowHighlight();
}
}
//-------------------------------------------------
private void OnParentHandInputFocusLost()
{
HideHighlight();
}
//-------------------------------------------------
public void ShowHighlight()
{
if (renderModel == null)
{
return;
}
if (fireHapticsOnHightlight)
{
hand.TriggerHapticPulse(500);
}
renderModel.Show();
}
//-------------------------------------------------
public void HideHighlight()
{
if (renderModel == null)
{
return;
}
if (fireHapticsOnHightlight)
{
hand.TriggerHapticPulse(300);
}
renderModel.Hide();
}
}
}