DanceSubtitleMgr.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using System;
  2. using System.Collections.Generic;
  3. using I2.Loc;
  4. using UnityEngine;
  5. public class DanceSubtitleMgr : PartsMgrBase
  6. {
  7. protected override void Start()
  8. {
  9. base.Start();
  10. base.IsActive &= (DanceMain.SelectDanceData != null);
  11. base.IsActive &= DanceSetting.Settings.IsSubtitleOn;
  12. if (!base.IsActive)
  13. {
  14. base.gameObject.SetActive(false);
  15. return;
  16. }
  17. this.m_SubtitleUI.SetActive(false);
  18. string csv_path = RhythmAction_Mgr.Instance.MusicCSV_Path + "dance_subtitle.nei";
  19. KasaiUtility.CsvReadY(csv_path, delegate(CsvParser csv, int cy)
  20. {
  21. int num = 0;
  22. DanceSubtitleMgr.SubtitleData subtitleData = new DanceSubtitleMgr.SubtitleData();
  23. subtitleData.ID = csv.GetCellAsInteger(num++, cy);
  24. subtitleData.StartTime = csv.GetCellAsReal(num++, cy);
  25. subtitleData.EndTime = csv.GetCellAsReal(num++, cy);
  26. subtitleData.TranslationKey = csv.GetCellAsString(num++, cy);
  27. this.m_SubtitleDataList.Add(subtitleData);
  28. }, 1, delegate
  29. {
  30. Debug.Log(csv_path + "が見つからなかったので、ダンスの字幕を非表示にします。");
  31. this.gameObject.SetActive(false);
  32. });
  33. }
  34. private void DrawSubtitle()
  35. {
  36. float danceTimer = RhythmAction_Mgr.Instance.DanceTimer;
  37. string str = DanceMain.SelectDanceData.SubtitleSheetName + "/";
  38. string currentLanguageCode = LocalizationManager.CurrentLanguageCode;
  39. foreach (DanceSubtitleMgr.SubtitleData subtitleData in this.m_SubtitleDataList)
  40. {
  41. if (subtitleData.EndTime <= danceTimer)
  42. {
  43. if (subtitleData.SubtitleUI)
  44. {
  45. UnityEngine.Object.DestroyImmediate(subtitleData.SubtitleUI);
  46. this.m_SubtitleUIGrid.UpdateChildUI();
  47. }
  48. }
  49. else if (subtitleData.StartTime <= danceTimer && !subtitleData.SubtitleUI)
  50. {
  51. string term = str + subtitleData.TranslationKey;
  52. string translation = LocalizationManager.GetTranslation(term, true, 0, true, false, null, currentLanguageCode);
  53. if (!string.IsNullOrEmpty(translation))
  54. {
  55. subtitleData.SubtitleUI = UnityEngine.Object.Instantiate<GameObject>(this.m_SubtitleUI, this.m_SubtitleUIGrid.transform, false);
  56. subtitleData.SubtitleUI.SetActive(true);
  57. UILabel component = subtitleData.SubtitleUI.GetComponent<UILabel>();
  58. component.text = translation;
  59. if (component.width > this.m_NewLineWidthSize)
  60. {
  61. component.overflowMethod = UILabel.Overflow.ResizeHeight;
  62. component.width = this.m_NewLineWidthSize;
  63. component.ProcessText();
  64. }
  65. this.m_SubtitleUIGrid.UpdateChildUI();
  66. }
  67. }
  68. }
  69. }
  70. public override void StartAction()
  71. {
  72. RhythmAction_Mgr.Instance.StartTimeCroutine(new Action(this.DrawSubtitle), null);
  73. }
  74. private List<DanceSubtitleMgr.SubtitleData> m_SubtitleDataList = new List<DanceSubtitleMgr.SubtitleData>();
  75. [SerializeField]
  76. [Header("使い回し用オブジェクト")]
  77. private GameObject m_SubtitleUI;
  78. [SerializeField]
  79. [Header("字幕UIの親")]
  80. private DynamicUIGrid m_SubtitleUIGrid;
  81. [SerializeField]
  82. [Header("表示領域の横サイズがこれ以上になったら改行")]
  83. private int m_NewLineWidthSize = 930;
  84. private class SubtitleData
  85. {
  86. public int ID;
  87. public float StartTime;
  88. public float EndTime;
  89. public string TranslationKey;
  90. public GameObject SubtitleUI;
  91. }
  92. }