예제 #1
0
        private void AutoModeValueChanged(object Sender)
        {
            int v = m_automode.Value;

            if (v < 0)
            {
                v = 0;
            }

            if (v > 9)
            {
                v = 0;
            }

            double automodev = m_autovalues[v];
            double servov    = m_servo.Value / 90.0;

            if (m_state != null)
            {
                DSJoystick joy = new DSJoystick();
                for (int i = 0; i < 10; i++)
                {
                    if (i == 6)
                    {
                        joy.SetAxis(i, m_autovalues[v]);
                    }
                    else if (i == 0)
                    {
                        Debug.WriteLine("servo " + servov.ToString());
                        joy.SetAxis(i, servov);
                    }
                }
                m_state.SetJoystick(2, joy);
            }
        }
예제 #2
0
        private DSJoystick ReadJoystick(Joystick j)
        {
            DSJoystick ds = new DSJoystick();

            j.Poll();

            JoystickState st = j.GetCurrentState();

            // Process buttons
            for (int i = 0; i < st.Buttons.Length; i++)
            {
                ds.SetButtons(i + 1, st.Buttons[i]);
            }

            // Process axis
            ds.SetAxis(0, (st.X / 32768.0) - 1.0);
            ds.SetAxis(1, (st.Y / 32768.0) - 1.0);
            ds.SetAxis(4, (st.RotationX / 32768.0) - 1.0);
            ds.SetAxis(5, (st.RotationY / 32768.0) - 1.0);

            if (st.Z < 256)
            {
                // Right trigger
                ds.SetAxis(3, 1.0);
                ds.SetAxis(2, 0.0);
            }
            else if (st.Z > 65000)
            {
                // Left trigger
                ds.SetAxis(3, 0.0);
                ds.SetAxis(2, 1.0);
            }
            else
            {
                // No (or both) triggers
                ds.SetAxis(3, 0.0);
                ds.SetAxis(2, 0.0);
            }

            // Process POVs
            int[] povs = st.PointOfViewControllers;
            for (int i = 0; i < povs.Length; i++)
            {
                if (povs[i] == -1)
                {
                    ds.SetPOV(i, 0xffff);
                }
                else
                {
                    ushort deg = (ushort)(povs[i] / 100);
                    ds.SetPOV(i, deg);
                }
            }

            return(ds);
        }
예제 #3
0
 private void MonitorJoysticks()
 {
     while (m_monitor)
     {
         for (int i = 0; i < m_joysticks.Count; i++)
         {
             DSJoystick dsj = ReadJoystick(m_joysticks[i]);
             m_state.SetJoystick(i, dsj);
         }
         Thread.Sleep(1);
     }
 }
예제 #4
0
 public void SetJoystick(int which, DSJoystick ds)
 {
     m_joysticks[which] = ds;
     m_joysticks_dirty  = true;
     OnStateChanged(true);
 }