位置の設定の種類
この位置の設定には色んなパターンがあり、混乱する。
X-Planeの画面に直接表示する場合、フローティングウインドウに表示する場合、それぞれスクリプトの書き方が違う。
目次
単純なX-Planeの画面に表示する場合のクリック
X-Plane上のどこかでマウスクリック、ドラッグするとdatarefの数値を上げることができる。
整数でもfloatでも同じようにできる。

local heading = dataref_table("sim/cockpit2/switches/panel_brightness_ratio")
function testDraw()
draw_string(400, 400, "Brightness = " .. tostring(heading[0]) ) --値の出力、tostringはデータを文字列として表示するために必要
end
do_every_draw("testDraw()")
function testClick()
if MOUSE_STATUS == "down" then --マウスをdownしたら実行
heading[0] = heading[0] + 0.01
end
if MOUSE_STATUS == "drag" then --マウスをdragしたら実行
heading[0] = heading[0] + 0.01
end
--dataref数値の制限
if heading[0] < 0 then
heading[0] = 0
end
if heading[0] > 1 then
heading[0] = 1
end
if MOUSE_X < 400 then
RESUME_MOUSE_CLICK = true
end
end
do_on_mouse_click("testClick()")
単純なX-Planeの画面に表示する場合のクリック。BAROだけをとりだしたもの。
require "graphics"
local qs_baro = dataref_table("sim/cockpit/misc/barometer_setting")
local qs_real_baro = dataref_table("sim/weather/barometer_sealevel_inhg")
function draw_quick_settings()
-- グラフィックシステムを初期化する
XPLMSetGraphicsState(0,0,0,1,1,0,0)
-- 透明な背景を描く
graphics.set_color(0, 0, 0, 0.5) --長方形の色(黒)、透明度
graphics.draw_rectangle(100, 70, 600, 100) --長方形を描く
graphics.set_color(1, 1, 1, 0.5) --線の色
-- 情報テキストを描く
draw_string_Helvetica_10(115, 89, "BARO")
--1013.2 ヘクトパスカル(hPa)= 29.92 水銀柱インチ(inHg)
--下はdatarefの水銀柱インチ値をヘクトパスカル値に変換している
draw_string_Helvetica_18(115, 74, math.floor(qs_baro[0] * 33.8637526 + 0.5))--math.floor=小数点以下切り捨て
end
do_every_draw("draw_quick_settings()")
-- マウスをクリックしたときの動作を設定
function qs_mouse_click_events()
-- これは一度だけ反応します
if MOUSE_STATUS ~= "down" then
return
end
-- BARO
if MOUSE_X > 110 and MOUSE_X < 160 and MOUSE_Y > 70 and MOUSE_Y < 100 then
qs_baro[0] = qs_real_baro[0] --クリックでqs_baroの値をqs_real_baroの値にする。
--qs_real_baro値は変換されていないように見えるが、上のqs_baroの戻って変換される。
RESUME_MOUSE_CLICK = true
end
end
do_on_mouse_click("qs_mouse_click_events()")
-- マウスホイールをクリックしたときの動作を設定
function qs_mouse_wheel_events()
-- BARO
if MOUSE_X > 110 and MOUSE_X < 160 and MOUSE_Y > 70 and MOUSE_Y < 100 then
qs_baro[0] = qs_baro[0] + MOUSE_WHEEL_CLICKS * 0.01 --1x0.01分、細かく動作させる
RESUME_MOUSE_WHEEL = true
end
end
do_on_mouse_wheel("qs_mouse_wheel_events()")
HDGだけをとりだしたもの。
require "graphics"
local qs_heading = dataref_table("sim/cockpit/autopilot/heading")
local qs_real_heading = dataref_table("sim/flightmodel/position/magpsi")
function draw_quick_settings()
-- グラフィックシステムを初期化する
XPLMSetGraphicsState(0,0,0,1,1,0,0)
-- 透明な背景を描く
graphics.set_color(0, 0, 0, 0.5) --長方形の色(黒)、透明度
graphics.draw_rectangle(100, 70, 150, 100) --長方形を描く
graphics.set_color(1, 1, 1, 0.5) --文字の色
-- 情報テキストを描く
draw_string_Helvetica_10(105, 89, "HDG") --テキスト
draw_string_Helvetica_18(105, 74, math.floor(qs_heading[0])) --math.floor = 小数点以下切り捨て
end
do_every_draw("draw_quick_settings()")
-- マウスをクリックしたときの動作を設定
function qs_mouse_click_events()
-- 私たちは一度だけ反応します
if MOUSE_STATUS ~= "down" then
return
end
-- HDG(マウスが反応するスペースを設定)
if MOUSE_X > 100 and MOUSE_X < 150 and MOUSE_Y > 70 and MOUSE_Y < 100 then --この範囲をクリックされたら以下を実行
qs_heading[0] = qs_real_heading[0] --クリックで qs_heading を qs_real_heading に入れ替える
RESUME_MOUSE_CLICK = true
end
end
do_on_mouse_click("qs_mouse_click_events()")
function qs_mouse_wheel_events()
-- HDG
if MOUSE_X > 100 and MOUSE_X < 150 and MOUSE_Y > 70 and MOUSE_Y < 100 then
qs_heading[0] = 10 * (math.floor(qs_heading[0]/10) + MOUSE_WHEEL_CLICKS) --10ずつカウントする
if qs_heading[0] < 0 then --0より小さい場合は
qs_heading[0] = 350 --qs_headingを350にする
end
if qs_heading[0] > 360 then --360より大きい場合は
qs_heading[0] = 10 --qs_headingを10にする(実際は10ずつカウントなので0になる)
end
RESUME_MOUSE_WHEEL = true
end
end
do_on_mouse_wheel("qs_mouse_wheel_events()")
X-Plane画面に表示するだけのマウスホイールアクション
X-Plane上のどこかでマウスホイールを回すと以下の画面が出る。トリムの動作をコントロールできる。
OpenGLで描画している、graphicsでも使える。回転する動作では使えない。

dataref("xp_elv_trim", "sim/flightmodel/controls/elv_trim", "writable")
--マウスホイールの動きで移動させる。
function set_trim_by_mouse_wheel()
xp_elv_trim = xp_elv_trim - MOUSE_WHEEL_CLICKS * 0.0025
if xp_elv_trim > 1.0 then
xp_elv_trim = 1.0
end
if xp_elv_trim < -1.0 then
xp_elv_trim = -1.0
end
RESUME_MOUSE_WHEEL = true
end
do_on_mouse_wheel("set_trim_by_mouse_wheel()")
--スライダーを描画。
function draw_trim_info()
XPLMSetGraphicsState(0,0,0,1,1,0,0)
glColor4f(1, 1, 1, 0.5)
glRectf(100, 100, 110, 300)
glBegin_LINES()
glVertex2f(90, 200 + xp_elv_trim*100)
glVertex2f(120, 200 + xp_elv_trim*100)
glEnd()
end
do_every_draw("draw_trim_info()")
HUDを使ったクリックとマウスホイールアクション

require "graphics"
require "HUD"
require "radio"
require "bit"
dataref("ALT", "sim/cockpit2/autopilot/altitude_dial_ft", "writable")
dataref("VVI", "sim/cockpit2/autopilot/vvi_dial_fpm", "writable")
dataref("ALT_ARMED", "sim/cockpit2/autopilot/altitude_hold_armed")
dataref("AP_STATE", "sim/cockpit/autopilot/autopilot_state")
dataref("xp_autopilot_mode", "sim/cockpit/autopilot/autopilot_mode", "writable")
dataref("xp_autopilot_airspeed", "sim/cockpit/autopilot/airspeed", "writable")
dataref("xp_autothrottle_enabled", "sim/cockpit2/autopilot/autothrottle_enabled", "writable")
dataref("QNH_Pilot", "sim/cockpit2/gauges/actuators/barometer_setting_in_hg_pilot", "writable")
-- define a global variable to be used in other scripts (shared with another script)
autopilot_helper_vvi = 600
-- init the HUD
HUD.begin_HUD( -81, 1, 80, 315, "my_radios", "always")
-- Autopilot
HUD.create_element("AP", 0, 280, 40, 35)
HUD.draw_string(5, 10, 18, "AP")
HUD.create_backlight_indicator( 30, 0, 10, 35, "xp_autopilot_mode == 1", 1, 1, 0, 1)
HUD.create_backlight_indicator( 30, 0, 10, 35, "xp_autopilot_mode == 2", 0, 1, 0, 1)
HUD.create_click_switch(0, 0, 40, 35, "xp_autopilot_mode", 1, 2)
-- Speed
HUD.create_element("Speed", 40, 280, 40, 35)
HUD.draw_string(5, 23, 10, "SPD")
HUD.draw_fstring(5, 5, 18, "%03i", "xp_autopilot_airspeed")
HUD.create_wheel_action(0, 0, 25, 35, "xp_autopilot_airspeed = math.floor(xp_autopilot_airspeed / 5 + MOUSE_WHEEL_CLICKS) * 5")
HUD.create_wheel_action(25, 0, 15, 35, "xp_autopilot_airspeed = xp_autopilot_airspeed + MOUSE_WHEEL_CLICKS")
HUD.create_backlight_indicator( 30, 0, 10, 35, "xp_autothrottle_enabled == 1", 0, 1, 0, 1)
HUD.create_click_switch(0, 0, 40, 35, "xp_autothrottle_enabled", 0, 1)
-- ALT
HUD.create_element("ALT", 0, 245, 80, 35)
HUD.draw_string(5, 23, 10, "ALT")
HUD.draw_fstring(15, 5, 18, "%05i", "ALT")
HUD.create_wheel_action( 0, 0, 35, 35, "ALT = math.floor(ALT / 100 + MOUSE_WHEEL_CLICKS * 10) * 100")
HUD.create_wheel_action(36, 0, 40, 35, "ALT = math.floor(ALT / 100 + MOUSE_WHEEL_CLICKS) * 100")
HUD.create_wheel_action( 0, 0, 80, 35, "autopilot_helper_set_VVI()")
HUD.create_backlight_indicator( 70, 0, 10, 35, "bit.band(AP_STATE, 32) > 0", 1, 0, 0, 1)
HUD.create_backlight_indicator( 70, 0, 10, 35, "bit.band(AP_STATE, 16384) > 0", 0, 1, 0, 1)
HUD.create_click_action(0, 0, 80, 35, 'command_once("sim/autopilot/altitude_hold")')
-- VVI
HUD.create_element("VVI", 0, 210, 80, 35)
HUD.draw_string(5, 23, 10, "V V I")
HUD.draw_fstring(25, 5, 18, "%04i", "VVI")
HUD.create_wheel_action(0, 0, 80, 35, "VVI = math.floor(VVI / 100 + MOUSE_WHEEL_CLICKS) * 100")
HUD.create_backlight_indicator( 70, 0, 10, 35, "bit.band(AP_STATE, 16) > 0", 0, 1, 0, 1)
HUD.create_click_action(0, 0, 80, 35, 'command_once("sim/autopilot/vertical_speed")')
-- COM1 radio
HUD.create_element("COM", 0, 140, 80, 35)
HUD.draw_string(5, 23, 10, "COM")
HUD.draw_fstring(12, 5, 18, "%3.2f", "COM1/100")
HUD.create_wheel_action( 0, 0, 45, 35, "COM1 = COM1 + MOUSE_WHEEL_CLICKS * 100")
HUD.create_wheel_action(45, 0, 10, 35, "COM1 = COM1 + MOUSE_WHEEL_CLICKS * 10")
HUD.create_wheel_action(55, 0, 25, 35, "COM1 = COM1 + MOUSE_WHEEL_CLICKS")
-- UNICOM
HUD.create_click_action(0, 0, 80, 35, "COM1 = 12280")
-- NAV1 radio
HUD.create_element("NAV", 0, 105, 80, 35)
HUD.draw_string(5, 23, 10, "NAV")
HUD.draw_fstring(12, 5, 18, "%3.2f", "NAV1/100")
HUD.create_wheel_action( 0, 0, 45, 35, "NAV1 = NAV1 + MOUSE_WHEEL_CLICKS * 100")
HUD.create_wheel_action(45, 0, 10, 35, "NAV1 = NAV1 + MOUSE_WHEEL_CLICKS * 10")
HUD.create_wheel_action(55, 0, 25, 35, "NAV1 = NAV1 + MOUSE_WHEEL_CLICKS")
HUD.create_backlight_indicator( 70, 0, 10, 35, "bit.band(AP_STATE, 256) > 0", 1, 0, 0, 1)
HUD.create_backlight_indicator( 70, 0, 10, 35, "bit.band(AP_STATE, 512) > 0", 0, 1, 0, 1)
HUD.create_click_action(0, 0, 80, 35, 'command_once("sim/autopilot/NAV")')
-- ADF1 radio
HUD.create_element("ADF", 0, 70, 80, 35)
HUD.draw_string(5, 23, 10, "ADF")
HUD.draw_fstring(27, 5, 18, "%04i", "ADF1")
HUD.create_wheel_action( 0, 0, 45, 35, "ADF1 = ADF1 + MOUSE_WHEEL_CLICKS * 100")
HUD.create_wheel_action(45, 0, 10, 35, "ADF1 = ADF1 + MOUSE_WHEEL_CLICKS * 10")
HUD.create_wheel_action(55, 0, 25, 35, "ADF1 = ADF1 + MOUSE_WHEEL_CLICKS")
-- OBS1
HUD.create_element("OBS", 40, 175, 40, 35)
HUD.draw_string(5, 23, 10, "OBS")
HUD.draw_fstring(5, 5, 18, "%03i", "OBS1")
HUD.create_wheel_action(0, 0, 25, 35, "OBS1 = math.floor(OBS1 / 10 + MOUSE_WHEEL_CLICKS) * 10")
HUD.create_wheel_action(25, 0, 15, 35, "OBS1 = OBS1 + MOUSE_WHEEL_CLICKS")
HUD.create_click_action(0, 0, 40, 35, 'command_once("sim/autopilot/NAV")')
-- HDG
HUD.create_element("HDG", 0, 175, 40, 35)
HUD.draw_string(5, 23, 10, "HDG")
HUD.draw_fstring(5, 5, 18, "%03i", "HDG")
HUD.create_wheel_action(0, 0, 25, 35, "HDG = math.floor(HDG / 10 + MOUSE_WHEEL_CLICKS) * 10")
HUD.create_wheel_action(25, 0, 15, 35, "HDG = HDG + MOUSE_WHEEL_CLICKS")
HUD.create_backlight_indicator( 30, 0, 10, 35, "bit.band(AP_STATE, 2) > 0", 0, 1, 0, 1)
HUD.create_click_action(0, 0, 40, 35, 'command_once("sim/autopilot/heading")')
-- SQUAWK
HUD.create_element("SQUAWK", 0, 35, 80, 35)
HUD.draw_string(5, 23, 10, "SQUAWK")
HUD.draw_fstring(27, 5, 18, "%04i", "SQUAWK")
HUD.create_wheel_action( 27, 0, 9, 35, "SQUAWK = SQUAWK + 1000 * MOUSE_WHEEL_CLICKS")
HUD.create_wheel_action( 37, 0, 9, 35, "SQUAWK = SQUAWK + 100 * MOUSE_WHEEL_CLICKS")
HUD.create_wheel_action( 47, 0, 9, 35, "SQUAWK = SQUAWK + 10 * MOUSE_WHEEL_CLICKS")
HUD.create_wheel_action( 57, 0, 9, 35, "SQUAWK = SQUAWK + MOUSE_WHEEL_CLICKS")
HUD.create_click_switch( 0, 0, 80, 35, "TRANSPONDER_MODE", 1, 2)
HUD.create_backlight_indicator( 70, 0, 10, 35, "TRANSPONDER_MODE == 0", 0, 0, 1, 1)
HUD.create_backlight_indicator( 70, 0, 10, 35, "TRANSPONDER_MODE == 1", 1, 0, 0, 1)
HUD.create_backlight_indicator( 70, 0, 10, 35, "TRANSPONDER_MODE == 2", 0, 1, 0, 1)
HUD.create_backlight_indicator( 70, 0, 10, 35, "TRANSPONDER_MODE == 3", 1, 1, 0, 1)
-- BARO
HUD.create_element("BARO", 0, 0, 80, 35)
HUD.draw_string(5, 23, 10, "BARO")
if XPLANE_LANGUAGE == "English" then
HUD.draw_fstring(25, 5, 18, "%2.2f", "QNH_Pilot")
else
HUD.draw_fstring(25, 5, 18, "%4.0f", "QNH_Pilot * 33.86531")
end
HUD.create_wheel_action(0, 0, 80, 35, "QNH_Pilot = QNH_Pilot + MOUSE_WHEEL_CLICKS / 100")
HUD.create_click_action(0, 0, 80, 35, 'QNH_Pilot = 29.92')
-- finish the HUD
HUD.end_HUD()
-- define a function uesed by the HUD
function autopilot_helper_set_VVI()
if ALT > ELEVATION*3.2808399 then
if bit.band(AP_STATE, 16) == 0 then command_once( "sim/autopilot/vertical_speed" ) end
VVI = autopilot_helper_vvi
if bit.band(AP_STATE, 32) == 0 then command_once("sim/autopilot/altitude_arm") end
end
if ALT < ELEVATION*3.2808399 then
if bit.band(AP_STATE, 16) == 0 then command_once( "sim/autopilot/vertical_speed" ) end
VVI = -autopilot_helper_vvi
if bit.band(AP_STATE, 32) == 0 then command_once("sim/autopilot/altitude_arm") end
end
end
-- define some functions taken from another script
plane_PSI = dataref_table("sim/flightmodel/position/psi")
autopilot_mode = dataref_table("sim/cockpit/autopilot/autopilot_mode")
function activate_autopilot_tweak()
HDG = plane_PSI[0]
command_once( "sim/autopilot/reentry" )
command_once( "sim/autopilot/heading" )
command_once( "sim/autopilot/altitude_hold" )
ALT = ELEVATION*3.2808399
autopilot_mode[0] = 2
end
function stop_autopilot_tweak()
autopilot_mode[0] = 0
xp_autothrottle_enabled = 0
end
-- provide a custom command to activate it
create_command( "FlyWithLua/autopilot/activate_autopilot", "activate autopilot and set actual heading and altitude",
"activate_autopilot_tweak()", "", "" )
create_command( "FlyWithLua/autopilot/set_autopilot_off", "deactivate autopilot tweak and get back normal steering",
"stop_autopilot_tweak()", "", "" )
-- do some corrections
function radio_limiter()
if COM1 < 11800 then COM1 = 11800 end
if COM1 > 13697 then COM1 = 13697 end
if NAV1 < 10800 then NAV1 = 10800 end
if NAV1 > 11797 then NAV1 = 11797 end
if ADF1 < 530 then ADF1 = 530 end
if ADF1 > 1700 then ADF1 = 1700 end
if OBS1 < 0 then OBS1 = 350 end
if OBS1 > 360 then OBS1 = 10 end
if HDG < 0 then HDG = 350 end
if HDG > 360 then HDG = 10 end
local SQUAWKSTRING = string.format("%4i", SQUAWK)
SQUAWKSTRING = string.gsub(SQUAWKSTRING, '8', '0')
SQUAWKSTRING = string.gsub(SQUAWKSTRING, '9', '0')
SQUAWK = tonumber(SQUAWKSTRING)
if SQUAWK == 7500 then SQUAWK = 7550 end
if SQUAWK < 0 then SQUAWK = 7000 end
end
do_on_mouse_wheel("radio_limiter()")
画面の右下にマウスを持っていくと表示される。クリックやマウスホイールが使える
フローティングウインドウfloat_wnd_set_ondraw()の場合
関数では必ずこのようになる「function gps2w_ondraw(test_wnd, x, y)」太文字のところが必要になる。test_wndでウインドウを指定、xとyでそのウインドウの位置を指定することができる。
従ってクリック関数においても必ず位置関係が必要になる場合はこの(test_wnd, x, y)が付いてくることになる。
そして大事なことはクリックの場合、FlyWithLuaの一般的なクリック関数が使えない。
例えば、MOUSE_STATUS == “down”とかMOUSE_STATUS == “drag”等は使えない。
それとこれが必要、クリック関数「unction gps2w_onclick(test_wnd, x, y, state)」このように最後にstate(マウスダウン)を入れる必要がある。これをマウスダウンに使う。これは変数なので名前は何でも良い。
require("graphics")
-- datarefs --
local mag_var = dataref_table("sim/flightmodel/position/magnetic_variation") -- float n degrees local magnetic variation
local test_wnd = nil -- window handle
local winLeft, winTop, winRight, winBottom = 0,0,0,0 -- float_wnd_get_geometry
local dWidth, dHeight = 0,0 -- float_wnd_get_dimensions
-- functions ------------------------------------------------------------------
function gps2w_ondraw(test_wnd, x, y)
dWidth, dHeight = float_wnd_get_dimensions(test_wnd)
winLeft, winTop, winRight, winBottom = float_wnd_get_geometry(test_wnd)
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- draw box around window
XPLMSetGraphicsState(0,0,0,1,1,0,0)
graphics.set_color(1,1,1,0.3)
graphics.draw_rectangle(x+18, y+205, x+75, y+220) --長方形を描く
draw_string(winLeft+20,winTop-152, "Q-Search","red")
end -- function gps2w_ondraw
function gps2w_onclick(test_wnd, x, y, state)
-- ボタンダウンアクション
if (state == 1) then
if (x >= 18 and x <= 75 and y >= 205 and y <= 220) then--865 877
command_once("sim/flight_controls/flaps_up")
end
end -- if state
end -- function gps2w_onclick
-- window close
function gps2w_onclose(test_wnd)
float_wnd_destroy(test_wnd)
end
test_wnd = float_wnd_create(171, 362, 1, false)
float_wnd_set_title(test_wnd, "gps2w_xp11")
float_wnd_set_position(test_wnd, 180, 150)
float_wnd_set_ondraw(test_wnd, "gps2w_ondraw")
float_wnd_set_onclick(test_wnd, "gps2w_onclick")
float_wnd_set_onclose(test_wnd, "gps2w_onclose")
float_wnd_set_imgui_builder()の場合
ボタンのデフォルトと押したときの色を変える
imgui.Button(およびimgui.ImageButton)の色は、次の3つの方法で制御できる。
imgui.PushStyleColor(imgui.constant.Col.Button, 0x00404040 )–デフォルト状態
imgui.PushStyleColor(imgui.constant.Col.ButtonHovered, 0x40404040)–マウスが乗った状態
imgui.PushStyleColor(imgui.constant.Col.ButtonActive, 0x80404040)–マウスクリック時の状態
最後のButtonActiveはマウスでクリックした瞬間に色が変化する。
さらに、ボタンのテキストの色は、以下の方法で設定できる。「x」の後の最初の2桁には、アルファチャンネルまたは透明度の値が含まれている。(それが完全に正確かどうかはわかりません。)0x00で始まるこれらの値は、完全に透過的であるため、表示から隠されて見えなくなる。
imgui.PushStyleColor(imgui.constant.Col.Text, 0x00FFFFFF)
command_once–一度だけ
command_begin–beginとは始める(始まり)その後も続く
command_end--止める
imgui.IsItemActive()
ボタントグル
ボタンを押すとテキストの色がグリーンから赤色に変わる。更にボタンを押すと交互に色が変わるというトグルスイッチになる。
if not SUPPORTS_FLOATING_WINDOWS then
-- to make sure the script doesn't stop old FlyWithLua versions
logMsg("imgui not supported by your FlyWithLua version")
return
end
-- imgui only works inside a floating window, so we need to create one first:
demo_wnd = float_wnd_create(100, 150, 1, true)
float_wnd_set_title(demo_wnd, "imgui Demo")
float_wnd_set_imgui_builder(demo_wnd, "build_demo")
float_wnd_set_onclose(demo_wnd, "closed_demo")
--ポジションが抜けている
makeRed = false --初期は赤色でない
text = ""
function build_demo(wnd, x, y)
-- 次の関数はボタンを作成します。
if imgui.Button("Push Me") then
-- Button関数は、指定されたラベルでボタンを作成します。 ボタンが離された瞬間にtrueを返します。
--つまり、ifステートメントを使用して、ボタンの背後にあるアクションを実行する必要があるかどうかを確認します。
--ボタンを変数に切り替えましょう:
makeRed = not makeRed --falseの否定になるのでtrueを返す(trueとfalseを繰り返す)
end
-- 変数を使用してテキストの色を変更します
if makeRed then --makeRedはtrueなので赤を表示
imgui.PushStyleColor(imgui.constant.Col.Text, 0xFF0000FF)--レッド(最初にボタンを押したらこの色に変化)
else
imgui.PushStyleColor(imgui.constant.Col.Text, 0xFF00FF00)--ライトグリーン(ボタンを押さない最初はこの色)
end
imgui.TextUnformatted("Some Text")
imgui.PopStyleColor()
end
マウスの設定でスライダーの動きをコントロール

-- Move2Position Window
-- William R. Good Ver. 1.1 07-16-18
if not SUPPORTS_FLOATING_WINDOWS then
-- to make sure the script doesn't stop old FlyWithLua versions
logMsg("imgui not supported by your FlyWithLua version")
return
end
dataref("PilotHeadX_mtp", "sim/graphics/view/pilots_head_x", "readonly")
dataref("PilotHeadY_mtp", "sim/graphics/view/pilots_head_y", "readonly")
dataref("PilotHeadZ_mtp", "sim/graphics/view/pilots_head_z", "readonly")
dataref("PilotHeadPSI_mtp", "sim/graphics/view/pilots_head_psi", "readonly")
dataref("PilotHeadTHE_mtp", "sim/graphics/view/pilots_head_the", "readonly")
dataref("PilotHeadPHI_mtp", "sim/graphics/view/pilots_head_phi", "readonly")
mtp_continue1 = 0
mtp_continue2 = 0
mtp_continue3 = 0
mtp_continue4 = 0
mtp_continue5 = 0
mtp_continue6 = 0
mtp_continue7 = 0
mtp_continue8 = 0
left_move_continue = 0
right_move_continue = 0
forward_move_continue = 0
backward_move_continue = 0
up_move_continue = 0
down_move_continue = 0
station1_step_number = 0
station2_step_number = 0
station3_step_number = 0
station4_step_number = 0
station5_step_number = 0
left_limit = 0
right_limit = 0
forward_limit = 0
backward_limit = 0
up_limit = 0
down_limit = 0
mtp_loop = 0
function mtp_on_build(mtp_wnd, x, y)
imgui.Button("Move Left")
if imgui.IsItemActive() then
if PilotHeadX_mtp > left_limit then
if mtp_continue1 < 1 then
command_begin("sim/general/left_fast")
mtp_continue1 = 1
end
end
end
imgui.SameLine()
imgui.TextUnformatted(" ")
imgui.SameLine()
-- The following function creates a slider:
local changed, newVal = imgui.SliderFloat("LML", left_limit, -30, 10, "Left Move Limit: %.5f")
if changed then
left_limit = newVal
end
imgui.TextUnformatted("")
imgui.Button("Move Right")
if imgui.IsItemActive() then
if PilotHeadX_mtp < right_limit then
if mtp_continue2 < 1 then
command_begin("sim/general/right_fast")
mtp_continue2 = 1
end
end
end
imgui.SameLine()
imgui.TextUnformatted(" ")
imgui.SameLine()
-- The following function creates a slider:
local changed, newVal = imgui.SliderFloat("RML", right_limit, -10, 30, "Right Move Limit: %.5f")
if changed then
right_limit = newVal
end
imgui.TextUnformatted("")
imgui.Button("Move Forward")
if imgui.IsItemActive() then
if PilotHeadZ_mtp > forward_limit then
if mtp_continue3 < 1 then
command_begin("sim/general/forward_fast")
mtp_continue3 = 1
end
end
end
imgui.SameLine()
imgui.TextUnformatted(" ")
imgui.SameLine()
-- The following function creates a slider:
local changed, newVal = imgui.SliderFloat("FML", forward_limit, -30, 10, "Forward Move Limit: %.5f")
if changed then
forward_limit = newVal
end
imgui.TextUnformatted("")
imgui.Button("Move Backward")
if imgui.IsItemActive() then
if PilotHeadZ_mtp < backward_limit then
if mtp_continue4 < 1 then
command_begin("sim/general/backward_fast")
mtp_continue4 = 1
end
end
end
imgui.SameLine()
imgui.TextUnformatted(" ")
imgui.SameLine()
-- The following function creates a slider:
local changed, newVal = imgui.SliderFloat("BML", backward_limit, -10, 30, "Backward Move Limit: %.5f")
if changed then
backward_limit = newVal
end
imgui.TextUnformatted("")
imgui.Button("Move Up")
if imgui.IsItemActive() then
if PilotHeadY_mtp < up_limit then
if mtp_continue5 < 1 then
command_begin("sim/general/up_fast")
mtp_continue5 = 1
end
end
end
imgui.SameLine()
imgui.TextUnformatted(" ")
imgui.SameLine()
-- The following function creates a slider:
local changed, newVal = imgui.SliderFloat("UML", up_limit, -30, 10, "Up Move Limit: %.5f")
if changed then
up_limit = newVal
end
imgui.TextUnformatted("")
imgui.Button("Move Down")
if imgui.IsItemActive() then
if PilotHeadY_mtp > down_limit then
if mtp_continue6 < 1 then
command_begin("sim/general/down_fast")
mtp_continue6 = 1
end
end
end
imgui.SameLine()
imgui.TextUnformatted(" ")
imgui.SameLine()
-- The following function creates a slider:
local changed, newVal = imgui.SliderFloat("DML", down_limit, -10, 30, "Down Move Limit: %.5f")
if changed then
down_limit = newVal
end
imgui.TextUnformatted("")
imgui.Button("Kill All Movement", 150, 75)
if imgui.IsItemActive() then
mtp_continue1 = 0
mtp_continue2 = 0
mtp_continue3 = 0
mtp_continue4 = 0
mtp_continue5 = 0
mtp_continue6 = 0
mtp_continue7 = 0
mtp_continue8 = 0
left_move_continue = 0
right_move_continue = 0
forward_move_continue = 0
backward_move_continue = 0
up_move_continue = 0
down_move_continue = 0
station1_step_number = 0
station2_step_number = 0
station3_step_number = 0
station4_step_number = 0
station5_step_number = 0
command_end("sim/general/left_fast")
command_end("sim/general/right_fast")
command_end("sim/general/forward_fast")
command_end("sim/general/backward_fast")
command_end("sim/general/up_fast")
command_end("sim/general/down_fast")
command_once("sim/flight_controls/door_close_1")
end
imgui.TextUnformatted("")
-- First test of my walk around preflight
imgui.Button("Go to First Station")
if imgui.IsItemActive() then
first_station = 1
station1_step_number = 1
end
if first_station == 1 then
if station1_step_number == 1 then
command_once("sim/flight_controls/door_open_1")
if mtp_loop < 100 then
mtp_loop = mtp_loop + 1
if mtp_loop == 90 then
mtp_loop = 0
station1_step_number = 2
end
end
end
if station1_step_number == 2 then
if PilotHeadX_mtp > - 2.0 then
if left_move_continue < 1 then
command_begin("sim/general/left_fast")
left_move_continue = 1
end
else
left_move_continue = 0
command_end("sim/general/left_fast")
if mtp_loop < 100 then
mtp_loop = mtp_loop + 1
if mtp_loop == 90 then
mtp_loop = 0
station1_step_number = 3
end
end
end
end
if station1_step_number == 3 then
if PilotHeadY_mtp > 0.0 then
if down_move_continue < 1 then
command_begin("sim/general/down_fast")
down_move_continue = 1
end
else
down_move_continue = 0
command_end("sim/general/down_fast")
if mtp_loop < 100 then
mtp_loop = mtp_loop + 1
if mtp_loop == 90 then
mtp_loop = 0
station1_step_number = 4
end
end
end
end
if station1_step_number == 4 then
if PilotHeadZ_mtp < 5.5 then
if backward_move_continue < 1 then
command_begin("sim/general/backward_fast")
backward_move_continue = 1
end
else
backward_move_continue = 0
command_end("sim/general/backward_fast")
if mtp_loop < 100 then
mtp_loop = mtp_loop + 1
if mtp_loop == 90 then
mtp_loop = 0
station1_step_number = 5
end
end
end
end
if station1_step_number == 5 then
if PilotHeadX_mtp < - 1.34 then
if right_move_continue < 1 then
command_begin("sim/general/right_fast")
right_move_continue = 1
end
else
right_move_continue = 0
command_end("sim/general/right_fast")
first_station = 0
station1_step_number = 0
end
end
end
imgui.TextUnformatted("")
imgui.TextUnformatted("Pilots Head X Y Z")
imgui.TextUnformatted("")
PilotHeadX_mtpRound = tonumber(string.format("%.5f", PilotHeadX_mtp))
imgui.TextUnformatted(PilotHeadX_mtpRound)
imgui.SameLine()
imgui.TextUnformatted(" ")
imgui.SameLine()
PilotHeadY_mtpRound = tonumber(string.format("%.5f", PilotHeadY_mtp))
imgui.TextUnformatted(PilotHeadY_mtpRound)
imgui.SameLine()
imgui.TextUnformatted(" ")
imgui.SameLine()
PilotHeadZ_mtpRound = tonumber(string.format("%.5f", PilotHeadZ_mtp))
imgui.TextUnformatted(PilotHeadZ_mtpRound)
if imgui.IsMouseReleased then
if mtp_continue1 == 1 then
command_end("sim/general/left_fast")
mtp_continue1 = 0
end
if mtp_continue2 == 1 then
command_end("sim/general/right_fast")
mtp_continue2 = 0
end
if mtp_continue3 == 1 then
command_end("sim/general/forward_fast")
mtp_continue3 = 0
end
if mtp_continue4 == 1 then
command_end("sim/general/backward_fast")
mtp_continue4 = 0
end
if mtp_continue5 == 1 then
command_end("sim/general/up_fast")
mtp_continue5 = 0
end
if mtp_continue6 == 1 then
command_end("sim/general/down_fast")
mtp_continue6 = 0
end
mtp_continue1 = 0
mtp_continue2 = 0
mtp_continue3 = 0
mtp_continue4 = 0
mtp_continue5 = 0
mtp_continue6 = 0
mtp_continue7 = 0
mtp_continue8 = 0
end
end
mtp_wnd = nil
function mtp_show_wnd()
mtp_wnd = float_wnd_create(640, 480, 1, true)
float_wnd_set_title(mtp_wnd, "Move2Position Ver. 1.1 07-16-18")
float_wnd_set_imgui_builder(mtp_wnd, "mtp_on_build")
end
function mtp_hide_wnd()
if mtp_wnd then
float_wnd_destroy(mtp_wnd)
end
end
mtp_show_only_once = 0
mtp_hide_only_once = 0
function toggle_move2position()
mtp_show_window = not mtp_show_window
if mtp_show_window then
if mtp_show_only_once == 0 then
mtp_show_wnd()
mtp_show_only_once = 1
mtp_hide_only_once = 0
end
else
if mtp_hide_only_once == 0 then
mtp_hide_wnd()
mtp_hide_only_once = 1
mtp_show_only_once = 0
end
end
end
add_macro("Move2Position: open/close", "mtp_show_wnd()", "mtp_hide_wnd()", "deactivate")
create_command("FlyWithLua/move2position/show_toggle", "open/close move2position", "toggle_move2position()", "", "")