AWESOME ENGINE / 技術ガイド

入力・音声・インターフェース

アクション割り当て、コントローラー、グローバルショートカット、音声再生、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 はシーンのポストプロセス後に描画されます。

参照ソース

確認済みのソースコードに基づいています。問題を見つけましたか? →