Сейчас я вам приоткрою тайну.
Загрузка в игре — процесс сильно нелинейный.
В нее входят:
* чтение с диска
* раскаповка и другие преобразования прочитанных данных
* десериализация объектов
* заполнение внутренних структур
* разметка квестовых стадий, положений
* и еще куча всего, в зависимости от сложности игры, продвинутости/кринжовости движка, et cetera, et cetera
Часть из них — операции быстрые. Часть сильно зависит от конфигурации. Часть может выполняться параллельно, из них некоторые действительно так и выполняются, а другие по разным причинам — нет.
Поэтому, чтобы показать процесс загрузки в виде прогрессбара, нужно разметить процесс загрузки на условные стадии.
я по сути писал в коде: А теперь дойди до 20%»
Скажем, декодирование глобальной карты занимает условно 20% в среднем условных попугаев в процессе загрузки и возвращает готовый к использованию объект. Значит, есть два варианта: или инкрементировать прогресс бар сразу после окончания декодирования на эти 20%, или переписать функцию декодирования так, чтобы она время от времени дергала коллбэк прогрессбара, отчитываясь о том, сколько она успела обработать.
Второе, конечно же, сложнее.
Кстати, каждая стадия тоже не всегда линейна, даже простое чтение с диска или копирование в памяти. А еще стадия может делиться на подстадии, и так далее.
То есть, "простой" прогрессбар — на деле оказывается замороченным графом.
Думаю, тут уже становится ясно, что совершенно правильно
геймеры не верят в загрузку с равномерной скоростью
Подходы к отображению прогрессбара тоже разнятся.
Кто-то крутит циклическую анимацию, потому что это проще, ее можно вообще крутить в отдельном потоке.
Кто-то заморачивается и показывает нормированную полоску, как SeriousSam.
Некоторые подробно показывают отдельные стадии, как V Rising.
Ну а иные вообще игрока за человека не считают (или считают, но за очень тупого), и ограничиваются надписью, типа "Loading…".
Что из это следует?
Полоса — не ложная. Она — сложная.
(за последнюю фразу — спасибо @TalismanChick, #comment_277689116)