docs: def map_dual_axis(low, high, centre, dead_zone, hot_zone, value):
      """
      Map an axis with a central dead zone and hot zones at each end to a range from -1.0 to 1.0. This in effect uses two
      calls to map_single_axis, choosing whether to use centre and low, or centre and high as the low and high values in
      that call based on which side of the centre value the input value falls. This is the call that handles mapping of
      values on regular joysticks where there's a centre point to which the physical control returns when no input is
      being made.
  
      :param low:
          The raw value corresponding to the strongest negative input (stick far left / down).
      :param high:
          The raw value corresponding to the strongest positive input (stick far right / up).
      :param centre:
          The raw value corresponding to the resting position of the axis when no user interaction is happening.
      :param dead_zone:
          The proportion of each (positive and negative) part of the motion away from the centre which should result in
          an output of 0.0
      :param hot_zone:
          The proportion of each (positive and negative) part of the motion away from each extreme end of the range which
          should result in 1.0 or -1.0 being returned (depending on whether we're on the high or low side of the centre
          point)
      :param value:
          The raw value to map
      :return:
          The filtered and clamped value, from -1.0 at low to 1.0 at high, with a centre as specified mapping to 0.0
      """
      if value <= centre:
          return map_single_axis(centre, low, dead_zone, hot_zone, value)
      else:
          return map_single_axis(centre, high, dead_zone, hot_zone, value)