@combos-fun/plugin-renderer 0.0.1
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/README.md +3 -0
- package/dist/plugin-renderer.cjs.js +409 -0
- package/dist/plugin-renderer.cjs.js.map +1 -0
- package/dist/plugin-renderer.cjs.prod.js +1 -0
- package/dist/plugin-renderer.d.ts +133 -0
- package/dist/plugin-renderer.esm.js +399 -0
- package/dist/plugin-renderer.esm.js.map +1 -0
- package/index.js +7 -0
- package/package.json +30 -0
package/README.md
ADDED
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var tslib = require('tslib');
|
|
4
|
+
var engine = require('@combos-fun/engine');
|
|
5
|
+
var rendererAdapter = require('@combos-fun/renderer-adapter');
|
|
6
|
+
var isEqual = require('lodash-es/isEqual');
|
|
7
|
+
var EventEmitter = require('eventemitter3');
|
|
8
|
+
var pixi_js = require('pixi.js');
|
|
9
|
+
|
|
10
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
|
|
12
|
+
var isEqual__default = /*#__PURE__*/_interopDefault(isEqual);
|
|
13
|
+
var EventEmitter__default = /*#__PURE__*/_interopDefault(EventEmitter);
|
|
14
|
+
|
|
15
|
+
class RendererManager {
|
|
16
|
+
constructor({ game, rendererSystem }) {
|
|
17
|
+
this.renderers = [];
|
|
18
|
+
this.game = game;
|
|
19
|
+
this.rendererSystem = rendererSystem;
|
|
20
|
+
}
|
|
21
|
+
register(...renderers) {
|
|
22
|
+
for (const renderer of renderers) {
|
|
23
|
+
renderer.game = this.game;
|
|
24
|
+
renderer.rendererManager = this.rendererSystem.rendererManager;
|
|
25
|
+
renderer.containerManager = this.rendererSystem.containerManager;
|
|
26
|
+
this.renderers.push(renderer);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
componentChanged(changes) {
|
|
30
|
+
for (const changed of changes) {
|
|
31
|
+
for (const renderer of this.renderers) {
|
|
32
|
+
const props = renderer.observerInfo[changed.componentName];
|
|
33
|
+
if (props) {
|
|
34
|
+
if ([engine.OBSERVER_TYPE.ADD, engine.OBSERVER_TYPE.REMOVE].indexOf(changed.type) > -1) {
|
|
35
|
+
try {
|
|
36
|
+
renderer.componentChanged && renderer.componentChanged(changed);
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
console.error(`gameObject: ${changed.gameObject.name}, ${changed.componentName} is error.`, changed, e);
|
|
40
|
+
}
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const index = props.findIndex(prop => {
|
|
44
|
+
return isEqual__default.default(prop, changed.prop);
|
|
45
|
+
});
|
|
46
|
+
if (index > -1) {
|
|
47
|
+
try {
|
|
48
|
+
renderer.componentChanged && renderer.componentChanged(changed);
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
console.error(`gameObject: ${changed.gameObject && changed.gameObject.name}, ${changed.componentName} is componentChanged error.`, changed, e);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
update(gameObject) {
|
|
59
|
+
for (const component of gameObject.components) {
|
|
60
|
+
for (const renderer of this.renderers) {
|
|
61
|
+
const cache = [];
|
|
62
|
+
const props = renderer.observerInfo[component.name];
|
|
63
|
+
if (props && cache.indexOf(gameObject) === -1) {
|
|
64
|
+
cache.push(gameObject);
|
|
65
|
+
try {
|
|
66
|
+
renderer.rendererUpdate && renderer.rendererUpdate(gameObject);
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
console.info(`gameObject: ${gameObject.name}, ${component.name} is update error`, e);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
class ContainerManager {
|
|
78
|
+
constructor() {
|
|
79
|
+
this.containerMap = {};
|
|
80
|
+
}
|
|
81
|
+
addContainer({ name, container }) {
|
|
82
|
+
this.containerMap[name] = container;
|
|
83
|
+
}
|
|
84
|
+
getContainer(name) {
|
|
85
|
+
return this.containerMap[name];
|
|
86
|
+
}
|
|
87
|
+
removeContainer(name) {
|
|
88
|
+
this.containerMap[name]?.destroy({ children: true });
|
|
89
|
+
delete this.containerMap[name];
|
|
90
|
+
}
|
|
91
|
+
updateTransform({ name, transform }) {
|
|
92
|
+
const container = this.containerMap[name];
|
|
93
|
+
if (!container || !transform)
|
|
94
|
+
return;
|
|
95
|
+
const { anchor, origin, position, rotation, scale, size, skew } = transform;
|
|
96
|
+
container.rotation = rotation;
|
|
97
|
+
container.scale = scale;
|
|
98
|
+
container.pivot.x = size.width * origin.x;
|
|
99
|
+
container.pivot.y = size.height * origin.y;
|
|
100
|
+
container.skew = skew;
|
|
101
|
+
let x = position.x;
|
|
102
|
+
let y = position.y;
|
|
103
|
+
if (transform.parent) {
|
|
104
|
+
const parent = transform.parent;
|
|
105
|
+
x = x + parent.size.width * anchor.x;
|
|
106
|
+
y = y + parent.size.height * anchor.y;
|
|
107
|
+
}
|
|
108
|
+
container.position = { x, y };
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
let Transform$1 = class Transform extends EventEmitter__default.default {
|
|
113
|
+
constructor({ system, containerManager }) {
|
|
114
|
+
super();
|
|
115
|
+
this.name = 'Transform';
|
|
116
|
+
this.waitRemoveIds = [];
|
|
117
|
+
this.waitChangeScenes = [];
|
|
118
|
+
this.containerManager = containerManager;
|
|
119
|
+
this.init(system);
|
|
120
|
+
}
|
|
121
|
+
init(system) {
|
|
122
|
+
this.system = system;
|
|
123
|
+
this.on('changeScene', ({ scene, mode, application }) => {
|
|
124
|
+
// switch (mode) {
|
|
125
|
+
// case LOAD_SCENE_MODE.SINGLE:
|
|
126
|
+
this.waitChangeScenes.push({ scene, mode, application });
|
|
127
|
+
// break;
|
|
128
|
+
// case LOAD_SCENE_MODE.MULTI_CANVAS:
|
|
129
|
+
// }
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
update() {
|
|
133
|
+
for (const id of this.waitRemoveIds) {
|
|
134
|
+
this.containerManager.removeContainer(id);
|
|
135
|
+
}
|
|
136
|
+
this.waitRemoveIds = [];
|
|
137
|
+
for (const sceneInfo of this.waitChangeScenes) {
|
|
138
|
+
// set scene
|
|
139
|
+
const container = this.containerManager.getContainer(sceneInfo.scene.id);
|
|
140
|
+
if (container) {
|
|
141
|
+
sceneInfo.application.stage.removeChildren();
|
|
142
|
+
sceneInfo.application.stage.addChild(container);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
this.waitChangeScenes = [];
|
|
146
|
+
}
|
|
147
|
+
componentChanged(changed) {
|
|
148
|
+
if (changed.type === engine.OBSERVER_TYPE.ADD) {
|
|
149
|
+
this.addContainer(changed);
|
|
150
|
+
}
|
|
151
|
+
else if (changed.type === engine.OBSERVER_TYPE.CHANGE) {
|
|
152
|
+
this.change(changed);
|
|
153
|
+
}
|
|
154
|
+
else if (changed.type === engine.OBSERVER_TYPE.REMOVE) {
|
|
155
|
+
this.waitRemoveIds.push(changed.gameObject.id);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
addContainer(changed) {
|
|
159
|
+
const container = new rendererAdapter.Container();
|
|
160
|
+
container.label = changed.gameObject.name;
|
|
161
|
+
this.containerManager.addContainer({
|
|
162
|
+
name: changed.gameObject.id,
|
|
163
|
+
container,
|
|
164
|
+
});
|
|
165
|
+
const transform = changed.component;
|
|
166
|
+
// Pixi v8 exposes `worldTransform` on the display object; nested `transform.worldTransform` is gone.
|
|
167
|
+
transform.worldTransform = container.worldTransform;
|
|
168
|
+
}
|
|
169
|
+
change(changed) {
|
|
170
|
+
const transform = changed.component;
|
|
171
|
+
if (transform.parent) {
|
|
172
|
+
const parentContainer = this.containerManager.getContainer(transform.parent.gameObject.id);
|
|
173
|
+
parentContainer.addChild(this.containerManager.getContainer(changed.gameObject.id));
|
|
174
|
+
const render = changed.gameObject.transform.parent &&
|
|
175
|
+
changed.gameObject.transform.parent.gameObject.getComponent('Render');
|
|
176
|
+
if (render) {
|
|
177
|
+
render.sortDirty = true;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
const container = this.containerManager.getContainer(changed.gameObject.id);
|
|
182
|
+
delete transform.worldTransform;
|
|
183
|
+
container.parent && container.parent.removeChild(container);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
destroy() {
|
|
187
|
+
this.removeAllListeners();
|
|
188
|
+
this.waitRemoveIds = null;
|
|
189
|
+
this.waitChangeScenes = null;
|
|
190
|
+
this.system = null;
|
|
191
|
+
this.containerManager = null;
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
Transform$1 = tslib.__decorate([
|
|
195
|
+
engine.decorators.componentObserver({
|
|
196
|
+
Transform: ['_parent'],
|
|
197
|
+
})
|
|
198
|
+
], Transform$1);
|
|
199
|
+
var Transform = Transform$1;
|
|
200
|
+
|
|
201
|
+
let result = undefined;
|
|
202
|
+
function getSuportCompressedTextureFormats(gl) {
|
|
203
|
+
if (result)
|
|
204
|
+
return result;
|
|
205
|
+
if (!gl) {
|
|
206
|
+
// #if _DEBUG
|
|
207
|
+
console.warn('WebGL not available for compressed textures. Silently failing.');
|
|
208
|
+
// #endif
|
|
209
|
+
return {
|
|
210
|
+
s3tc: false,
|
|
211
|
+
etc: false,
|
|
212
|
+
etc1: false,
|
|
213
|
+
pvrtc: false,
|
|
214
|
+
atc: false,
|
|
215
|
+
astc: false,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
result = {
|
|
219
|
+
s3tc: !!gl.getExtension('WEBGL_compressed_texture_s3tc'),
|
|
220
|
+
etc: !!gl.getExtension('WEBGL_compressed_texture_etc'),
|
|
221
|
+
etc1: !!gl.getExtension('WEBGL_compressed_texture_etc1'),
|
|
222
|
+
pvrtc: !!gl.getExtension('WEBGL_compressed_texture_pvrtc')
|
|
223
|
+
|| !!gl.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc'),
|
|
224
|
+
atc: !!gl.getExtension('WEBGL_compressed_texture_atc'),
|
|
225
|
+
astc: !!gl.getExtension('WEBGL_compressed_texture_astc')
|
|
226
|
+
};
|
|
227
|
+
try {
|
|
228
|
+
console.log('Supported compressed texture formats: ' + Object.keys(result).filter((type) => result[type]).join(', '));
|
|
229
|
+
}
|
|
230
|
+
catch (e) { }
|
|
231
|
+
return result;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
exports.RENDERER_TYPE = void 0;
|
|
235
|
+
(function (RENDERER_TYPE) {
|
|
236
|
+
RENDERER_TYPE[RENDERER_TYPE["UNKNOWN"] = 0] = "UNKNOWN";
|
|
237
|
+
RENDERER_TYPE[RENDERER_TYPE["WEBGL"] = 1] = "WEBGL";
|
|
238
|
+
RENDERER_TYPE[RENDERER_TYPE["CANVAS"] = 2] = "CANVAS";
|
|
239
|
+
})(exports.RENDERER_TYPE || (exports.RENDERER_TYPE = {}));
|
|
240
|
+
let Renderer$1 = class Renderer extends engine.System {
|
|
241
|
+
constructor() {
|
|
242
|
+
super(...arguments);
|
|
243
|
+
this.application = null;
|
|
244
|
+
this.multiApps = [];
|
|
245
|
+
}
|
|
246
|
+
static { }
|
|
247
|
+
static { this.systemName = 'Renderer'; }
|
|
248
|
+
async init(params) {
|
|
249
|
+
this.params = params ?? {};
|
|
250
|
+
const app = await this.createApplication(this.params);
|
|
251
|
+
this.application = app;
|
|
252
|
+
this.game.canvas = app.canvas;
|
|
253
|
+
this.containerManager = new ContainerManager();
|
|
254
|
+
this.rendererManager = new RendererManager({
|
|
255
|
+
game: this.game,
|
|
256
|
+
rendererSystem: this,
|
|
257
|
+
});
|
|
258
|
+
this.transform = new Transform({
|
|
259
|
+
system: this,
|
|
260
|
+
containerManager: this.containerManager,
|
|
261
|
+
});
|
|
262
|
+
this.game.on('sceneChanged', async ({ scene, mode, params: sceneParams }) => {
|
|
263
|
+
let application = this.application;
|
|
264
|
+
if (mode === engine.LOAD_SCENE_MODE.MULTI_CANVAS) {
|
|
265
|
+
application = await this.createApplication(sceneParams);
|
|
266
|
+
this.multiApps.push(application);
|
|
267
|
+
}
|
|
268
|
+
if (!application) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
scene.canvas = application.canvas;
|
|
272
|
+
this.transform.emit('changeScene', {
|
|
273
|
+
scene,
|
|
274
|
+
mode,
|
|
275
|
+
application,
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
const gl = app.renderer.gl;
|
|
279
|
+
if (gl) {
|
|
280
|
+
this.suportedCompressedTextureFormats = getSuportCompressedTextureFormats(gl);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
registerObserver(observerInfo) {
|
|
284
|
+
const Ctor = this.constructor;
|
|
285
|
+
if (!Ctor.observerInfo) {
|
|
286
|
+
Ctor.observerInfo = {};
|
|
287
|
+
}
|
|
288
|
+
const thisObserverInfo = Ctor.observerInfo;
|
|
289
|
+
for (const key in observerInfo) {
|
|
290
|
+
if (!thisObserverInfo[key]) {
|
|
291
|
+
thisObserverInfo[key] = [];
|
|
292
|
+
}
|
|
293
|
+
thisObserverInfo[key].push(...observerInfo[key]);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
async createApplication(params) {
|
|
297
|
+
const initOptions = {
|
|
298
|
+
...params,
|
|
299
|
+
autoStart: true,
|
|
300
|
+
sharedTicker: true,
|
|
301
|
+
};
|
|
302
|
+
const app = new rendererAdapter.Application();
|
|
303
|
+
try {
|
|
304
|
+
await app.init(initOptions);
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
await app.init({
|
|
308
|
+
...initOptions,
|
|
309
|
+
preference: 'canvas',
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
pixi_js.Ticker.shared.stop();
|
|
313
|
+
pixi_js.Ticker.shared.autoStart = false;
|
|
314
|
+
return app;
|
|
315
|
+
}
|
|
316
|
+
update() {
|
|
317
|
+
const changes = this.componentObserver.clear();
|
|
318
|
+
for (const changed of changes) {
|
|
319
|
+
this.transform.componentChanged(changed);
|
|
320
|
+
}
|
|
321
|
+
if (!this.application) {
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
for (const gameObject of this.game.gameObjects) {
|
|
325
|
+
this.containerManager.updateTransform({
|
|
326
|
+
name: gameObject.id,
|
|
327
|
+
transform: gameObject.transform,
|
|
328
|
+
});
|
|
329
|
+
this.rendererManager.update(gameObject);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
lateUpdate(e) {
|
|
333
|
+
if (!this.application) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
this.transform.update();
|
|
337
|
+
this.application.ticker.update(e.time);
|
|
338
|
+
}
|
|
339
|
+
onDestroy() {
|
|
340
|
+
this.application?.destroy();
|
|
341
|
+
for (const app of this.multiApps) {
|
|
342
|
+
app && app.destroy();
|
|
343
|
+
}
|
|
344
|
+
this.transform.destroy();
|
|
345
|
+
this.transform = null;
|
|
346
|
+
this.params = null;
|
|
347
|
+
this.rendererManager = null;
|
|
348
|
+
this.containerManager = null;
|
|
349
|
+
this.application = null;
|
|
350
|
+
this.game = null;
|
|
351
|
+
this.multiApps = null;
|
|
352
|
+
}
|
|
353
|
+
resize(width, height) {
|
|
354
|
+
if (!this.application) {
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
this.params = { ...this.params, width, height };
|
|
358
|
+
this.application.renderer.resize(width, height);
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
Renderer$1 = tslib.__decorate([
|
|
362
|
+
engine.decorators.componentObserver({
|
|
363
|
+
Transform: ['_parent'],
|
|
364
|
+
})
|
|
365
|
+
], Renderer$1);
|
|
366
|
+
var Renderer_default = Renderer$1;
|
|
367
|
+
|
|
368
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
369
|
+
class Renderer extends engine.System {
|
|
370
|
+
constructor(params) {
|
|
371
|
+
super(params);
|
|
372
|
+
this.asyncIdMap = {};
|
|
373
|
+
const Ctor = this.constructor;
|
|
374
|
+
this.observerInfo = Ctor.observerInfo;
|
|
375
|
+
}
|
|
376
|
+
// init(arg?: any): void;
|
|
377
|
+
/**
|
|
378
|
+
* 当监听的属性变化时候调用
|
|
379
|
+
*
|
|
380
|
+
* called while the observed component props change.
|
|
381
|
+
*/
|
|
382
|
+
componentChanged(_changed) { }
|
|
383
|
+
/**
|
|
384
|
+
* 每帧调用
|
|
385
|
+
*
|
|
386
|
+
* called by every loop
|
|
387
|
+
* @param _gameObject gameObject
|
|
388
|
+
*/
|
|
389
|
+
rendererUpdate(_gameObject) { }
|
|
390
|
+
update(e) {
|
|
391
|
+
const changes = this.componentObserver.clear();
|
|
392
|
+
for (const changed of changes) {
|
|
393
|
+
this.componentChanged(changed);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
increaseAsyncId(id) {
|
|
397
|
+
this.asyncIdMap[id] = (this.asyncIdMap[id] || 0) + 1;
|
|
398
|
+
return this.asyncIdMap[id];
|
|
399
|
+
}
|
|
400
|
+
validateAsyncId(id, asyncId) {
|
|
401
|
+
return this.asyncIdMap[id] === asyncId;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
exports.ContainerManager = ContainerManager;
|
|
406
|
+
exports.Renderer = Renderer;
|
|
407
|
+
exports.RendererManager = RendererManager;
|
|
408
|
+
exports.RendererSystem = Renderer_default;
|
|
409
|
+
//# sourceMappingURL=plugin-renderer.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-renderer.cjs.js","sources":["../lib/manager/RendererManager.ts","../lib/manager/ContainerManager.ts","../lib/Transform.ts","../lib/compressedTexture/ability.ts","../lib/System.ts","../lib/Renderer.ts"],"sourcesContent":["import isEqual from 'lodash-es/isEqual';\nimport { GameObject, Game, ComponentChanged, OBSERVER_TYPE } from '@combos-fun/engine';\nimport Renderer from '../Renderer';\nimport RendererSystem from '../System';\n\nclass RendererManager {\n game: Game;\n rendererSystem: RendererSystem;\n constructor({ game, rendererSystem }) {\n this.game = game;\n this.rendererSystem = rendererSystem;\n }\n renderers: Renderer[] = [];\n register(...renderers: Renderer[]) {\n for (const renderer of renderers) {\n renderer.game = this.game;\n renderer.rendererManager = this.rendererSystem.rendererManager;\n renderer.containerManager = this.rendererSystem.containerManager;\n this.renderers.push(renderer);\n }\n }\n componentChanged(changes: ComponentChanged[]) {\n for (const changed of changes) {\n for (const renderer of this.renderers) {\n const props = renderer.observerInfo[changed.componentName];\n if (props) {\n if ([OBSERVER_TYPE.ADD, OBSERVER_TYPE.REMOVE].indexOf(changed.type) > -1) {\n try {\n renderer.componentChanged && renderer.componentChanged(changed);\n } catch (e) {\n console.error(`gameObject: ${changed.gameObject.name}, ${changed.componentName} is error.`, changed, e);\n }\n continue;\n }\n\n const index = props.findIndex(prop => {\n return isEqual(prop, changed.prop);\n });\n\n if (index > -1) {\n try {\n renderer.componentChanged && renderer.componentChanged(changed);\n } catch (e) {\n console.error(\n `gameObject: ${changed.gameObject && changed.gameObject.name}, ${\n changed.componentName\n } is componentChanged error.`,\n changed,\n e,\n );\n }\n }\n }\n }\n }\n }\n update(gameObject: GameObject) {\n for (const component of gameObject.components) {\n for (const renderer of this.renderers) {\n const cache = [];\n const props = renderer.observerInfo[component.name];\n if (props && cache.indexOf(gameObject) === -1) {\n cache.push(gameObject);\n try {\n renderer.rendererUpdate && renderer.rendererUpdate(gameObject);\n } catch (e) {\n console.info(`gameObject: ${gameObject.name}, ${component.name} is update error`, e);\n }\n }\n }\n }\n }\n}\nexport default RendererManager;\n","import { Transform } from '@combos-fun/engine';\nimport { Point, ObservablePoint } from 'pixi.js';\nimport { Container } from '@combos-fun/renderer-adapter';\n\nexport default class ContainerManager {\n containerMap: { [propName: number]: Container } = {};\n addContainer({ name, container }: { name: number; container: Container }) {\n this.containerMap[name] = container;\n }\n getContainer(name: number) {\n return this.containerMap[name];\n }\n removeContainer(name: number) {\n this.containerMap[name]?.destroy({ children: true });\n delete this.containerMap[name];\n }\n updateTransform({ name, transform }: { name: number; transform: Transform }) {\n const container = this.containerMap[name];\n if (!container || !transform) return;\n const { anchor, origin, position, rotation, scale, size, skew } = transform;\n container.rotation = rotation;\n container.scale = scale as Point;\n container.pivot.x = size.width * origin.x;\n container.pivot.y = size.height * origin.y;\n container.skew = skew as ObservablePoint;\n let x = position.x;\n let y = position.y;\n if (transform.parent) {\n const parent = transform.parent;\n x = x + parent.size.width * anchor.x;\n y = y + parent.size.height * anchor.y;\n }\n\n container.position = { x, y } as Point;\n }\n}\n","import { Transform as Trans, decorators, ComponentChanged, OBSERVER_TYPE, Scene, LOAD_SCENE_MODE } from '@combos-fun/engine';\nimport EventEmitter from 'eventemitter3';\nimport { Application, Container } from '@combos-fun/renderer-adapter';\nimport Render from './System';\nimport ContainerManager from './manager/ContainerManager';\n\n/** Surface used from the Render component; avoids importing plugin-renderer-render (workspace cycle). */\ntype RenderSortDirty = { sortDirty: boolean };\n\n@decorators.componentObserver({\n Transform: ['_parent'],\n})\nexport default class Transform extends EventEmitter {\n name: string = 'Transform';\n waitRemoveIds: number[] = [];\n waitSceneId: number;\n system: Render;\n containerManager: ContainerManager;\n waitChangeScenes: {\n scene: Scene;\n mode: LOAD_SCENE_MODE;\n application: Application;\n }[] = [];\n constructor({ system, containerManager }) {\n super();\n this.containerManager = containerManager;\n this.init(system);\n }\n init(system: Render) {\n this.system = system;\n this.on('changeScene', ({ scene, mode, application }) => {\n // switch (mode) {\n // case LOAD_SCENE_MODE.SINGLE:\n this.waitChangeScenes.push({ scene, mode, application });\n // break;\n // case LOAD_SCENE_MODE.MULTI_CANVAS:\n\n // }\n });\n }\n update() {\n for (const id of this.waitRemoveIds) {\n this.containerManager.removeContainer(id);\n }\n this.waitRemoveIds = [];\n\n for (const sceneInfo of this.waitChangeScenes) {\n // set scene\n const container = this.containerManager.getContainer(sceneInfo.scene.id);\n if (container) {\n sceneInfo.application.stage.removeChildren();\n sceneInfo.application.stage.addChild(container);\n }\n }\n this.waitChangeScenes = [];\n }\n componentChanged(changed: ComponentChanged) {\n if (changed.type === OBSERVER_TYPE.ADD) {\n this.addContainer(changed);\n } else if (changed.type === OBSERVER_TYPE.CHANGE) {\n this.change(changed);\n } else if (changed.type === OBSERVER_TYPE.REMOVE) {\n this.waitRemoveIds.push(changed.gameObject.id);\n }\n }\n addContainer(changed: ComponentChanged) {\n const container = new Container();\n container.label = changed.gameObject.name;\n this.containerManager.addContainer({\n name: changed.gameObject.id,\n container,\n });\n const transform = changed.component as Trans;\n // Pixi v8 exposes `worldTransform` on the display object; nested `transform.worldTransform` is gone.\n transform.worldTransform = container.worldTransform as unknown as Trans['worldTransform'];\n }\n change(changed: ComponentChanged) {\n const transform = changed.component as Trans;\n if (transform.parent) {\n const parentContainer = this.containerManager.getContainer(transform.parent.gameObject.id);\n parentContainer.addChild(this.containerManager.getContainer(changed.gameObject.id));\n\n const render =\n changed.gameObject.transform.parent &&\n (changed.gameObject.transform.parent.gameObject.getComponent('Render') as unknown as RenderSortDirty);\n if (render) {\n render.sortDirty = true;\n }\n } else {\n const container = this.containerManager.getContainer(changed.gameObject.id);\n delete transform.worldTransform;\n container.parent && container.parent.removeChild(container);\n }\n }\n destroy() {\n this.removeAllListeners();\n this.waitRemoveIds = null;\n this.waitChangeScenes = null;\n this.system = null;\n this.containerManager = null;\n }\n}\n","/**\n * Inspired by PixiJS v6\n */\nexport type CompressedTextureExtensions = {\n s3tc?: WEBGL_compressed_texture_s3tc,\n s3tc_sRGB: WEBGL_compressed_texture_s3tc_srgb,\n etc: WEBGL_compressed_texture_etc,\n etc1: WEBGL_compressed_texture_etc1,\n pvrtc: WEBKIT_WEBGL_compressed_texture_pvrtc,\n atc: WEBGL_compressed_texture_atc,\n astc: WEBGL_compressed_texture_astc\n};\nexport type CompressedTextureExtensionRef = keyof CompressedTextureExtensions;\nlet result = undefined;\nexport interface SuportedCompressedTexture {\n s3tc: boolean,\n etc: boolean,\n etc1: boolean,\n pvrtc: boolean,\n atc: boolean,\n astc: boolean,\n}\nexport function getSuportCompressedTextureFormats(gl: WebGLRenderingContext): SuportedCompressedTexture {\n if (result) return result;\n\n if (!gl) {\n // #if _DEBUG\n console.warn('WebGL not available for compressed textures. Silently failing.');\n // #endif\n\n return {\n s3tc: false,\n etc: false,\n etc1: false,\n pvrtc: false,\n atc: false,\n astc: false,\n };\n }\n\n result = {\n s3tc: !!gl.getExtension('WEBGL_compressed_texture_s3tc'),\n etc: !!gl.getExtension('WEBGL_compressed_texture_etc'),\n etc1: !!gl.getExtension('WEBGL_compressed_texture_etc1'),\n pvrtc: !!gl.getExtension('WEBGL_compressed_texture_pvrtc')\n || !!gl.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc'),\n atc: !!gl.getExtension('WEBGL_compressed_texture_atc'),\n astc: !!gl.getExtension('WEBGL_compressed_texture_astc')\n };\n\n try {\n console.log('Supported compressed texture formats: ' + Object.keys(result).filter((type) => result[type]).join(', '))\n } catch (e) { }\n return result;\n}","import { System, decorators, Game, LOAD_SCENE_MODE, PureObserverInfo } from '@combos-fun/engine';\nimport { Application } from '@combos-fun/renderer-adapter';\nimport RendererManager from './manager/RendererManager';\nimport ContainerManager from './manager/ContainerManager';\nimport Transform from './Transform';\nimport { Ticker } from 'pixi.js';\nimport type { ApplicationOptions } from 'pixi.js';\nimport type { Renderer as PixiRenderer } from 'pixi.js';\nimport type { WebGLRenderer } from 'pixi.js';\nimport { registerCompressedTexture } from './compressedTexture';\nimport { SuportedCompressedTexture, getSuportCompressedTextureFormats } from './compressedTexture/ability';\n\nexport enum RENDERER_TYPE {\n UNKNOWN = 0,\n WEBGL = 1,\n CANVAS = 2,\n}\n\n@decorators.componentObserver({\n Transform: ['_parent'],\n})\nexport default class Renderer extends System<Partial<ApplicationOptions>> {\n static systemName: string = 'Renderer';\n params: Partial<ApplicationOptions>;\n rendererManager: RendererManager;\n containerManager: ContainerManager;\n application: Application | null = null;\n game: Game;\n transform: Transform;\n multiApps: Application[] = [];\n suportedCompressedTextureFormats: SuportedCompressedTexture;\n\n async init(params?: Partial<ApplicationOptions>) {\n this.params = params ?? {};\n const app = await this.createApplication(this.params);\n this.application = app;\n this.game.canvas = app.canvas;\n this.containerManager = new ContainerManager();\n this.rendererManager = new RendererManager({\n game: this.game,\n rendererSystem: this,\n });\n\n this.transform = new Transform({\n system: this,\n containerManager: this.containerManager,\n });\n this.game.on('sceneChanged', async ({ scene, mode, params: sceneParams }) => {\n let application: Application | null = this.application;\n if (mode === LOAD_SCENE_MODE.MULTI_CANVAS) {\n application = await this.createApplication(sceneParams);\n this.multiApps.push(application);\n }\n if (!application) {\n return;\n }\n scene.canvas = application.canvas;\n this.transform.emit('changeScene', {\n scene,\n mode,\n application,\n });\n });\n\n const gl = (app.renderer as WebGLRenderer).gl;\n if (gl) {\n this.suportedCompressedTextureFormats = getSuportCompressedTextureFormats(gl);\n registerCompressedTexture(gl);\n }\n }\n\n registerObserver(observerInfo: PureObserverInfo): void {\n const Ctor = this.constructor as typeof Renderer & { observerInfo: PureObserverInfo };\n if (!Ctor.observerInfo) {\n Ctor.observerInfo = {} as PureObserverInfo;\n }\n const thisObserverInfo = Ctor.observerInfo;\n for (const key in observerInfo) {\n if (!thisObserverInfo[key]) {\n thisObserverInfo[key] = [];\n }\n thisObserverInfo[key].push(...observerInfo[key]);\n }\n }\n\n private async createApplication(params: Partial<ApplicationOptions>): Promise<Application> {\n const initOptions: Partial<ApplicationOptions> = {\n ...params,\n autoStart: true,\n sharedTicker: true,\n };\n\n const app = new Application();\n try {\n await app.init(initOptions);\n } catch {\n await app.init({\n ...initOptions,\n preference: 'canvas',\n });\n }\n\n Ticker.shared.stop();\n Ticker.shared.autoStart = false;\n\n return app;\n }\n\n update() {\n const changes = this.componentObserver.clear();\n for (const changed of changes) {\n this.transform.componentChanged(changed);\n }\n if (!this.application) {\n return;\n }\n for (const gameObject of this.game.gameObjects) {\n this.containerManager.updateTransform({\n name: gameObject.id,\n transform: gameObject.transform,\n });\n this.rendererManager.update(gameObject);\n }\n }\n\n lateUpdate(e) {\n if (!this.application) {\n return;\n }\n this.transform.update();\n this.application.ticker.update(e.time);\n }\n\n onDestroy() {\n this.application?.destroy();\n for (const app of this.multiApps) {\n app && app.destroy();\n }\n this.transform.destroy();\n this.transform = null;\n this.params = null;\n this.rendererManager = null;\n this.containerManager = null;\n this.application = null;\n this.game = null;\n this.multiApps = null;\n }\n\n resize(width, height) {\n if (!this.application) {\n return;\n }\n this.params = { ...this.params, width, height };\n this.application.renderer.resize(width, height);\n }\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n\nimport { GameObject, Game, PureObserverInfo, ComponentChanged, System, UpdateParams } from '@combos-fun/engine';\nimport ContainerManager from './manager/ContainerManager';\nimport RendererManager from './manager/RendererManager';\n\nexport default class Renderer<T extends {} = {}> extends System<T> {\n /**\n * Renderer name\n */\n name: string;\n\n /**\n * currentGame\n */\n game: Game;\n\n /**\n * observer component props info\n */\n static observerInfo: PureObserverInfo;\n\n /**\n * observer component props info\n */\n observerInfo: PureObserverInfo;\n\n /**\n * containerManager\n */\n containerManager: ContainerManager;\n rendererManager: RendererManager;\n\n constructor(params?: T) {\n super(params);\n const Ctor = this.constructor as typeof Renderer & { observerInfo: PureObserverInfo };\n this.observerInfo = Ctor.observerInfo;\n }\n\n // init(arg?: any): void;\n\n /**\n * 当监听的属性变化时候调用\n *\n * called while the observed component props change.\n */\n componentChanged(_changed: ComponentChanged) { }\n\n /**\n * 每帧调用\n *\n * called by every loop\n * @param _gameObject gameObject\n */\n rendererUpdate(_gameObject: GameObject) { }\n\n override update(e?: UpdateParams): void {\n const changes = this.componentObserver.clear();\n for (const changed of changes) {\n this.componentChanged(changed);\n }\n }\n\n protected asyncIdMap: Record<number, number> = {}\n\n protected increaseAsyncId(id: number) {\n this.asyncIdMap[id] = (this.asyncIdMap[id] || 0) + 1;\n return this.asyncIdMap[id];\n }\n\n protected validateAsyncId(id: number, asyncId: number) {\n return this.asyncIdMap[id] === asyncId;\n }\n}\n"],"names":["OBSERVER_TYPE","isEqual","Transform","EventEmitter","Container","__decorate","decorators","RENDERER_TYPE","Renderer","System","LOAD_SCENE_MODE","Application","Ticker"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e=require("tslib"),t=require("@combos-fun/engine"),n=require("@combos-fun/renderer-adapter"),r=require("lodash-es/isEqual"),a=require("eventemitter3"),s=require("pixi.js");function o(e){return e&&e.__esModule?e:{default:e}}var i=o(r),c=o(a);class p{constructor({game:e,rendererSystem:t}){this.renderers=[],this.game=e,this.rendererSystem=t}register(...e){for(const t of e)t.game=this.game,t.rendererManager=this.rendererSystem.rendererManager,t.containerManager=this.rendererSystem.containerManager,this.renderers.push(t)}componentChanged(e){for(const n of e)for(const e of this.renderers){const r=e.observerInfo[n.componentName];if(r){if([t.OBSERVER_TYPE.ADD,t.OBSERVER_TYPE.REMOVE].indexOf(n.type)>-1){try{e.componentChanged&&e.componentChanged(n)}catch(e){console.error(`gameObject: ${n.gameObject.name}, ${n.componentName} is error.`,n,e)}continue}if(r.findIndex(e=>i.default(e,n.prop))>-1)try{e.componentChanged&&e.componentChanged(n)}catch(e){console.error(`gameObject: ${n.gameObject&&n.gameObject.name}, ${n.componentName} is componentChanged error.`,n,e)}}}}update(e){for(const t of e.components)for(const n of this.renderers){const r=[];if(n.observerInfo[t.name]&&-1===r.indexOf(e)){r.push(e);try{n.rendererUpdate&&n.rendererUpdate(e)}catch(n){console.info(`gameObject: ${e.name}, ${t.name} is update error`,n)}}}}}class h{constructor(){this.containerMap={}}addContainer({name:e,container:t}){this.containerMap[e]=t}getContainer(e){return this.containerMap[e]}removeContainer(e){this.containerMap[e]?.destroy({children:!0}),delete this.containerMap[e]}updateTransform({name:e,transform:t}){const n=this.containerMap[e];if(!n||!t)return;const{anchor:r,origin:a,position:s,rotation:o,scale:i,size:c,skew:p}=t;n.rotation=o,n.scale=i,n.pivot.x=c.width*a.x,n.pivot.y=c.height*a.y,n.skew=p;let h=s.x,d=s.y;if(t.parent){const e=t.parent;h+=e.size.width*r.x,d+=e.size.height*r.y}n.position={x:h,y:d}}}let d=class extends c.default{constructor({system:e,containerManager:t}){super(),this.name="Transform",this.waitRemoveIds=[],this.waitChangeScenes=[],this.containerManager=t,this.init(e)}init(e){this.system=e,this.on("changeScene",({scene:e,mode:t,application:n})=>{this.waitChangeScenes.push({scene:e,mode:t,application:n})})}update(){for(const e of this.waitRemoveIds)this.containerManager.removeContainer(e);this.waitRemoveIds=[];for(const e of this.waitChangeScenes){const t=this.containerManager.getContainer(e.scene.id);t&&(e.application.stage.removeChildren(),e.application.stage.addChild(t))}this.waitChangeScenes=[]}componentChanged(e){e.type===t.OBSERVER_TYPE.ADD?this.addContainer(e):e.type===t.OBSERVER_TYPE.CHANGE?this.change(e):e.type===t.OBSERVER_TYPE.REMOVE&&this.waitRemoveIds.push(e.gameObject.id)}addContainer(e){const t=new n.Container;t.label=e.gameObject.name,this.containerManager.addContainer({name:e.gameObject.id,container:t});e.component.worldTransform=t.worldTransform}change(e){const t=e.component;if(t.parent){this.containerManager.getContainer(t.parent.gameObject.id).addChild(this.containerManager.getContainer(e.gameObject.id));const n=e.gameObject.transform.parent&&e.gameObject.transform.parent.gameObject.getComponent("Render");n&&(n.sortDirty=!0)}else{const n=this.containerManager.getContainer(e.gameObject.id);delete t.worldTransform,n.parent&&n.parent.removeChild(n)}}destroy(){this.removeAllListeners(),this.waitRemoveIds=null,this.waitChangeScenes=null,this.system=null,this.containerManager=null}};d=e.__decorate([t.decorators.componentObserver({Transform:["_parent"]})],d);var m=d;let l;var g;exports.RENDERER_TYPE=void 0,(g=exports.RENDERER_TYPE||(exports.RENDERER_TYPE={}))[g.UNKNOWN=0]="UNKNOWN",g[g.WEBGL=1]="WEBGL",g[g.CANVAS=2]="CANVAS";let u=class extends t.System{constructor(){super(...arguments),this.application=null,this.multiApps=[]}static{this.systemName="Renderer"}async init(e){this.params=e??{};const n=await this.createApplication(this.params);this.application=n,this.game.canvas=n.canvas,this.containerManager=new h,this.rendererManager=new p({game:this.game,rendererSystem:this}),this.transform=new m({system:this,containerManager:this.containerManager}),this.game.on("sceneChanged",async({scene:e,mode:n,params:r})=>{let a=this.application;n===t.LOAD_SCENE_MODE.MULTI_CANVAS&&(a=await this.createApplication(r),this.multiApps.push(a)),a&&(e.canvas=a.canvas,this.transform.emit("changeScene",{scene:e,mode:n,application:a}))});const r=n.renderer.gl;r&&(this.suportedCompressedTextureFormats=function(e){if(l)return l;if(!e)return console.warn("WebGL not available for compressed textures. Silently failing."),{s3tc:!1,etc:!1,etc1:!1,pvrtc:!1,atc:!1,astc:!1};l={s3tc:!!e.getExtension("WEBGL_compressed_texture_s3tc"),etc:!!e.getExtension("WEBGL_compressed_texture_etc"),etc1:!!e.getExtension("WEBGL_compressed_texture_etc1"),pvrtc:!!e.getExtension("WEBGL_compressed_texture_pvrtc")||!!e.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),atc:!!e.getExtension("WEBGL_compressed_texture_atc"),astc:!!e.getExtension("WEBGL_compressed_texture_astc")};try{console.log("Supported compressed texture formats: "+Object.keys(l).filter(e=>l[e]).join(", "))}catch(e){}return l}(r))}registerObserver(e){const t=this.constructor;t.observerInfo||(t.observerInfo={});const n=t.observerInfo;for(const t in e)n[t]||(n[t]=[]),n[t].push(...e[t])}async createApplication(e){const t={...e,autoStart:!0,sharedTicker:!0},r=new n.Application;try{await r.init(t)}catch{await r.init({...t,preference:"canvas"})}return s.Ticker.shared.stop(),s.Ticker.shared.autoStart=!1,r}update(){const e=this.componentObserver.clear();for(const t of e)this.transform.componentChanged(t);if(this.application)for(const e of this.game.gameObjects)this.containerManager.updateTransform({name:e.id,transform:e.transform}),this.rendererManager.update(e)}lateUpdate(e){this.application&&(this.transform.update(),this.application.ticker.update(e.time))}onDestroy(){this.application?.destroy();for(const e of this.multiApps)e&&e.destroy();this.transform.destroy(),this.transform=null,this.params=null,this.rendererManager=null,this.containerManager=null,this.application=null,this.game=null,this.multiApps=null}resize(e,t){this.application&&(this.params={...this.params,width:e,height:t},this.application.renderer.resize(e,t))}};u=e.__decorate([t.decorators.componentObserver({Transform:["_parent"]})],u);var f=u;class E extends t.System{constructor(e){super(e),this.asyncIdMap={};const t=this.constructor;this.observerInfo=t.observerInfo}componentChanged(e){}rendererUpdate(e){}update(e){const t=this.componentObserver.clear();for(const e of t)this.componentChanged(e)}increaseAsyncId(e){return this.asyncIdMap[e]=(this.asyncIdMap[e]||0)+1,this.asyncIdMap[e]}validateAsyncId(e,t){return this.asyncIdMap[e]===t}}exports.ContainerManager=h,exports.Renderer=E,exports.RendererManager=p,exports.RendererSystem=f;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { Transform as Transform$1, System, Game, PureObserverInfo, ComponentChanged, GameObject, UpdateParams, Scene, LOAD_SCENE_MODE } from '@combos-fun/engine';
|
|
2
|
+
import { Container, Application } from '@combos-fun/renderer-adapter';
|
|
3
|
+
import EventEmitter from 'eventemitter3';
|
|
4
|
+
import { ApplicationOptions } from 'pixi.js';
|
|
5
|
+
|
|
6
|
+
declare class ContainerManager {
|
|
7
|
+
containerMap: {
|
|
8
|
+
[propName: number]: Container;
|
|
9
|
+
};
|
|
10
|
+
addContainer({ name, container }: {
|
|
11
|
+
name: number;
|
|
12
|
+
container: Container;
|
|
13
|
+
}): void;
|
|
14
|
+
getContainer(name: number): Container;
|
|
15
|
+
removeContainer(name: number): void;
|
|
16
|
+
updateTransform({ name, transform }: {
|
|
17
|
+
name: number;
|
|
18
|
+
transform: Transform$1;
|
|
19
|
+
}): void;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
declare class Renderer$1<T extends {} = {}> extends System<T> {
|
|
23
|
+
/**
|
|
24
|
+
* Renderer name
|
|
25
|
+
*/
|
|
26
|
+
name: string;
|
|
27
|
+
/**
|
|
28
|
+
* currentGame
|
|
29
|
+
*/
|
|
30
|
+
game: Game;
|
|
31
|
+
/**
|
|
32
|
+
* observer component props info
|
|
33
|
+
*/
|
|
34
|
+
static observerInfo: PureObserverInfo;
|
|
35
|
+
/**
|
|
36
|
+
* observer component props info
|
|
37
|
+
*/
|
|
38
|
+
observerInfo: PureObserverInfo;
|
|
39
|
+
/**
|
|
40
|
+
* containerManager
|
|
41
|
+
*/
|
|
42
|
+
containerManager: ContainerManager;
|
|
43
|
+
rendererManager: RendererManager;
|
|
44
|
+
constructor(params?: T);
|
|
45
|
+
/**
|
|
46
|
+
* 当监听的属性变化时候调用
|
|
47
|
+
*
|
|
48
|
+
* called while the observed component props change.
|
|
49
|
+
*/
|
|
50
|
+
componentChanged(_changed: ComponentChanged): void;
|
|
51
|
+
/**
|
|
52
|
+
* 每帧调用
|
|
53
|
+
*
|
|
54
|
+
* called by every loop
|
|
55
|
+
* @param _gameObject gameObject
|
|
56
|
+
*/
|
|
57
|
+
rendererUpdate(_gameObject: GameObject): void;
|
|
58
|
+
update(e?: UpdateParams): void;
|
|
59
|
+
protected asyncIdMap: Record<number, number>;
|
|
60
|
+
protected increaseAsyncId(id: number): number;
|
|
61
|
+
protected validateAsyncId(id: number, asyncId: number): boolean;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
declare class RendererManager {
|
|
65
|
+
game: Game;
|
|
66
|
+
rendererSystem: Renderer;
|
|
67
|
+
constructor({ game, rendererSystem }: {
|
|
68
|
+
game: any;
|
|
69
|
+
rendererSystem: any;
|
|
70
|
+
});
|
|
71
|
+
renderers: Renderer$1[];
|
|
72
|
+
register(...renderers: Renderer$1[]): void;
|
|
73
|
+
componentChanged(changes: ComponentChanged[]): void;
|
|
74
|
+
update(gameObject: GameObject): void;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
declare class Transform extends EventEmitter {
|
|
78
|
+
name: string;
|
|
79
|
+
waitRemoveIds: number[];
|
|
80
|
+
waitSceneId: number;
|
|
81
|
+
system: Renderer;
|
|
82
|
+
containerManager: ContainerManager;
|
|
83
|
+
waitChangeScenes: {
|
|
84
|
+
scene: Scene;
|
|
85
|
+
mode: LOAD_SCENE_MODE;
|
|
86
|
+
application: Application;
|
|
87
|
+
}[];
|
|
88
|
+
constructor({ system, containerManager }: {
|
|
89
|
+
system: any;
|
|
90
|
+
containerManager: any;
|
|
91
|
+
});
|
|
92
|
+
init(system: Renderer): void;
|
|
93
|
+
update(): void;
|
|
94
|
+
componentChanged(changed: ComponentChanged): void;
|
|
95
|
+
addContainer(changed: ComponentChanged): void;
|
|
96
|
+
change(changed: ComponentChanged): void;
|
|
97
|
+
destroy(): void;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
interface SuportedCompressedTexture {
|
|
101
|
+
s3tc: boolean;
|
|
102
|
+
etc: boolean;
|
|
103
|
+
etc1: boolean;
|
|
104
|
+
pvrtc: boolean;
|
|
105
|
+
atc: boolean;
|
|
106
|
+
astc: boolean;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
declare enum RENDERER_TYPE {
|
|
110
|
+
UNKNOWN = 0,
|
|
111
|
+
WEBGL = 1,
|
|
112
|
+
CANVAS = 2
|
|
113
|
+
}
|
|
114
|
+
declare class Renderer extends System<Partial<ApplicationOptions>> {
|
|
115
|
+
static systemName: string;
|
|
116
|
+
params: Partial<ApplicationOptions>;
|
|
117
|
+
rendererManager: RendererManager;
|
|
118
|
+
containerManager: ContainerManager;
|
|
119
|
+
application: Application | null;
|
|
120
|
+
game: Game;
|
|
121
|
+
transform: Transform;
|
|
122
|
+
multiApps: Application[];
|
|
123
|
+
suportedCompressedTextureFormats: SuportedCompressedTexture;
|
|
124
|
+
init(params?: Partial<ApplicationOptions>): Promise<void>;
|
|
125
|
+
registerObserver(observerInfo: PureObserverInfo): void;
|
|
126
|
+
private createApplication;
|
|
127
|
+
update(): void;
|
|
128
|
+
lateUpdate(e: any): void;
|
|
129
|
+
onDestroy(): void;
|
|
130
|
+
resize(width: any, height: any): void;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export { ContainerManager, RENDERER_TYPE, Renderer$1 as Renderer, RendererManager, Renderer as RendererSystem };
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
import { __decorate } from 'tslib';
|
|
2
|
+
import { OBSERVER_TYPE, decorators, System, LOAD_SCENE_MODE } from '@combos-fun/engine';
|
|
3
|
+
import { Container, Application } from '@combos-fun/renderer-adapter';
|
|
4
|
+
import isEqual from 'lodash-es/isEqual';
|
|
5
|
+
import EventEmitter from 'eventemitter3';
|
|
6
|
+
import { Ticker } from 'pixi.js';
|
|
7
|
+
|
|
8
|
+
class RendererManager {
|
|
9
|
+
constructor({ game, rendererSystem }) {
|
|
10
|
+
this.renderers = [];
|
|
11
|
+
this.game = game;
|
|
12
|
+
this.rendererSystem = rendererSystem;
|
|
13
|
+
}
|
|
14
|
+
register(...renderers) {
|
|
15
|
+
for (const renderer of renderers) {
|
|
16
|
+
renderer.game = this.game;
|
|
17
|
+
renderer.rendererManager = this.rendererSystem.rendererManager;
|
|
18
|
+
renderer.containerManager = this.rendererSystem.containerManager;
|
|
19
|
+
this.renderers.push(renderer);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
componentChanged(changes) {
|
|
23
|
+
for (const changed of changes) {
|
|
24
|
+
for (const renderer of this.renderers) {
|
|
25
|
+
const props = renderer.observerInfo[changed.componentName];
|
|
26
|
+
if (props) {
|
|
27
|
+
if ([OBSERVER_TYPE.ADD, OBSERVER_TYPE.REMOVE].indexOf(changed.type) > -1) {
|
|
28
|
+
try {
|
|
29
|
+
renderer.componentChanged && renderer.componentChanged(changed);
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
console.error(`gameObject: ${changed.gameObject.name}, ${changed.componentName} is error.`, changed, e);
|
|
33
|
+
}
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const index = props.findIndex(prop => {
|
|
37
|
+
return isEqual(prop, changed.prop);
|
|
38
|
+
});
|
|
39
|
+
if (index > -1) {
|
|
40
|
+
try {
|
|
41
|
+
renderer.componentChanged && renderer.componentChanged(changed);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
console.error(`gameObject: ${changed.gameObject && changed.gameObject.name}, ${changed.componentName} is componentChanged error.`, changed, e);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
update(gameObject) {
|
|
52
|
+
for (const component of gameObject.components) {
|
|
53
|
+
for (const renderer of this.renderers) {
|
|
54
|
+
const cache = [];
|
|
55
|
+
const props = renderer.observerInfo[component.name];
|
|
56
|
+
if (props && cache.indexOf(gameObject) === -1) {
|
|
57
|
+
cache.push(gameObject);
|
|
58
|
+
try {
|
|
59
|
+
renderer.rendererUpdate && renderer.rendererUpdate(gameObject);
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
console.info(`gameObject: ${gameObject.name}, ${component.name} is update error`, e);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
class ContainerManager {
|
|
71
|
+
constructor() {
|
|
72
|
+
this.containerMap = {};
|
|
73
|
+
}
|
|
74
|
+
addContainer({ name, container }) {
|
|
75
|
+
this.containerMap[name] = container;
|
|
76
|
+
}
|
|
77
|
+
getContainer(name) {
|
|
78
|
+
return this.containerMap[name];
|
|
79
|
+
}
|
|
80
|
+
removeContainer(name) {
|
|
81
|
+
this.containerMap[name]?.destroy({ children: true });
|
|
82
|
+
delete this.containerMap[name];
|
|
83
|
+
}
|
|
84
|
+
updateTransform({ name, transform }) {
|
|
85
|
+
const container = this.containerMap[name];
|
|
86
|
+
if (!container || !transform)
|
|
87
|
+
return;
|
|
88
|
+
const { anchor, origin, position, rotation, scale, size, skew } = transform;
|
|
89
|
+
container.rotation = rotation;
|
|
90
|
+
container.scale = scale;
|
|
91
|
+
container.pivot.x = size.width * origin.x;
|
|
92
|
+
container.pivot.y = size.height * origin.y;
|
|
93
|
+
container.skew = skew;
|
|
94
|
+
let x = position.x;
|
|
95
|
+
let y = position.y;
|
|
96
|
+
if (transform.parent) {
|
|
97
|
+
const parent = transform.parent;
|
|
98
|
+
x = x + parent.size.width * anchor.x;
|
|
99
|
+
y = y + parent.size.height * anchor.y;
|
|
100
|
+
}
|
|
101
|
+
container.position = { x, y };
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
let Transform = class Transform extends EventEmitter {
|
|
106
|
+
constructor({ system, containerManager }) {
|
|
107
|
+
super();
|
|
108
|
+
this.name = 'Transform';
|
|
109
|
+
this.waitRemoveIds = [];
|
|
110
|
+
this.waitChangeScenes = [];
|
|
111
|
+
this.containerManager = containerManager;
|
|
112
|
+
this.init(system);
|
|
113
|
+
}
|
|
114
|
+
init(system) {
|
|
115
|
+
this.system = system;
|
|
116
|
+
this.on('changeScene', ({ scene, mode, application }) => {
|
|
117
|
+
// switch (mode) {
|
|
118
|
+
// case LOAD_SCENE_MODE.SINGLE:
|
|
119
|
+
this.waitChangeScenes.push({ scene, mode, application });
|
|
120
|
+
// break;
|
|
121
|
+
// case LOAD_SCENE_MODE.MULTI_CANVAS:
|
|
122
|
+
// }
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
update() {
|
|
126
|
+
for (const id of this.waitRemoveIds) {
|
|
127
|
+
this.containerManager.removeContainer(id);
|
|
128
|
+
}
|
|
129
|
+
this.waitRemoveIds = [];
|
|
130
|
+
for (const sceneInfo of this.waitChangeScenes) {
|
|
131
|
+
// set scene
|
|
132
|
+
const container = this.containerManager.getContainer(sceneInfo.scene.id);
|
|
133
|
+
if (container) {
|
|
134
|
+
sceneInfo.application.stage.removeChildren();
|
|
135
|
+
sceneInfo.application.stage.addChild(container);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
this.waitChangeScenes = [];
|
|
139
|
+
}
|
|
140
|
+
componentChanged(changed) {
|
|
141
|
+
if (changed.type === OBSERVER_TYPE.ADD) {
|
|
142
|
+
this.addContainer(changed);
|
|
143
|
+
}
|
|
144
|
+
else if (changed.type === OBSERVER_TYPE.CHANGE) {
|
|
145
|
+
this.change(changed);
|
|
146
|
+
}
|
|
147
|
+
else if (changed.type === OBSERVER_TYPE.REMOVE) {
|
|
148
|
+
this.waitRemoveIds.push(changed.gameObject.id);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
addContainer(changed) {
|
|
152
|
+
const container = new Container();
|
|
153
|
+
container.label = changed.gameObject.name;
|
|
154
|
+
this.containerManager.addContainer({
|
|
155
|
+
name: changed.gameObject.id,
|
|
156
|
+
container,
|
|
157
|
+
});
|
|
158
|
+
const transform = changed.component;
|
|
159
|
+
// Pixi v8 exposes `worldTransform` on the display object; nested `transform.worldTransform` is gone.
|
|
160
|
+
transform.worldTransform = container.worldTransform;
|
|
161
|
+
}
|
|
162
|
+
change(changed) {
|
|
163
|
+
const transform = changed.component;
|
|
164
|
+
if (transform.parent) {
|
|
165
|
+
const parentContainer = this.containerManager.getContainer(transform.parent.gameObject.id);
|
|
166
|
+
parentContainer.addChild(this.containerManager.getContainer(changed.gameObject.id));
|
|
167
|
+
const render = changed.gameObject.transform.parent &&
|
|
168
|
+
changed.gameObject.transform.parent.gameObject.getComponent('Render');
|
|
169
|
+
if (render) {
|
|
170
|
+
render.sortDirty = true;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
const container = this.containerManager.getContainer(changed.gameObject.id);
|
|
175
|
+
delete transform.worldTransform;
|
|
176
|
+
container.parent && container.parent.removeChild(container);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
destroy() {
|
|
180
|
+
this.removeAllListeners();
|
|
181
|
+
this.waitRemoveIds = null;
|
|
182
|
+
this.waitChangeScenes = null;
|
|
183
|
+
this.system = null;
|
|
184
|
+
this.containerManager = null;
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
Transform = __decorate([
|
|
188
|
+
decorators.componentObserver({
|
|
189
|
+
Transform: ['_parent'],
|
|
190
|
+
})
|
|
191
|
+
], Transform);
|
|
192
|
+
var Transform$1 = Transform;
|
|
193
|
+
|
|
194
|
+
let result = undefined;
|
|
195
|
+
function getSuportCompressedTextureFormats(gl) {
|
|
196
|
+
if (result)
|
|
197
|
+
return result;
|
|
198
|
+
if (!gl) {
|
|
199
|
+
// #if _DEBUG
|
|
200
|
+
console.warn('WebGL not available for compressed textures. Silently failing.');
|
|
201
|
+
// #endif
|
|
202
|
+
return {
|
|
203
|
+
s3tc: false,
|
|
204
|
+
etc: false,
|
|
205
|
+
etc1: false,
|
|
206
|
+
pvrtc: false,
|
|
207
|
+
atc: false,
|
|
208
|
+
astc: false,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
result = {
|
|
212
|
+
s3tc: !!gl.getExtension('WEBGL_compressed_texture_s3tc'),
|
|
213
|
+
etc: !!gl.getExtension('WEBGL_compressed_texture_etc'),
|
|
214
|
+
etc1: !!gl.getExtension('WEBGL_compressed_texture_etc1'),
|
|
215
|
+
pvrtc: !!gl.getExtension('WEBGL_compressed_texture_pvrtc')
|
|
216
|
+
|| !!gl.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc'),
|
|
217
|
+
atc: !!gl.getExtension('WEBGL_compressed_texture_atc'),
|
|
218
|
+
astc: !!gl.getExtension('WEBGL_compressed_texture_astc')
|
|
219
|
+
};
|
|
220
|
+
try {
|
|
221
|
+
console.log('Supported compressed texture formats: ' + Object.keys(result).filter((type) => result[type]).join(', '));
|
|
222
|
+
}
|
|
223
|
+
catch (e) { }
|
|
224
|
+
return result;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
var RENDERER_TYPE;
|
|
228
|
+
(function (RENDERER_TYPE) {
|
|
229
|
+
RENDERER_TYPE[RENDERER_TYPE["UNKNOWN"] = 0] = "UNKNOWN";
|
|
230
|
+
RENDERER_TYPE[RENDERER_TYPE["WEBGL"] = 1] = "WEBGL";
|
|
231
|
+
RENDERER_TYPE[RENDERER_TYPE["CANVAS"] = 2] = "CANVAS";
|
|
232
|
+
})(RENDERER_TYPE || (RENDERER_TYPE = {}));
|
|
233
|
+
let Renderer$1 = class Renderer extends System {
|
|
234
|
+
constructor() {
|
|
235
|
+
super(...arguments);
|
|
236
|
+
this.application = null;
|
|
237
|
+
this.multiApps = [];
|
|
238
|
+
}
|
|
239
|
+
static { }
|
|
240
|
+
static { this.systemName = 'Renderer'; }
|
|
241
|
+
async init(params) {
|
|
242
|
+
this.params = params ?? {};
|
|
243
|
+
const app = await this.createApplication(this.params);
|
|
244
|
+
this.application = app;
|
|
245
|
+
this.game.canvas = app.canvas;
|
|
246
|
+
this.containerManager = new ContainerManager();
|
|
247
|
+
this.rendererManager = new RendererManager({
|
|
248
|
+
game: this.game,
|
|
249
|
+
rendererSystem: this,
|
|
250
|
+
});
|
|
251
|
+
this.transform = new Transform$1({
|
|
252
|
+
system: this,
|
|
253
|
+
containerManager: this.containerManager,
|
|
254
|
+
});
|
|
255
|
+
this.game.on('sceneChanged', async ({ scene, mode, params: sceneParams }) => {
|
|
256
|
+
let application = this.application;
|
|
257
|
+
if (mode === LOAD_SCENE_MODE.MULTI_CANVAS) {
|
|
258
|
+
application = await this.createApplication(sceneParams);
|
|
259
|
+
this.multiApps.push(application);
|
|
260
|
+
}
|
|
261
|
+
if (!application) {
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
scene.canvas = application.canvas;
|
|
265
|
+
this.transform.emit('changeScene', {
|
|
266
|
+
scene,
|
|
267
|
+
mode,
|
|
268
|
+
application,
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
const gl = app.renderer.gl;
|
|
272
|
+
if (gl) {
|
|
273
|
+
this.suportedCompressedTextureFormats = getSuportCompressedTextureFormats(gl);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
registerObserver(observerInfo) {
|
|
277
|
+
const Ctor = this.constructor;
|
|
278
|
+
if (!Ctor.observerInfo) {
|
|
279
|
+
Ctor.observerInfo = {};
|
|
280
|
+
}
|
|
281
|
+
const thisObserverInfo = Ctor.observerInfo;
|
|
282
|
+
for (const key in observerInfo) {
|
|
283
|
+
if (!thisObserverInfo[key]) {
|
|
284
|
+
thisObserverInfo[key] = [];
|
|
285
|
+
}
|
|
286
|
+
thisObserverInfo[key].push(...observerInfo[key]);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
async createApplication(params) {
|
|
290
|
+
const initOptions = {
|
|
291
|
+
...params,
|
|
292
|
+
autoStart: true,
|
|
293
|
+
sharedTicker: true,
|
|
294
|
+
};
|
|
295
|
+
const app = new Application();
|
|
296
|
+
try {
|
|
297
|
+
await app.init(initOptions);
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
await app.init({
|
|
301
|
+
...initOptions,
|
|
302
|
+
preference: 'canvas',
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
Ticker.shared.stop();
|
|
306
|
+
Ticker.shared.autoStart = false;
|
|
307
|
+
return app;
|
|
308
|
+
}
|
|
309
|
+
update() {
|
|
310
|
+
const changes = this.componentObserver.clear();
|
|
311
|
+
for (const changed of changes) {
|
|
312
|
+
this.transform.componentChanged(changed);
|
|
313
|
+
}
|
|
314
|
+
if (!this.application) {
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
for (const gameObject of this.game.gameObjects) {
|
|
318
|
+
this.containerManager.updateTransform({
|
|
319
|
+
name: gameObject.id,
|
|
320
|
+
transform: gameObject.transform,
|
|
321
|
+
});
|
|
322
|
+
this.rendererManager.update(gameObject);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
lateUpdate(e) {
|
|
326
|
+
if (!this.application) {
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
this.transform.update();
|
|
330
|
+
this.application.ticker.update(e.time);
|
|
331
|
+
}
|
|
332
|
+
onDestroy() {
|
|
333
|
+
this.application?.destroy();
|
|
334
|
+
for (const app of this.multiApps) {
|
|
335
|
+
app && app.destroy();
|
|
336
|
+
}
|
|
337
|
+
this.transform.destroy();
|
|
338
|
+
this.transform = null;
|
|
339
|
+
this.params = null;
|
|
340
|
+
this.rendererManager = null;
|
|
341
|
+
this.containerManager = null;
|
|
342
|
+
this.application = null;
|
|
343
|
+
this.game = null;
|
|
344
|
+
this.multiApps = null;
|
|
345
|
+
}
|
|
346
|
+
resize(width, height) {
|
|
347
|
+
if (!this.application) {
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
this.params = { ...this.params, width, height };
|
|
351
|
+
this.application.renderer.resize(width, height);
|
|
352
|
+
}
|
|
353
|
+
};
|
|
354
|
+
Renderer$1 = __decorate([
|
|
355
|
+
decorators.componentObserver({
|
|
356
|
+
Transform: ['_parent'],
|
|
357
|
+
})
|
|
358
|
+
], Renderer$1);
|
|
359
|
+
var Renderer_default = Renderer$1;
|
|
360
|
+
|
|
361
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
362
|
+
class Renderer extends System {
|
|
363
|
+
constructor(params) {
|
|
364
|
+
super(params);
|
|
365
|
+
this.asyncIdMap = {};
|
|
366
|
+
const Ctor = this.constructor;
|
|
367
|
+
this.observerInfo = Ctor.observerInfo;
|
|
368
|
+
}
|
|
369
|
+
// init(arg?: any): void;
|
|
370
|
+
/**
|
|
371
|
+
* 当监听的属性变化时候调用
|
|
372
|
+
*
|
|
373
|
+
* called while the observed component props change.
|
|
374
|
+
*/
|
|
375
|
+
componentChanged(_changed) { }
|
|
376
|
+
/**
|
|
377
|
+
* 每帧调用
|
|
378
|
+
*
|
|
379
|
+
* called by every loop
|
|
380
|
+
* @param _gameObject gameObject
|
|
381
|
+
*/
|
|
382
|
+
rendererUpdate(_gameObject) { }
|
|
383
|
+
update(e) {
|
|
384
|
+
const changes = this.componentObserver.clear();
|
|
385
|
+
for (const changed of changes) {
|
|
386
|
+
this.componentChanged(changed);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
increaseAsyncId(id) {
|
|
390
|
+
this.asyncIdMap[id] = (this.asyncIdMap[id] || 0) + 1;
|
|
391
|
+
return this.asyncIdMap[id];
|
|
392
|
+
}
|
|
393
|
+
validateAsyncId(id, asyncId) {
|
|
394
|
+
return this.asyncIdMap[id] === asyncId;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
export { ContainerManager, RENDERER_TYPE, Renderer, RendererManager, Renderer_default as RendererSystem };
|
|
399
|
+
//# sourceMappingURL=plugin-renderer.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-renderer.esm.js","sources":["../lib/manager/RendererManager.ts","../lib/manager/ContainerManager.ts","../lib/Transform.ts","../lib/compressedTexture/ability.ts","../lib/System.ts","../lib/Renderer.ts"],"sourcesContent":["import isEqual from 'lodash-es/isEqual';\nimport { GameObject, Game, ComponentChanged, OBSERVER_TYPE } from '@combos-fun/engine';\nimport Renderer from '../Renderer';\nimport RendererSystem from '../System';\n\nclass RendererManager {\n game: Game;\n rendererSystem: RendererSystem;\n constructor({ game, rendererSystem }) {\n this.game = game;\n this.rendererSystem = rendererSystem;\n }\n renderers: Renderer[] = [];\n register(...renderers: Renderer[]) {\n for (const renderer of renderers) {\n renderer.game = this.game;\n renderer.rendererManager = this.rendererSystem.rendererManager;\n renderer.containerManager = this.rendererSystem.containerManager;\n this.renderers.push(renderer);\n }\n }\n componentChanged(changes: ComponentChanged[]) {\n for (const changed of changes) {\n for (const renderer of this.renderers) {\n const props = renderer.observerInfo[changed.componentName];\n if (props) {\n if ([OBSERVER_TYPE.ADD, OBSERVER_TYPE.REMOVE].indexOf(changed.type) > -1) {\n try {\n renderer.componentChanged && renderer.componentChanged(changed);\n } catch (e) {\n console.error(`gameObject: ${changed.gameObject.name}, ${changed.componentName} is error.`, changed, e);\n }\n continue;\n }\n\n const index = props.findIndex(prop => {\n return isEqual(prop, changed.prop);\n });\n\n if (index > -1) {\n try {\n renderer.componentChanged && renderer.componentChanged(changed);\n } catch (e) {\n console.error(\n `gameObject: ${changed.gameObject && changed.gameObject.name}, ${\n changed.componentName\n } is componentChanged error.`,\n changed,\n e,\n );\n }\n }\n }\n }\n }\n }\n update(gameObject: GameObject) {\n for (const component of gameObject.components) {\n for (const renderer of this.renderers) {\n const cache = [];\n const props = renderer.observerInfo[component.name];\n if (props && cache.indexOf(gameObject) === -1) {\n cache.push(gameObject);\n try {\n renderer.rendererUpdate && renderer.rendererUpdate(gameObject);\n } catch (e) {\n console.info(`gameObject: ${gameObject.name}, ${component.name} is update error`, e);\n }\n }\n }\n }\n }\n}\nexport default RendererManager;\n","import { Transform } from '@combos-fun/engine';\nimport { Point, ObservablePoint } from 'pixi.js';\nimport { Container } from '@combos-fun/renderer-adapter';\n\nexport default class ContainerManager {\n containerMap: { [propName: number]: Container } = {};\n addContainer({ name, container }: { name: number; container: Container }) {\n this.containerMap[name] = container;\n }\n getContainer(name: number) {\n return this.containerMap[name];\n }\n removeContainer(name: number) {\n this.containerMap[name]?.destroy({ children: true });\n delete this.containerMap[name];\n }\n updateTransform({ name, transform }: { name: number; transform: Transform }) {\n const container = this.containerMap[name];\n if (!container || !transform) return;\n const { anchor, origin, position, rotation, scale, size, skew } = transform;\n container.rotation = rotation;\n container.scale = scale as Point;\n container.pivot.x = size.width * origin.x;\n container.pivot.y = size.height * origin.y;\n container.skew = skew as ObservablePoint;\n let x = position.x;\n let y = position.y;\n if (transform.parent) {\n const parent = transform.parent;\n x = x + parent.size.width * anchor.x;\n y = y + parent.size.height * anchor.y;\n }\n\n container.position = { x, y } as Point;\n }\n}\n","import { Transform as Trans, decorators, ComponentChanged, OBSERVER_TYPE, Scene, LOAD_SCENE_MODE } from '@combos-fun/engine';\nimport EventEmitter from 'eventemitter3';\nimport { Application, Container } from '@combos-fun/renderer-adapter';\nimport Render from './System';\nimport ContainerManager from './manager/ContainerManager';\n\n/** Surface used from the Render component; avoids importing plugin-renderer-render (workspace cycle). */\ntype RenderSortDirty = { sortDirty: boolean };\n\n@decorators.componentObserver({\n Transform: ['_parent'],\n})\nexport default class Transform extends EventEmitter {\n name: string = 'Transform';\n waitRemoveIds: number[] = [];\n waitSceneId: number;\n system: Render;\n containerManager: ContainerManager;\n waitChangeScenes: {\n scene: Scene;\n mode: LOAD_SCENE_MODE;\n application: Application;\n }[] = [];\n constructor({ system, containerManager }) {\n super();\n this.containerManager = containerManager;\n this.init(system);\n }\n init(system: Render) {\n this.system = system;\n this.on('changeScene', ({ scene, mode, application }) => {\n // switch (mode) {\n // case LOAD_SCENE_MODE.SINGLE:\n this.waitChangeScenes.push({ scene, mode, application });\n // break;\n // case LOAD_SCENE_MODE.MULTI_CANVAS:\n\n // }\n });\n }\n update() {\n for (const id of this.waitRemoveIds) {\n this.containerManager.removeContainer(id);\n }\n this.waitRemoveIds = [];\n\n for (const sceneInfo of this.waitChangeScenes) {\n // set scene\n const container = this.containerManager.getContainer(sceneInfo.scene.id);\n if (container) {\n sceneInfo.application.stage.removeChildren();\n sceneInfo.application.stage.addChild(container);\n }\n }\n this.waitChangeScenes = [];\n }\n componentChanged(changed: ComponentChanged) {\n if (changed.type === OBSERVER_TYPE.ADD) {\n this.addContainer(changed);\n } else if (changed.type === OBSERVER_TYPE.CHANGE) {\n this.change(changed);\n } else if (changed.type === OBSERVER_TYPE.REMOVE) {\n this.waitRemoveIds.push(changed.gameObject.id);\n }\n }\n addContainer(changed: ComponentChanged) {\n const container = new Container();\n container.label = changed.gameObject.name;\n this.containerManager.addContainer({\n name: changed.gameObject.id,\n container,\n });\n const transform = changed.component as Trans;\n // Pixi v8 exposes `worldTransform` on the display object; nested `transform.worldTransform` is gone.\n transform.worldTransform = container.worldTransform as unknown as Trans['worldTransform'];\n }\n change(changed: ComponentChanged) {\n const transform = changed.component as Trans;\n if (transform.parent) {\n const parentContainer = this.containerManager.getContainer(transform.parent.gameObject.id);\n parentContainer.addChild(this.containerManager.getContainer(changed.gameObject.id));\n\n const render =\n changed.gameObject.transform.parent &&\n (changed.gameObject.transform.parent.gameObject.getComponent('Render') as unknown as RenderSortDirty);\n if (render) {\n render.sortDirty = true;\n }\n } else {\n const container = this.containerManager.getContainer(changed.gameObject.id);\n delete transform.worldTransform;\n container.parent && container.parent.removeChild(container);\n }\n }\n destroy() {\n this.removeAllListeners();\n this.waitRemoveIds = null;\n this.waitChangeScenes = null;\n this.system = null;\n this.containerManager = null;\n }\n}\n","/**\n * Inspired by PixiJS v6\n */\nexport type CompressedTextureExtensions = {\n s3tc?: WEBGL_compressed_texture_s3tc,\n s3tc_sRGB: WEBGL_compressed_texture_s3tc_srgb,\n etc: WEBGL_compressed_texture_etc,\n etc1: WEBGL_compressed_texture_etc1,\n pvrtc: WEBKIT_WEBGL_compressed_texture_pvrtc,\n atc: WEBGL_compressed_texture_atc,\n astc: WEBGL_compressed_texture_astc\n};\nexport type CompressedTextureExtensionRef = keyof CompressedTextureExtensions;\nlet result = undefined;\nexport interface SuportedCompressedTexture {\n s3tc: boolean,\n etc: boolean,\n etc1: boolean,\n pvrtc: boolean,\n atc: boolean,\n astc: boolean,\n}\nexport function getSuportCompressedTextureFormats(gl: WebGLRenderingContext): SuportedCompressedTexture {\n if (result) return result;\n\n if (!gl) {\n // #if _DEBUG\n console.warn('WebGL not available for compressed textures. Silently failing.');\n // #endif\n\n return {\n s3tc: false,\n etc: false,\n etc1: false,\n pvrtc: false,\n atc: false,\n astc: false,\n };\n }\n\n result = {\n s3tc: !!gl.getExtension('WEBGL_compressed_texture_s3tc'),\n etc: !!gl.getExtension('WEBGL_compressed_texture_etc'),\n etc1: !!gl.getExtension('WEBGL_compressed_texture_etc1'),\n pvrtc: !!gl.getExtension('WEBGL_compressed_texture_pvrtc')\n || !!gl.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc'),\n atc: !!gl.getExtension('WEBGL_compressed_texture_atc'),\n astc: !!gl.getExtension('WEBGL_compressed_texture_astc')\n };\n\n try {\n console.log('Supported compressed texture formats: ' + Object.keys(result).filter((type) => result[type]).join(', '))\n } catch (e) { }\n return result;\n}","import { System, decorators, Game, LOAD_SCENE_MODE, PureObserverInfo } from '@combos-fun/engine';\nimport { Application } from '@combos-fun/renderer-adapter';\nimport RendererManager from './manager/RendererManager';\nimport ContainerManager from './manager/ContainerManager';\nimport Transform from './Transform';\nimport { Ticker } from 'pixi.js';\nimport type { ApplicationOptions } from 'pixi.js';\nimport type { Renderer as PixiRenderer } from 'pixi.js';\nimport type { WebGLRenderer } from 'pixi.js';\nimport { registerCompressedTexture } from './compressedTexture';\nimport { SuportedCompressedTexture, getSuportCompressedTextureFormats } from './compressedTexture/ability';\n\nexport enum RENDERER_TYPE {\n UNKNOWN = 0,\n WEBGL = 1,\n CANVAS = 2,\n}\n\n@decorators.componentObserver({\n Transform: ['_parent'],\n})\nexport default class Renderer extends System<Partial<ApplicationOptions>> {\n static systemName: string = 'Renderer';\n params: Partial<ApplicationOptions>;\n rendererManager: RendererManager;\n containerManager: ContainerManager;\n application: Application | null = null;\n game: Game;\n transform: Transform;\n multiApps: Application[] = [];\n suportedCompressedTextureFormats: SuportedCompressedTexture;\n\n async init(params?: Partial<ApplicationOptions>) {\n this.params = params ?? {};\n const app = await this.createApplication(this.params);\n this.application = app;\n this.game.canvas = app.canvas;\n this.containerManager = new ContainerManager();\n this.rendererManager = new RendererManager({\n game: this.game,\n rendererSystem: this,\n });\n\n this.transform = new Transform({\n system: this,\n containerManager: this.containerManager,\n });\n this.game.on('sceneChanged', async ({ scene, mode, params: sceneParams }) => {\n let application: Application | null = this.application;\n if (mode === LOAD_SCENE_MODE.MULTI_CANVAS) {\n application = await this.createApplication(sceneParams);\n this.multiApps.push(application);\n }\n if (!application) {\n return;\n }\n scene.canvas = application.canvas;\n this.transform.emit('changeScene', {\n scene,\n mode,\n application,\n });\n });\n\n const gl = (app.renderer as WebGLRenderer).gl;\n if (gl) {\n this.suportedCompressedTextureFormats = getSuportCompressedTextureFormats(gl);\n registerCompressedTexture(gl);\n }\n }\n\n registerObserver(observerInfo: PureObserverInfo): void {\n const Ctor = this.constructor as typeof Renderer & { observerInfo: PureObserverInfo };\n if (!Ctor.observerInfo) {\n Ctor.observerInfo = {} as PureObserverInfo;\n }\n const thisObserverInfo = Ctor.observerInfo;\n for (const key in observerInfo) {\n if (!thisObserverInfo[key]) {\n thisObserverInfo[key] = [];\n }\n thisObserverInfo[key].push(...observerInfo[key]);\n }\n }\n\n private async createApplication(params: Partial<ApplicationOptions>): Promise<Application> {\n const initOptions: Partial<ApplicationOptions> = {\n ...params,\n autoStart: true,\n sharedTicker: true,\n };\n\n const app = new Application();\n try {\n await app.init(initOptions);\n } catch {\n await app.init({\n ...initOptions,\n preference: 'canvas',\n });\n }\n\n Ticker.shared.stop();\n Ticker.shared.autoStart = false;\n\n return app;\n }\n\n update() {\n const changes = this.componentObserver.clear();\n for (const changed of changes) {\n this.transform.componentChanged(changed);\n }\n if (!this.application) {\n return;\n }\n for (const gameObject of this.game.gameObjects) {\n this.containerManager.updateTransform({\n name: gameObject.id,\n transform: gameObject.transform,\n });\n this.rendererManager.update(gameObject);\n }\n }\n\n lateUpdate(e) {\n if (!this.application) {\n return;\n }\n this.transform.update();\n this.application.ticker.update(e.time);\n }\n\n onDestroy() {\n this.application?.destroy();\n for (const app of this.multiApps) {\n app && app.destroy();\n }\n this.transform.destroy();\n this.transform = null;\n this.params = null;\n this.rendererManager = null;\n this.containerManager = null;\n this.application = null;\n this.game = null;\n this.multiApps = null;\n }\n\n resize(width, height) {\n if (!this.application) {\n return;\n }\n this.params = { ...this.params, width, height };\n this.application.renderer.resize(width, height);\n }\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n\nimport { GameObject, Game, PureObserverInfo, ComponentChanged, System, UpdateParams } from '@combos-fun/engine';\nimport ContainerManager from './manager/ContainerManager';\nimport RendererManager from './manager/RendererManager';\n\nexport default class Renderer<T extends {} = {}> extends System<T> {\n /**\n * Renderer name\n */\n name: string;\n\n /**\n * currentGame\n */\n game: Game;\n\n /**\n * observer component props info\n */\n static observerInfo: PureObserverInfo;\n\n /**\n * observer component props info\n */\n observerInfo: PureObserverInfo;\n\n /**\n * containerManager\n */\n containerManager: ContainerManager;\n rendererManager: RendererManager;\n\n constructor(params?: T) {\n super(params);\n const Ctor = this.constructor as typeof Renderer & { observerInfo: PureObserverInfo };\n this.observerInfo = Ctor.observerInfo;\n }\n\n // init(arg?: any): void;\n\n /**\n * 当监听的属性变化时候调用\n *\n * called while the observed component props change.\n */\n componentChanged(_changed: ComponentChanged) { }\n\n /**\n * 每帧调用\n *\n * called by every loop\n * @param _gameObject gameObject\n */\n rendererUpdate(_gameObject: GameObject) { }\n\n override update(e?: UpdateParams): void {\n const changes = this.componentObserver.clear();\n for (const changed of changes) {\n this.componentChanged(changed);\n }\n }\n\n protected asyncIdMap: Record<number, number> = {}\n\n protected increaseAsyncId(id: number) {\n this.asyncIdMap[id] = (this.asyncIdMap[id] || 0) + 1;\n return this.asyncIdMap[id];\n }\n\n protected validateAsyncId(id: number, asyncId: number) {\n return this.asyncIdMap[id] === asyncId;\n }\n}\n"],"names":["Renderer","Transform"],"mappings":"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"}
|
package/index.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@combos-fun/plugin-renderer",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "@combos-fun/plugin-renderer",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"module": "dist/plugin-renderer.esm.js",
|
|
7
|
+
"bundle": "CombosFun.plugin.renderer",
|
|
8
|
+
"unpkg": "dist/CombosFun.plugin.renderer.min.js",
|
|
9
|
+
"files": [
|
|
10
|
+
"index.js",
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"types": "dist/plugin-renderer.d.ts",
|
|
14
|
+
"keywords": [
|
|
15
|
+
"combos-fun",
|
|
16
|
+
"game"
|
|
17
|
+
],
|
|
18
|
+
"author": "sun668 <q947692259@gmail.com>",
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"eventemitter3": "^5.0.4",
|
|
21
|
+
"lodash-es": "^4.17.21",
|
|
22
|
+
"pixi.js": "^8.18.1",
|
|
23
|
+
"resource-loader": "^4.0.0-rc4",
|
|
24
|
+
"@combos-fun/engine": "0.0.1",
|
|
25
|
+
"@combos-fun/renderer-adapter": "0.0.1"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "node ../../scripts/build-package.mjs"
|
|
29
|
+
}
|
|
30
|
+
}
|