// This is called by FixedUpdate(), but with a quick exit if there is no change. private void SetUserMode(bool force = false) { if (force || (userMode != curMode)) { switch (userMode) { case DroneMode.Follow: SetFollowMode(); break; case DroneMode.Hover: SetHoverMode(); break; case DroneMode.Land: SetLandMode(); break; case DroneMode.Maintain: SetMaintainMode(); break; case DroneMode.Manual: SetManualMode(); break; case DroneMode.Patrol: SetPatrolMode(); break; default: SetMaintainMode(); break; } } // Adjust the targetBehavior if necessary. if (userMode == DroneMode.Follow && (force || userFollowMode != curFollowMode)) { switch (userFollowMode) { case DroneFollowMode.Constrained: targetBehavior = targetConstrainedBehavior; curFollowMode = DroneFollowMode.Constrained; break; default: targetBehavior = targetDirectBehavior; curFollowMode = DroneFollowMode.Direct; break; } } }