リングコマンド!

こんばんわ、Pocolです。

ImGui使っていると、なんかみんな同じ見た目になってしまって面白くないなーと思いました。
そこで,聖剣伝説風のリングメニューを作ってみました。

ソースコードはGitHubにあげています。
https://github.com/ProjectAsura/ImRing

使い方はいたって簡単です。
メニュー項目は第1引数にラベル名,第2引数にImTextureID型のアイコン画像を指定してください。
実装例は次のように追加します。

ImRingItem menus[] = {
    {"Menu1", MenuIcon1},
    {"Menu2", MenuIcon2},
    {"Menu3", ImTexureID_Invalid},
};

アイコン画像がない場合は,ラベル名の1文字目をアイコン代わりに描画します。
アニメーション更新のため,毎フレームImGuiRingMenu::Update()と,ImGuiRingMenu::Draw()を呼び出してください.

// アニメーションを更新.
menu.Update(deltaSeconds);

// 描画処理.
if (menu.Draw(selectedItemIndex, menus, _countof(menus)))
{
    // ここで,選択された項目に応じた処理を行う.
    ...
}

キーを操作を変更したい場合は,ImGuiRingMenu::ConfigのKeyMenuStartやKeyXXXという値を使用したキーのImGuiKey列挙体の値に変更してください。

…というわけで、自作したリングメニューの紹介でした。