Mercurial > hg > Game > Games
diff Orchestland/Assets/LeapMotion/Widgets/Scripts/Button/ButtonToggleBase.cs @ 1:f7675884f2a1
Add Orchestland project
author | Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2015 23:09:20 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Orchestland/Assets/LeapMotion/Widgets/Scripts/Button/ButtonToggleBase.cs Fri Jul 17 23:09:20 2015 +0900 @@ -0,0 +1,83 @@ +using UnityEngine; +using System.Collections; + +namespace LMWidgets +{ + public abstract class ButtonToggleBase : ButtonBase, BinaryInteractionHandler<bool>, IDataBoundWidget<ButtonToggleBase, bool> { + protected DataBinderToggle m_dataBinder; + + protected bool m_toggleState = true; + + public abstract void ButtonTurnsOn(); + public abstract void ButtonTurnsOff(); + + /// <summary> + /// Gets or sets the current state of the toggle button. + /// </summary> + public bool ToggleState { + get { return m_toggleState; } + set { + if ( m_toggleState == value ) { return; } + setButtonState(value); + if ( m_dataBinder != null ) { m_dataBinder.SetCurrentData(m_toggleState); } // Update externally linked data + } + } + + protected override void Start() { + if ( m_dataBinder != null ) { + setButtonState(m_dataBinder.GetCurrentData(), true); // Initilize widget value + } + else { + setButtonState(false, true); + } + } + + public void SetWidgetValue(bool value) { + if ( State == LeapPhysicsState.Interacting ) { return; } // Don't worry about state changes during interaction. + setButtonState (value); + } + + // Stop listening to any previous data binder and start listening to the new one. + public void RegisterDataBinder(LMWidgets.DataBinder<LMWidgets.ButtonToggleBase, bool> dataBinder) { + if (dataBinder == null) { + return; + } + + UnregisterDataBinder (); + m_dataBinder = dataBinder as DataBinderToggle; + setButtonState(m_dataBinder.GetCurrentData()); + } + + // Stop listening to any previous data binder. + public void UnregisterDataBinder() { + m_dataBinder = null; + } + + private void setButtonState(bool toggleState, bool force = false) { + if ( toggleState == m_toggleState && !force ) { return; } // Don't do anything if there's no change + m_toggleState = toggleState; + if (m_toggleState == true) + ButtonTurnsOn(); + else + ButtonTurnsOff(); + } + + protected override void buttonReleased() + { + base.FireButtonEnd(m_toggleState); + if ( m_dataBinder != null ) { + setButtonState(m_dataBinder.GetCurrentData()); // Update once we're done interacting + } + } + + protected override void buttonPressed() + { + if (m_toggleState == false) + ButtonTurnsOn(); + else + ButtonTurnsOff(); + ToggleState = !ToggleState; + base.FireButtonStart(m_toggleState); + } + } +}