private float MoveShape(ShapePipePair pair, float dt)
    {
        GameShape shape = pair.Shape;
        GamePipe  pipe  = pair.AttachedPipe;

        float   distanceTravelled   = dt * shape.Speed;
        float   percentualTravelled = shape.PercentualTraveled + distanceTravelled;
        Vector3 newPosition         = pipe.GetPositionFromPercentual(percentualTravelled);

        shape.UpdatePosition(percentualTravelled, newPosition);
        return(percentualTravelled);
    }