diff --git a/addon-menubar-items.xml b/addon-menubar-items.xml index f9dc594..27c1c4c 100644 --- a/addon-menubar-items.xml +++ b/addon-menubar-items.xml @@ -43,11 +43,6 @@ /addons/by-id/org.flightgear.addons.Aerotow/addon-devel/ai-model Cub - - property-assign - /addons/by-id/org.flightgear.addons.Aerotow/addon-devel/sound/enable - true - @@ -56,11 +51,6 @@ /addons/by-id/org.flightgear.addons.Aerotow/addon-devel/ai-model DR400 - - property-assign - /addons/by-id/org.flightgear.addons.Aerotow/addon-devel/sound/enable - true - @@ -69,11 +59,6 @@ /addons/by-id/org.flightgear.addons.Aerotow/addon-devel/ai-model c182 - - property-assign - /addons/by-id/org.flightgear.addons.Aerotow/addon-devel/sound/enable - true - @@ -84,7 +69,14 @@ nasal - + diff --git a/aerotow.nas b/aerotow.nas index 035066c..5ae5f79 100644 --- a/aerotow.nas +++ b/aerotow.nas @@ -41,7 +41,7 @@ var g_towListeners = []; var init = func () { # Listener for ai-model property triggered when the user select a tow aircraft from add-on menu append(g_towListeners, setlistener(ADDON_NODE_PATH ~ "/addon-devel/ai-model", func () { - startAerotow(); + restartAerotow(); })); append(g_towListeners, setlistener("/sim/presets/longitude-deg", func () { @@ -104,6 +104,44 @@ var uninit = func () { } } +# +# Function for restart AI scenario with delay when the sound has to stop. +# +# Return 1 on successful, otherwise 0. +# +var restartAerotow = func () { + messages.displayOk("Aerotow in the way"); + + # Stop playing engine sound + setprop(ADDON_NODE_PATH ~ "/addon-devel/sound/enable", 0); + + # Wait a second for the engine sound to turn off + var timer = maketimer(1, func () { + unloadScenario(); + }); + timer.singleShot = 1; + timer.start(); +} + +# +# Unload scenario and start a new one +# +var unloadScenario = func () { + if (g_isScenarioLoaded) { + var args = props.Node.new({ "name": SCENARIO_ID }); + if (fgcommand("unload-scenario", args)) { + g_isScenarioLoaded = 0; + } + } + + # Start aerotow with delay to avoid duplicate engine sound playing + var timer = maketimer(1, func () { + startAerotow(); + }); + timer.singleShot = 1; + timer.start(); +} + # # Main function to prepare AI scenario and run it. # @@ -111,8 +149,11 @@ var uninit = func () { # var startAerotow = func () { var args = props.Node.new({ "name": SCENARIO_ID }); + if (g_isScenarioLoaded) { - fgcommand("unload-scenario", args); + if (fgcommand("unload-scenario", args)) { + g_isScenarioLoaded = 0; + } } generateScenarioXml(); @@ -124,6 +165,8 @@ var startAerotow = func () { if (fgcommand("load-scenario", args)) { g_isScenarioLoaded = 1; messages.displayOk("Let's fly!"); + + setprop(ADDON_NODE_PATH ~ "/addon-devel/sound/enable", 1); return 1; }