Example #1
0
    /// <summary>
    /// 振動の実装部
    /// </summary>
    /// <param name="index">コントローラーの番号</param>
    /// <param name="lowPow">低周波の振動の強さ</param>
    /// <param name="highPow">高周波の振動の強さ</param>
    static void VibrationImpl(int index, float lowPow, float highPow)
    {
#if UNITY_SWITCH && !(UNITY_EDITOR)
        //未接続なら何もしない
        if (!SwitchManager.GetInstance().IsConnect(index))
        {
            return;
        }
        //IDの取得
        NpadId npadId = SwitchManager.GetInstance().GetNpadId(index);
        //スタイルの取得
        NpadStyle npadStyle = Npad.GetStyleSet(npadId);
        //デバイスの数を取得(0か1のみ取得する)
        int deviceCount = Vibration.GetDeviceHandles(
            vibrationDeviceHandles, 1, npadId, npadStyle);
        //デバイスの数が1じゃない場合は何もしない
        if (deviceCount != 1)
        {
            return;
        }
        //パワーをセット
        vibrationValue.amplitudeLow  = lowPow;
        vibrationValue.amplitudeHigh = highPow;
        //デバイスの初期化
        Vibration.InitializeDevice(vibrationDeviceHandles[0]);
        //振動の値をセット
        Vibration.SendValue(vibrationDeviceHandles[0], vibrationValue);
#endif
    }
Example #2
0
    /// <summary>
    /// 振動の実装部
    /// </summary>
    /// <param name="_Index">コントローラーの番号</param>
    /// <param name="_LowPow">低周波の振動の強さ</param>
    /// <param name="_HighPow">高周波の振動の強さ</param>
    static void VibrationImpl(int _Index, float _LowPow, float _HighPow)
    {
        //未接続なら何もしない
        if (!SwitchManager.GetInstance().IsConnect(_Index))
        {
            return;
        }
        //IDの取得
        NpadId npadId = SwitchManager.GetInstance().GetNpadId(_Index);
        //スタイルの取得
        NpadStyle npadStyle = Npad.GetStyleSet(npadId);
        //デバイスの数を取得(0か1のみ取得する)
        int deviceCount = Vibration.GetDeviceHandles(
            m_VibrationDeviceHandles, 1, npadId, npadStyle);

        //デバイスの数が1じゃない場合は何もしない
        if (deviceCount != 1)
        {
            return;
        }
        //パワーをセット
        m_VibrationValue.amplitudeLow  = _LowPow;
        m_VibrationValue.amplitudeHigh = _HighPow;
        //デバイスの初期化
        Vibration.InitializeDevice(m_VibrationDeviceHandles[0]);
        //振動の値をセット
        Vibration.SendValue(m_VibrationDeviceHandles[0], m_VibrationValue);
    }
 /// <summary>
 /// 加速度の取得
 /// </summary>
 static public Vector3 GetAcceleration(int index)
 {
     //未接続
     if (!SwitchManager.GetInstance().IsConnect(index))
     {
         return(Vector3.zero);
     }
     return(Acceleration[index]);
 }
Example #4
0
 /// <summary>
 /// 今のフレームにボタンを押しているか
 /// </summary>
 /// <param name="index">コントローラーの番号</param>
 /// <param name="button">取得するボタン</param>
 /// <returns>押しているならtrueを返す</returns>
 static public bool GetButton(int index, SwitchButton button)
 {
     //未接続ならfalse
     if (!SwitchManager.GetInstance().IsConnect(index))
     {
         return(false);
     }
     return(IsCurrentButton(index, (long)button));
 }
Example #5
0
 /// <summary>
 /// 右スティックの入力を取得
 /// </summary>
 /// <param name="index">コントローラーの番号</param>
 /// <returns>右スティックの入力</returns>
 static public Vector2 GetStick(int index)
 {
     //未接続ならVector2.zero;
     if (!SwitchManager.GetInstance().IsConnect(index))
     {
         return(Vector2.zero);
     }
     return(stickInfos[index]);
 }
Example #6
0
 /// <summary>
 /// 今のフレームにボタンを離したか
 /// </summary>
 /// <param name="_Index">コントローラーの番号</param>
 /// <param name="_Button">取得するボタン</param>
 /// <returns>離したならtrueを返す</returns>
 static public bool GetButtonUp(int _Index, SwitchButton _Button)
 {
     //未接続ならfalse
     if (!SwitchManager.GetInstance().IsConnect(_Index))
     {
         return(false);
     }
     return(IsPrevButton(_Index, _Button) && !IsCurrentButton(_Index, _Button));
 }
Example #7
0
    /// <summary>
    /// スティックの垂直を取得
    /// </summary>
    /// <param name="index">コントローラーの番号</param>
    /// <returns>スティックの垂直</returns>
    static public float GetVertical(int index)
    {
        //未接続なら0.0f
        if (!SwitchManager.GetInstance().IsConnect(index))
        {
            return(0.0f);
        }
#if UNITY_SWITCH && !(UNITY_EDITOR)
        return(stickInfos[index].vertical);
#else
        return(ConvertSwitchVerticalToXboxVertical(index));
#endif
    }
Example #8
0
    /// <summary>
    /// スティックの垂直を取得
    /// </summary>
    /// <param name="_Index">コントローラーの番号</param>
    /// <returns>スティックの垂直</returns>
    static public float GetVertical(int _Index)
    {
        //未接続なら0.0f
        if (!SwitchManager.GetInstance().IsConnect(_Index))
        {
            return(0.0f);
        }
#if UNITY_EDITOR
        return(ConvertSwitchVerticalToXboxVertical(_Index));
#else
        return(m_StickInfos[_Index].m_Vertical);
#endif
    }
Example #9
0
    /// <summary>
    /// ジャイロの取得
    /// </summary>
    /// <param name="index">コントローラーの番号</param>
    /// <returns>ジャイロの回転</returns>
    static public Quaternion GetGyro(int index)
    {
        //未接続ならQuaternion.identity
        if (!SwitchManager.GetInstance().IsConnect(index))
        {
            return(Quaternion.identity);
        }
        //キーがない場合は追加しておく
        if (!baseGyro.ContainsKey(index))
        {
            baseGyro.Add(index, Quaternion.identity);
        }
#if UNITY_SWITCH && !(UNITY_EDITOR)
        return(baseGyro[index] * GetGyroImpl(index));
#else
        return(GetGyroImpl(index));
#endif
    }
    /// <summary>
    /// 加速度の更新
    /// </summary>
    static public void AccelerationUpdate(int index, NpadId npadId)
    {
        //未接続
        if (!SwitchManager.GetInstance().IsConnect(index))
        {
            return;
        }

        //スタイルの取得
        npadStyle = Npad.GetStyleSet(npadId);
        SixAxisSensor.GetHandles(handles, 1, npadId, npadStyle);
        //ジャイロスタート
        SixAxisSensor.Start(handles[0]);
        SixAxisSensor.GetState(ref sixAxisSensorState, handles[0]);
        var switchAcceleration = sixAxisSensorState.acceleration;

        Acceleration[index].Set(switchAcceleration.x, switchAcceleration.y, switchAcceleration.z);
    }
Example #11
0
    /// <summary>
    /// ボタンを今のフレームに押したか
    /// </summary>
    /// <param name="index">コントローラーの番号</param>
    /// <param name="button">取得するボタン</param>
    /// <returns>押したならtrueを返す</returns>
    static public bool GetButtonDown(int index, SwitchButton button)
    {
#if AUTO_EXECUTE_DEBUG
        if (index == 0 && button == SwitchButton.Ok)
        {
            return(true);
        }
        if (index == 0 && button == SwitchButton.StickRight)
        {
            return(true);
        }
#endif
        //未接続ならfalse
        if (!SwitchManager.GetInstance().IsConnect(index))
        {
            return(false);
        }
        return(!IsPrevButton(index, button) && IsCurrentButton(index, button));
    }
Example #12
0
    /// <summary>
    /// スティックの水平を取得
    /// </summary>
    /// <param name="index">コントローラーの番号</param>
    /// <returns>スティックの垂直</returns>
    static public float GetHorizontal(int index)
    {
#if AUTO_EXECUTE_DEBUG
        if (index == 0)
        {
            return(-1.0f);
        }
#endif
        //未接続なら0.0f
        if (!SwitchManager.GetInstance().IsConnect(index))
        {
            return(0.0f);
        }
#if UNITY_SWITCH && !(UNITY_EDITOR)
        return(stickInfos[index].horizontal);
#else
        return(ConvertSwitchHorizontalToXboxHorizontal(index));
#endif
    }
Example #13
0
    /// <summary>
    /// 入力の更新
    /// </summary>
    /// <param name="_Index">コントローラーの番号</param>
    /// <param name="_NpadId">パッドのID</param>
    static public void InputUpdate(int _Index, NpadId _NpadId)
    {
#if UNITY_EDITOR
        for (int i = 0; i < (int)XboxInput.None; ++i)
        {
            m_XboxPrevButtons[_Index, i]    = m_XboxCurrentButtons[_Index, i];
            m_XboxCurrentButtons[_Index, i] = InputXboxButton(_Index, (XboxInput)i);
        }
#endif
        m_PrevButtons[_Index] = m_CurrentButtons[_Index];
        //未接続
        if (!SwitchManager.GetInstance().IsConnect(_Index))
        {
            return;
        }
        //スタイルを取得
        NpadStyle npadStyle = Npad.GetStyleSet(_NpadId);
        //スタイルが合うかどうか
        if ((npadStyle & SwitchManager.GetInstance().GetNpadStyle()) == 0)
        {
            return;
        }
        //入力情報を取得
        Npad.GetState(ref m_NpadState, _NpadId, npadStyle);
        m_CurrentButtons[_Index] = (long)m_NpadState.buttons;
        //スティックの更新
        if (npadStyle == NpadStyle.JoyRight)
        {
            m_StickInfos[_Index].m_Horizontal = m_NpadState.analogStickR.fy;
            m_StickInfos[_Index].m_Vertical   = -m_NpadState.analogStickR.fx;
        }
        else if (npadStyle == NpadStyle.JoyLeft)
        {
            m_StickInfos[_Index].m_Horizontal = -m_NpadState.analogStickL.fy;
            m_StickInfos[_Index].m_Vertical   = m_NpadState.analogStickL.fx;
        }
        else
        {
            Debug.LogError("JoyRight,JoyLeft以外のStyleを取得");
        }
    }
Example #14
0
    /// <summary>
    /// ジャイロの取得
    /// </summary>
    /// <param name="_Index">コントローラーの番号</param>
    /// <returns>ジャイロの回転(使用するx軸のみ)</returns>
    static public float GetGyroX(int _Index)
    {
        //未接続なら0.0f
        if (!SwitchManager.GetInstance().IsConnect(_Index))
        {
            return(0.0f);
        }
        //キーがない場合は追加しておく
        if (!m_BaseGyro.ContainsKey(_Index))
        {
            m_BaseGyro.Add(_Index, 0.0f);
        }
        //IDの取得
        NpadId npadId = SwitchManager.GetInstance().GetNpadId(_Index);
        //スタイルの取得
        NpadStyle npadStyle = Npad.GetStyleSet(npadId);
        //ハンドラを取得
        int handleCount = SixAxisSensor.GetHandles(m_GyroHandles, 1, npadId, npadStyle);

        //ハンドラの数が1じゃない場合は0.0f
        if (handleCount != 1)
        {
            return(0.0f);
        }
        //ジャイロスタート
        SixAxisSensor.Start(m_GyroHandles[0]);
        //状態の取得
        SixAxisSensor.GetState(ref m_GyroState, m_GyroHandles[0]);
        //右か左で返す値を変換する
        if (npadStyle == NpadStyle.JoyRight)
        {
            return(m_GyroState.angle.x % 1 * 360 - 90 - m_BaseGyro[_Index]);
        }
        else
        {
            return(m_GyroState.angle.x % 1 * -360 + 90 - m_BaseGyro[_Index]);
        }
    }
Example #15
0
    /// <summary>
    /// ジャイロの取得の実装部
    /// </summary>
    /// <param name="index">コントローラーの番号</param>
    /// <returns>ジャイロの回転</returns>
    static Quaternion GetGyroImpl(int index)
    {
#if UNITY_SWITCH && !(UNITY_EDITOR)
        //IDの取得
        NpadId npadId = SwitchManager.GetInstance().GetNpadId(index);
        //スタイルの取得
        NpadStyle npadStyle = Npad.GetStyleSet(npadId);
        //ハンドラを取得
        int handleCount = SixAxisSensor.GetHandles(gyroHandles, 1, npadId, npadStyle);
        //ハンドラの数が1じゃない場合はQuaternion.identity
        if (handleCount != 1)
        {
            return(Quaternion.identity);
        }
        //ジャイロスタート
        SixAxisSensor.Start(gyroHandles[0]);
        //状態の取得
        SixAxisSensor.GetState(ref gyroState, gyroHandles[0]);
        gyroState.GetQuaternion(ref refQuaternion);
        quat.Set(refQuaternion.x, refQuaternion.z, refQuaternion.y, -refQuaternion.w);
#endif
        return(quat);
    }
Example #16
0
    /// <summary>
    /// 入力の更新
    /// </summary>
    /// <param name="index">コントローラーの番号</param>
    /// <param name="npadId">パッドのID</param>
    static public void InputUpdate(int index, NpadId npadId)
    {
        prevButtons[index] = currentButtons[index];
        //未接続
        if (!SwitchManager.GetInstance().IsConnect(index))
        {
            return;
        }

        //スタイルを取得
        NpadStyle npadStyle = Npad.GetStyleSet(npadId);

        //スタイルが合うかどうか
        if ((npadStyle & SwitchManager.GetInstance().GetNpadStyle()) == 0)
        {
            return;
        }
        //入力情報を取得
        Npad.GetState(ref npadState, npadId, npadStyle);
        npadState.buttons &= ~(NpadButton.StickLUp | NpadButton.StickRUp |
                               NpadButton.StickLDown | NpadButton.StickRDown |
                               NpadButton.StickLRight | NpadButton.StickRRight |
                               NpadButton.StickLLeft | NpadButton.StickRLeft);

        if (npadStyle == NpadStyle.JoyLeft)
        {
            //デッドゾーンを超えているかどうか
            if (Mathf.Abs(npadState.analogStickL.fx) > DeadZone)
            {
                stickInfos[index].y = npadState.analogStickL.fx;
                npadState.buttons  |= (npadState.analogStickL.fx > 0) ? NpadButton.StickLUp : NpadButton.StickLDown;
            }
            else
            {
                stickInfos[index].y = 0.0f;
            }
            //デッドゾーンを超えているかどうか
            if (Mathf.Abs(npadState.analogStickL.fy) > DeadZone)
            {
                stickInfos[index].x = -npadState.analogStickL.fy;
                npadState.buttons  |= (npadState.analogStickL.fy > 0) ? NpadButton.StickLLeft : NpadButton.StickLRight;
            }
            else
            {
                stickInfos[index].x = 0.0f;
            }
        }
        else
        {
            //デッドゾーンを超えているかどうか
            if (Mathf.Abs(npadState.analogStickR.fx) > DeadZone)
            {
                stickInfos[index].y = -npadState.analogStickR.fx;
                npadState.buttons  |= (npadState.analogStickR.fx > 0) ? NpadButton.StickRDown : NpadButton.StickRUp;
            }
            else
            {
                stickInfos[index].y = 0.0f;
            }
            //デッドゾーンを超えているかどうか
            if (Mathf.Abs(npadState.analogStickR.fy) > DeadZone)
            {
                stickInfos[index].x = npadState.analogStickR.fy;
                npadState.buttons  |= (npadState.analogStickR.fy > 0) ? NpadButton.StickRRight : NpadButton.StickRLeft;
            }
            else
            {
                stickInfos[index].x = 0.0f;
            }
        }

        currentButtons[index] = (long)npadState.buttons;
    }
Example #17
0
    /// <summary>
    /// 入力の更新
    /// </summary>
    /// <param name="index">コントローラーの番号</param>
    /// <param name="npadId">パッドのID</param>
    static public void InputUpdate(int index
#if UNITY_SWITCH && !(UNITY_EDITOR)
                                   , NpadId npadId
#endif
                                   )
    {
#if UNITY_EDITOR || !(UNITY_SWITCH)
        for (int i = 0; i < (int)XboxInput.None; ++i)
        {
            xboxPrevButtons[index, i]    = xboxCurrentButtons[index, i];
            xboxCurrentButtons[index, i] = InputXboxButton(index, (XboxInput)i);
        }
#endif
        prevButtons[index] = currentButtons[index];
        //未接続
        if (!SwitchManager.GetInstance().IsConnect(index))
        {
            return;
        }

#if UNITY_SWITCH && !(UNITY_EDITOR)
        //スタイルを取得
        NpadStyle npadStyle = Npad.GetStyleSet(npadId);
        //スタイルが合うかどうか
        if ((npadStyle & SwitchManager.GetInstance().GetNpadStyle()) == 0)
        {
            return;
        }
        //入力情報を取得
        Npad.GetState(ref npadState, npadId, npadStyle);
        npadState.buttons &= ~(NpadButton.StickLUp | NpadButton.StickRUp |
                               NpadButton.StickLDown | NpadButton.StickRDown |
                               NpadButton.StickLRight | NpadButton.StickRRight |
                               NpadButton.StickLLeft | NpadButton.StickRLeft);
        //スティックの更新
        //右のジョイスティック
        if (npadStyle == NpadStyle.JoyRight)
        {
            //デッドゾーンを超えているかどうか
            if (Mathf.Abs(npadState.analogStickR.fx) > DeadZone)
            {
                stickInfos[index].horizontal = npadState.analogStickR.fx;
                npadState.buttons           |= (npadState.analogStickR.fx > 0) ? NpadButton.StickLRight : NpadButton.StickLLeft;
            }
            else
            {
                stickInfos[index].horizontal = 0.0f;
            }
            //デッドゾーンを超えているかどうか
            if (Mathf.Abs(npadState.analogStickR.fy) > DeadZone)
            {
                stickInfos[index].vertical = npadState.analogStickR.fy;
                npadState.buttons         |= (npadState.analogStickR.fy > 0) ? NpadButton.StickLUp : NpadButton.StickLDown;
            }
            else
            {
                stickInfos[index].vertical = 0.0f;
            }
        }
        //左のジョイスティック
        else
        {
            //デッドゾーンを超えているかどうか
            if (Mathf.Abs(npadState.analogStickL.fx) > DeadZone)
            {
                stickInfos[index].horizontal = npadState.analogStickL.fx;
                npadState.buttons           |= (npadState.analogStickL.fx > 0) ? NpadButton.StickLRight : NpadButton.StickLLeft;
            }
            else
            {
                stickInfos[index].horizontal = 0.0f;
            }
            //デッドゾーンを超えているかどうか
            if (Mathf.Abs(npadState.analogStickL.fy) > DeadZone)
            {
                stickInfos[index].vertical = npadState.analogStickL.fy;
                npadState.buttons         |= (npadState.analogStickL.fy > 0) ? NpadButton.StickLUp : NpadButton.StickLDown;
            }
            else
            {
                stickInfos[index].vertical = 0.0f;
            }
        }
        currentButtons[index] = (long)npadState.buttons;
#endif
    }