入力・音声・インターフェース
アクション割り当て、コントローラー、グローバルショートカット、音声再生、TGUI ウィジェットを説明します。
このページの内容
1 つのアクションに複数の入力
InputManager は整数のアクション ID と、バインディングを保持する unordered_multimap を使用します。1 つのアクションに複数の入力を関連付けられます。Pressed(action) は、いずれかの割り当てが押されているときに真を返します。
基準リビジョンのバインディング型は次のとおりです。
struct Keyboard {
sf::Keyboard::Scan key;
};
struct Mouse {
sf::Mouse::Button button;
};
struct Gamepad {
GamepadButton button;
int id = 0;
};
struct Axis {
sf::Joystick::Axis axis;
float threshold = 0.5f;
int id = 0;
};
using Binding = std::variant<Keyboard, Mouse, Gamepad, Axis>;
これらの型は Input 名前空間に属します。この問い合わせは現在の状態を調べるもので、押した瞬間を自動検出するものではありません。個別のイベントには、シーンの OnEvent も使用できます。
軸は値を 100 で割って正規化し、設定された正または負のしきい値と比較します。Engine はシーン変更時にバインディングを消去するため、各ゲームは開始時に自分の割り当てを再設定する必要があります。
コントローラーとカーソル
コードには Xbox と PlayStation の論理ボタン表があります。Microsoft のベンダー ID を検出すると Xbox 表を選び、それ以外は PlayStation 表を使います。この判定方法は、すべてのコントローラーで同じマッピングになることを保証しません。
Xbox 表では L2/R2 トリガーにボタンの割り当てがなく、このボタンマッピングでは利用不可とされています。軸は独立したバインディング型です。
CursorManager は joystickDeadzone を考慮してスティックでカーソルを移動させます。マウス位置をビュー座標に変換することもできます。GuiManager は論理ボタン South をウィジェットへのクリックイベントに変換します。
グローバルショートカット
| 入力 | 操作 |
|---|---|
| F12 | PNG スクリーンショットを保存します。 |
| R | アクティブなシーンを再開始します。 |
| Escape / コントローラーの Start | 一時停止オーバーレイを切り替えます。 |
| M / コントローラーの Select | Menu を要求します。このシーンは対象リビジョンには登録されていません。 |
ショートカットは EngineVisitor が処理します。フォーカスを失うとシーンは一時停止します。フォーカスが戻っても、オーバーレイが開いていない場合だけ再開します。
基準リビジョンの音声
AudioManager は SFML を通じて、全体音量とリスナーの位置・向きを公開します。ResourceManager はサウンドバッファーと音楽オブジェクトを提供します。シーンが音源を所有し、再生を制御します。
void AudioManager::SetGlobalVolume(float volume) {
sf::Listener::setGlobalVolume(volume);
}
このリビジョンでは、各ゲームが OnPause と OnCleanup の中で自分の音声を調整します。設定可能なバスミキサーや音声エディターは確認されていません。
開発中のローカル作業
調査時点では、AudioGroup.h と AudioGroup.cpp はまだ基準コミットに含まれていないファイルでした。シーン単位で音源をまとめ、Music/Effect チャンネルを区別し、一時停止の前に再生されていた音源を記憶します。
クールダウン用の共有クロックにもローカルの変更があります。実装は確認されていますが、このガイドの公開例には含まれていません。リンク先のコミットにあるものとして、これらの API を使用しないでください。
TGUI インターフェース
GuiManager は TGUI を SFML ウィンドウに接続します。Content/Themes/Dark.txt を読み込み、Relidux.otf フォントを適用し、Tab 操作を有効にして、ウィジェットを追加・削除するメソッドを提供します。
オーバーレイは magic_enum を使い、OverlaySelection からボタンを作成します。選択は一度だけ取り出され、Engine が対応する操作を実行します。GUI はシーンのポストプロセス後に描画されます。