ジョイスティックの設定を機体別に保存する – FlyWithLua

2023年3月1日

飛行機別にジョイスティックの設定を保存するというスクリプト。

例えば、作成したluaスクリプトを「Scripts」フォルダに入れて、Cessna Skyhawk を起動する。
するとこのディレクトリにファイルが Resources/plugins/FlyWithLua/initial_assignments.txt が下のように自動的に作成される。

これがジョイスティックの基本設定ファイルになる。

次に、ジョイスティックの設定が終わって、メニューから以下のように保存する。

Save joystick assignments を選択数と新しく「joystick_C172.lua」ファイルが作成される。

スロットルのカーブを変更したが、どこが変更されたかが不明。一応「C172」のファイルだけは作成された。多分変更されれば以下のどこかが変更されるのだろう。
そして次回の起動でこの設定ファイルが読み込まれてジョイスティックが設定通りに使えるということになるのだと思う。これ以上興味が無いのでここまで。

-- Resources\plugins\FlyWithLua\initial_assignments.txt を Resources\plugins\FlyWithLua\Scripts\joystick_<PLANE_ICAO>.lua にコピーします。
-- 条件付き(機体別)で、飛行機がロードされると自動的にその機体のファイルがロードされます。
-- The script can be triggered via the FlyWithLua plugin macro menu: "Save joystick assignments".
-- スクリプトは、FlyWithLua プラグイン マクロ メニューの [Save joystick assignments:ジョイスティックの割り当てを保存] から実行できます。

-- インストール: Resources\plugins\FlyWithLua\Scripts にコピーして、X-Plane を再起動するか、LUA スクリプトをリロード(これではならない)します。

function copy_initial_assignments()
    -- まず、書き込み用のテキストファイルを開く必要があります。
   local infile
   if SYSTEM == "IBM" then  --WindowsとMac、どちらも使えるようにする。
       infile = io.open("Resources\\plugins\\FlyWithLua\\initial_assignments.txt", "r") --FlyWithLuaディレクトリにinitial_assignments.txtが作成される。
   else
       infile = io.open("Resources/plugins/FlyWithLua/initial_assignments.txt", "r")    --Macの場合?
    -- else
  --     textfile = io.open("Resources:plugins:FlyWithLua:initial_assignments.txt", "r")    --これでも使える?
   end

      -- まず、書き込み用のテキストファイルを開く必要があります。
   local outfile
   if SYSTEM == "IBM" then
       outfile = io.open(string.format("Resources\\plugins\\FlyWithLua\\Scripts\\joystick_%s.lua", PLANE_ICAO), "w") -- 開いている機体の名前「PLANE_ICAO」を「%s」に書き込む
   else
       outfile = io.open(string.format("Resources/plugins/FlyWithLua/Scripts/joystick_%s.lua", PLANE_ICAO), "w")
    -- else
  --     textfile = io.open("Resources:plugins:FlyWithLua:initial_assignments.txt", "w")
   end

   outfile:write(string.format('if PLANE_ICAO == "%s" then\n', PLANE_ICAO))
   if infile ~= nil then
       while true do
             linestring = infile:read() --infileを読み込む
             if linestring == nil then break end    --読み込みが空になったらbraakする
             outfile:write(string.format('    %s\n', linestring))   --outfileに書き込む
       end
   end
   outfile:write("end\n")
   outfile:close()

   infile:close()
end

add_macro("Save joystick assignments", "save_initial_assignments(); copy_initial_assignments()")