MGL::Input::Gamepad
Contents
MGL::Input::Gamepad#
概要#
MGL::Input::Gamepadはゲームパッドの入力を取得するためのクラスです。
宣言#
namespace MGL::Input
{
class Gamepad;
}
メンバ情報#
種類 |
名前 |
内容 |
---|---|---|
関数 |
||
関数 |
取得したゲームパッドが有効かを取得 |
|
関数 |
bool型にキャストした際に有効状態を取得 |
|
関数 |
有効状態を否定演算子で取得 |
|
関数 |
ゲームパッドの種類を取得 |
|
関数 |
ゲームパッドの名前を取得 |
|
関数 |
ゲームパッドのエントリー |
|
関数 |
ゲームパッドのエントリー解除 |
|
関数 |
ゲームパッドからエントリー番号を取得 |
|
関数 |
ゲームパッドのエントリー番号を数値で取得 |
|
関数 |
ゲームパッドがエントリーされているかを取得 |
|
関数 |
ボタンの押下状態を取得 |
|
関数 |
指定されたいずれかのボタンが押されているかを取得 |
|
関数 |
ボタンが押された瞬間を取得 |
|
関数 |
ボタンが離された瞬間を取得 |
|
関数 |
ボタンのリピート入力を取得 |
|
関数 |
左スティックの状態を取得 |
|
関数 |
右スティックの状態を取得 |
コンストラクタ#
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
Gamepad(PadEntry entry = PadEntry::Auto) noexcept;
};
}
引数#
- MGL::Input::PadEntry entry
取得するゲームパッドのエントリー番号。省略時は
Auto
説明#
引数で指定したエントリー番号に対応したゲームパッドを取得して初期化します。取得に失敗した場合は無効なオブジェクトとなり、IsEnabledがfalse
を返します。
引数に指定できるエントリー番号と特殊な指定は次の通りです。
- Player1〜Player8
対応したエントリー番号のゲームパッドで初期化します。指定された番号でエントリーされていない場合は無効なオブジェクトとなります。
- NoEntry
エントリーされていないゲームパッドのうち、入力のあるいずれかのゲームパッドで初期化します。条件に合うゲームパッドが存在しない場合は無効なオブジェクトとなります。
- Any
エントリー状態に関わらず、入力のあるいずれかのゲームパッドで初期化します。条件に合うゲームパッドが存在しない場合は無効なオブジェクトとなります。
- Auto
エントリーされているゲームパッドのうち、割り振られた番号が最も小さいゲームパッドで初期化します。エントリーされているゲームパッドが存在しない場合は
NoEntry
として扱われます。
引数を省略した場合はAuto
が指定されます。
ゲームパッドのエントリーについてはゲームパッドのエントリーを参照してください。
利用例#
// プレイヤー1のゲームパッドを取得
MGL::Input::Gamepad gamepad(MGL::Input::PadEntry::Player1);
if (!gamepad)
{
// プレイヤー1がエントリーされていない場合はここに到達
}
関連#
IsEnabled#
取得したゲームパッドが有効かを取得
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
[[nodiscard]] constexpr bool IsEnabled() const noexcept;
};
}
戻り値#
- bool
ゲームパッドが有効であれば
true
、無効であればfalse
説明#
ゲームパッドが有効であるかを取得します。コンストラクタで有効なゲームパッドが取得できなかった場合、この関数がfalse
を返します。
この関数はoperator bool()またはoperator!()で代替可能です。
利用例#
// プレイヤー1のゲームパッドを取得
MGL::Input::Gamepad gamepad(MGL::Input::PadEntry::Player1);
if (!gamepad.IsEnabled())
{
// プレイヤー1がエントリーされていない場合はここに到達
}
関連#
operator bool()#
bool型にキャストした際に有効状態を取得
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
explicit constexpr operator bool() const noexcept;
};
}
戻り値#
- bool
ゲームパッドが有効であれば
true
、無効であればfalse
説明#
ゲームパッドが有効であるかを取得します。コンストラクタで有効なゲームパッドが取得できなかった場合、この関数がfalse
を返します。
この関数の戻り値はIsEnabledと等価です。
利用例#
// プレイヤー1のゲームパッドを取得
MGL::Input::Gamepad gamepad(MGL::Input::PadEntry::Player1);
if (gamepad)
{
// プレイヤー1がエントリーされていればここに到達する
}
関連#
operator!()#
有効状態を否定演算子で取得
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
constexpr bool operator!() const noexcept;
};
}
戻り値#
- bool
ゲームパッドが無効であれば
true
、有効であればfalse
説明#
ゲームパッドが有効であるかを否定演算子で判別します。コンストラクタで有効なゲームパッドが取得できなかった場合、この関数がtrue
を返します。
この関数の戻り値はIsEnabledおよびoperator bool()の逆の結果を返します。
利用例#
// プレイヤー1のゲームパッドを取得
MGL::Input::Gamepad gamepad(MGL::Input::PadEntry::Player1);
if (!gamepad)
{
// プレイヤー1がエントリーされていない場合はここに到達
}
GetType#
ゲームパッドの種類を取得
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
[[nodiscard]] constexpr PadType GetType() const noexcept;
};
}
戻り値#
- MGL::Input::PadType
このゲームパッドの種類を表す値
説明#
ゲームパッドの種類を取得します。
この関数の戻り値は、同じ製品のゲームパッドでも実行環境によって異なる場合があります。詳細はゲームパッドの認識タイプを参照してください。
無効なオブジェクトに対してこの関数を呼び出した場合、戻り値はPadType::Disable
になります。
利用例#
// 入力のあるいずれかのゲームパッドを取得
MGL::Input::Gamepad gamepad(MGL::Input::PadEntry::Any);
// 取得できたゲームパッドが DualShock4 かをチェック
if (gamepad)
{
if (gamepad.GetType() == MGL::Input::PadType::DualShock4)
{
MGL_TRACE("DualShock4のボタンが押された");
}
}
関連#
GetName#
ゲームパッドの名前を取得
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
[[nodiscard]] const char *GetName() const noexcept;
};
}
戻り値#
- const char *
ゲームパッドの名前
説明#
ゲームパッドの名前を取得します。
この関数が返す名前は、同じ製品でも環境や認識方法によって異なる場合があります。例として、標準構成においてGetTypeの結果がGenericHID
やDirectInput
の場合はデバイスが持つプロダクト名を返しますが、XInput
の場合は製品に関わらず"Generic XInput Gamepad"
で統一されます。
無効なゲームパッドに対してこの関数を呼び出した場合、戻り値は空の文字列になります。
利用例#
// ボタン01が押されたゲームパッドの名前を表示
MGL::Input::Gamepad gamepad(MGL::Input::PadEntry::Any);
if (gamepad.IsTriggered(MGL::Input::PadButton::Button01))
{
MGL_TRACE(gamepad.GetName());
}
Entry#
ゲームパッドのエントリー
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
PadEntry Entry(PadEntry entry = PadEntry::Auto) noexcept;
};
}
引数#
- MGL::Input::PadEntry entry
エントリーする番号。省略時は
Auto
戻り値#
- MGL::Input::PadEntry
エントリーした番号。失敗時は
NoEntry
説明#
ゲームパッドのエントリー処理を行います。
引数を省略またはAuto
を指定した場合、未使用のエントリー番号を検索して割り当てます。Player1
〜Player8
のエントリー番号を直接指定した場合、その番号を割り当てます。
指定したエントリー番号が既に他のゲームパッドに割り当てられている場合、そのゲームパッドのエントリーは解除されます。また、既にエントリー済みのゲームパッドに対してこの関数を呼び出した場合、現在のエントリーを一旦解除して新たなエントリー番号を割り当てます。
無効なゲームパッドをエントリーした場合は失敗となり、NoEntry
が返ります。
利用例#
// エントリーされていないゲームパッドのうち、入力のあるものを取得
MGL::Input::Gamepad gamepad(MGL::Input::PadEntry::NoEntry);
// 取得できていたらそのゲームパッドをエントリー
if (gamepad)
{
if (gamepad.Entry() != MGL::Input::PadEntry::NoEntry)
{
MGL_TRACE("エントリー完了: %s: Player %d", gamepad.GetName(), gamepad.GetEntryNumber());
}
}
関連#
Leave#
ゲームパッドのエントリー解除
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
void Leave() noexcept;
};
}
説明#
ゲームパッドのエントリーを解除し、NoEntry
の状態に戻します。
未エントリーのゲームパッドに対してこの関数を呼び出した場合は何もしません。
利用例#
// プレイヤー1のゲームパッドのエントリーを解除
MGL::Input::Gamepad gamepad(MGL::Input::PadEntry::Player1);
if (gamepad) // この条件式は省略可能
{
gamepad.Leave();
}
関連#
GetEntry#
ゲームパッドからエントリー番号を取得
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
[[nodiscard]] constexpr PadEntry GetEntry() const noexcept;
};
}
戻り値#
- MGL::Input::PadEntry
現在のエントリー番号
現在のエントリー番号を取得します。
エントリーされていないゲームパッドや無効なゲームパッドから取得した場合はNoEntry
が返ります。
利用例#
// ボタン01が押されたゲームパッドが Player1 であるかを取得
MGL::Input::Gamepad gamepad(MGL::Input::PadEntry::Any);
if (gamepad.IsTriggered(MGL::Input::PadButton::Button01))
{
if (gamepad.GetEntry() == MGL::Input::PadEntry::Player1)
{
MGL_TRACE("ボタン01を押したのはプレイヤー1");
}
}
関連#
GetEntryNumber#
ゲームパッドのエントリー番号を数値で取得
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
[[nodiscard]] constexpr uint8_t GetEntryNumber() const noexcept;
};
}
戻り値#
- uint8_t
1
〜8
のエントリー番号。未エントリーの場合は0
説明#
エントリー番号を数値で取得します。
エントリーされていないゲームパッドや無効なゲームパッドから取得した場合は0
が返ります。
利用例#
// ボタン01が押されたゲームパッドのエントリー番号を取得
MGL::Input::Gamepad gamepad(MGL::Input::PadEntry::Any);
if (gamepad.IsTriggered(MGL::Input::PadButton::Button01))
{
MGL_TRACE("ボタン01を押したのはプレイヤー%d", gamepad.GetEntryNumber());
}
関連#
HasEntry#
ゲームパッドがエントリーされているかを取得
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
[[nodiscard]] constexpr bool HasEntry() const noexcept;
};
}
戻り値#
- bool
エントリーされている場合は
true
、されていない場合はfalse
説明#
ゲームパッドがエントリーされているかどうかを取得します。
無効なゲームパッドから取得した場合はfalse
が返ります。
利用例#
// ボタン01を押したゲームパッドのエントリー状態を取得
MGL::Input::Gamepad gamepad(MGL::Input::PadEntry::Any);
if (gamepad.IsTriggered(MGL::Input::PadButton::Button01))
{
if (gamepad.IsEntered())
{
MGL_TRACE("ボタン01を押したゲームパッドはエントリー済み");
}
else
{
MGL_TRACE("ボタン01を押したゲームパッドは未エントリー");
}
}
関連#
IsPressing#
ボタンの押下状態を取得
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
// (1) ボタンの押下状態を取得
[[nodiscard]] constexpr bool IsPressing(PadButton button) const noexcept;
// (2) 複数ボタンの押下状態を取得
[[nodiscard]] constexpr bool IsPressing(PadButtonFlags buttonFlags) const noexcept;
};
}
引数#
- (1) ボタンの押下状態を取得
- MGL::Input::PadButton button
取得するボタンの種類
- (2) 複数ボタンの押下状態を取得
- MGL::Input::PadButtonFlags buttonFlags
取得するボタンのビットフラグ
戻り値#
- bool
指定されたボタンが押されていれば
true
、押されていなければfalse
説明#
ゲームパッドのボタンの押下状態を取得します。
(1) は1つのボタンの判定に使用します。 (2) は2つ以上のボタンの組み合わせを同時に判定する場合に使用します。
ビットフラグによるボタンの組み合わせはPadButtonに|
(or)演算子を使用することでPadButtonFlagsへと変換可能です。
無効なゲームパッドに対してこの関数を呼び出した場合、戻り値は常にfalse
となります。
利用例#
// 入力のあるいずれかのゲームパッドを取得
MGL::Input::Gamepad gamepad(MGL::Input::PadEntry::Any);
// ボタン01の押下状態をチェック
if (gamepad.IsPressing(MGL::Input::PadButton::Button01))
{
MGL_TRACE("ボタン01が押されている");
}
// L1ボタンとR1ボタンの同時押しをチェック
if (gamepad.IsPressing(MGL::Input::PadButton::L1 | MGL::Input::PadButton::R1))
{
MGL_TRACE("L1ボタンとR1ボタンが同時に押されている");
}
関連#
IsPressingAny#
指定されたいずれかのボタンが押されているかを取得
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
[[nodiscard]] constexpr bool IsPressingAny(PadButtonFlags buttonFlags = kGamepadButtonAll) const noexcept;
};
}
引数#
- MGL::Input::PadButtonFlags buttonFlags
取得するボタンのビットフラグ。省略時は全てのボタン
戻り値#
- bool
指定されたボタンのいずれかが押されていれば
true
、どれも押されていなければfalse
説明#
引数で指定したボタンのいずれかが押されているかを取得します。引数を省略した場合は全てのボタンを対象にして取得します。
ビットフラグによるボタンの組み合わせはPadButtonに|
(or)演算子を使用することでPadButtonFlagsへと変換可能です。
無効なゲームパッドに対してこの関数を呼び出した場合、戻り値は常にfalse
となります。
利用例#
// 入力のあるいずれかのゲームパッドを取得
MGL::Input::Gamepad gamepad(MGL::Input::PadEntry::Any);
// L1ボタンかR1ボタンのどちらかが押されているかをチェック
if (gamepad.IsPressingAny(MGL::Input::PadButton::L1 | MGL::Input::PadButton::R1))
{
MGL_TRACE("L1ボタンかR1ボタンのどちらかが押されている");
}
関連#
IsTriggered#
ボタンが押された瞬間を取得
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
[[nodiscard]] constexpr bool IsTriggered(PadButton button) const noexcept;
};
}
引数#
- MGL::Input::PadButton button
取得するボタンの種類
戻り値#
- bool
押された瞬間であれば
true
、それ以外はfalse
説明#
ボタンを認識した最初のフレームだけtrue
を返します。具体的には、指定されたボタンがそのフレームで入力されていて、前回のフレームでは入力されていない場合にtrue
となります。
無効なゲームパッドに対してこの関数を呼び出した場合、戻り値は常にfalse
となります。
利用例#
MGL::Input::Gamepad gamepad;
if (gamepad.IsTriggered(MGL::Input::PadButton::Button01))
{
MGL_TRACE("ボタン01が押された");
}
関連#
IsReleased#
ボタンが離された瞬間を取得
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
[[nodiscard]] constexpr bool IsReleased(PadButton button) const noexcept;
};
}
引数#
- MGL::Input::PadButton button
取得するボタンの種類
戻り値#
- bool
押された瞬間であれば
true
、それ以外はfalse
説明#
ボタンが離された最初のフレームだけtrue
を返します。具体的には、指定されたボタンがそのフレームで入力されておらず、前回のフレームでは入力されていた場合にtrue
となります。
無効なゲームパッドに対してこの関数を呼び出した場合、戻り値は常にfalse
となります。
利用例#
MGL::Input::Gamepad gamepad;
if (gamepad.IsReleased(MGL::Input::PadButton::Button01))
{
MGL_TRACE("ボタン01が離された");
}
関連#
IsARepeat#
ボタンのリピート入力を取得
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
[[nodiscard]] constexpr bool IsARepeat(PadButton button) const noexcept;
};
}
引数#
- MGL::Input::PadButton button
取得するボタンの種類
戻り値#
- bool
指定されたボタンが押されている間、設定されている間隔で
true
とfalse
を繰り返す
説明#
指定されたボタンのリピート入力を取得します。この関数がtrue
を返す間隔はMGL::Input::GamepadSettings::SetRepeatSettingで設定可能です。
リピート入力の詳しい挙動についてはリピート間隔の変更を参照してください。
無効なゲームパッドに対してこの関数を呼び出した場合、戻り値は常にfalse
となります。
利用例#
MGL::Input::Gamepad gamepad;
if (gamepad.IsARepeat(MGL::Input::PadButton::Button01))
{
MGL_TRACE("ボタン01のリピート入力");
}
関連#
GetLeftStick#
左スティックの状態を取得
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
[[nodiscard]] constexpr const Vector2 &GetLeftStick() const noexcept;
};
}
戻り値#
- MGL::Vector2
左スティックの状態
説明#
左側のサムスティックの状態を取得します。
値はx
が水平方向を、y
が垂直方向をそれぞれ1.0
から-1.0
の範囲で表します。
注釈
GetTypeの戻り値がDirectInput
またはGenericHID
の場合、デバイスによっては座標系が異なる場合があります。
左サムスティックの入力状態は、ボタンのAnalogUp
、AnalogDown
、AnalogLeft
、AnalogRight
へと変換されます。
無効なゲームパッドに対してこの関数を呼び出した場合、戻り値は常に(0.0f, 0.0f)
となります。
利用例#
MGL::Input::Gamepad gamepad;
if (gamepad)
{
auto leftStickValue = gamepad.GetLeftStick();
MGL_TRACE("左スティックの状態: %f, %f", leftStickValue.x, leftStickValue.y);
}
関連#
GetRightStick#
右スティックの状態を取得
宣言#
namespace MGL::Input
{
class Gamepad
{
public:
[[nodiscard]] constexpr const Vector2 &GetRightStick() const noexcept;
};
}
戻り値#
- MGL::Vector2
右スティックの状態
説明#
右側のサムスティックの状態を取得します。
値はx
が水平方向を、y
が垂直方向をそれぞれ1.0
から-1.0
の範囲で表します。
注釈
GetTypeの戻り値がDirectInput
またはGenericHID
の場合、デバイスによっては座標系が異なる場合があります。
無効なゲームパッドに対してこの関数を呼び出した場合、戻り値は常に(0.0f, 0.0f)
となります。
利用例#
// NOTE: このコードは他のボタンを押しながらでないとトレースを出力しない
MGL::Input::Gamepad gamepad;
if (gamepad)
{
auto rightStickValue = gamepad.GetRightStick();
MGL_TRACE("右スティックの状態: %f, %f", rightStickValue.x, rightStickValue.y);
}