メニューからウインドウを開いたり閉じたり – FlyWithLua

2023年5月30日

フローティングウインドウをメニューから開くようにする。更にコマンドでも開いたり閉じたりすることができるようになる。

メニューからウインドウを表示・非表示することができる。コマンドは使えない。
非表示はメニューから消す。ウインドウの赤ボタンだと消えても再度表示するときはメニューから一度消して、再度表示と2度手間になる。

ポイントはウインドウを作成する8〜10行の関数。本来はそのままだがメニューからひらけるように「function show_wnd()」関数を作成しているところ。
メニューから表示しない場合はこの関数を外すだけである。

function on_build(wnd, x, y)
    imgui.TextUnformatted("Hellow World!")
end

--メインウインドウの作成(メニューから開くのでfunction show_wnd()関数になっている)
wnd = nil
function show_wnd()
    wnd = float_wnd_create(400, 200, 1, true)
    float_wnd_set_title(wnd, "メニューからウインドウを表示")
    float_wnd_set_imgui_builder(wnd, "on_build")
end

function hide_wnd()
    if wnd then
        float_wnd_destroy(wnd)
    end
end
--実際の内容を以下に記述
function on_build(wnd, x, y)
	imgui.TextUnformatted("B737-800X Zibo")
end

--メニューに表示
add_macro("メニューからウインドウを表示・非表示", "show_wnd()", "hide_wnd()", "deactivate")
--コマンドでウインドウを開く
create_command("FlyWithLua/toggle_show_hide_window", "toggle_show_hide_window", "ttoggle_show_hide_window()", "", "")

コマンドを使えるようにするには19行以下が必要になる。

function on_build(wnd, x, y)
	imgui.TextUnformatted("Hellow World!")	
end

--メインウインドウの作成(メニューから開くのでfunction show_wnd()関数になっている)
wnd = nil
function show_wnd()
    wnd = float_wnd_create(400, 200, 1, true)
    float_wnd_set_title(wnd, "メニューからウインドウを表示")
    float_wnd_set_imgui_builder(wnd, "on_build")
end
--ウインドウをメニューから閉じる関数
function hide_wnd()
    if wnd then
        float_wnd_destroy(wnd)
    end
end

--コマンドでウインドウを開いたり閉じたりできる。コマンドを使わないならいらない。
function toggle_show_hide_window()
	show_window = not show_window
	if show_window then
		if show_only_once == 0 then
			show_wnd()
			show_only_once = 1
			hide_only_once = 0
		end
	else
		if hide_only_once == 0 then
			hide_wnd()
			hide_only_once = 1
			show_only_once = 0
		end
	end
end
--これがないとコマンドが実行されない。コマンドを使わないならいらない。
show_only_once = 0
hide_only_once = 0

--メニューに表示して、ウインドウを開いたり、閉じたりできるようになる。
add_macro("メニューからウインドウを表示・非表示", "show_wnd()", "hide_wnd()", "deactivate")
--コマンドでウインドウを開いたり、閉じたりできるようになる。
create_command("FlyWithLua/toggle/show_hide_window", "show and close windows", "toggle_show_hide_window()", "", "")

create_command

2.2.63 create_command( “command name“, “command description“, “begin code string“, “continue code string“, “end code string” ) 

  • command name =コマンドの名前。必ず2つ以上のスラッシュを入れること。
    “FlyWithLua/toggle/show_hide_window”これが以下のように表示される。これがコマンド名。
  • command description =コマンドを説明する文字列。ここでは2番目 “show and close windows”が以下のところに表示される。
  • begin code string =コマンドの開始時に計算するLuaコードを含む文字列。実際に実行する内容をいれる。ここでは「function toggle_show_hide_window()」の関数名「toggle_show_hide_window()」を指定して、この関数を実行することになる。
  • continue code string =コマンドの継続時に計算するLuaコードを含む文字列(フレームごとに1つ)。
  • end code string =コマンドの終了時に計算したいLuaコードを含む文字列。

古典的なカスタムコマンドを作成します。すべてのフレームループでボタンの状態を確認し、Lua関数を直接呼び出すことができるため、カスタムコマンドはほとんど役に立ちません。

X-Planeユニバースに素敵な新機能を提供するクラシックコマンドをスクリプト化する場合、小さなスクリプトにはすべてクラシックコードを含める必要があることに注意してください。

最新のコード(DataRefに接続された変数)を使用しないでください。カスタムコマンドスクリプトファイルをダウンロードしたユーザーが、異なる変数名で同じ書き込み可能なDataRefを使用するかどうかはわかりません。

その場合、FlyWithLuaは動作を停止し、エラーメッセージを表示します。

重要:「sim / …」などのカスタムコマンド名を使用しないでください。使用すると、オースティンがユーザーを殺してしまいます。

この強力な機能の使用方法を示すデモスクリプト»test command.lua«があります。そしてQNHツール»automatic set qnh.lua«もカスタムコマンドを提供します。