def METHOD_NAME(self, val, t=None):
    """Reduce the impact of whatever change has been made to me, in
    proportion with my current friction.
    """
    t = t or time()
    hard_min = self.min
    hard_max = self.max
    if hard_min > hard_max:
        hard_min, hard_max = hard_max, hard_min
    gamut = hard_max - hard_min
    margin = (1.0 - self.body) * gamut
    soft_min = hard_min + margin
    soft_max = hard_max - margin
    distance = val - self.history[-1][1]
    reach = distance + self.value
    if (distance < 0 and reach < soft_min) or (
        distance > 0 and soft_max < reach
    ):
        distance -= distance * self.friction
    self.apply_distance(distance)
    self.history.append((t, val))
    if len(self.history) > self.max_history:
        self.history.pop(0)
    self.displacement += abs(distance)
    self.trigger_velocity_update()