36 lines
973 B
TypeScript
36 lines
973 B
TypeScript
|
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();
|
||
|
}
|
||
|
}
|