1
0

Shot.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  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. _audioSource = gameObject.AddComponent<AudioSource>();
  24. _audioSource.playOnAwake = false;
  25. _audioSource.volume = VolumeMaster.GetVolume(sourceType);
  26. VolumeMaster.onVolumeChange += ResetVolume;
  27. ApplySettings(SettingMaster.Defaults(sourceType));
  28. }
  29. [HideFromIl2Cpp]
  30. private void OnEnable()
  31. {
  32. VolumeMaster.onVolumeChange += ResetVolume;
  33. }
  34. [HideFromIl2Cpp]
  35. private void OnDisable()
  36. {
  37. Stop();
  38. VolumeMaster.onVolumeChange -= ResetVolume;
  39. }
  40. [HideFromIl2Cpp]
  41. private void OnDestroy()
  42. {
  43. VolumeMaster.onVolumeChange -= ResetVolume;
  44. }
  45. [HideFromIl2Cpp]
  46. public void SetVolume(float newVolume)
  47. {
  48. if (_sourceType == AudioMaster.SourceType.Custom)
  49. {
  50. _audioSource.volume = newVolume;
  51. }
  52. }
  53. [HideFromIl2Cpp]
  54. public void AssignClip(Clip audioClip)
  55. {
  56. Stop();
  57. _audioSource.clip = audioClip.audioClip;
  58. }
  59. [HideFromIl2Cpp]
  60. public void Disable()
  61. {
  62. OnDisable();
  63. }
  64. [HideFromIl2Cpp]
  65. public void Enable()
  66. {
  67. OnEnable();
  68. }
  69. [HideFromIl2Cpp]
  70. public void Play(Clip audioClip)
  71. {
  72. Stop();
  73. _playState = PlayState.Playing;
  74. MelonCoroutines.Start(PlayRoutine(audioClip));
  75. }
  76. private IEnumerator PlayRoutine(Clip audioClip)
  77. {
  78. double _startTime = AudioSettings.dspTime + 0.6;
  79. double _endTime = _startTime + audioClip.clipLength + 0.6;
  80. _audioSource.PlayScheduled(_startTime);
  81. _playState = PlayState.Playing;
  82. while (AudioSettings.dspTime < _endTime)
  83. {
  84. yield return null;
  85. }
  86. Stop();
  87. }
  88. [HideFromIl2Cpp]
  89. public void Stop()
  90. {
  91. _playState = PlayState.Stopped;
  92. _audioSource.Stop();
  93. }
  94. [HideFromIl2Cpp]
  95. public void ResetVolume()
  96. {
  97. if(_sourceType != AudioMaster.SourceType.Custom)
  98. {
  99. _audioSource.volume = VolumeMaster.GetVolume(_sourceType);
  100. }
  101. }
  102. [HideFromIl2Cpp]
  103. public void PlayOneshot(Clip audioClip)
  104. {
  105. MelonCoroutines.Start(PlayOneshotRoutine(audioClip));
  106. }
  107. [HideFromIl2Cpp]
  108. private IEnumerator PlayOneshotRoutine(Clip audioClip)
  109. {
  110. _audioSource.PlayOneShot(audioClip.audioClip);
  111. yield return null;
  112. }
  113. [HideFromIl2Cpp]
  114. public void ApplySettings(Setting newSetting)
  115. {
  116. _activeSetting = newSetting;
  117. _sourceType = _activeSetting.sourceType;
  118. _audioSource.spread = _activeSetting.spread;
  119. _audioSource.panStereo = _activeSetting.panStereo;
  120. _audioSource.dopplerLevel = _activeSetting.dopplerLevel;
  121. _audioSource.maxDistance = _activeSetting.maxDistance;
  122. _audioSource.minDistance = _activeSetting.minDistance;
  123. _audioSource.pitch = _activeSetting.pitch;
  124. _audioSource.spatialBlend = _activeSetting.spatialBlend;
  125. _audioSource.spatialize = _activeSetting.spatialize;
  126. //_audioSource.rolloffFactor = _activeSetting.rolloffFactor;
  127. _audioSource.rolloffMode = _activeSetting.rolloffMode;
  128. _audioSource.priority = _activeSetting.priority;
  129. ResetVolume();
  130. }
  131. [HideFromIl2Cpp]
  132. public AudioMaster.SourceType sourceType
  133. {
  134. get
  135. {
  136. return _sourceType;
  137. }
  138. }
  139. }
  140. }