namespace VRTK.Prefabs.Interactions.Haptics { using UnityEngine; using Malimbe.XmlDocumentationAttribute; using Malimbe.PropertySerializationAttribute; using Zinnia.Rule; using Zinnia.Haptics; using Zinnia.Extension; using Zinnia.Event.Proxy; using Zinnia.Data.Attribute; public class InteractorHapticsConfigurator : MonoBehaviour { #region Facade Settings /// /// The public interface facade. /// [Serialized] [field: Header("Facade Settings"), DocumentedByXml, Restricted] public InteractorHapticsFacade Facade { get; protected set; } #endregion #region Reference Settings /// /// The to determine which controller to rumble. /// [Serialized] [field: Header("Reference Settings"), DocumentedByXml, Restricted] public RulesMatcher RulesToMatch { get; protected set; } /// /// The that rumbles the left controller. /// [Serialized] [field: DocumentedByXml, Restricted] public XRNodeHapticPulser LeftHapicPuliser { get; protected set; } /// /// The that rumbles the right controller. /// [Serialized] [field: DocumentedByXml, Restricted] public XRNodeHapticPulser RightHapicPuliser { get; protected set; } /// /// The that initiates the haptics process. /// [Serialized] [field: DocumentedByXml, Restricted] public EmptyEventProxyEmitter BeginHaptics { get; protected set; } /// /// The that cancels the haptics process. /// [Serialized] [field: DocumentedByXml, Restricted] public EmptyEventProxyEmitter CancelHaptics { get; protected set; } #endregion protected virtual void OnEnable() { LeftHapicPuliser.RunWhenActiveAndEnabled(() => LeftHapicPuliser.Intensity = Facade.Intensity); RightHapicPuliser.RunWhenActiveAndEnabled(() => RightHapicPuliser.Intensity = Facade.Intensity); RulesToMatch.gameObject.SetActive(Facade.OnlyRumbleActiveInteractor); } } }