diff --git a/ArduPlane/ArduPlane.cpp b/ArduPlane/ArduPlane.cpp index 314faafba5..09a023795c 100644 --- a/ArduPlane/ArduPlane.cpp +++ b/ArduPlane/ArduPlane.cpp @@ -536,6 +536,13 @@ void Plane::update_alt() update_flight_stage(); +#if AP_SCRIPTING_ENABLED + if (plane.nav_scripting.enabled) { + // don't call TECS while we are in a trick + return; + } +#endif + if (control_mode->does_auto_throttle() && !throttle_suppressed) { float distance_beyond_land_wp = 0; diff --git a/ArduPlane/mode_cruise.cpp b/ArduPlane/mode_cruise.cpp index 4b3b76b250..169c649456 100644 --- a/ArduPlane/mode_cruise.cpp +++ b/ArduPlane/mode_cruise.cpp @@ -28,6 +28,15 @@ void ModeCruise::update() lock_timer_ms = 0; } +#if AP_SCRIPTING_ENABLED + if (plane.nav_scripting.enabled) { + // while a trick is running unlock heading and zero altitude offset + locked_heading = false; + lock_timer_ms = 0; + plane.set_target_altitude_current(); + } +#endif + if (!locked_heading) { plane.nav_roll_cd = plane.channel_roll->norm_input() * plane.roll_limit_cd; plane.update_load_factor(); @@ -43,6 +52,12 @@ void ModeCruise::update() */ void ModeCruise::navigate() { +#if AP_SCRIPTING_ENABLED + if (plane.nav_scripting.enabled) { + // don't try to navigate while running trick + return; + } +#endif if (!locked_heading && plane.channel_roll->get_control_in() == 0 && plane.rudder_input() == 0 && diff --git a/ArduPlane/mode_loiter.cpp b/ArduPlane/mode_loiter.cpp index 1e9b7b6175..58eb240b81 100644 --- a/ArduPlane/mode_loiter.cpp +++ b/ArduPlane/mode_loiter.cpp @@ -27,6 +27,14 @@ void ModeLoiter::update() plane.calc_nav_pitch(); plane.calc_throttle(); } + +#if AP_SCRIPTING_ENABLED + if (plane.nav_scripting.enabled) { + // while a trick is running we reset altitude + plane.set_target_altitude_current(); + plane.next_WP_loc.set_alt_cm(plane.target_altitude.amsl_cm, Location::AltFrame::ABSOLUTE); + } +#endif } bool ModeLoiter::isHeadingLinedUp(const Location loiterCenterLoc, const Location targetLoc) @@ -91,6 +99,13 @@ void ModeLoiter::navigate() plane.next_WP_loc.set_alt_cm(plane.target_altitude.amsl_cm, Location::AltFrame::ABSOLUTE); } +#if AP_SCRIPTING_ENABLED + if (plane.nav_scripting.enabled) { + // don't try to navigate while running trick + return; + } +#endif + // Zero indicates to use WP_LOITER_RAD plane.update_loiter(0); }