ProgressBar.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. using HMUI;
  2. using SongLoaderPlugin;
  3. using SongLoaderPlugin.OverrideClasses;
  4. using System;
  5. using System.Collections;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using TMPro;
  11. using UnityEngine;
  12. using UnityEngine.SceneManagement;
  13. namespace SongBrowser.UI
  14. {
  15. // Modified version of:
  16. // https://raw.githubusercontent.com/xyonico/BeatSaberSongLoader/master/SongLoaderPlugin/ProgressBar.cs
  17. // - Removed loading bar
  18. // -
  19. public class ProgressBar : MonoBehaviour
  20. {
  21. private Canvas _canvas;
  22. private TMP_Text _authorNameText;
  23. private TMP_Text _pluginNameText;
  24. private TMP_Text _headerText;
  25. private Image _loadingBackg;
  26. private static readonly Vector3 Position = new Vector3(0, -0.60f, 2.5f);
  27. private static readonly Vector3 Rotation = new Vector3(0, 0, 0);
  28. private static readonly Vector3 Scale = new Vector3(0.01f, 0.01f, 0.01f);
  29. private static readonly Vector2 CanvasSize = new Vector2(200, 50);
  30. private const string AuthorNameText = "halsafar's";
  31. private const float AuthorNameFontSize = 7f;
  32. private static readonly Vector2 AuthorNamePosition = new Vector2(10, 31);
  33. private const string PluginNameText = "Song Browser Plugin <size=75%>" + Plugin.VERSION_NUMBER + "</size>";
  34. private const float PluginNameFontSize = 9f;
  35. private static readonly Vector2 PluginNamePosition = new Vector2(10, 23);
  36. private static readonly Vector2 HeaderPosition = new Vector2(10, 15);
  37. private static readonly Vector2 HeaderSize = new Vector2(100, 20);
  38. private const string HeaderText = "Processing songs...";
  39. private const float HeaderFontSize = 15f;
  40. private static readonly Vector2 LoadingBarSize = new Vector2(100, 10);
  41. private static readonly Color BackgroundColor = new Color(0, 0, 0, 0.2f);
  42. private bool _showingMessage;
  43. public static ProgressBar Create()
  44. {
  45. return new GameObject("Progress Bar").AddComponent<ProgressBar>();
  46. }
  47. public void ShowMessage(string message, float time)
  48. {
  49. StopAllCoroutines();
  50. _showingMessage = true;
  51. _headerText.text = message;
  52. _loadingBackg.enabled = false;
  53. _canvas.enabled = true;
  54. StartCoroutine(DisableCanvasRoutine(time));
  55. }
  56. public void ShowMessage(string message)
  57. {
  58. StopAllCoroutines();
  59. _showingMessage = true;
  60. _headerText.text = message;
  61. _loadingBackg.enabled = false;
  62. _canvas.enabled = true;
  63. }
  64. private void OnEnable()
  65. {
  66. SceneManager.activeSceneChanged += SceneManagerOnActiveSceneChanged;
  67. SongBrowserModel.didFinishProcessingSongs += SongBrowserFinishedProcessingSongs;
  68. }
  69. private void OnDisable()
  70. {
  71. SceneManager.activeSceneChanged -= SceneManagerOnActiveSceneChanged;
  72. SongBrowserModel.didFinishProcessingSongs -= SongBrowserFinishedProcessingSongs;
  73. }
  74. private void SceneManagerOnActiveSceneChanged(Scene oldScene, Scene newScene)
  75. {
  76. if (newScene.name == SongLoader.MenuSceneName)
  77. {
  78. if (_showingMessage)
  79. {
  80. _canvas.enabled = true;
  81. }
  82. }
  83. else
  84. {
  85. _canvas.enabled = false;
  86. }
  87. }
  88. private void SongBrowserFinishedProcessingSongs(List<CustomLevel> arg2)
  89. {
  90. _showingMessage = false;
  91. _headerText.text = arg2.Count + " songs processed";
  92. _loadingBackg.enabled = false;
  93. StartCoroutine(DisableCanvasRoutine(5f));
  94. }
  95. private IEnumerator DisableCanvasRoutine(float time)
  96. {
  97. yield return new WaitForSecondsRealtime(time);
  98. _canvas.enabled = false;
  99. _showingMessage = false;
  100. }
  101. private void Awake()
  102. {
  103. gameObject.transform.position = Position;
  104. gameObject.transform.eulerAngles = Rotation;
  105. gameObject.transform.localScale = Scale;
  106. _canvas = gameObject.AddComponent<Canvas>();
  107. _canvas.renderMode = RenderMode.WorldSpace;
  108. _canvas.enabled = false;
  109. var rectTransform = _canvas.transform as RectTransform;
  110. rectTransform.sizeDelta = CanvasSize;
  111. _authorNameText = CustomUI.BeatSaber.BeatSaberUI.CreateText(_canvas.transform as RectTransform, AuthorNameText, AuthorNamePosition);
  112. rectTransform = _authorNameText.transform as RectTransform;
  113. rectTransform.SetParent(_canvas.transform, false);
  114. rectTransform.anchoredPosition = AuthorNamePosition;
  115. rectTransform.sizeDelta = HeaderSize;
  116. _authorNameText.text = AuthorNameText;
  117. _authorNameText.fontSize = AuthorNameFontSize;
  118. _pluginNameText = CustomUI.BeatSaber.BeatSaberUI.CreateText(_canvas.transform as RectTransform, PluginNameText, PluginNamePosition);
  119. rectTransform = _pluginNameText.transform as RectTransform;
  120. rectTransform.SetParent(_canvas.transform, false);
  121. rectTransform.sizeDelta = HeaderSize;
  122. rectTransform.anchoredPosition = PluginNamePosition;
  123. _pluginNameText.text = PluginNameText;
  124. _pluginNameText.fontSize = PluginNameFontSize;
  125. _headerText = CustomUI.BeatSaber.BeatSaberUI.CreateText(_canvas.transform as RectTransform, HeaderText, HeaderPosition);
  126. rectTransform = _headerText.transform as RectTransform;
  127. rectTransform.SetParent(_canvas.transform, false);
  128. rectTransform.anchoredPosition = HeaderPosition;
  129. rectTransform.sizeDelta = HeaderSize;
  130. _headerText.text = HeaderText;
  131. _headerText.fontSize = HeaderFontSize;
  132. _loadingBackg = new GameObject("Background").AddComponent<Image>();
  133. rectTransform = _loadingBackg.transform as RectTransform;
  134. rectTransform.SetParent(_canvas.transform, false);
  135. rectTransform.sizeDelta = LoadingBarSize;
  136. _loadingBackg.color = BackgroundColor;
  137. DontDestroyOnLoad(gameObject);
  138. }
  139. private void Update()
  140. {
  141. if (!_canvas.enabled) return;
  142. }
  143. }
  144. }