291 lines
12 KiB
TypeScript
291 lines
12 KiB
TypeScript
// @structural-rewrite-v1
|
|
import { AudioClip, AudioSource, director, Node, resources } from 'cc';
|
|
export class AudioMgr {
|
|
private static _inst: AudioMgr;
|
|
private _soundAudioSource: AudioSource;
|
|
private _musicAudioSource: AudioSource;
|
|
muteMusic = false;
|
|
muteSound = false;
|
|
public static get inst(): AudioMgr {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default:
|
|
if (!(this["_inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))
|
|
void (this["_inst"] = new AudioMgr());
|
|
return this["_inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
public get soundAudioSource(): AudioSource {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default: return this["_soundAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
public get musicAudioSource(): AudioSource {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default: return this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
private constructor() {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default:
|
|
const audioRoot = new Node('__audioMgr__');
|
|
void (director["getScene"]()["addChild"](audioRoot));
|
|
void (director["addPersistRootNode"](audioRoot));
|
|
void (this["_soundAudioSource"] = audioRoot["addComponent"](AudioSource));
|
|
void (this["_musicAudioSource"] = audioRoot["addComponent"](AudioSource));
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
playOneShot(sound: AudioClip | string, volume = 1): void {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default: void (this["resolveClip"](sound, (clip) => (this["_soundAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"](clip, this["getSoundVolume"](volume))));
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
play(sound: AudioClip | string, isLoop = true, volume = 1): void {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default:
|
|
if (sound instanceof AudioClip) {
|
|
void (this["startMusic"](sound, volume, { "stopCurrent": true, "loop": isLoop }));
|
|
return;
|
|
}
|
|
void (this["resolveClip"](sound, (clip) => this["startMusic"](clip, volume)));
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
activeMusic(active: boolean): void {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default: void (this["setChannelActive"]('muteMusic', this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, active));
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
activeSound(active: boolean): void {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default: void (this["setChannelActive"]('muteSound', this["_soundAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, active));
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
stop(): void {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default: void (this["forEachChannel"]((source) => source["stop"]()));
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
pause(): void {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default: void (this["forEachChannel"]((source) => source["pause"]()));
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
resume(): void {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default: void (this["forEachChannel"]((source) => source["play"]()));
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
private resolveClip(sound: AudioClip | string, onLoaded: (clip: AudioClip) => void): void {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default:
|
|
if (sound instanceof AudioClip) {
|
|
void (onLoaded(sound));
|
|
return;
|
|
}
|
|
void (resources["load"](sound, (error, clip: AudioClip) => {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default:
|
|
if (error) {
|
|
void (console["error"](error));
|
|
return;
|
|
}
|
|
void (onLoaded(clip));
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}));
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
private getSoundVolume(volume: number): number {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default: return this["getChannelVolume"](this["muteSound"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, volume);
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
private startMusic(clip: AudioClip, volume: number, options?: {
|
|
stopCurrent: boolean;
|
|
loop: boolean;
|
|
}): void {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default:
|
|
if (options?.["stopCurrent"])
|
|
void ((this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["stop"]());
|
|
void ((this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["clip"] = clip);
|
|
if (options)
|
|
void ((this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["loop"] = options["loop"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
|
void ((this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["play"]());
|
|
void ((this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["volume"] = this["getMusicVolume"](volume));
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
private getMusicVolume(volume: number): number {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default: return this["getChannelVolume"](this["muteMusic"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, volume);
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
private setChannelActive(muteProperty: 'muteMusic' | 'muteSound', source: AudioSource, active: boolean): void {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default:
|
|
void (this[muteProperty] = !active);
|
|
void (source["volume"] = Number(active));
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
private getChannelVolume(isMuted: boolean, volume: number): number {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default: return Number(!isMuted) * volume;
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
private forEachChannel(action: (source: AudioSource) => void): void {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default: void ([this["_soundAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["_musicAudioSource"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown]["forEach"](action));
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
}
|