Mercurial > hg > Game > Games
view 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 source
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); } } }