クリック優先 RESUME_MOUSE_CLICK関数 – FlyWithLua

2023年8月13日

この関数は良く出てくるが、あっても、無くても動作するような関数なので、意味がもう一つわからない。

RESUME_MOUSE_CLICKはマウスクリックを取り戻すという意味がある(RESUME = 再開する)。FlyWitLuaで作成したマウスクリックをX-Planeより優先させることができるということになる。

これを有効にするには、FlyWithLuaでクリックしたいスペースをまず最初に作成して、その直後に以下のスクリプトをいれるという手順になる。つまりそのスペースだけを有効にするということになる。

スペースが沢山ある場合は、その都度これを入れる必要がある。常にスペースを頭に入れること。

RESUME_MOUSE_CLICK = true

プール値が「true」に設定されている場合、スクリプトはマウスクリックを有効にし、有効にしたスペースはX-Plane内のクリックは無効になる。 falseにすると、X-Planeまたは他のプラグインのクリックを妨害しないことになる。
つまりtrueになっているとFlyWithLuaで設定したクリックが有効になり、たまたまその設定の下にX-Planeのスイッチがあってもそれは動作しないようになるということ。
もし、X-Planeのスイッチを入れたい場合はFlyWithLuaで作成したスペースから少しずらせばスイッチは入ることになる。重なったら、FlyWithLuaのスペースが優先になる。

具体的に例を示すと、下の写真にはセスナスイッチが沢山あるところ、その左下に数値が「0」と出ている。これはクリックしたら123と数値が上がっていくようなスクリプトになっている。つまりクリックに反応して変化しているわけである。この場合スペースはFlyWithLuaでX-Plane全体を指定していることになる。

画面をクリックするたびに数値が上がっていく、それと同時にスイッチをクリックしても同じように数値が上がって行く、どこの画面でもクリックすれば変化する、これはX-Plane全体をFlyWtthLuaでスペースとして指定しているのでごく当たり前である。

今回のテーマは「RESUME_MOUSE_CLICK」関数なので、どう動くのかをやってみたいと思う。

下のFlyWithLuaスクリプトは一般的なクリックの影響を何も気にしていない記述になる。
X-Plane内のどこかをクリックしても数値を1つずつプラスしていくことになる。

--画面のどこかをクリクックすると数字がアップしていく。
local pings = 0

function testDraw()
    draw_string(400, 400, pings)--文字を表示する
end
do_every_draw("testDraw()")

function testClick()
	--ここではMOUSE_STATUSの"down"を使っているので画面のどこをクリックすると反応するのである。
    if MOUSE_STATUS == "down" then
        pings = pings + 1
    end
end
do_on_mouse_click("testClick()")

しかしクリックしたとき、下のX-Planeのスイッチも同時に動作してはまずいという場合があると思う。
そのとき下の画像のようにトグルスイッチのあるところをクリックした場合、意図としないでX-Planeのトグルスイッチが動作することになる、つまりFlyWithLuaのクリックだけを有効にして、X-Planeのスイッチが反応しないようにしたい場合、この関数が機能を発揮することになる。

上の12行目の下に「RESUME_MOUSE_CLICK = true」を追加、これで機能する。「クリックを再開する」ことになるので、このif分の中ではFlyWithLuaのクリックがずっと有効になるということになる。

if MOUSE_STATUS == “down” then
pings = pings + 1
RESUME_MOUSE_CLICK = true
end

これを入れると今まで機能していたX-Planのスイッチをクリックしても動作しなくなる。つまりクリックするたびに数値は上がっていくが、X-Planeのどのスイッチも動作しなくなり、スイッチ以外も全て機能しなくなる。従って、逆に言うと入れるところに注意が必要にも成る関数でもある。
それを防ぐのが「RESUME_MOUSE_CLICK=true」ということになる。
一般的に例題としてはFlyWithLua上のスイッチの動きのスクリプトの下の行に入れてあるこが多いが、最初に入れたほうが理解しやすいかなと私的には思う。

更に複雑な動きをするスクリプト

unknownのところが状態によって変化し数値がアップする。

上のメモリを表示しているので参考に、画面の左から400以内をマウスでダウン、ドラッグ、アップすると数値が変化する。それ以外のところ(右側)はダウンだけが反応する。
X-Planeの反応も最初の説明と同じである。そういうスクリプトになっている。

X-Planeのスイッチをブロック

ここでは30〜32行に「RESUME_MOUSE_CLICK = true」が入っていて、左から400pxの範囲を指定してある。つまり、このこの仕切りを境に左側はX-Planeのスイッチが反応しない「true」、その右側は反応する範囲になることになる。
試しにX-Planeのスイッチをクリックしてみると、左側は無反応、右側はちゃんとスイッチが動作する。

local mouse_status = "unknown" --一番最初にこれが表示される。
--その後、マウスの実行状態に応じて以下の数値が変化していく。
local pings = 0
local pongs = 0
local drags = 0

function testDraw()
	--「tostring」は文字列を変換する関数でpingsの文字列をmouse_statusに入れれてようだ、数値はpingsがそのまま入っている
	draw_string(400, 400,
		"mouse_status = " ..
		mouse_status .. "(" .. tostring(pings) .. " - " .. tostring(drags) .. " - " .. tostring(pongs) .. ")")
end

do_every_draw("testDraw()")

function testClick()
	--ここではMOUSE_STATUSだけを使っているので画面のどころクリックしても反応する。
	if MOUSE_STATUS == "down" then
		mouse_status = "ping"
		pings = pings + 1
	end
	if MOUSE_STATUS == "up" then
		mouse_status = "pong"
		pongs = pongs + 1
	end
	if MOUSE_STATUS == "drag" then
		mouse_status = "drag"
		drags = drags + 1
	end
	if MOUSE_X < 400 then
		RESUME_MOUSE_CLICK = true --RESUMEとは再び始めるという意味、画面の左から400以内にマウスがあるなら、上3つともが実行されることになる。
	end
	--一般的には最初のdownが実行されると終了するが、trueになることで再び実行され、upもdragも続いて実行される。
	--更に説明すると、これが外れるか「false」になると最初の「down」だけが実行され、後の2つは実行されない。
end

do_on_mouse_click("testClick()")

FlyWithLuaのクリックを続けて実行する

この「RESUME_MOUSE_CLICK = true」はもう一つの機能、続けて実行するという動作がある。
普通は「down」が実行されると、それ以下のupとdragは実行されないが、これが入ると続けて同時に実行することができるようになる。
これも400pxを境にそれが実行される、されないと分かれることになる。

FlyWithLuaで作成したクリック動作をtrueで実行し、falseで実行しないということになる。
つまりfalseにするとFlyWithLuaで作成したクリック動作が無効になり、X-Plane内のスイッチのクリックが有効になるということである。
FlyWithLuaで有効にしたいスペースをまず作成して、その直後に「RESUME_MOUSE_CLICK = true」をいれるということになる。