@eva/plugin-renderer 2.1.0-beta.3 → 2.1.0-beta.5

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.
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@eva/eva.js"),t=require("@eva/renderer-adapter"),n=require("lodash-es/isEqual"),i=require("eventemitter3"),r=require("pixi.js");function o(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var s=o(n),a=o(i);function c(e,t,n,i){var r,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(s=(o<3?r(s):o>3?r(t,n,s):r(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}function l(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((i=i.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;var d=class{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(t){for(const n of t)for(const t of this.renderers){const i=t.observerInfo[n.componentName];if(i){if([e.OBSERVER_TYPE.ADD,e.OBSERVER_TYPE.REMOVE].indexOf(n.type)>-1){try{t.componentChanged&&t.componentChanged(n)}catch(e){console.error(`gameObject: ${n.gameObject.name}, ${n.componentName} is error.`,n,e)}continue}if(i.findIndex(e=>s(e,n.prop))>-1)try{t.componentChanged&&t.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 i=[];if(n.observerInfo[t.name]&&-1===i.indexOf(e)){i.push(e);try{n.rendererUpdate&&n.rendererUpdate(e)}catch(n){console.info(`gameObject: ${e.name}, ${t.name} is update error`,n)}}}}};const h=(e,t,n)=>{const i=Number.isFinite(e.x)?e.x:0,r=Number.isFinite(e.y)?e.y:0,o=Number.isFinite(e.width)?e.width:0,s=Number.isFinite(e.height)?e.height:0;return{x:i,y:r,width:o,height:s,right:i+o,bottom:r+s,coordinateSpace:t,source:n}};class u{constructor(){this.containerMap={}}addContainer({name:e,container:t,gameObject:n}){this.containerMap[e]=t,t.gName=n.name||e}getContainer(e){return this.containerMap[e]}getBounds(e,t={}){if(!e||e.destroyed)return null;const n=t.coordinateSpace||"world",i=!1!==t.fallbackToTransform,r=this.getContainer(e.id);if(null==r?void 0:r.getBounds)try{const e=r.getBounds();if(e&&Number.isFinite(e.width)&&Number.isFinite(e.height)&&(0!==e.width||0!==e.height))return h(e,n,"pixi")}catch(e){}return i?this.getTransformBounds(e,n):null}getTransformBounds(e,t){var n,i,r,o,s,a;const c=e.transform,l=this.getContainer(e.id);let d=null===(n=null==l?void 0:l.worldTransform)||void 0===n?void 0:n.tx,u=null===(i=null==l?void 0:l.worldTransform)||void 0===i?void 0:i.ty;if(!Number.isFinite(d)||!Number.isFinite(u)){const e=this.resolveFallbackWorldPosition(c);d=e.x,u=e.y}const p=Number.isFinite(null===(r=c.scale)||void 0===r?void 0:r.x)?c.scale.x:1,m=Number.isFinite(null===(o=c.scale)||void 0===o?void 0:o.y)?c.scale.y:1,g=Math.abs(((null===(s=c.size)||void 0===s?void 0:s.width)||0)*p),v=Math.abs(((null===(a=c.size)||void 0===a?void 0:a.height)||0)*m);return h({x:d,y:u,width:g,height:v},t,"transform")}resolveFallbackWorldPosition(e){var t,n,i,r;if(!e)return{x:0,y:0};const o=e.parent,s=o?this.resolveFallbackWorldPosition(o):{x:0,y:0},a=(null==o?void 0:o.size)||{width:0,height:0};return{x:s.x+((null===(t=e.position)||void 0===t?void 0:t.x)||0)+a.width*((null===(n=e.anchor)||void 0===n?void 0:n.x)||0),y:s.y+((null===(i=e.position)||void 0===i?void 0:i.y)||0)+a.height*((null===(r=e.anchor)||void 0===r?void 0:r.y)||0)}}removeContainer(e){const t=this.containerMap[e];t&&t.destroy({children:!0}),delete this.containerMap[e]}updateTransform({name:e,transform:t}){const n=this.containerMap[e];if(!n||!t)return;const{anchor:i,origin:r,position:o,rotation:s,scale:a,size:c,skew:l}=t;n.rotation=s,n.scale=a,n.pivot.x=c.width*r.x,n.pivot.y=c.height*r.y,n.skew=l;let d=o.x,h=o.y;if(t.parent){const e=t.parent;d+=e.size.width*i.x,h+=e.size.height*i.y}n.position={x:d,y:h}}}let p=class extends a{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(t){t.type===e.OBSERVER_TYPE.ADD?this.addContainer(t):t.type===e.OBSERVER_TYPE.CHANGE?this.change(t):t.type===e.OBSERVER_TYPE.REMOVE&&this.waitRemoveIds.push(t.gameObject.id)}addContainer(e){const n=new t.Container;n.label=e.gameObject.name,this.containerManager.addContainer({name:e.gameObject.id,container:n,gameObject:e.gameObject});const i=e.component;Object.defineProperty(i,"worldTransform",{get:()=>n.renderGroup||n.parentRenderGroup?n.worldTransform:void 0})}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 t=this.containerManager.getContainer(e.gameObject.id);t.parent&&t.parent.removeChild(t)}}destroy(){this.removeAllListeners(),this.waitRemoveIds=null,this.waitChangeScenes=null,this.system=null,this.containerManager=null}};p=c([e.decorators.componentObserver({Transform:["_parent"]}),function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}("design:paramtypes",[Object])],p);var m,g=p;exports.RENDERER_TYPE=void 0,(m=exports.RENDERER_TYPE||(exports.RENDERER_TYPE={}))[m.UNKNOWN=0]="UNKNOWN",m[m.WEBGL=1]="WEBGL",m[m.CANVAS=2]="CANVAS";let v=class extends e.System{constructor(){super(...arguments),this.multiApps=[],this.destroyed=!1}init(t={}){var n,i,r,o,s,a,c,h;return l(this,void 0,void 0,function*(){this.destroyed=!1;const p=!this.game&&function(e){if(!e||"object"!=typeof e)return!1;const t=e;return Boolean(t.scene||t.gameObjects||"function"==typeof t.on)}(t)?t:void 0;p&&(this.game=p);const m=p?this.__systemDefaultParams||{}:t;this.params=m,this.application=yield this.createApplication(m),this.containerManager=new u,this.rendererManager=new d({game:this.game,rendererSystem:this}),this.game&&(this.game.canvas=this.application.canvas),this.transform=new g({system:this,containerManager:this.containerManager}),null===(i=null===(n=this.game)||void 0===n?void 0:n.on)||void 0===i||i.call(n,"sceneChanged",({scene:t,mode:n,params:i})=>l(this,void 0,void 0,function*(){let r;switch(n){case e.LOAD_SCENE_MODE.SINGLE:r=this.application;break;case e.LOAD_SCENE_MODE.MULTI_CANVAS:r=yield this.createMultiApplication({params:i})}t.canvas=r.canvas,this.transform.emit("changeScene",{scene:t,mode:n,application:r})})),null===(o=null===(r=this.game)||void 0===r?void 0:r.on)||void 0===o||o.call(r,"pauseScene",({scene:e})=>{this.onPauseScene(e)}),null===(a=null===(s=this.game)||void 0===s?void 0:s.on)||void 0===a||a.call(s,"startScene",({scene:e})=>{this.onStartScene(e)}),null===(h=null===(c=this.game)||void 0===c?void 0:c.on)||void 0===h||h.call(c,"sceneDestroyed",({scene:e})=>l(this,void 0,void 0,function*(){const t=this.multiApps.findIndex(t=>t.canvas===e.canvas);if(t>-1){this.multiApps.splice(t,1)[0].destroy(),e.destroy()}}))})}registerObserver(e){const t=this.constructor.observerInfo;for(const n in e)t[n]||(t[n]=[]),t[n].push(...e[n])}createMultiApplication({params:e}){return l(this,void 0,void 0,function*(){const t=yield this.createApplication(e);return this.multiApps.push(t),t})}createApplication(e){return l(this,void 0,void 0,function*(){const n=new t.Application;var i;return e.debugMode&&(globalThis.__PIXI_APP__=n),yield n.init(Object.assign(Object.assign({sharedTicker:!0},e),{hello:!0})),void 0!==e.enableScroll&&(e.enableScroll?((i=n.renderer).events.autoPreventDefault=!1,i.canvas.style.touchAction="auto"):(e=>{e.events.autoPreventDefault=!0,e.canvas.style.touchAction="none"})(n.renderer)),r.Ticker.shared.stop(),r.Ticker.shared.autoStart=!1,n})}update(){if(this.destroyed||!this.game||!this.containerManager||!this.rendererManager)return;const e=this.componentObserver.clear();for(const t of e)this.transform.componentChanged(t);for(const e of this.game.gameObjects)this.containerManager.updateTransform({name:e.id,transform:e.transform}),this.rendererManager.update(e)}lateUpdate(e){!this.destroyed&&this.transform&&this.application&&(this.transform.update(),this.application.ticker.update(e.time))}onDestroy(){var e,t,n,i,r,o,s;if(!this.destroyed){this.destroyed=!0,null===(n=null===(t=null===(e=this.application)||void 0===e?void 0:e.ticker)||void 0===t?void 0:t.stop)||void 0===n||n.call(t),null===(i=this.application)||void 0===i||i.destroy(!1,{children:!0,context:!0});for(const e of this.multiApps)null===(o=null===(r=null==e?void 0:e.ticker)||void 0===r?void 0:r.stop)||void 0===o||o.call(r),e&&e.destroy(!1,{children:!0,context:!0});null===(s=this.transform)||void 0===s||s.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,n){this.params.width=e,this.params.height=t,null!=n&&(this.params.resolution=this.clampResolution(n)),this.application.renderer.resize(e,t,this.params.resolution),null!=n&&this.syncDisplayObjectResolution(this.params.resolution)}resizeRenderer(e){var t,n,i,r,o,s;const a=null!==(n=null!==(t=e.width)&&void 0!==t?t:this.params.width)&&void 0!==n?n:this.application.renderer.width,c=null!==(r=null!==(i=e.height)&&void 0!==i?i:this.params.height)&&void 0!==r?r:this.application.renderer.height,l=null==e.resolution?null!==(s=null!==(o=this.params.resolution)&&void 0!==o?o:this.application.renderer.resolution)&&void 0!==s?s:1:this.clampResolution(e.resolution,e.maxResolution);this.params.width=a,this.params.height=c,this.params.resolution=l,this.application.renderer.resize(a,c,l);return{width:a,height:c,resolution:l,displayResolutionSyncCount:this.syncDisplayObjectResolution(l)}}setResolution(e,t={}){return this.resizeRenderer(Object.assign(Object.assign({},t),{resolution:e}))}clampResolution(e,t=3){const n=Number.isFinite(e)&&e>0?e:1;return Math.min(n,t)}syncDisplayObjectResolution(e){var t;const n=(null===(t=this.containerManager)||void 0===t?void 0:t.containerMap)?Object.values(this.containerManager.containerMap):[],i="undefined"!=typeof WeakSet?new WeakSet:void 0;let r=0;const o=t=>{if(t&&"object"==typeof t&&!(null==i?void 0:i.has(t))){if(null==i||i.add(t),"resolution"in t){const n=t.resolution;if(("number"==typeof n||null===n)&&Math.abs((null!=n?n:1)-e)>.001)try{t.resolution=e,"number"==typeof t.resolution&&Math.abs(t.resolution-e)<=.001&&(r+=1)}catch(e){}}if(Array.isArray(t.children))for(const e of t.children)o(e)}};for(const e of n)o(e);return r}getBounds(e,t){var n;return(null===(n=this.containerManager)||void 0===n?void 0:n.getBounds(e,t))||null}getApplicationByScene(e){const t=this.multiApps.findIndex(t=>t.canvas===e.canvas);if(t>-1){return this.multiApps[t]}console.warn("application not found")}onPauseScene(e){const t=this.getApplicationByScene(e);t&&t.stop()}onStartScene(e){const t=this.getApplicationByScene(e);t&&t.start()}resizeByScene(e,t,n,i){const r=this.getApplicationByScene(e);r&&r.renderer.resize(t,n,i)}};v.systemName="Renderer",v=c([e.decorators.componentObserver({Transform:["_parent"]})],v);var f=v;let y;function b(e){e.addPreProcessResourceHandler(function(e){var t,n,i;let r=null===(n=null===(t=e.src)||void 0===t?void 0:t.image)||void 0===n?void 0:n.texture;if(!r)return;Array.isArray(r)||(r=[r]);const o=null!==(i=function(){if(y)return y;const e=document.createElement("canvas").getContext("webgl2");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};y={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("Eva.js Supported Compressed Texture Format List: "+Object.keys(y).filter(e=>y[e]).join(", "))}catch(e){}return y}())&&void 0!==i?i:{};let s=r.find(e=>o[e.type]);s&&Object.assign(e.src.image,s)})}class x extends e.System{constructor(e){super(e),this.asyncIdMap={},this.observerInfo=this.constructor.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=u,exports.Renderer=x,exports.RendererManager=d,exports.RendererSystem=f,exports.registerKtx2CompressedTexture=function(t){r.setKTXTranscoderPath(t),r.extensions.add(r.loadKTX2),r.extensions.add(r.resolveCompressedTextureUrl),r.extensions.add(r.detectCompressed),b(e.resource)};
@@ -0,0 +1,294 @@
1
+ import { Application } from '@eva/renderer-adapter';
2
+ import type { ApplicationOptions } from 'pixi.js';
3
+ import { ComponentChanged } from '@eva/eva.js';
4
+ import { Container } from '@eva/renderer-adapter';
5
+ import EventEmitter from 'eventemitter3';
6
+ import { Game } from '@eva/eva.js';
7
+ import { GameObject } from '@eva/eva.js';
8
+ import { LOAD_SCENE_MODE } from '@eva/eva.js';
9
+ import { PureObserverInfo } from '@eva/eva.js';
10
+ import { Scene } from '@eva/eva.js';
11
+ import { System } from '@eva/eva.js';
12
+ import { Transform } from '@eva/eva.js';
13
+ import { UpdateParams } from '@eva/eva.js';
14
+
15
+ export declare type BoundsCoordinateSpace = 'world' | 'canvas' | 'design';
16
+
17
+ export declare class ContainerManager {
18
+ containerMap: {
19
+ [propName: number]: Container;
20
+ };
21
+ addContainer({ name, container, gameObject }: {
22
+ name: number;
23
+ container: Container;
24
+ gameObject: GameObject;
25
+ }): void;
26
+ getContainer(name: number): Container;
27
+ /**
28
+ * Return actual rendered bounds for a GameObject.
29
+ *
30
+ * The primary path uses PixiJS Container#getBounds(), so renderers such as
31
+ * Text/Img/Graphics/Sprite/Spine report the real display size after loading
32
+ * and style application. If the display object is not ready yet, callers can
33
+ * fall back to Transform.size in the same Eva design/canvas coordinate space.
34
+ */
35
+ getBounds(gameObject: GameObject, options?: GetBoundsOptions): RenderBounds | null;
36
+ private getTransformBounds;
37
+ private resolveFallbackWorldPosition;
38
+ removeContainer(name: number): void;
39
+ updateTransform({ name, transform }: {
40
+ name: number;
41
+ transform: Transform;
42
+ }): void;
43
+ }
44
+
45
+ export declare interface GetBoundsOptions {
46
+ /**
47
+ * Returned coordinate space.
48
+ * Eva's Pixi world coordinates use the same logical units as canvas/design coordinates.
49
+ */
50
+ coordinateSpace?: BoundsCoordinateSpace;
51
+ /** Use Transform.size when Pixi bounds are unavailable or still zero. Defaults to true. */
52
+ fallbackToTransform?: boolean;
53
+ }
54
+
55
+ declare interface Params {
56
+ jsUrl: string;
57
+ wasmUrl: string;
58
+ }
59
+
60
+ export declare function registerKtx2CompressedTexture(params: Params): void;
61
+
62
+ export declare interface RenderBounds {
63
+ /** Bounds x in Eva design/canvas coordinates. */
64
+ x: number;
65
+ /** Bounds y in Eva design/canvas coordinates. */
66
+ y: number;
67
+ /** Actual rendered width measured from Pixi getBounds(), or Transform.size fallback. */
68
+ width: number;
69
+ /** Actual rendered height measured from Pixi getBounds(), or Transform.size fallback. */
70
+ height: number;
71
+ /** Bounds right edge in the same coordinate space. */
72
+ right: number;
73
+ /** Bounds bottom edge in the same coordinate space. */
74
+ bottom: number;
75
+ /** Coordinate space of the returned values. world/canvas/design are the same logical Eva coordinates. */
76
+ coordinateSpace: BoundsCoordinateSpace;
77
+ /** Whether this value came from Pixi display object bounds or Transform.size fallback. */
78
+ source: 'pixi' | 'transform';
79
+ }
80
+
81
+ export declare class Renderer<T extends {} = {}> extends System<T> {
82
+ /**
83
+ * Renderer name
84
+ */
85
+ name: string;
86
+ /**
87
+ * currentGame
88
+ */
89
+ game: Game;
90
+ /**
91
+ * observer component props info
92
+ */
93
+ static observerInfo: PureObserverInfo;
94
+ /**
95
+ * observer component props info
96
+ */
97
+ observerInfo: PureObserverInfo;
98
+ /**
99
+ * containerManager
100
+ */
101
+ containerManager: ContainerManager;
102
+ rendererManager: RendererManager;
103
+ constructor(params?: T);
104
+ /**
105
+ * 当监听的属性变化时候调用
106
+ *
107
+ * called while the observed component props change.
108
+ */
109
+ componentChanged(_changed: ComponentChanged): void;
110
+ /**
111
+ * 每帧调用
112
+ *
113
+ * called by every loop
114
+ * @param _gameObject - gameObject
115
+ */
116
+ rendererUpdate(_gameObject: GameObject): void;
117
+ update(e?: UpdateParams): void;
118
+ protected asyncIdMap: Record<number, number>;
119
+ protected increaseAsyncId(id: number): number;
120
+ protected validateAsyncId(id: number, asyncId: number): boolean;
121
+ }
122
+
123
+ export declare enum RENDERER_TYPE {
124
+ UNKNOWN = 0,
125
+ WEBGL = 1,
126
+ CANVAS = 2
127
+ }
128
+
129
+ declare type RendererGameLike = Partial<Game> & {
130
+ scene?: unknown;
131
+ gameObjects?: unknown;
132
+ on?: (name: string, handler: (...args: any[]) => void) => void;
133
+ };
134
+
135
+ /**
136
+ * 渲染管理器类
137
+ *
138
+ * RendererManager 负责管理和协调所有渲染器。
139
+ * 它将组件变化事件分发给相应的渲染器,
140
+ * 并在每帧调用渲染器的更新方法。
141
+ *
142
+ * @example
143
+ * ```typescript
144
+ * const rendererManager = new RendererManager({
145
+ * game,
146
+ * rendererSystem
147
+ * });
148
+ *
149
+ * rendererManager.register(
150
+ * new SpriteRenderer(),
151
+ * new TextRenderer()
152
+ * );
153
+ * ```
154
+ */
155
+ export declare class RendererManager {
156
+ /** 游戏实例引用 */
157
+ game: Game;
158
+ /** 渲染系统引用 */
159
+ rendererSystem: RendererSystem;
160
+ /**
161
+ * 构造渲染管理器
162
+ * @param game - 游戏实例
163
+ * @param rendererSystem - 渲染系统实例
164
+ */
165
+ constructor({ game, rendererSystem }: {
166
+ game: any;
167
+ rendererSystem: any;
168
+ });
169
+ /** 注册的渲染器列表 */
170
+ renderers: Renderer[];
171
+ /**
172
+ * 注册渲染器
173
+ *
174
+ * 将渲染器添加到管理器,并为其设置必要的引用。
175
+ *
176
+ * @param renderers - 要注册的渲染器列表
177
+ */
178
+ register(...renderers: Renderer[]): void;
179
+ componentChanged(changes: ComponentChanged[]): void;
180
+ update(gameObject: GameObject): void;
181
+ }
182
+
183
+ export declare interface RendererResolutionState {
184
+ width: number;
185
+ height: number;
186
+ resolution: number;
187
+ /** Number of display objects whose own resolution was synchronized. */
188
+ displayResolutionSyncCount?: number;
189
+ }
190
+
191
+ export declare class RendererSystem extends System<RendererSystemParams> {
192
+ static systemName: string;
193
+ params: Partial<RendererSystemParams>;
194
+ rendererManager: RendererManager;
195
+ containerManager: ContainerManager;
196
+ application: Application;
197
+ game: Game;
198
+ transform: Transform_2;
199
+ multiApps: Application[];
200
+ suportedCompressedTextureFormats: SuportedCompressedTexture;
201
+ private destroyed;
202
+ init(params?: Partial<RendererSystemParams> | RendererGameLike): Promise<void>;
203
+ registerObserver(observerInfo: any): void;
204
+ createMultiApplication({ params }: {
205
+ params: RendererSystemParams;
206
+ }): Promise<Application>;
207
+ createApplication(params: Partial<RendererSystemParams>): Promise<Application>;
208
+ update(): void;
209
+ lateUpdate(e: any): void;
210
+ onDestroy(): void;
211
+ resize(width: number, height: number, resolution?: number): void;
212
+ /**
213
+ * 更新 Pixi renderer backing-store resolution,不改变 Eva 设计坐标系。
214
+ *
215
+ * 预览画布可用该入口在 zoom/devicePixelRatio 变化时提高清晰度;
216
+ * getBounds/Transform/worldTransform 仍返回设计逻辑坐标,不乘 resolution。
217
+ */
218
+ resizeRenderer(options: ResizeRendererOptions): RendererResolutionState;
219
+ setResolution(resolution: number, options?: Omit<ResizeRendererOptions, 'resolution'>): RendererResolutionState;
220
+ private clampResolution;
221
+ /**
222
+ * Keep renderer-owned display objects that expose a resolution property in
223
+ * sync with the backing-store resolution. This is intentionally display-tree
224
+ * based rather than component-type based, so Text/HTMLText and future Pixi
225
+ * objects with resolution support all follow the same renderer contract.
226
+ */
227
+ private syncDisplayObjectResolution;
228
+ /**
229
+ * 获取 GameObject 的真实渲染 bounds。
230
+ *
231
+ * 默认返回 PixiJS display object 的 world bounds。Eva 的 Pixi world 坐标
232
+ * 与 canvas/design 逻辑坐标一致;如果画布被 CSS 缩放,调用方再按
233
+ * canvas.getBoundingClientRect() / renderer width 做屏幕坐标换算。
234
+ *
235
+ * 当渲染对象尚未挂载或资源未加载完成时,会回退到 Transform.size。
236
+ */
237
+ getBounds(gameObject: GameObject, options?: GetBoundsOptions): RenderBounds | null;
238
+ private getApplicationByScene;
239
+ private onPauseScene;
240
+ private onStartScene;
241
+ resizeByScene(scene: any, width: number, height: number, resolution?: number): void;
242
+ }
243
+
244
+ export declare interface RendererSystemParams extends Partial<ApplicationOptions> {
245
+ canvas?: HTMLCanvasElement;
246
+ renderType?: number;
247
+ enableScroll?: boolean;
248
+ debugMode?: boolean;
249
+ }
250
+
251
+ export declare interface ResizeRendererOptions {
252
+ /** Eva design/canvas logical width. This does not include resolution scaling. */
253
+ width?: number;
254
+ /** Eva design/canvas logical height. This does not include resolution scaling. */
255
+ height?: number;
256
+ /** Pixi backing-store resolution. Does not change Eva design coordinates. */
257
+ resolution?: number;
258
+ /** Upper bound for resolution to avoid oversized backing stores. Defaults to 3. */
259
+ maxResolution?: number;
260
+ }
261
+
262
+ declare interface SuportedCompressedTexture {
263
+ s3tc: boolean;
264
+ etc: boolean;
265
+ etc1: boolean;
266
+ pvrtc: boolean;
267
+ atc: boolean;
268
+ astc: boolean;
269
+ }
270
+
271
+ declare class Transform_2 extends EventEmitter {
272
+ name: string;
273
+ waitRemoveIds: number[];
274
+ waitSceneId: number;
275
+ system: RendererSystem;
276
+ containerManager: ContainerManager;
277
+ waitChangeScenes: {
278
+ scene: Scene;
279
+ mode: LOAD_SCENE_MODE;
280
+ application: Application;
281
+ }[];
282
+ constructor({ system, containerManager }: {
283
+ system: any;
284
+ containerManager: any;
285
+ });
286
+ init(system: RendererSystem): void;
287
+ update(): void;
288
+ componentChanged(changed: ComponentChanged): void;
289
+ addContainer(changed: ComponentChanged): void;
290
+ change(changed: ComponentChanged): void;
291
+ destroy(): void;
292
+ }
293
+
294
+ export { }