Class PreferencesManager

java.lang.Object
com.prineside.tdi2.Manager.ManagerAdapter
com.prineside.tdi2.managers.PreferencesManager
All Implemented Interfaces:
com.badlogic.gdx.utils.Disposable, Manager

public class PreferencesManager extends Manager.ManagerAdapter
Preferences are stored in different places: - Local preference files (default Preferences provided by LibGDX - XML file with key-value string pairs, stored as an encrypted base64) Method: getLegacyPropertiesInstance() (returns an instance for loading / saving data) Stored data: properties split into 4 different categories (ids are Config.PREFERENCES_NAMES), require migration - Cloud saves (base64 encoded string of the legacy properties, not encrypted) Method: saveSnapshotAsString(new Array<>(Config.PREFERENCES_NAMES) Method: loadFromCompactBase64(dataJson.asString(), true) - As backups on the server (same as Cloud saves - base64 string) Method: saveSnapshotAsString(new Array<>(Config.PREFERENCES_NAMES)) Method: loadFromUrl(url) which basically uses loadFromCompactBase64(progressBase64) Game must be able to load previous versions of encoded data from any of the mentioned places.

To simplify the migration progress, we must load all of the data listed above into a single common storage format (basically an ObjectMap of strings per type of properties). What kind of data we must support to load legacy properties: - Legacy encoded local property files - Base64 encoded byte arrays of properties (from cloud saves and backups)

New storage format: deflated Json string with key-value pairs for individual properties If transferred over the network - encoded in base64 (cloud saves / backups)

Local properties are no longer stored in LibGDX-provided Properties. Instead, properties are stored locally to the game: - saves/settings.bin - for Settings properties (also stores user session) - saves/progress.bin - for Progress properties Steam Cloud synchronizes saves/ folder. If another progress save file will be required later (for example, seasonal or server-sync progress), it can be stored as a file with a different name (no need to manage saves on a different screen)

  • Field Details

  • Constructor Details

    • PreferencesManager

      public PreferencesManager()
  • Method Details

    • setup

      public void setup()
      Description copied from interface: Manager
      Вызывается, когда объекты всех менеджеров созданы и можно к ним обращаться
      Specified by:
      setup in interface Manager
      Overrides:
      setup in class Manager.ManagerAdapter
    • getLegacyPreferences

      public LegacyPreferences getLegacyPreferences()
    • getPrefMapForProgressSaveFile

      @Null public RegularPrefMap getPrefMapForProgressSaveFile()
    • getPrefMapForSettingsSaveFile

      @Null public RegularPrefMap getPrefMapForSettingsSaveFile()
    • getProgressPrefs

      public ProgressPrefs getProgressPrefs()
      Returns:
      progress-related preferences. Player can have multiple saved games that may be stored in cloud / backups Progress preferences contain ID of the owner (playerid) so that they can't be shared or mistakenly duplicated
    • getSettingsPrefs

      public SettingsPrefs getSettingsPrefs()
      Returns:
      settings-related preferences which does not affect the progress. Usually stored locally / are device-specific and are not stored in cloud / backups For security reasons, these settings are not backed up / stored in cloud / replays since 1.9.0
    • saveNowIfRequired

      public void saveNowIfRequired()
      Save all preferences to files immediately
    • loadFromUrl

      public void loadFromUrl(String url, ObjectConsumer<Boolean> cb)
      Legacy Used to restore backups of properties Uses loadFromCompactBase64() internally
    • fromBase64

      public void fromBase64(String dataStr)
      Parameters:
      dataStr - legacy or new format - legacy stores all preferences. Migration will be performed if necessary, and both progress / settings preferences may be affected - new stores a single type of preferences Warning: legacy settings preferences will be ignored. Not a big deal
    • fromBytes

      public void fromBytes(byte[] data, int offset, int size)
    • progressPrefsToBase64

      public String progressPrefsToBase64()
    • settingsPrefsToBase64

      public String settingsPrefsToBase64()
    • dispose

      public void dispose()
      Description copied from interface: com.badlogic.gdx.utils.Disposable
      Releases all resources of this object.
      Specified by:
      dispose in interface com.badlogic.gdx.utils.Disposable
      Overrides:
      dispose in class Manager.ManagerAdapter
    • addListener

      public void addListener(PreferencesManager.PreferencesManagerListener listener)
    • removeListener

      public void removeListener(PreferencesManager.PreferencesManagerListener listener)
    • reapplyAllPreferences

      public void reapplyAllPreferences()
    • resetProgress

      public void resetProgress()
      Reset progress in Settings - Removes progress-related preferences (local files and runtime data) - Deletes all replays - Resets cloud save slot in settings preferences - Removes issued items log - Finally reapplies preferences (event)