BeatSaberSongList.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Text;
  6. using UnityEngine;
  7. namespace SongBrowserPlugin.DataAccess
  8. {
  9. public class BeatSaberSongList : IBeatSaberSongList
  10. {
  11. private Logger _log = new Logger("BeatSaberSongList");
  12. /// <summary>
  13. /// Fetch the existing song list.
  14. /// </summary>
  15. /// <returns></returns>
  16. public List<LevelStaticData> AcquireSongList()
  17. {
  18. _log.Debug("AcquireSongList()");
  19. Stopwatch stopwatch = Stopwatch.StartNew();
  20. var gameScenesManager = Resources.FindObjectsOfTypeAll<GameScenesManager>().FirstOrDefault();
  21. var gameDataModel = PersistentSingleton<GameDataModel>.instance;
  22. List<LevelStaticData> songList = gameDataModel.gameStaticData.worldsData[0].levelsData.ToList();
  23. stopwatch.Stop();
  24. _log.Info("Acquiring Song List from Beat Saber took {0}ms", stopwatch.ElapsedMilliseconds);
  25. return songList;
  26. }
  27. /// <summary>
  28. /// Helper to overwrite the existing song list.
  29. /// </summary>
  30. /// <param name="newSongList"></param>
  31. public void OverwriteBeatSaberSongList(List<LevelStaticData> newSongList)
  32. {
  33. Stopwatch stopwatch = Stopwatch.StartNew();
  34. var gameDataModel = PersistentSingleton<GameDataModel>.instance;
  35. ReflectionUtil.SetPrivateField(gameDataModel.gameStaticData.worldsData[0], "_levelsData", newSongList.ToArray());
  36. stopwatch.Stop();
  37. _log.Info("Overwriting the beat saber song list took {0}ms", stopwatch.ElapsedMilliseconds);
  38. }
  39. }
  40. }