[add] Engine
This commit is contained in:
184
assets/Script/Engine/Utils/Audio/CSAudio.ts
Normal file
184
assets/Script/Engine/Utils/Audio/CSAudio.ts
Normal file
@@ -0,0 +1,184 @@
|
||||
import LocalStorageData from "../../Data/LocalStorageData";
|
||||
|
||||
export default class CSAudio {
|
||||
private static _instance: CSAudio = null;
|
||||
public static get Instance(): CSAudio { return this._instance; }
|
||||
private _idToClip: Map<number, cc.AudioClip> = new Map<number, cc.AudioClip>();
|
||||
private _idToPath: Map<number, string> = new Map<number, string>();
|
||||
private _idToAudioId: Map<number, number> = new Map<number, number>();
|
||||
private _currentMusic: number = -1;
|
||||
/**判斷音效播放太過頻繁不疊加 */
|
||||
private _lastPlaySoundTime: Map<string, number> = new Map<string, number>();
|
||||
private readonly _canPlaySoundCutTime: number = 10;
|
||||
|
||||
constructor() {
|
||||
CSAudio._instance = this;
|
||||
if (LocalStorageData.Instance.MusicType) {
|
||||
this.SetMusicVolume(+LocalStorageData.Instance.MusicType);
|
||||
} else {
|
||||
this.SetMusicVolume(0.3);
|
||||
}
|
||||
if (LocalStorageData.Instance.SoundType) {
|
||||
this.SetSoundVolume(+LocalStorageData.Instance.SoundType);
|
||||
} else {
|
||||
this.SetSoundVolume(0.3);
|
||||
}
|
||||
}
|
||||
|
||||
public AddClipsInfo(clips: Map<number, cc.AudioClip>, pathes: Map<number, string>): void {
|
||||
this._idToClip = clips;
|
||||
this._idToPath = pathes;
|
||||
}
|
||||
|
||||
/**
|
||||
* 設定AudioID
|
||||
* @param id
|
||||
* @param audioId
|
||||
*/
|
||||
private _setAudioId(id: number, audioId: number): void {
|
||||
this._idToAudioId.set(id, audioId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 取得AudioID
|
||||
* @param id
|
||||
*/
|
||||
private _getAudioId(id: number): number {
|
||||
if (this._idToAudioId.has(id)) {
|
||||
return this._idToAudioId.get(id);
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 打開音效音量
|
||||
*/
|
||||
public OpenSound(): void {
|
||||
this.SetSoundVolume(0.3);
|
||||
}
|
||||
/**
|
||||
* 關閉音效音量
|
||||
*/
|
||||
public CloseSound(): void {
|
||||
this.SetSoundVolume(0.0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 設定音效音量
|
||||
* @param volume
|
||||
*/
|
||||
public SetSoundVolume(volume: number): void {
|
||||
LocalStorageData.Instance.SoundType = volume.toString();
|
||||
cc.audioEngine.setEffectsVolume(volume);
|
||||
}
|
||||
|
||||
/**
|
||||
* 播放音效
|
||||
* @param id
|
||||
* @param loop
|
||||
*/
|
||||
public PlaySound(id: number, loop: boolean = false): void {
|
||||
// 靜音後有一禎仍然會撥放的問題:音量>0才撥放
|
||||
if (cc.audioEngine.getEffectsVolume() <= 0) {
|
||||
return;
|
||||
}
|
||||
if (this._idToClip.has(id)) {
|
||||
let path: string = this._idToPath.get(id);
|
||||
let timenum: number = new Date().getTime();
|
||||
if (!this._lastPlaySoundTime.has(path)) {
|
||||
this._lastPlaySoundTime.set(path, timenum);
|
||||
let audioId: number = cc.audioEngine.playEffect(this._idToClip.get(id), loop);
|
||||
this._setAudioId(id, audioId);
|
||||
} else {
|
||||
let lastTime: number = this._lastPlaySoundTime.get(path);
|
||||
if (timenum - lastTime > this._canPlaySoundCutTime) {
|
||||
this._lastPlaySoundTime.set(path, timenum);
|
||||
let audioId: number = cc.audioEngine.playEffect(this._idToClip.get(id), loop);
|
||||
this._setAudioId(id, audioId);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
cc.error("未知的Sound Id: ", id);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 停止音效
|
||||
* @param id
|
||||
*/
|
||||
public StopSound(id: number): void {
|
||||
let audioId = this._getAudioId(id);
|
||||
if (audioId >= 0) {
|
||||
cc.audioEngine.stopEffect(audioId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 打開音樂音量
|
||||
*/
|
||||
public OpenMusic(): void {
|
||||
this.SetMusicVolume(0.3);
|
||||
}
|
||||
/**
|
||||
* 關閉音樂音量
|
||||
*/
|
||||
public CloseMusic(): void {
|
||||
this.SetMusicVolume(0.0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 設定音樂音量
|
||||
* @param volume
|
||||
*/
|
||||
public SetMusicVolume(volume: number): void {
|
||||
cc.audioEngine.setMusicVolume(volume);
|
||||
LocalStorageData.Instance.MusicType = volume.toString();
|
||||
// 靜音後有一禎仍然會撥放的問題:背景音樂要回復
|
||||
if (this._currentMusic != -1 && volume > 0 && !cc.audioEngine.isMusicPlaying()) {
|
||||
this._ccMusicPlayId = cc.audioEngine.playMusic(this._idToClip.get(this._currentMusic), true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 撥放音樂
|
||||
* @param id
|
||||
* @param loop
|
||||
*/
|
||||
public PlayMusic(id: number, loop: boolean = true): void {
|
||||
if (this._currentMusic != id) {
|
||||
if (this._idToClip.has(id)) {
|
||||
// 靜音後有一禎仍然會撥放的問題:音量>0才撥放
|
||||
if (cc.audioEngine.getMusicVolume() > 0) {
|
||||
this._ccMusicPlayId = cc.audioEngine.playMusic(this._idToClip.get(id), loop);
|
||||
}
|
||||
this._currentMusic = id;
|
||||
}
|
||||
else {
|
||||
cc.error("未知的Music Id: ", id);
|
||||
}
|
||||
}
|
||||
}
|
||||
private _ccMusicPlayId: number = -1;
|
||||
private _currentMusicTime: number = -1;
|
||||
public pauseOrResume(isPause?: boolean) {
|
||||
if (isPause) {
|
||||
this._currentMusicTime = cc.audioEngine.getCurrentTime(this._ccMusicPlayId);
|
||||
cc.audioEngine.pauseAll();
|
||||
cc.audioEngine.stopMusic();
|
||||
} else {
|
||||
cc.audioEngine.resumeAll();
|
||||
cc.audioEngine.setCurrentTime(this._ccMusicPlayId, this._currentMusicTime);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 停止音樂
|
||||
* @param id
|
||||
*/
|
||||
public StopMusic(): void {
|
||||
cc.audioEngine.stopMusic();
|
||||
this._currentMusic = -1;
|
||||
}
|
||||
|
||||
}
|
10
assets/Script/Engine/Utils/Audio/CSAudio.ts.meta
Normal file
10
assets/Script/Engine/Utils/Audio/CSAudio.ts.meta
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"ver": "1.1.0",
|
||||
"uuid": "f3ba292a-ecad-4485-ab60-1cd3ee94979a",
|
||||
"importer": "typescript",
|
||||
"isPlugin": false,
|
||||
"loadPluginInWeb": true,
|
||||
"loadPluginInNative": true,
|
||||
"loadPluginInEditor": false,
|
||||
"subMetas": {}
|
||||
}
|
168
assets/Script/Engine/Utils/Audio/CSCommonAudios.ts
Normal file
168
assets/Script/Engine/Utils/Audio/CSCommonAudios.ts
Normal file
@@ -0,0 +1,168 @@
|
||||
import CSAudio from "./CSAudio";
|
||||
|
||||
export default class CSAppAudios {
|
||||
private static _instanceApp: CSAppAudios = null;
|
||||
public static get InstanceApp(): CSAppAudios { return this._instanceApp; }
|
||||
private _idToAppClip: Map<number, cc.AudioClip> = new Map<number, cc.AudioClip>();
|
||||
private _idToAppPath: Map<number, string> = new Map<number, string>();
|
||||
private _idToAppAudioId: Map<number, number> = new Map<number, number>();
|
||||
private _currentAppMusic: number = -1;
|
||||
/** 判斷音效播放太過頻繁不疊加 */
|
||||
private _lastAppPlaySoundTime: Map<string, number> = new Map<string, number>();
|
||||
private readonly _appCanPlaySoundCutTime: number = 10;
|
||||
constructor() {
|
||||
CSAppAudios._instanceApp = this;
|
||||
}
|
||||
|
||||
public AddAppClipsInfo(clips: Map<number, cc.AudioClip>, pathes: Map<number, string>): void {
|
||||
this._idToAppClip = clips;
|
||||
this._idToAppPath = pathes;
|
||||
}
|
||||
|
||||
/**
|
||||
* 設定AudioID
|
||||
* @param id
|
||||
* @param audioId
|
||||
*/
|
||||
private _setAppAudioId(id: number, audioId: number): void {
|
||||
this._idToAppAudioId.set(id, audioId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 打開音效音量
|
||||
*/
|
||||
public OpenSound(): void {
|
||||
CSAudio.Instance.OpenSound();
|
||||
}
|
||||
/**
|
||||
* 關閉音效音量
|
||||
*/
|
||||
public CloseSound(): void {
|
||||
CSAudio.Instance.CloseSound();
|
||||
}
|
||||
|
||||
/**
|
||||
* 取得AudioID
|
||||
* @param id
|
||||
*/
|
||||
private _getAppAudioId(id: number): number {
|
||||
if (this._idToAppAudioId.has(id)) {
|
||||
return this._idToAppAudioId.get(id);
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 播放音效
|
||||
* @param id
|
||||
* @param loop
|
||||
*/
|
||||
public PlayAppSound(id: number, loop: boolean = false): void {
|
||||
// 靜音後有一禎仍然會撥放的問題:音量>0才撥放
|
||||
if (cc.audioEngine.getEffectsVolume() <= 0) {
|
||||
return;
|
||||
}
|
||||
if (this._idToAppClip.has(id)) {
|
||||
let path: string = this._idToAppPath.get(id);
|
||||
let timenum: number = new Date().getTime();
|
||||
if (!this._lastAppPlaySoundTime.has(path)) {
|
||||
this._lastAppPlaySoundTime.set(path, timenum);
|
||||
let audioId: number = cc.audioEngine.playEffect(this._idToAppClip.get(id), loop);
|
||||
this._setAppAudioId(id, audioId);
|
||||
} else {
|
||||
let lastTime: number = this._lastAppPlaySoundTime.get(path);
|
||||
if (timenum - lastTime > this._appCanPlaySoundCutTime) {
|
||||
this._lastAppPlaySoundTime.set(path, timenum);
|
||||
let audioId: number = cc.audioEngine.playEffect(this._idToAppClip.get(id), loop);
|
||||
this._setAppAudioId(id, audioId);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
cc.error("未知的Sound Id: ", id);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 停止音效
|
||||
* @param id
|
||||
*/
|
||||
public StopAppSound(id: number): void {
|
||||
let audioId: number = this._getAppAudioId(id);
|
||||
if (audioId >= 0) {
|
||||
cc.audioEngine.stopEffect(audioId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 打開音樂音量
|
||||
*/
|
||||
public OpenMusic(): void {
|
||||
this._setAppMusicVolume(0.3);
|
||||
CSAudio.Instance.OpenMusic();
|
||||
}
|
||||
/**
|
||||
* 關閉音樂音量
|
||||
*/
|
||||
public CloseMusic(): void {
|
||||
this._setAppMusicVolume(0.0); // 這邊再改改
|
||||
CSAudio.Instance.CloseMusic();
|
||||
}
|
||||
|
||||
/**
|
||||
* 設定音樂音量
|
||||
* @param volume
|
||||
*/
|
||||
private _setAppMusicVolume(volume: number): void {
|
||||
// 靜音後有一禎仍然會撥放的問題:背景音樂要回復
|
||||
if (this._currentAppMusic != -1 && volume > 0 && !cc.audioEngine.isMusicPlaying()) {
|
||||
this._ccAppMusicPlayId = cc.audioEngine.playMusic(this._idToAppClip.get(this._currentAppMusic), true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 撥放音樂
|
||||
* @param id
|
||||
* @param loop
|
||||
*/
|
||||
public PlayAppMusic(id: number, loop: boolean = true): void {
|
||||
if (this._currentAppMusic != id) {
|
||||
if (this._idToAppClip.has(id)) {
|
||||
// 靜音後有一禎仍然會撥放的問題:音量>0才撥放
|
||||
if (cc.audioEngine.getMusicVolume() > 0) {
|
||||
this._ccAppMusicPlayId = cc.audioEngine.playMusic(this._idToAppClip.get(id), loop);
|
||||
}
|
||||
this._currentAppMusic = id;
|
||||
} else {
|
||||
cc.error("未知的Music Id: ", id);
|
||||
}
|
||||
} else {
|
||||
this.StopMusic();
|
||||
this.PlayAppMusic(id);
|
||||
}
|
||||
}
|
||||
|
||||
private _ccAppMusicPlayId: number = -1;
|
||||
private _currentAppMusicTime: number = -1;
|
||||
|
||||
public pauseOrResume(isPause?: boolean): void {
|
||||
if (isPause) {
|
||||
this._currentAppMusicTime = cc.audioEngine.getCurrentTime(this._ccAppMusicPlayId);
|
||||
cc.audioEngine.pauseAll();
|
||||
cc.audioEngine.stopMusic();
|
||||
} else {
|
||||
cc.audioEngine.resumeAll();
|
||||
cc.audioEngine.setCurrentTime(this._ccAppMusicPlayId, this._currentAppMusicTime);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 停止音樂
|
||||
* @param id
|
||||
*/
|
||||
public StopMusic(): void {
|
||||
cc.audioEngine.stopMusic();
|
||||
this._currentAppMusic = -1;
|
||||
}
|
||||
|
||||
}
|
10
assets/Script/Engine/Utils/Audio/CSCommonAudios.ts.meta
Normal file
10
assets/Script/Engine/Utils/Audio/CSCommonAudios.ts.meta
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"ver": "1.1.0",
|
||||
"uuid": "ce946cad-16db-4383-a734-43bb8f14089e",
|
||||
"importer": "typescript",
|
||||
"isPlugin": false,
|
||||
"loadPluginInWeb": true,
|
||||
"loadPluginInNative": true,
|
||||
"loadPluginInEditor": false,
|
||||
"subMetas": {}
|
||||
}
|
Reference in New Issue
Block a user