Tag: postęp offline

  • Progress Bar Idle Simulator v1.4

    Lista zmian

    Cienki panel nawigacji i menu w nagłówku

    Dodane:

    Cienki dolny panel nawigacji, pigułka, która powoduje automatyczne przewijanie do poszczególnych paneli Postęp, Sklep, Osiągnięcia, Prestiż. Każdy przycisk ma ikonę, etykietę i data-nav-target wskazujący sekcję; aktywna sekcja oznaczana jest przez aria-current="true".
    Menu nagłówka – jeden przycisk #menu-toggle (☰ Menu) z aria-expanded i aria-controls, rozwijający panel #header-menu z dotychczasowymi akcjami: motyw, język, bonusy, przełącznik offline, zapis, wczytanie, reset, ustawienia.
    Nowe klucze tłumaczeń: menuBtn, navProgress, navShop, navAchievements, navPrestige, ariaNav.

    Zmienione:

    Nagłówek na wąskich ekranach nie łamie się już w kolumnę – tytuł i akcje pozostają w jednym rzędzie (flex-direction: row), tytuł wyrównany do lewej.
    Toast przeniesiony wyżej (bottom: 88px), aby nie nachodził na tackę nawigacji; body otrzymuje padding-bottom: 72px.
    Sekcje `main .panel` dostały `scroll-margin-top` (`–anchor-offset`), żeby nagłówki nie chowały się pod przyklejonym headerem.
    Na ekranach ≤ 560 px tacka rozciąga się na całą szerokość, a etykiety tekstowe są ukrywane (zostają same ikony).
    Animacja rozwijania menu (menu-pop) jest wyłączana przy włączonym ograniczeniu animacji (html.reduce-motion).

    Favicon

    Dodane:

    ikonę dla strony w karcie, tzw. favicon

    Rozbudowana personalizacja

    Dodane:

    Modal ustawień (#settings-section) z przyciskiem ⚙️ Ustawienia w nagłówku, zamykany przyciskiem, kliknięciem w tło oraz klawiszem Escape.
    Wybór motywu – siatka #theme-grid z czterema motywami: ciemny (domyślny), jasny, sepia (ciepły) i midnight (głęboki granat). Motywy zdefiniowane jako zmienne CSS w [data-theme="..."].
    Przełącznik „Ogranicz animacje” (#reduce-motion-toggle) – niezależny od preferencji systemowych; klasa html.reduce-motion wyłącza animacje i przejścia, w tym animację paska postępu.
    Nowe zmienne CSS --bg-elev-3 i --header-bg, dzięki którym tło nagłówka i paneli reaguje na motyw (usunięto wcześniejszy wyjątek [data-theme="light"] .app-header).

    Zmienione:

    trapFocusInModal obsługuje teraz także modal ustawień (pułapka fokusa działa dla trzech okien: podsumowanie offline, ustawienia, bonusy).
    Escape zamyka kolejno: bonusy, podsumowanie offline i ustawienia.
    Stan ograniczenia animacji jest wczytywany przy starcie (`loadReduceMotion()`).

    Postęp offline

    Dodane:

    System postępu offline – gra nalicza zyski za czas nieobecności, z limitem zależnym od poziomu ulepszenia.
    9 poziomów limitu (OFFLINE_LEVELS): od 15 min (poziom 1) do 24 h (poziom 8), z kosztami od 100 do 72 900 punktów; poziom 4 wymaga wykonania pierwszego prestiżu.
    Wydajność offline: 50 % (OFFLINE_EFFICIENCY), minimalny naliczany czas: 60 s.
    Naliczanie uwzględnia prędkość bazową, ulepszenia prędkości, mnożnik punktów, prestiż i efekty osiągnięć.
    Nowe osiągnięcie „Pierwsza przerwa” (firstBreak, ☕) – 100 punktów; odblokowuje postęp offline.
    Modal „Witaj z powrotem!” (#offline-summary) z podsumowaniem: czas nieobecności, czas objęty limitem, czas ponad limit, wydajność, produkcja (pasków/h × punkty za pasek), przyznana nagroda, poziom limitu i następny poziom.
    Ulepszenie „Postęp offline” w sklepie (#offline-upgrade) z opisem stanu: zablokowane / dostępne / brak punktów / wymaga prestiżu / maksimum.
    Przełącznik offline w nagłówku (#offline-toggle) – włącza i wyłącza naliczanie postępu offline.
    Nowe klucze tłumaczeń (PL i EN) dla całego systemu offline oraz toasty toastOfflineGain i toastOfflineLevelBought.

    Zmienione:

    SAVE_VERSION podniesione z 2 → 3; dodana migracja migrateSaveV2toV3 (stare zapisy: funkcja zablokowana, poziom 0, włączona, bez rozliczenia).
    Zapis i odczyt stanu offline (offlineUnlocked, offlineLevel, offlineEnabled, offlineLastClaimTs); reset gry czyści te wartości i zamyka modal podsumowania.
    trapFocusInModal i obsługa Escape obejmują modal podsumowania offline.
    Prestiż ustawia offlineLastClaimTs, aby czas nieobecności liczyć od momentu resetu.
    updateUI() wywołuje updateOfflineToggleUI().

    Skrócony zapis liczb i bezpieczniejsze zapisy

    Dodane:

    Kompaktowy format liczb – formatTruncated używa sufiksów K, M, B, T, Qa, Qi, Sx, Sp, Oc, No, Dc (powyżej zakresu – notacja wykładnicza), z obcinaniem (nie zaokrąglaniem) części dziesiętnej.
    Autozapis z ograniczeniem częstotliwości – requestAutoSave() (min. 2 s między zapisami) oraz flushPendingSave() wywoływany przy beforeunload, pagehide i ukryciu karty (visibilitychange).
    Migracja zapisu v1 → v2 (migrateSave) – rozdzielenie liczników prestigeCount, totalEarned, runEarned, barsCompleted; totalEarned szacowany zachowawczo na podstawie progu zdobytych osiągnięć, aby nie cofnąć postępu.
    Funkcje walidacji safeNum / safeInt – wszystkie wartości wczytywane z zapisu są sprawdzane i ograniczane do dozwolonego zakresu.
    Kopia zapasowa uszkodzonego zapisu – przy błędzie wczytywania dane trafiają do IdleGameProgressBackup zamiast być usuwane.
    Zabezpieczenie pętli gry – TICK_BAR_GUARD (10 000) chroni przed zapętleniem przy skokach czasu; niefinitywne wartości prędkości i postępu są korygowane.

    Zmienione:

    Zapis obejmuje teraz saveVersion, prestigeCount, totalEarned, runEarned, barsCompleted.
    Warunek „stan czysty” przy autozapisie uwzględnia więcej liczników (m.in. totalEarned, barsCompleted, odblokowane style).
    Wczytywanie filtruje nieznane identyfikatory osiągnięć, waliduje indeksy stylów wyglądu i znaczniki czasu osiągnięć.
    Koszty ulepszeń i wartości prestiżu wyświetlane przez formatTruncated; przyciski pokazują „maks. poziom” po osiągnięciu limitu.
    prestigeCount zwiększany przy każdym prestiżu; runEarned zerowany przy prestiżu.

    Poprawki interfejsu

    Zmienione:

    Korekty w skryptach dotyczące aktualizacji interfejsu i obsługi stanu gry
    Drobne poprawki w kodzie gry

    Kompaktowe formatowanie liczb

    Dodane:

    Funkcje pomocnicze truncTo(value, decimals) i formatTruncated(value, decimals, { fixed }) – obcinają część dziesiętną zamiast zaokrąglać, a od wartości 1000 rezygnują z części ułamkowej.

    Zmienione:

    Formatowanie objęło wyświetlanie punktów, prędkości, mnożnika i mnożnika prestiżu – liczby w dłuższej fazie gry nie rozjeżdżają już interfejsu.
    Wygląd liczb we wczesnej fazie gry pozostał bez zmian.