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);
+    }
+  }
+}