@ives_xxz/framework 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/FW.d.ts +1845 -0
- package/FW.d.ts.meta +6 -0
- package/Framework.ts +148 -0
- package/Framework.ts.meta +10 -0
- package/README.md +93 -0
- package/README.md.meta +6 -0
- package/animation/FWAnimation.ts +13 -0
- package/animation/FWAnimation.ts.meta +10 -0
- package/animation/FWSkeleton.ts +176 -0
- package/animation/FWSkeleton.ts.meta +10 -0
- package/animation/FWTween.ts +60 -0
- package/animation/FWTween.ts.meta +10 -0
- package/animation.meta +13 -0
- package/component/FWVirtualViewComponent.ts +2080 -0
- package/component/FWVirtualViewComponent.ts.meta +10 -0
- package/component.meta +13 -0
- package/config/FWAssetConfig.ts +7 -0
- package/config/FWAssetConfig.ts.meta +10 -0
- package/config.meta +13 -0
- package/controller/FWLayerController.ts +236 -0
- package/controller/FWLayerController.ts.meta +10 -0
- package/controller.meta +13 -0
- package/data/FWData.ts +10 -0
- package/data/FWData.ts.meta +10 -0
- package/data.meta +13 -0
- package/define/FWEventDefine.ts +26 -0
- package/define/FWEventDefine.ts.meta +10 -0
- package/define/FWSystemDefine.ts +133 -0
- package/define/FWSystemDefine.ts.meta +10 -0
- package/define.meta +13 -0
- package/entry/FWEntry.ts +196 -0
- package/entry/FWEntry.ts.meta +10 -0
- package/entry.meta +13 -0
- package/expand/FWCocosExpand.ts +73 -0
- package/expand/FWCocosExpand.ts.meta +10 -0
- package/expand/FWDecorator.ts +256 -0
- package/expand/FWDecorator.ts.meta +10 -0
- package/expand/FWRollingViewNesting.ts +191 -0
- package/expand/FWRollingViewNesting.ts.meta +10 -0
- package/expand/FWTweenExpand.ts +44 -0
- package/expand/FWTweenExpand.ts.meta +10 -0
- package/expand.meta +13 -0
- package/item/FWVirtualListItem.ts +150 -0
- package/item/FWVirtualListItem.ts.meta +10 -0
- package/item.meta +13 -0
- package/language/FWLanguage.ts +69 -0
- package/language/FWLanguage.ts.meta +10 -0
- package/language/FWLanguageLabelLocalize.ts +144 -0
- package/language/FWLanguageLabelLocalize.ts.meta +10 -0
- package/language/FWLanguageSkeletonLocalize.ts +106 -0
- package/language/FWLanguageSkeletonLocalize.ts.meta +10 -0
- package/language/FWLanguageSpriteLocalize.ts +81 -0
- package/language/FWLanguageSpriteLocalize.ts.meta +10 -0
- package/language.meta +13 -0
- package/layer/FWLayer.ts +13 -0
- package/layer/FWLayer.ts.meta +10 -0
- package/layer.meta +13 -0
- package/log/FWLog.ts +115 -0
- package/log/FWLog.ts.meta +10 -0
- package/log.meta +13 -0
- package/logic/FWLogic.ts +10 -0
- package/logic/FWLogic.ts.meta +10 -0
- package/logic.meta +13 -0
- package/machine/FWAnimationMachine.ts +28 -0
- package/machine/FWAnimationMachine.ts.meta +10 -0
- package/machine/FWStateMachine.ts +75 -0
- package/machine/FWStateMachine.ts.meta +10 -0
- package/machine.meta +13 -0
- package/manager/FWAnimationManager.ts +128 -0
- package/manager/FWAnimationManager.ts.meta +10 -0
- package/manager/FWAssetManager.ts +349 -0
- package/manager/FWAssetManager.ts.meta +10 -0
- package/manager/FWAudioManager.ts +289 -0
- package/manager/FWAudioManager.ts.meta +10 -0
- package/manager/FWBundleManager.ts +91 -0
- package/manager/FWBundleManager.ts.meta +10 -0
- package/manager/FWComponentManager.ts +25 -0
- package/manager/FWComponentManager.ts.meta +10 -0
- package/manager/FWEngineManager.ts +63 -0
- package/manager/FWEngineManager.ts.meta +10 -0
- package/manager/FWEventManager.ts +275 -0
- package/manager/FWEventManager.ts.meta +10 -0
- package/manager/FWHotUpdateManager.ts +213 -0
- package/manager/FWHotUpdateManager.ts.meta +10 -0
- package/manager/FWLanguageManager.ts +116 -0
- package/manager/FWLanguageManager.ts.meta +10 -0
- package/manager/FWLayerManager.ts +490 -0
- package/manager/FWLayerManager.ts.meta +10 -0
- package/manager/FWManager.ts +8 -0
- package/manager/FWManager.ts.meta +10 -0
- package/manager/FWObjectManager.ts +91 -0
- package/manager/FWObjectManager.ts.meta +10 -0
- package/manager/FWResManager.ts +171 -0
- package/manager/FWResManager.ts.meta +10 -0
- package/manager/FWSocketManager.ts +94 -0
- package/manager/FWSocketManager.ts.meta +10 -0
- package/manager/FWStateManager.ts +102 -0
- package/manager/FWStateManager.ts.meta +10 -0
- package/manager/FWTaskManager.ts +38 -0
- package/manager/FWTaskManager.ts.meta +10 -0
- package/manager/FWTimeManager.ts +473 -0
- package/manager/FWTimeManager.ts.meta +10 -0
- package/manager/FWUiManager.ts +164 -0
- package/manager/FWUiManager.ts.meta +10 -0
- package/manager.meta +13 -0
- package/package.json +17 -0
- package/package.json.meta +6 -0
- package/scene/FWScene.ts +25 -0
- package/scene/FWScene.ts.meta +10 -0
- package/scene.meta +13 -0
- package/service/FWService.ts +7 -0
- package/service/FWService.ts.meta +10 -0
- package/service/http/FWHttp.ts +70 -0
- package/service/http/FWHttp.ts.meta +10 -0
- package/service/http.meta +13 -0
- package/service/socket/FWSocket.ts +236 -0
- package/service/socket/FWSocket.ts.meta +10 -0
- package/service/socket/FWSocketHandle.ts +17 -0
- package/service/socket/FWSocketHandle.ts.meta +10 -0
- package/service/socket/FWSocketSender.ts +16 -0
- package/service/socket/FWSocketSender.ts.meta +10 -0
- package/service/socket.meta +13 -0
- package/service.meta +13 -0
- package/state/FWState.ts +8 -0
- package/state/FWState.ts.meta +10 -0
- package/state.meta +13 -0
- package/utils/FWLodash.ts +105 -0
- package/utils/FWLodash.ts.meta +10 -0
- package/utils/FWMask.ts +222 -0
- package/utils/FWMask.ts.meta +10 -0
- package/utils/FWObject.ts +22 -0
- package/utils/FWObject.ts.meta +10 -0
- package/utils/FWObjectPool.ts +178 -0
- package/utils/FWObjectPool.ts.meta +10 -0
- package/utils/FWQueue.ts +47 -0
- package/utils/FWQueue.ts.meta +10 -0
- package/utils/FWTask.ts +223 -0
- package/utils/FWTask.ts.meta +10 -0
- package/utils.meta +13 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import { FWManager } from './FWManager';
|
|
2
|
+
import Framework from '../Framework';
|
|
3
|
+
import FWLog from '../log/FWLog';
|
|
4
|
+
|
|
5
|
+
export default class FWAudioManager extends FWManager implements FW.AudioManager {
|
|
6
|
+
/**背景音量 */
|
|
7
|
+
musicVolume: number = 1;
|
|
8
|
+
/**音效音量 */
|
|
9
|
+
effectsVolume: number = 1;
|
|
10
|
+
/**播放音效的音量 */
|
|
11
|
+
soundVolume: number = 1;
|
|
12
|
+
|
|
13
|
+
public initialize(): void {}
|
|
14
|
+
|
|
15
|
+
playMusic(path: string, volume?: number, loop?: boolean);
|
|
16
|
+
playMusic(music: cc.AudioClip, volume?: number, loop?: boolean);
|
|
17
|
+
playMusic(assetProperty: FW.AssetProperty, volume?: number, loop?: boolean);
|
|
18
|
+
async playMusic() {
|
|
19
|
+
try {
|
|
20
|
+
const data = await this.dataProcessing(arguments[0], arguments[1], arguments[2]);
|
|
21
|
+
if (!data) return;
|
|
22
|
+
const clip = data.clip;
|
|
23
|
+
const volume = data.volume === undefined ? this.musicVolume : arguments[1];
|
|
24
|
+
const loop = data.loop === undefined ? true : arguments[2];
|
|
25
|
+
const id = cc.audioEngine.playMusic(clip, loop);
|
|
26
|
+
cc.audioEngine.setVolume(id, volume);
|
|
27
|
+
} catch (e) {
|
|
28
|
+
FWLog.error('播放音乐失败:', e);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
stopMusic(): void {
|
|
33
|
+
cc.audioEngine.stopMusic();
|
|
34
|
+
}
|
|
35
|
+
pauseMusic(): void {
|
|
36
|
+
cc.audioEngine.pauseMusic();
|
|
37
|
+
}
|
|
38
|
+
resumeMusic(): void {
|
|
39
|
+
cc.audioEngine.resumeMusic();
|
|
40
|
+
}
|
|
41
|
+
/**设置背景音效是否静音 */
|
|
42
|
+
setMusicMute(mute: boolean): void {
|
|
43
|
+
if (mute) {
|
|
44
|
+
this.musicVolume = 1;
|
|
45
|
+
} else {
|
|
46
|
+
this.musicVolume = 0;
|
|
47
|
+
}
|
|
48
|
+
cc.audioEngine.setMusicVolume(this.musicVolume);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async play(
|
|
52
|
+
path: string,
|
|
53
|
+
cb?: (id: number) => void,
|
|
54
|
+
volume?: number,
|
|
55
|
+
loop?: boolean,
|
|
56
|
+
): Promise<number>;
|
|
57
|
+
async play(
|
|
58
|
+
audio: cc.AudioClip,
|
|
59
|
+
cb?: (id: number) => void,
|
|
60
|
+
volume?: number,
|
|
61
|
+
loop?: boolean,
|
|
62
|
+
): Promise<number>;
|
|
63
|
+
async play(
|
|
64
|
+
assetProperty: FW.AssetProperty,
|
|
65
|
+
cb?: (id: number) => void,
|
|
66
|
+
volume?: number,
|
|
67
|
+
loop?: boolean,
|
|
68
|
+
): Promise<number>;
|
|
69
|
+
async play(): Promise<number> {
|
|
70
|
+
try {
|
|
71
|
+
const data = await this.dataProcessing(
|
|
72
|
+
arguments[0],
|
|
73
|
+
arguments[1],
|
|
74
|
+
arguments[2],
|
|
75
|
+
arguments[3],
|
|
76
|
+
);
|
|
77
|
+
if (!data) return;
|
|
78
|
+
const clip = data.clip;
|
|
79
|
+
const volume = data.volume === undefined ? this.soundVolume : arguments[1];
|
|
80
|
+
const loop = data.loop === undefined ? false : arguments[2];
|
|
81
|
+
const id = cc.audioEngine.play(clip, loop, volume);
|
|
82
|
+
cc.audioEngine.setFinishCallback(id, () => {
|
|
83
|
+
data.cb?.(id);
|
|
84
|
+
});
|
|
85
|
+
return id;
|
|
86
|
+
} catch (e) {
|
|
87
|
+
FWLog.error('播放音效失败:', e);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
*
|
|
92
|
+
* @param id 停止
|
|
93
|
+
*/
|
|
94
|
+
public stop(id: number) {
|
|
95
|
+
cc.audioEngine.stop(id);
|
|
96
|
+
}
|
|
97
|
+
pauseAll(): void {
|
|
98
|
+
cc.audioEngine.pauseAll();
|
|
99
|
+
}
|
|
100
|
+
resumeAll(): void {
|
|
101
|
+
cc.audioEngine.resumeAll();
|
|
102
|
+
}
|
|
103
|
+
stopAll(): void {
|
|
104
|
+
cc.audioEngine.stopAll();
|
|
105
|
+
}
|
|
106
|
+
/**设置播放音效是否静音 */
|
|
107
|
+
setSoundMute(mute: boolean): void {
|
|
108
|
+
if (mute) {
|
|
109
|
+
this.soundVolume = 1;
|
|
110
|
+
} else {
|
|
111
|
+
this.soundVolume = 0;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**播放音效 */
|
|
116
|
+
async playEffect(path: string, loop?: boolean): Promise<number>;
|
|
117
|
+
async playEffect(audio: cc.AudioClip, loop?: boolean): Promise<number>;
|
|
118
|
+
async playEffect(assetProperty: FW.AssetProperty, loop?: boolean): Promise<number>;
|
|
119
|
+
async playEffect(): Promise<number> {
|
|
120
|
+
try {
|
|
121
|
+
const data = await this.dataProcessing(arguments[0], arguments[1]);
|
|
122
|
+
if (!data) return;
|
|
123
|
+
const clip = data.clip;
|
|
124
|
+
const loop = data.loop === undefined ? false : arguments[1];
|
|
125
|
+
const id = cc.audioEngine.playEffect(clip, loop);
|
|
126
|
+
return id;
|
|
127
|
+
} catch (e) {
|
|
128
|
+
FWLog.error('播放音效失败:', e);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* 停止音效
|
|
134
|
+
* @param effectName 声音文件名
|
|
135
|
+
* @returns
|
|
136
|
+
*/
|
|
137
|
+
stopEffect(audioID: number): void {
|
|
138
|
+
if (!audioID) return;
|
|
139
|
+
return cc.audioEngine.stopEffect(audioID);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* 设置音效音量
|
|
143
|
+
* @param volume 音量
|
|
144
|
+
*/
|
|
145
|
+
setEffectsVolume(volume: number): void {
|
|
146
|
+
cc.audioEngine.setEffectsVolume(volume);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* 停止播放所有音效
|
|
150
|
+
*/
|
|
151
|
+
stopAllEffects(): void {
|
|
152
|
+
cc.audioEngine.stopAllEffects();
|
|
153
|
+
}
|
|
154
|
+
/**设置音效是否静音 */
|
|
155
|
+
setEffectsMute(mute: boolean): void {
|
|
156
|
+
if (mute) {
|
|
157
|
+
this.effectsVolume = 1;
|
|
158
|
+
} else {
|
|
159
|
+
this.effectsVolume = 0;
|
|
160
|
+
}
|
|
161
|
+
cc.audioEngine.setEffectsVolume(this.effectsVolume);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
private async dataProcessing(
|
|
165
|
+
path: string,
|
|
166
|
+
cb?: (id: number) => void,
|
|
167
|
+
volume?: number,
|
|
168
|
+
loop?: boolean,
|
|
169
|
+
): Promise<{
|
|
170
|
+
clip: cc.AudioClip;
|
|
171
|
+
volume: number;
|
|
172
|
+
loop: boolean;
|
|
173
|
+
cb: (id: number) => void;
|
|
174
|
+
}>;
|
|
175
|
+
|
|
176
|
+
private async dataProcessing(
|
|
177
|
+
audio: cc.AudioClip,
|
|
178
|
+
cb?: (id: number) => void,
|
|
179
|
+
volume?: number,
|
|
180
|
+
loop?: boolean,
|
|
181
|
+
): Promise<{
|
|
182
|
+
clip: cc.AudioClip;
|
|
183
|
+
volume: number;
|
|
184
|
+
loop: boolean;
|
|
185
|
+
cb: (id: number) => void;
|
|
186
|
+
}>;
|
|
187
|
+
|
|
188
|
+
private async dataProcessing(
|
|
189
|
+
assetProperty: FW.AssetProperty,
|
|
190
|
+
cb?: (id: number) => void,
|
|
191
|
+
volume?: number,
|
|
192
|
+
loop?: boolean,
|
|
193
|
+
): Promise<{
|
|
194
|
+
clip: cc.AudioClip;
|
|
195
|
+
volume: number;
|
|
196
|
+
loop: boolean;
|
|
197
|
+
cb: (id: number) => void;
|
|
198
|
+
}>;
|
|
199
|
+
|
|
200
|
+
private async dataProcessing(
|
|
201
|
+
path: string,
|
|
202
|
+
volume?: number,
|
|
203
|
+
loop?: boolean,
|
|
204
|
+
): Promise<{
|
|
205
|
+
clip: cc.AudioClip;
|
|
206
|
+
volume: number;
|
|
207
|
+
loop: boolean;
|
|
208
|
+
cb: (id: number) => void;
|
|
209
|
+
}>;
|
|
210
|
+
private async dataProcessing(
|
|
211
|
+
music: cc.AudioClip,
|
|
212
|
+
volume?: number,
|
|
213
|
+
loop?: boolean,
|
|
214
|
+
): Promise<{
|
|
215
|
+
clip: cc.AudioClip;
|
|
216
|
+
volume: number;
|
|
217
|
+
loop: boolean;
|
|
218
|
+
cb: (id: number) => void;
|
|
219
|
+
}>;
|
|
220
|
+
private async dataProcessing(
|
|
221
|
+
assetProperty: FW.AssetProperty,
|
|
222
|
+
volume?: number,
|
|
223
|
+
loop?: boolean,
|
|
224
|
+
): Promise<{
|
|
225
|
+
clip: cc.AudioClip;
|
|
226
|
+
volume: number;
|
|
227
|
+
loop: boolean;
|
|
228
|
+
cb: (id: number) => void;
|
|
229
|
+
}>;
|
|
230
|
+
private async dataProcessing(): Promise<{
|
|
231
|
+
clip: cc.AudioClip;
|
|
232
|
+
volume: number;
|
|
233
|
+
loop: boolean;
|
|
234
|
+
cb: (id: number) => void;
|
|
235
|
+
}> {
|
|
236
|
+
let clip: cc.AudioClip;
|
|
237
|
+
if (typeof arguments[0] === 'string') {
|
|
238
|
+
const bundle = FW.Entry.bundleName;
|
|
239
|
+
const path = arguments[0];
|
|
240
|
+
clip = await FW.Entry.resMgr.loadAsset<cc.AudioClip>(<FW.AssetProperty>{
|
|
241
|
+
path: path,
|
|
242
|
+
bundle: bundle,
|
|
243
|
+
});
|
|
244
|
+
} else if (typeof arguments[0] === 'object') {
|
|
245
|
+
const bundle = (arguments[0] as FW.AssetProperty).bundle || FW.Entry.bundleName;
|
|
246
|
+
const path = (arguments[0] as FW.AssetProperty).path;
|
|
247
|
+
clip = await FW.Entry.resMgr.loadAsset<cc.AudioClip>(<FW.AssetProperty>{
|
|
248
|
+
path: path,
|
|
249
|
+
bundle: bundle,
|
|
250
|
+
});
|
|
251
|
+
} else if (arguments[0] instanceof cc.AudioClip) {
|
|
252
|
+
clip = arguments[0];
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
let volume: number;
|
|
256
|
+
|
|
257
|
+
let loop: boolean;
|
|
258
|
+
|
|
259
|
+
let cb: (id: number) => void;
|
|
260
|
+
if (typeof arguments[1] === 'function') {
|
|
261
|
+
cb = arguments[1];
|
|
262
|
+
} else if (typeof arguments[1] === 'number') {
|
|
263
|
+
volume = arguments[1];
|
|
264
|
+
} else if (typeof arguments[1] === 'boolean') {
|
|
265
|
+
loop = arguments[1];
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
if (typeof arguments[2] === 'boolean') {
|
|
269
|
+
loop = arguments[2];
|
|
270
|
+
} else if (typeof arguments[2] === 'number') {
|
|
271
|
+
volume = arguments[2];
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
if (arguments.length == 4) {
|
|
275
|
+
loop = arguments[3];
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
return {
|
|
279
|
+
clip: clip,
|
|
280
|
+
volume: volume,
|
|
281
|
+
loop: loop,
|
|
282
|
+
cb: cb,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
public onDestroy(): void {
|
|
287
|
+
this.stopAll();
|
|
288
|
+
}
|
|
289
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { FWManager } from './FWManager';
|
|
2
|
+
import FWLog from '../log/FWLog';
|
|
3
|
+
|
|
4
|
+
export class FWBundleManager extends FWManager implements FW.BundleManager {
|
|
5
|
+
bundleMap: Map<string, cc.AssetManager.Bundle>;
|
|
6
|
+
remoteBundleConfigMap: Map<string, FW.RemoteBundleConfig>;
|
|
7
|
+
|
|
8
|
+
constructor(protected readonly resMgr: FW.ResManager) {
|
|
9
|
+
super();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
public initialize() {
|
|
13
|
+
this.bundleMap = new Map<string, cc.AssetManager.Bundle>();
|
|
14
|
+
this.remoteBundleConfigMap = new Map<string, FW.RemoteBundleConfig>();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public getBundleMap() {
|
|
18
|
+
return this.bundleMap;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public getRemoteBundleConfigMap() {
|
|
22
|
+
return this.remoteBundleConfigMap;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
initializeRemoteBundleConfig(config: FW.RemoteBundleConfig): void {
|
|
26
|
+
this.remoteBundleConfigMap.set(config.bundleName, config);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async load(bundleName: string): Promise<cc.AssetManager.Bundle> {
|
|
30
|
+
if (!bundleName) return;
|
|
31
|
+
if (this.bundleMap.has(bundleName)) return this.bundleMap.get(bundleName);
|
|
32
|
+
|
|
33
|
+
return new Promise(
|
|
34
|
+
(
|
|
35
|
+
resolve: (value: cc.AssetManager.Bundle | PromiseLike<cc.AssetManager.Bundle>) => void,
|
|
36
|
+
reject: (reason?: any) => void,
|
|
37
|
+
) => {
|
|
38
|
+
const remote = this.remoteBundleConfigMap.get(bundleName);
|
|
39
|
+
const url = remote ? remote.url : '';
|
|
40
|
+
const path = `${url}${bundleName}`;
|
|
41
|
+
|
|
42
|
+
cc.assetManager.loadBundle(
|
|
43
|
+
path,
|
|
44
|
+
{ version: this.remoteBundleConfigMap.get(bundleName) || '' },
|
|
45
|
+
(err: Error, bundle: cc.AssetManager.Bundle) => {
|
|
46
|
+
if (err || !bundle) {
|
|
47
|
+
FWLog.error(`"加载bundle失败:"${bundleName}!`);
|
|
48
|
+
reject(err);
|
|
49
|
+
}
|
|
50
|
+
this.bundleMap.set(bundleName, bundle);
|
|
51
|
+
resolve(bundle);
|
|
52
|
+
},
|
|
53
|
+
);
|
|
54
|
+
},
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* 获取bundle
|
|
60
|
+
* @param bundleName
|
|
61
|
+
* @returns
|
|
62
|
+
*/
|
|
63
|
+
get(bundleName: string): cc.AssetManager.Bundle {
|
|
64
|
+
if (!this.has(bundleName)) {
|
|
65
|
+
FWLog.error('获取bundle失败,请先加载!');
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
return this.bundleMap.get(bundleName);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** 释放bundle */
|
|
72
|
+
release(bundleName: string): void {
|
|
73
|
+
if (!this.has(bundleName)) {
|
|
74
|
+
FWLog.warn('bundle未加载,无需释放!');
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* 是否已经加载某个bundle
|
|
81
|
+
* @param bundleName
|
|
82
|
+
* @returns
|
|
83
|
+
*/
|
|
84
|
+
has(bundleName: string): boolean {
|
|
85
|
+
return this.bundleMap.has(bundleName);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
public onDestroy(): void {
|
|
89
|
+
this.bundleMap.clear();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import FWVirtualViewComponent from '../component/FWVirtualViewComponent';
|
|
2
|
+
import { FWManager } from './FWManager';
|
|
3
|
+
|
|
4
|
+
export default class FWComponentManager extends FWManager implements FW.ComponentManager {
|
|
5
|
+
public initialize(): void {}
|
|
6
|
+
public onDestroy(): void {}
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 绑定虚拟视图列表
|
|
10
|
+
*/
|
|
11
|
+
bindVirtualViewComponent(args: FW.VirtualViewComponentArgs) {
|
|
12
|
+
args.virtualView.onRender = args.onRender?.bind(args.target);
|
|
13
|
+
args.virtualView.onSelected = args.onSelected?.bind(args.target);
|
|
14
|
+
args.virtualView.onPageChange = args.onPageChange?.bind(args.target);
|
|
15
|
+
args.virtualView.count = args.count;
|
|
16
|
+
|
|
17
|
+
if (args.templatePrefab) {
|
|
18
|
+
args.virtualView.templatePrefab = args.templatePrefab;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (args.templateNode) {
|
|
22
|
+
args.virtualView.templateNode = args.templateNode;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { FWSystemDefine } from '../define/FWSystemDefine';
|
|
2
|
+
import FWLog from '../log/FWLog';
|
|
3
|
+
import { FWManager } from './FWManager';
|
|
4
|
+
|
|
5
|
+
export default class FWEngineManager extends FWManager implements FW.EngineManager {
|
|
6
|
+
debug: boolean = CC_DEBUG;
|
|
7
|
+
initialize() {
|
|
8
|
+
this.registerCCCSystemEvent();
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
onDestroy(): void {
|
|
12
|
+
cc.game.off(cc.game.EVENT_SHOW, this.onAppShow, this);
|
|
13
|
+
cc.game.off(cc.game.EVENT_HIDE, this.onAppHide, this);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
getMemory() {
|
|
17
|
+
if (!this.debug) return;
|
|
18
|
+
if (window.performance && window.performance['memory']) {
|
|
19
|
+
FWLog.debug(
|
|
20
|
+
'浏览器允许的最大内存:',
|
|
21
|
+
this.formatBytes(window.performance['memory'].jsHeapSizeLimit),
|
|
22
|
+
);
|
|
23
|
+
FWLog.debug(
|
|
24
|
+
'浏览器已分配内存:',
|
|
25
|
+
this.formatBytes(window.performance['memory'].totalJSHeapSize),
|
|
26
|
+
);
|
|
27
|
+
FWLog.debug(
|
|
28
|
+
'浏览器已使用内存:',
|
|
29
|
+
this.formatBytes(window.performance['memory'].usedJSHeapSize),
|
|
30
|
+
);
|
|
31
|
+
} else {
|
|
32
|
+
FWLog.debug('当前浏览器不支持 performance.memory');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 注册cocos系统事件
|
|
37
|
+
*/
|
|
38
|
+
private registerCCCSystemEvent() {
|
|
39
|
+
cc.game.on(cc.game.EVENT_SHOW, this.onAppShow, this);
|
|
40
|
+
cc.game.on(cc.game.EVENT_HIDE, this.onAppHide, this);
|
|
41
|
+
}
|
|
42
|
+
/** 应用切换到前台 */
|
|
43
|
+
private onAppShow() {
|
|
44
|
+
FWLog.debug('game on show!');
|
|
45
|
+
FW.Entry.evtMgr?.dispatch(FWSystemDefine.CCEventType.ON_SHOW);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** 应用切换到后台 */
|
|
49
|
+
private onAppHide() {
|
|
50
|
+
FWLog.debug('game on hide!');
|
|
51
|
+
FW.Entry.evtMgr?.dispatch(FWSystemDefine.CCEventType.ON_HIDE);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
private formatBytes(bytes: number) {
|
|
55
|
+
if (bytes < 1024 * 1024) {
|
|
56
|
+
return (bytes / 1024).toFixed(2) + ' KB';
|
|
57
|
+
} else if (bytes < 1024 * 1024 * 1024) {
|
|
58
|
+
return (bytes / 1024 / 1024).toFixed(2) + ' MB';
|
|
59
|
+
} else {
|
|
60
|
+
return (bytes / 1024 / 1024 / 1024).toFixed(2) + ' GB';
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|