FPlayAudioEvent.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using UnityEngine;
  2. using System.Collections;
  3. namespace Flux
  4. {
  5. //[FEvent("Audio/Play Audio")]
  6. public class FPlayAudioEvent : FEvent {
  7. [SerializeField]
  8. private AudioClip _audioClip = null;
  9. public AudioClip AudioClip { get { return _audioClip; } }
  10. [Range(0f, 1f)]
  11. [SerializeField]
  12. private float _volume = 1f;
  13. [SerializeField]
  14. private bool _loop = false;
  15. public bool Loop { get { return _loop; } }
  16. [SerializeField]
  17. [HideInInspector]
  18. private int _startOffset = 0;
  19. public int StartOffset { get { return _startOffset; } }
  20. [SerializeField]
  21. private bool _speedDeterminesPitch = true;
  22. public bool SpeedDeterminesPitch { get { return _speedDeterminesPitch; } set { _speedDeterminesPitch = value; } }
  23. private AudioSource _source;
  24. protected override void OnTrigger( float timeSinceTrigger )
  25. {
  26. _source = Owner.GetComponent<AudioSource>();
  27. if( _source == null )
  28. _source = Owner.gameObject.AddComponent<AudioSource>();
  29. _source.volume = _volume;
  30. _source.loop = _loop;
  31. _source.clip = _audioClip;
  32. if( Sequence.IsPlaying )
  33. _source.Play();
  34. _source.time = _startOffset * Sequence.InverseFrameRate + timeSinceTrigger;
  35. if( SpeedDeterminesPitch )
  36. _source.pitch = Sequence.Speed * Time.timeScale;
  37. }
  38. protected override void OnPause()
  39. {
  40. _source.Pause();
  41. }
  42. protected override void OnResume()
  43. {
  44. if( Sequence.IsPlaying )
  45. _source.Play();
  46. }
  47. protected override void OnFinish()
  48. {
  49. if( _source.clip == _audioClip && _source.isPlaying )
  50. {
  51. _source.Stop();
  52. _source.clip = null;
  53. }
  54. }
  55. protected override void OnStop()
  56. {
  57. if( _source.clip == _audioClip && _source.isPlaying )
  58. {
  59. _source.Stop();
  60. _source.clip = null;
  61. }
  62. }
  63. public override int GetMaxLength()
  64. {
  65. if( _loop || _audioClip == null )
  66. return base.GetMaxLength();
  67. return Mathf.RoundToInt(_audioClip.length * Sequence.FrameRate);
  68. }
  69. public int GetMaxStartOffset()
  70. {
  71. if( _audioClip == null )
  72. return 0;
  73. int maxFrames = Mathf.RoundToInt( _audioClip.length * Sequence.FrameRate );
  74. if( _loop )
  75. return maxFrames;
  76. return maxFrames - Length;
  77. }
  78. public override string Text {
  79. get {
  80. return _audioClip == null ? "!Missing!" : _audioClip.name;
  81. }
  82. set {
  83. }
  84. }
  85. }
  86. }