docs: def boundary_interaction(self, **kwargs):
          """
              Returns a list of Location4D objects
          """
          particle = kwargs.pop('particle')
          starting = kwargs.pop('starting')
          ending = kwargs.pop('ending')
  
          # shoreline
          if self.useshore:
              intersection_point = self._shoreline.intersect(start_point=starting.point, end_point=ending.point)
              if intersection_point:
                  # Set the intersection point.
                  hitpoint = Location4D(point=intersection_point['point'], time=starting.time + (ending.time - starting.time))
                  particle.location = hitpoint
  
                  # This relies on the shoreline to put the particle in water and not on shore.
                  resulting_point = self._shoreline.react(start_point=starting,
                                                          end_point=ending,
                                                          hit_point=hitpoint,
                                                          reverse_distance=self.reverse_distance,
                                                          feature=intersection_point['feature'],
                                                          distance=kwargs.get('distance'),
                                                          angle=kwargs.get('angle'),
                                                          azimuth=kwargs.get('azimuth'),
                                                          reverse_azimuth=kwargs.get('reverse_azimuth'))
                  ending.latitude = resulting_point.latitude
                  ending.longitude = resulting_point.longitude
                  ending.depth = resulting_point.depth
                  logger.debug("%s - hit the shoreline at %s.  Setting location to %s." % (particle.logstring(), hitpoint.logstring(),  ending.logstring()))
  
          # bathymetry
          if self.usebathy:
              if not particle.settled:
                  bintersect = self._bathymetry.intersect(start_point=starting, end_point=ending)
                  if bintersect:
                      pt = self._bathymetry.react(type='reverse', start_point=starting, end_point=ending)
                      logger.debug("%s - hit the bottom at %s.  Setting location to %s." % (particle.logstring(), ending.logstring(), pt.logstring()))
                      ending.latitude = pt.latitude
                      ending.longitude = pt.longitude
                      ending.depth = pt.depth
  
          # sea-surface
          if self.usesurface:
              if ending.depth > 0:
                  logger.debug("%s - rose out of the water.  Setting depth to 0." % particle.logstring())
                  ending.depth = 0
  
          particle.location = ending
          return