1
0

Shot.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. using Il2Cpp;
  2. using Il2CppInterop.Runtime.Attributes;
  3. using MelonLoader;
  4. using System.Collections;
  5. using UnityEngine;
  6. using UnityEngine.Playables;
  7. namespace AudioMgr
  8. {
  9. public class Shot : MonoBehaviour
  10. {
  11. public Shot(IntPtr intPtr) : base(intPtr)
  12. {
  13. }
  14. private AudioSource _audioSource;
  15. private Setting _activeSetting;
  16. private bool _isEnabled = false;
  17. private AudioMaster.SourceType _sourceType;
  18. public enum PlayState { Stopped, Playing, Paused };
  19. private PlayState _playState = PlayState.Stopped;
  20. [HideFromIl2Cpp]
  21. public void Setup(AudioMaster.SourceType sourceType)
  22. {
  23. _sourceType = sourceType;
  24. _audioSource = gameObject.AddComponent<AudioSource>();
  25. _audioSource.playOnAwake = false;
  26. _audioSource.volume = VolumeMaster.GetVolume(sourceType);
  27. VolumeMaster.onVolumeChange += ResetVolume;
  28. ApplySettings(SettingMaster.Defaults(sourceType));
  29. }
  30. [HideFromIl2Cpp]
  31. public void Setup(Setting sourceSetting)
  32. {
  33. _sourceType = AudioMaster.SourceType.Custom;
  34. _audioSource = gameObject.AddComponent<AudioSource>();
  35. _audioSource.playOnAwake = false;
  36. _audioSource.volume = VolumeMaster.GetVolume(_sourceType);
  37. VolumeMaster.onVolumeChange += ResetVolume;
  38. ApplySettings(sourceSetting);
  39. }
  40. [HideFromIl2Cpp]
  41. private void OnEnable()
  42. {
  43. VolumeMaster.onVolumeChange += ResetVolume;
  44. }
  45. [HideFromIl2Cpp]
  46. private void OnDisable()
  47. {
  48. Stop();
  49. VolumeMaster.onVolumeChange -= ResetVolume;
  50. }
  51. [HideFromIl2Cpp]
  52. private void OnDestroy()
  53. {
  54. VolumeMaster.onVolumeChange -= ResetVolume;
  55. }
  56. [HideFromIl2Cpp]
  57. public void SetVolume(float newVolume)
  58. {
  59. _audioSource.volume = newVolume;
  60. }
  61. [HideFromIl2Cpp]
  62. public void AssignClip(Clip audioClip)
  63. {
  64. Stop();
  65. _audioSource.clip = audioClip.audioClip;
  66. }
  67. [HideFromIl2Cpp]
  68. public void Disable()
  69. {
  70. OnDisable();
  71. }
  72. [HideFromIl2Cpp]
  73. public void Enable()
  74. {
  75. OnEnable();
  76. }
  77. [HideFromIl2Cpp]
  78. public void Play(Clip audioClip)
  79. {
  80. Stop();
  81. _playState = PlayState.Playing;
  82. MelonCoroutines.Start(PlayRoutine(audioClip));
  83. }
  84. private IEnumerator PlayRoutine(Clip audioClip)
  85. {
  86. double _startTime = AudioSettings.dspTime + 0.6;
  87. double _endTime = _startTime + audioClip.clipLength + 0.6;
  88. _audioSource.PlayScheduled(_startTime);
  89. _playState = PlayState.Playing;
  90. while (AudioSettings.dspTime < _endTime)
  91. {
  92. yield return null;
  93. }
  94. Stop();
  95. }
  96. [HideFromIl2Cpp]
  97. public void Stop()
  98. {
  99. _playState = PlayState.Stopped;
  100. _audioSource.Stop();
  101. }
  102. [HideFromIl2Cpp]
  103. public void ResetVolume()
  104. {
  105. _audioSource.volume = VolumeMaster.GetVolume(_sourceType);
  106. }
  107. [HideFromIl2Cpp]
  108. public void PlayOneshot(Clip audioClip)
  109. {
  110. MelonCoroutines.Start(PlayOneshotRoutine(audioClip));
  111. }
  112. [HideFromIl2Cpp]
  113. private IEnumerator PlayOneshotRoutine(Clip audioClip)
  114. {
  115. _audioSource.PlayOneShot(audioClip.audioClip);
  116. yield return null;
  117. }
  118. [HideFromIl2Cpp]
  119. public void ApplySettings(Setting newSetting)
  120. {
  121. _activeSetting = newSetting;
  122. _sourceType = _activeSetting.sourceType;
  123. _audioSource.spread = _activeSetting.spread;
  124. _audioSource.panStereo = _activeSetting.panStereo;
  125. _audioSource.dopplerLevel = _activeSetting.dopplerLevel;
  126. _audioSource.maxDistance = _activeSetting.maxDistance;
  127. _audioSource.minDistance = _activeSetting.minDistance;
  128. _audioSource.pitch = _activeSetting.pitch;
  129. _audioSource.spatialBlend = _activeSetting.spatialBlend;
  130. _audioSource.spatialize = _activeSetting.spatialize;
  131. //_audioSource.rolloffFactor = _activeSetting.rolloffFactor;
  132. _audioSource.rolloffMode = _activeSetting.rolloffMode;
  133. _audioSource.priority = _activeSetting.priority;
  134. ResetVolume();
  135. }
  136. [HideFromIl2Cpp]
  137. public AudioMaster.SourceType sourceType
  138. {
  139. get
  140. {
  141. return _sourceType;
  142. }
  143. }
  144. }
  145. }