Shot.cs 4.2 KB

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