1
0

Shot.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  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. public 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 ResetVolume()
  58. {
  59. if (_audioSource)
  60. {
  61. _audioSource.volume = VolumeMaster.GetVolume(_sourceType);
  62. }
  63. }
  64. [HideFromIl2Cpp]
  65. public void SetVolume(float newVolume)
  66. {
  67. _audioSource.volume = newVolume;
  68. }
  69. [HideFromIl2Cpp]
  70. public void AssignClip(Clip audioClip)
  71. {
  72. Stop();
  73. _audioSource.clip = audioClip.audioClip;
  74. }
  75. [HideFromIl2Cpp]
  76. public void Disable()
  77. {
  78. OnDisable();
  79. }
  80. [HideFromIl2Cpp]
  81. public void Enable()
  82. {
  83. OnEnable();
  84. }
  85. [HideFromIl2Cpp]
  86. public void Play(Clip audioClip)
  87. {
  88. Stop();
  89. _playState = PlayState.Playing;
  90. MelonCoroutines.Start(PlayRoutine(audioClip));
  91. }
  92. [HideFromIl2Cpp]
  93. public void Play()
  94. {
  95. Stop();
  96. _playState = PlayState.Playing;
  97. _audioSource.Play();
  98. }
  99. private IEnumerator PlayRoutine(Clip audioClip)
  100. {
  101. double _startTime = AudioSettings.dspTime + 0.6;
  102. double _endTime = _startTime + audioClip.clipLength + 0.6;
  103. _audioSource.PlayScheduled(_startTime);
  104. _playState = PlayState.Playing;
  105. while (AudioSettings.dspTime < _endTime)
  106. {
  107. yield return null;
  108. }
  109. Stop();
  110. }
  111. [HideFromIl2Cpp]
  112. public void Stop()
  113. {
  114. _playState = PlayState.Stopped;
  115. _audioSource.Stop();
  116. }
  117. [HideFromIl2Cpp]
  118. public void PlayOneshot(Clip audioClip)
  119. {
  120. MelonCoroutines.Start(PlayOneshotRoutine(audioClip));
  121. }
  122. [HideFromIl2Cpp]
  123. private IEnumerator PlayOneshotRoutine(Clip audioClip)
  124. {
  125. _audioSource.PlayOneShot(audioClip.audioClip);
  126. yield return null;
  127. }
  128. [HideFromIl2Cpp]
  129. public void ApplySettings(Setting newSetting)
  130. {
  131. _activeSetting = newSetting;
  132. _sourceType = _activeSetting.sourceType;
  133. _audioSource.spread = _activeSetting.spread;
  134. _audioSource.panStereo = _activeSetting.panStereo;
  135. _audioSource.dopplerLevel = _activeSetting.dopplerLevel;
  136. _audioSource.maxDistance = _activeSetting.maxDistance;
  137. _audioSource.minDistance = _activeSetting.minDistance;
  138. _audioSource.pitch = _activeSetting.pitch;
  139. _audioSource.spatialBlend = _activeSetting.spatialBlend;
  140. _audioSource.spatialize = _activeSetting.spatialize;
  141. //_audioSource.rolloffFactor = _activeSetting.rolloffFactor;
  142. _audioSource.rolloffMode = _activeSetting.rolloffMode;
  143. _audioSource.priority = _activeSetting.priority;
  144. ResetVolume();
  145. }
  146. [HideFromIl2Cpp]
  147. public AudioMaster.SourceType sourceType
  148. {
  149. get
  150. {
  151. return _sourceType;
  152. }
  153. }
  154. }
  155. }