pinball/assets/_Game/Scripts/Manager/SoundSource.ts

36 lines
973 B
TypeScript
Raw Normal View History

2024-03-11 04:12:22 -07:00
import { AudioClip, AudioSource, Pool } from 'cc';
import Utilities from '../Utilities';
export class SoundSource {
private _pool: Pool<AudioSource>;
public volume = 1;
public mute = false;
public clip: AudioClip;
private _currentAudioSource: AudioSource;
constructor() {
this._pool = new Pool<AudioSource>(
() => {
const source = new AudioSource();
source.playOnAwake = false;
return source;
},
10,
(obj) => obj.destroy(),
);
}
public async play() {
this._currentAudioSource = this._pool.alloc();
this._currentAudioSource.volume = this.mute ? 0 : this.volume;
_currentAudioSource.clip = this.clip;
_currentAudioSource.play();
await Utilities.waitUntil(() => !source.playing);
this._pool.free(source);
}
public stop() {
this._currentAudioSource.stop();
}
}