@eva/plugin-renderer-event 2.0.2 → 2.1.0-beta.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.
@@ -4,6 +4,14 @@ globalThis.EVA.plugin = globalThis.EVA.plugin || {};
4
4
  globalThis.EVA.plugin.renderer = globalThis.EVA.plugin.renderer || {};
5
5
  var _EVA_IIFE_event = function (exports, pluginRenderer, eva_js, pixi_js) {
6
6
  'use strict';
7
+ function __rest(s, e) {
8
+ var t = {};
9
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
10
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
11
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
12
+ }
13
+ return t;
14
+ }
7
15
  function __decorate(decorators, target, key, desc) {
8
16
  var c = arguments.length,
9
17
  r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
@@ -11,6 +19,9 @@ var _EVA_IIFE_event = function (exports, pluginRenderer, eva_js, pixi_js) {
11
19
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12
20
  return c > 3 && r && Object.defineProperty(target, key, r), r;
13
21
  }
22
+ function __metadata(metadataKey, metadataValue) {
23
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
24
+ }
14
25
  const hitAreaFunc = {
15
26
  Circle: pixi_js.Circle,
16
27
  Ellipse: pixi_js.Ellipse,
@@ -28,12 +39,20 @@ var _EVA_IIFE_event = function (exports, pluginRenderer, eva_js, pixi_js) {
28
39
  let Event$1 = class Event extends pluginRenderer.Renderer {
29
40
  constructor() {
30
41
  super(...arguments);
31
- this.name = 'Event';
42
+ this.name = 'EventSystem';
32
43
  }
33
- init() {
34
- this.renderSystem = this.game.getSystem(pluginRenderer.RendererSystem);
44
+ init(params) {
45
+ var _a;
46
+ const compatibleParams = params;
47
+ const game = this.game || (typeof (compatibleParams === null || compatibleParams === void 0 ? void 0 : compatibleParams.getSystem) === 'function' ? compatibleParams : undefined);
48
+ const renderSystem = (_a = game === null || game === void 0 ? void 0 : game.getSystem) === null || _a === void 0 ? void 0 : _a.call(game, pluginRenderer.RendererSystem);
49
+ if (!(renderSystem === null || renderSystem === void 0 ? void 0 : renderSystem.rendererManager)) return;
50
+ this.renderSystem = renderSystem;
35
51
  this.renderSystem.rendererManager.register(this);
36
52
  }
53
+ update(frame) {
54
+ super.update(frame);
55
+ }
37
56
  componentChanged(changed) {
38
57
  switch (changed.type) {
39
58
  case eva_js.OBSERVER_TYPE.ADD:
@@ -48,7 +67,9 @@ var _EVA_IIFE_event = function (exports, pluginRenderer, eva_js, pixi_js) {
48
67
  }
49
68
  }
50
69
  add(changed) {
51
- const container = this.containerManager.getContainer(changed.gameObject.id);
70
+ var _a;
71
+ const container = (_a = this.containerManager) === null || _a === void 0 ? void 0 : _a.getContainer(changed.gameObject.id);
72
+ if (!container) return;
52
73
  container.interactive = true;
53
74
  container.interactiveChildren = true;
54
75
  const component = changed.component;
@@ -56,94 +77,52 @@ var _EVA_IIFE_event = function (exports, pluginRenderer, eva_js, pixi_js) {
56
77
  this.addHitArea(changed, container, component.hitArea);
57
78
  }
58
79
  container.on('pointertap', e => {
59
- component.emit('tap', {
60
- stopPropagation: () => e.stopPropagation(),
61
- data: {
62
- pointerId: e.data.pointerId,
63
- position: {
64
- x: e.data.global.x,
65
- y: e.data.global.y
66
- },
67
- localPosition: container.worldTransform.applyInverse(e.data.global)
68
- },
69
- gameObject: component.gameObject
70
- });
80
+ const eventParam = this.createEventParam(container, component, e);
81
+ component.emit('tap', eventParam);
82
+ component.emit('click', eventParam);
71
83
  });
72
84
  container.on('pointerdown', e => {
73
- component.emit('touchstart', {
74
- stopPropagation: () => e.stopPropagation(),
75
- data: {
76
- pointerId: e.data.pointerId,
77
- position: {
78
- x: e.data.global.x,
79
- y: e.data.global.y
80
- },
81
- localPosition: container.worldTransform.applyInverse(e.data.global)
82
- },
83
- gameObject: component.gameObject
84
- });
85
+ const eventParam = this.createEventParam(container, component, e);
86
+ component.emit('touchstart', eventParam);
87
+ component.emit('mousedown', eventParam);
85
88
  });
86
89
  container.on('pointermove', e => {
87
- component.emit('touchmove', {
88
- stopPropagation: () => e.stopPropagation(),
89
- data: {
90
- pointerId: e.data.pointerId,
91
- position: {
92
- x: e.data.global.x,
93
- y: e.data.global.y
94
- },
95
- localPosition: container.worldTransform.applyInverse(e.data.global)
96
- },
97
- gameObject: component.gameObject
98
- });
90
+ const eventParam = this.createEventParam(container, component, e);
91
+ component.emit('touchmove', eventParam);
92
+ component.emit('mousemove', eventParam);
99
93
  });
100
94
  container.on('pointerup', e => {
101
- component.emit('touchend', {
102
- stopPropagation: () => e.stopPropagation(),
103
- data: {
104
- pointerId: e.data.pointerId,
105
- position: {
106
- x: e.data.global.x,
107
- y: e.data.global.y
108
- },
109
- localPosition: container.worldTransform.applyInverse(e.data.global)
110
- },
111
- gameObject: component.gameObject
112
- });
95
+ const eventParam = this.createEventParam(container, component, e);
96
+ component.emit('touchend', eventParam);
97
+ component.emit('mouseup', eventParam);
113
98
  });
114
99
  container.on('pointerupoutside', e => {
115
- component.emit('touchendoutside', {
116
- stopPropagation: () => e.stopPropagation(),
117
- data: {
118
- pointerId: e.data.pointerId,
119
- position: {
120
- x: e.data.global.x,
121
- y: e.data.global.y
122
- },
123
- localPosition: container.worldTransform.applyInverse(e.data.global)
124
- },
125
- gameObject: component.gameObject
126
- });
100
+ component.emit('touchendoutside', this.createEventParam(container, component, e));
127
101
  });
128
102
  container.on('pointercancel', e => {
129
- component.emit('touchcancel', {
130
- stopPropagation: () => e.stopPropagation(),
131
- data: {
132
- pointerId: e.data.pointerId,
133
- position: {
134
- x: e.data.global.x,
135
- y: e.data.global.y
136
- },
137
- localPosition: container.worldTransform.applyInverse(e.data.global)
138
- },
139
- gameObject: component.gameObject
140
- });
103
+ component.emit('touchcancel', this.createEventParam(container, component, e));
141
104
  });
142
105
  }
106
+ createEventParam(container, component, e) {
107
+ return {
108
+ stopPropagation: () => e.stopPropagation(),
109
+ data: {
110
+ pointerId: e.data.pointerId,
111
+ position: {
112
+ x: e.data.global.x,
113
+ y: e.data.global.y
114
+ },
115
+ localPosition: container.worldTransform.applyInverse(e.data.global)
116
+ },
117
+ gameObject: component.gameObject
118
+ };
119
+ }
143
120
  remove(changed) {
144
- const container = this.containerManager.getContainer(changed.gameObject.id);
121
+ var _a;
122
+ const container = (_a = this.containerManager) === null || _a === void 0 ? void 0 : _a.getContainer(changed.gameObject.id);
123
+ if (!container) return;
145
124
  container.interactive = false;
146
- container.off('tap');
125
+ container.off('pointertap');
147
126
  container.off('pointerdown');
148
127
  container.off('pointermove');
149
128
  container.off('pointerup');
@@ -152,7 +131,9 @@ var _EVA_IIFE_event = function (exports, pluginRenderer, eva_js, pixi_js) {
152
131
  changed.component.removeAllListeners();
153
132
  }
154
133
  change(changed) {
155
- const container = this.containerManager.getContainer(changed.gameObject.id);
134
+ var _a;
135
+ const container = (_a = this.containerManager) === null || _a === void 0 ? void 0 : _a.getContainer(changed.gameObject.id);
136
+ if (!container) return;
156
137
  container.interactive = true;
157
138
  const component = changed.component;
158
139
  if (component.hitArea) {
@@ -178,7 +159,7 @@ var _EVA_IIFE_event = function (exports, pluginRenderer, eva_js, pixi_js) {
178
159
  container.hitArea = hitAreaShape;
179
160
  }
180
161
  };
181
- Event$1.systemName = 'Event';
162
+ Event$1.systemName = 'EventSystem';
182
163
  Event$1 = __decorate([eva_js.decorators.componentObserver({
183
164
  Event: [{
184
165
  prop: ['hitArea'],
@@ -194,13 +175,42 @@ var _EVA_IIFE_event = function (exports, pluginRenderer, eva_js, pixi_js) {
194
175
  HIT_AREA_TYPE["Rect"] = "Rect";
195
176
  HIT_AREA_TYPE["RoundedRect"] = "RoundedRect";
196
177
  })(exports.HIT_AREA_TYPE || (exports.HIT_AREA_TYPE = {}));
178
+ class HitAreaStyleMetadata {}
179
+ __decorate([eva_js.type('number'), eva_js.step(1), __metadata("design:type", Number)], HitAreaStyleMetadata.prototype, "x", void 0);
180
+ __decorate([eva_js.type('number'), eva_js.step(1), __metadata("design:type", Number)], HitAreaStyleMetadata.prototype, "y", void 0);
181
+ __decorate([eva_js.type('number'), eva_js.step(1), __metadata("design:type", Number)], HitAreaStyleMetadata.prototype, "radius", void 0);
182
+ __decorate([eva_js.type('number'), eva_js.step(1), __metadata("design:type", Number)], HitAreaStyleMetadata.prototype, "width", void 0);
183
+ __decorate([eva_js.type('number'), eva_js.step(1), __metadata("design:type", Number)], HitAreaStyleMetadata.prototype, "height", void 0);
184
+ __decorate([eva_js.type('number'), __metadata("design:type", Array)], HitAreaStyleMetadata.prototype, "paths", void 0);
185
+ class HitAreaMetadata {}
186
+ __decorate([eva_js.type('string'), __metadata("design:type", String)], HitAreaMetadata.prototype, "type", void 0);
187
+ __decorate([eva_js.Field(() => HitAreaStyleMetadata), __metadata("design:type", Object)], HitAreaMetadata.prototype, "style", void 0);
197
188
  class Event extends eva_js.Component {
198
- constructor() {
199
- super(...arguments);
189
+ constructor(params) {
190
+ super(params);
200
191
  this.hitArea = undefined;
192
+ this.configuredEventHandlers = [];
193
+ this.init(params);
201
194
  }
202
195
  init(params) {
203
- params && _extends(this, params);
196
+ this.removeConfiguredEventHandlers();
197
+ if (!params) return;
198
+ const {
199
+ on
200
+ } = params,
201
+ options = __rest(params, ["on"]);
202
+ _extends(this, options);
203
+ if (on) {
204
+ for (const eventName of Object.keys(on)) {
205
+ const handler = on[eventName];
206
+ if (typeof handler !== 'function') continue;
207
+ super.on(eventName, handler);
208
+ this.configuredEventHandlers.push({
209
+ eventName,
210
+ handler
211
+ });
212
+ }
213
+ }
204
214
  }
205
215
  emit(en, ...args) {
206
216
  return super.emit(en, ...args);
@@ -211,8 +221,26 @@ var _EVA_IIFE_event = function (exports, pluginRenderer, eva_js, pixi_js) {
211
221
  on(en, fn, context) {
212
222
  return super.on(en, fn, context);
213
223
  }
224
+ destroy() {
225
+ this.removeAllListeners();
226
+ this.configuredEventHandlers = [];
227
+ return this;
228
+ }
229
+ onDestroy() {
230
+ this.destroy();
231
+ }
232
+ removeConfiguredEventHandlers() {
233
+ for (const {
234
+ eventName,
235
+ handler
236
+ } of this.configuredEventHandlers) {
237
+ super.off(eventName, handler);
238
+ }
239
+ this.configuredEventHandlers = [];
240
+ }
214
241
  }
215
242
  Event.componentName = 'Event';
243
+ __decorate([eva_js.Field(() => HitAreaMetadata), __metadata("design:type", Object)], Event.prototype, "hitArea", void 0);
216
244
  exports.Event = Event;
217
245
  exports.EventSystem = Event$2;
218
246
  Object.defineProperty(exports, '__esModule', {
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var a in o)({}).hasOwnProperty.call(o,a)&&(e[a]=o[a])}return e},_extends.apply(null,arguments)}globalThis.EVA=globalThis.EVA||{},globalThis.EVA.plugin=globalThis.EVA.plugin||{},globalThis.EVA.plugin.renderer=globalThis.EVA.plugin.renderer||{};var _EVA_IIFE_event=function(e,t,o,a){"use strict";const n={Circle:a.Circle,Ellipse:a.Ellipse,Polygon:a.Polygon,Rect:a.Rectangle,RoundedRect:a.RoundedRectangle},r={Circle:["x","y","radius"],Ellipse:["x","y","width","height"],Rect:["x","y","width","height"],RoundedRect:["x","y","width","height","radius"],Polygon:["paths"]};let i=class extends t.Renderer{constructor(){super(...arguments),this.name="Event"}init(){this.renderSystem=this.game.getSystem(t.RendererSystem),this.renderSystem.rendererManager.register(this)}componentChanged(e){switch(e.type){case o.OBSERVER_TYPE.ADD:this.add(e);break;case o.OBSERVER_TYPE.REMOVE:this.remove(e);break;case o.OBSERVER_TYPE.CHANGE:this.change(e)}}add(e){const t=this.containerManager.getContainer(e.gameObject.id);t.interactive=!0,t.interactiveChildren=!0;const o=e.component;o.hitArea&&this.addHitArea(e,t,o.hitArea),t.on("pointertap",e=>{o.emit("tap",{stopPropagation:()=>e.stopPropagation(),data:{pointerId:e.data.pointerId,position:{x:e.data.global.x,y:e.data.global.y},localPosition:t.worldTransform.applyInverse(e.data.global)},gameObject:o.gameObject})}),t.on("pointerdown",e=>{o.emit("touchstart",{stopPropagation:()=>e.stopPropagation(),data:{pointerId:e.data.pointerId,position:{x:e.data.global.x,y:e.data.global.y},localPosition:t.worldTransform.applyInverse(e.data.global)},gameObject:o.gameObject})}),t.on("pointermove",e=>{o.emit("touchmove",{stopPropagation:()=>e.stopPropagation(),data:{pointerId:e.data.pointerId,position:{x:e.data.global.x,y:e.data.global.y},localPosition:t.worldTransform.applyInverse(e.data.global)},gameObject:o.gameObject})}),t.on("pointerup",e=>{o.emit("touchend",{stopPropagation:()=>e.stopPropagation(),data:{pointerId:e.data.pointerId,position:{x:e.data.global.x,y:e.data.global.y},localPosition:t.worldTransform.applyInverse(e.data.global)},gameObject:o.gameObject})}),t.on("pointerupoutside",e=>{o.emit("touchendoutside",{stopPropagation:()=>e.stopPropagation(),data:{pointerId:e.data.pointerId,position:{x:e.data.global.x,y:e.data.global.y},localPosition:t.worldTransform.applyInverse(e.data.global)},gameObject:o.gameObject})}),t.on("pointercancel",e=>{o.emit("touchcancel",{stopPropagation:()=>e.stopPropagation(),data:{pointerId:e.data.pointerId,position:{x:e.data.global.x,y:e.data.global.y},localPosition:t.worldTransform.applyInverse(e.data.global)},gameObject:o.gameObject})})}remove(e){const t=this.containerManager.getContainer(e.gameObject.id);t.interactive=!1,t.off("tap"),t.off("pointerdown"),t.off("pointermove"),t.off("pointerup"),t.off("pointerupoutside"),t.off("pointercancel"),e.component.removeAllListeners()}change(e){const t=this.containerManager.getContainer(e.gameObject.id);t.interactive=!0;const o=e.component;o.hitArea?this.addHitArea(e,t,o.hitArea):o.hitArea=null}addHitArea(e,t,o){const{type:a,style:i}=o;if(!n[a])return void console.error(`${e.gameObject.name}'s hitArea type is not defined`);const l=[];for(const e of r[a])l.push(i[e]);const s=new n[a](...l);t.hitArea=s}};i.systemName="Event",i=function(e,t,o,a){var n,r=arguments.length,i=r<3?t:null===a?a=Object.getOwnPropertyDescriptor(t,o):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,o,a);else for(var l=e.length-1;l>=0;l--)(n=e[l])&&(i=(r<3?n(i):r>3?n(t,o,i):n(t,o))||i);return r>3&&i&&Object.defineProperty(t,o,i),i}([o.decorators.componentObserver({Event:[{prop:["hitArea"],deep:!0}]})],i);var l,s=i;e.HIT_AREA_TYPE=void 0,(l=e.HIT_AREA_TYPE||(e.HIT_AREA_TYPE={})).Circle="Circle",l.Ellipse="Ellipse",l.Polygon="Polygon",l.Rect="Rect",l.RoundedRect="RoundedRect";class d extends o.Component{constructor(){super(...arguments),this.hitArea=void 0}init(e){e&&_extends(this,e)}emit(e,...t){return super.emit(e,...t)}once(e,t,o){return super.once(e,t,o)}on(e,t,o){return super.on(e,t,o)}}return d.componentName="Event",e.Event=d,e.EventSystem=s,Object.defineProperty(e,"__esModule",{value:!0}),e}({},EVA.plugin.renderer,EVA,PIXI);globalThis.EVA.plugin.renderer.event=globalThis.EVA.plugin.renderer.event||_EVA_IIFE_event;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},_extends.apply(null,arguments)}globalThis.EVA=globalThis.EVA||{},globalThis.EVA.plugin=globalThis.EVA.plugin||{},globalThis.EVA.plugin.renderer=globalThis.EVA.plugin.renderer||{};var _EVA_IIFE_event=function(e,t,n,r){"use strict";function o(e,t,n,r){var o,i=arguments.length,s=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(i<3?o(s):i>3?o(t,n,s):o(t,n))||s);return i>3&&s&&Object.defineProperty(t,n,s),s}function i(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}const s={Circle:r.Circle,Ellipse:r.Ellipse,Polygon:r.Polygon,Rect:r.Rectangle,RoundedRect:r.RoundedRectangle},a={Circle:["x","y","radius"],Ellipse:["x","y","width","height"],Rect:["x","y","width","height"],RoundedRect:["x","y","width","height","radius"],Polygon:["paths"]};let c=class extends t.Renderer{constructor(){super(...arguments),this.name="EventSystem"}init(e){var n;const r=e,o=this.game||("function"==typeof(null==r?void 0:r.getSystem)?r:void 0),i=null===(n=null==o?void 0:o.getSystem)||void 0===n?void 0:n.call(o,t.RendererSystem);(null==i?void 0:i.rendererManager)&&(this.renderSystem=i,this.renderSystem.rendererManager.register(this))}update(e){super.update(e)}componentChanged(e){switch(e.type){case n.OBSERVER_TYPE.ADD:this.add(e);break;case n.OBSERVER_TYPE.REMOVE:this.remove(e);break;case n.OBSERVER_TYPE.CHANGE:this.change(e)}}add(e){var t;const n=null===(t=this.containerManager)||void 0===t?void 0:t.getContainer(e.gameObject.id);if(!n)return;n.interactive=!0,n.interactiveChildren=!0;const r=e.component;r.hitArea&&this.addHitArea(e,n,r.hitArea),n.on("pointertap",e=>{const t=this.createEventParam(n,r,e);r.emit("tap",t),r.emit("click",t)}),n.on("pointerdown",e=>{const t=this.createEventParam(n,r,e);r.emit("touchstart",t),r.emit("mousedown",t)}),n.on("pointermove",e=>{const t=this.createEventParam(n,r,e);r.emit("touchmove",t),r.emit("mousemove",t)}),n.on("pointerup",e=>{const t=this.createEventParam(n,r,e);r.emit("touchend",t),r.emit("mouseup",t)}),n.on("pointerupoutside",e=>{r.emit("touchendoutside",this.createEventParam(n,r,e))}),n.on("pointercancel",e=>{r.emit("touchcancel",this.createEventParam(n,r,e))})}createEventParam(e,t,n){return{stopPropagation:()=>n.stopPropagation(),data:{pointerId:n.data.pointerId,position:{x:n.data.global.x,y:n.data.global.y},localPosition:e.worldTransform.applyInverse(n.data.global)},gameObject:t.gameObject}}remove(e){var t;const n=null===(t=this.containerManager)||void 0===t?void 0:t.getContainer(e.gameObject.id);n&&(n.interactive=!1,n.off("pointertap"),n.off("pointerdown"),n.off("pointermove"),n.off("pointerup"),n.off("pointerupoutside"),n.off("pointercancel"),e.component.removeAllListeners())}change(e){var t;const n=null===(t=this.containerManager)||void 0===t?void 0:t.getContainer(e.gameObject.id);if(!n)return;n.interactive=!0;const r=e.component;r.hitArea?this.addHitArea(e,n,r.hitArea):r.hitArea=null}addHitArea(e,t,n){const{type:r,style:o}=n;if(!s[r])return void console.error(`${e.gameObject.name}'s hitArea type is not defined`);const i=[];for(const e of a[r])i.push(o[e]);const c=new s[r](...i);t.hitArea=c}};c.systemName="EventSystem",c=o([n.decorators.componentObserver({Event:[{prop:["hitArea"],deep:!0}]})],c);var d,p=c;e.HIT_AREA_TYPE=void 0,(d=e.HIT_AREA_TYPE||(e.HIT_AREA_TYPE={})).Circle="Circle",d.Ellipse="Ellipse",d.Polygon="Polygon",d.Rect="Rect",d.RoundedRect="RoundedRect";class l{}o([n.type("number"),n.step(1),i("design:type",Number)],l.prototype,"x",void 0),o([n.type("number"),n.step(1),i("design:type",Number)],l.prototype,"y",void 0),o([n.type("number"),n.step(1),i("design:type",Number)],l.prototype,"radius",void 0),o([n.type("number"),n.step(1),i("design:type",Number)],l.prototype,"width",void 0),o([n.type("number"),n.step(1),i("design:type",Number)],l.prototype,"height",void 0),o([n.type("number"),i("design:type",Array)],l.prototype,"paths",void 0);class u{}o([n.type("string"),i("design:type",String)],u.prototype,"type",void 0),o([n.Field(()=>l),i("design:type",Object)],u.prototype,"style",void 0);class h extends n.Component{constructor(e){super(e),this.hitArea=void 0,this.configuredEventHandlers=[],this.init(e)}init(e){if(this.removeConfiguredEventHandlers(),!e)return;const{on:t}=e;if(_extends(this,function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}(e,["on"])),t)for(const e of Object.keys(t)){const n=t[e];"function"==typeof n&&(super.on(e,n),this.configuredEventHandlers.push({eventName:e,handler:n}))}}emit(e,...t){return super.emit(e,...t)}once(e,t,n){return super.once(e,t,n)}on(e,t,n){return super.on(e,t,n)}destroy(){return this.removeAllListeners(),this.configuredEventHandlers=[],this}onDestroy(){this.destroy()}removeConfiguredEventHandlers(){for(const{eventName:e,handler:t}of this.configuredEventHandlers)super.off(e,t);this.configuredEventHandlers=[]}}return h.componentName="Event",o([n.Field(()=>u),i("design:type",Object)],h.prototype,"hitArea",void 0),e.Event=h,e.EventSystem=p,Object.defineProperty(e,"__esModule",{value:!0}),e}({},EVA.plugin.renderer,EVA,PIXI);globalThis.EVA.plugin.renderer.event=globalThis.EVA.plugin.renderer.event||_EVA_IIFE_event;
@@ -21,6 +21,18 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
21
21
  PERFORMANCE OF THIS SOFTWARE.
22
22
  ***************************************************************************** */
23
23
 
24
+ function __rest(s, e) {
25
+ var t = {};
26
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
27
+ t[p] = s[p];
28
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
29
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
30
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
31
+ t[p[i]] = s[p[i]];
32
+ }
33
+ return t;
34
+ }
35
+
24
36
  function __decorate(decorators, target, key, desc) {
25
37
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
26
38
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -28,6 +40,10 @@ function __decorate(decorators, target, key, desc) {
28
40
  return c > 3 && r && Object.defineProperty(target, key, r), r;
29
41
  }
30
42
 
43
+ function __metadata(metadataKey, metadataValue) {
44
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
45
+ }
46
+
31
47
  typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
32
48
  var e = new Error(message);
33
49
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
@@ -50,12 +66,21 @@ const propertyForHitArea = {
50
66
  let Event$1 = class Event extends pluginRenderer.Renderer {
51
67
  constructor() {
52
68
  super(...arguments);
53
- this.name = 'Event';
69
+ this.name = 'EventSystem';
54
70
  }
55
- init() {
56
- this.renderSystem = this.game.getSystem(pluginRenderer.RendererSystem);
71
+ init(params) {
72
+ var _a;
73
+ const compatibleParams = params;
74
+ const game = this.game || (typeof (compatibleParams === null || compatibleParams === void 0 ? void 0 : compatibleParams.getSystem) === 'function' ? compatibleParams : undefined);
75
+ const renderSystem = (_a = game === null || game === void 0 ? void 0 : game.getSystem) === null || _a === void 0 ? void 0 : _a.call(game, pluginRenderer.RendererSystem);
76
+ if (!(renderSystem === null || renderSystem === void 0 ? void 0 : renderSystem.rendererManager))
77
+ return;
78
+ this.renderSystem = renderSystem;
57
79
  this.renderSystem.rendererManager.register(this);
58
80
  }
81
+ update(frame) {
82
+ super.update(frame);
83
+ }
59
84
  componentChanged(changed) {
60
85
  switch (changed.type) {
61
86
  case eva_js.OBSERVER_TYPE.ADD:
@@ -70,7 +95,10 @@ let Event$1 = class Event extends pluginRenderer.Renderer {
70
95
  }
71
96
  }
72
97
  add(changed) {
73
- const container = this.containerManager.getContainer(changed.gameObject.id);
98
+ var _a;
99
+ const container = (_a = this.containerManager) === null || _a === void 0 ? void 0 : _a.getContainer(changed.gameObject.id);
100
+ if (!container)
101
+ return;
74
102
  container.interactive = true;
75
103
  container.interactiveChildren = true;
76
104
  const component = changed.component;
@@ -78,100 +106,54 @@ let Event$1 = class Event extends pluginRenderer.Renderer {
78
106
  this.addHitArea(changed, container, component.hitArea);
79
107
  }
80
108
  container.on('pointertap', e => {
81
- component.emit('tap', {
82
- stopPropagation: () => e.stopPropagation(),
83
- data: {
84
- // @ts-ignore
85
- pointerId: e.data.pointerId,
86
- position: {
87
- x: e.data.global.x,
88
- y: e.data.global.y,
89
- },
90
- localPosition: container.worldTransform.applyInverse(e.data.global),
91
- },
92
- gameObject: component.gameObject,
93
- });
109
+ const eventParam = this.createEventParam(container, component, e);
110
+ component.emit('tap', eventParam);
111
+ component.emit('click', eventParam);
94
112
  });
95
113
  container.on('pointerdown', e => {
96
- component.emit('touchstart', {
97
- stopPropagation: () => e.stopPropagation(),
98
- data: {
99
- // @ts-ignore
100
- pointerId: e.data.pointerId,
101
- position: {
102
- x: e.data.global.x,
103
- y: e.data.global.y,
104
- },
105
- localPosition: container.worldTransform.applyInverse(e.data.global),
106
- },
107
- gameObject: component.gameObject,
108
- });
114
+ const eventParam = this.createEventParam(container, component, e);
115
+ component.emit('touchstart', eventParam);
116
+ component.emit('mousedown', eventParam);
109
117
  });
110
118
  container.on('pointermove', e => {
111
- component.emit('touchmove', {
112
- stopPropagation: () => e.stopPropagation(),
113
- data: {
114
- // @ts-ignore
115
- pointerId: e.data.pointerId,
116
- position: {
117
- x: e.data.global.x,
118
- y: e.data.global.y,
119
- },
120
- localPosition: container.worldTransform.applyInverse(e.data.global),
121
- },
122
- gameObject: component.gameObject,
123
- });
119
+ const eventParam = this.createEventParam(container, component, e);
120
+ component.emit('touchmove', eventParam);
121
+ component.emit('mousemove', eventParam);
124
122
  });
125
123
  container.on('pointerup', e => {
126
- component.emit('touchend', {
127
- stopPropagation: () => e.stopPropagation(),
128
- data: {
129
- // @ts-ignore
130
- pointerId: e.data.pointerId,
131
- position: {
132
- x: e.data.global.x,
133
- y: e.data.global.y,
134
- },
135
- localPosition: container.worldTransform.applyInverse(e.data.global),
136
- },
137
- gameObject: component.gameObject,
138
- });
124
+ const eventParam = this.createEventParam(container, component, e);
125
+ component.emit('touchend', eventParam);
126
+ component.emit('mouseup', eventParam);
139
127
  });
140
128
  container.on('pointerupoutside', e => {
141
- component.emit('touchendoutside', {
142
- stopPropagation: () => e.stopPropagation(),
143
- data: {
144
- // @ts-ignore
145
- pointerId: e.data.pointerId,
146
- position: {
147
- x: e.data.global.x,
148
- y: e.data.global.y,
149
- },
150
- localPosition: container.worldTransform.applyInverse(e.data.global),
151
- },
152
- gameObject: component.gameObject,
153
- });
129
+ component.emit('touchendoutside', this.createEventParam(container, component, e));
154
130
  });
155
131
  container.on('pointercancel', e => {
156
- component.emit('touchcancel', {
157
- stopPropagation: () => e.stopPropagation(),
158
- data: {
159
- // @ts-ignore
160
- pointerId: e.data.pointerId,
161
- position: {
162
- x: e.data.global.x,
163
- y: e.data.global.y,
164
- },
165
- localPosition: container.worldTransform.applyInverse(e.data.global),
166
- },
167
- gameObject: component.gameObject,
168
- });
132
+ component.emit('touchcancel', this.createEventParam(container, component, e));
169
133
  });
170
134
  }
135
+ createEventParam(container, component, e) {
136
+ return {
137
+ stopPropagation: () => e.stopPropagation(),
138
+ data: {
139
+ // @ts-ignore
140
+ pointerId: e.data.pointerId,
141
+ position: {
142
+ x: e.data.global.x,
143
+ y: e.data.global.y,
144
+ },
145
+ localPosition: container.worldTransform.applyInverse(e.data.global),
146
+ },
147
+ gameObject: component.gameObject,
148
+ };
149
+ }
171
150
  remove(changed) {
172
- const container = this.containerManager.getContainer(changed.gameObject.id);
151
+ var _a;
152
+ const container = (_a = this.containerManager) === null || _a === void 0 ? void 0 : _a.getContainer(changed.gameObject.id);
153
+ if (!container)
154
+ return;
173
155
  container.interactive = false;
174
- container.off('tap');
156
+ container.off('pointertap');
175
157
  container.off('pointerdown');
176
158
  container.off('pointermove');
177
159
  container.off('pointerup');
@@ -180,7 +162,10 @@ let Event$1 = class Event extends pluginRenderer.Renderer {
180
162
  changed.component.removeAllListeners();
181
163
  }
182
164
  change(changed) {
183
- const container = this.containerManager.getContainer(changed.gameObject.id);
165
+ var _a;
166
+ const container = (_a = this.containerManager) === null || _a === void 0 ? void 0 : _a.getContainer(changed.gameObject.id);
167
+ if (!container)
168
+ return;
184
169
  container.interactive = true;
185
170
  const component = changed.component;
186
171
  if (component.hitArea) {
@@ -204,7 +189,7 @@ let Event$1 = class Event extends pluginRenderer.Renderer {
204
189
  container.hitArea = hitAreaShape;
205
190
  }
206
191
  };
207
- Event$1.systemName = 'Event';
192
+ Event$1.systemName = 'EventSystem';
208
193
  Event$1 = __decorate([
209
194
  eva_js.decorators.componentObserver({
210
195
  Event: [{ prop: ['hitArea'], deep: true }],
@@ -220,6 +205,47 @@ exports.HIT_AREA_TYPE = void 0;
220
205
  HIT_AREA_TYPE["Rect"] = "Rect";
221
206
  HIT_AREA_TYPE["RoundedRect"] = "RoundedRect";
222
207
  })(exports.HIT_AREA_TYPE || (exports.HIT_AREA_TYPE = {}));
208
+ class HitAreaStyleMetadata {
209
+ }
210
+ __decorate([
211
+ eva_js.type('number'),
212
+ eva_js.step(1),
213
+ __metadata("design:type", Number)
214
+ ], HitAreaStyleMetadata.prototype, "x", void 0);
215
+ __decorate([
216
+ eva_js.type('number'),
217
+ eva_js.step(1),
218
+ __metadata("design:type", Number)
219
+ ], HitAreaStyleMetadata.prototype, "y", void 0);
220
+ __decorate([
221
+ eva_js.type('number'),
222
+ eva_js.step(1),
223
+ __metadata("design:type", Number)
224
+ ], HitAreaStyleMetadata.prototype, "radius", void 0);
225
+ __decorate([
226
+ eva_js.type('number'),
227
+ eva_js.step(1),
228
+ __metadata("design:type", Number)
229
+ ], HitAreaStyleMetadata.prototype, "width", void 0);
230
+ __decorate([
231
+ eva_js.type('number'),
232
+ eva_js.step(1),
233
+ __metadata("design:type", Number)
234
+ ], HitAreaStyleMetadata.prototype, "height", void 0);
235
+ __decorate([
236
+ eva_js.type('number'),
237
+ __metadata("design:type", Array)
238
+ ], HitAreaStyleMetadata.prototype, "paths", void 0);
239
+ class HitAreaMetadata {
240
+ }
241
+ __decorate([
242
+ eva_js.type('string'),
243
+ __metadata("design:type", String)
244
+ ], HitAreaMetadata.prototype, "type", void 0);
245
+ __decorate([
246
+ eva_js.Field(() => HitAreaStyleMetadata),
247
+ __metadata("design:type", Object)
248
+ ], HitAreaMetadata.prototype, "style", void 0);
223
249
  /**
224
250
  * 事件组件
225
251
  *
@@ -278,18 +304,32 @@ exports.HIT_AREA_TYPE = void 0;
278
304
  * ```
279
305
  */
280
306
  class Event extends eva_js.Component {
281
- constructor() {
282
- super(...arguments);
307
+ constructor(params) {
308
+ super(params);
283
309
  /** 交互热区配置 */
284
310
  this.hitArea = undefined;
311
+ this.configuredEventHandlers = [];
312
+ this.init(params);
285
313
  }
286
314
  /**
287
315
  * 初始化组件
288
316
  * @param params - 初始化参数
289
- * @param params.hitArea - 交互热区配置
290
317
  */
291
318
  init(params) {
292
- params && Object.assign(this, params);
319
+ this.removeConfiguredEventHandlers();
320
+ if (!params)
321
+ return;
322
+ const { on } = params, options = __rest(params, ["on"]);
323
+ Object.assign(this, options);
324
+ if (on) {
325
+ for (const eventName of Object.keys(on)) {
326
+ const handler = on[eventName];
327
+ if (typeof handler !== 'function')
328
+ continue;
329
+ super.on(eventName, handler);
330
+ this.configuredEventHandlers.push({ eventName, handler });
331
+ }
332
+ }
293
333
  }
294
334
  emit(en, ...args) {
295
335
  return super.emit(en, ...args);
@@ -300,9 +340,27 @@ class Event extends eva_js.Component {
300
340
  on(en, fn, context) {
301
341
  return super.on(en, fn, context);
302
342
  }
343
+ destroy() {
344
+ this.removeAllListeners();
345
+ this.configuredEventHandlers = [];
346
+ return this;
347
+ }
348
+ onDestroy() {
349
+ this.destroy();
350
+ }
351
+ removeConfiguredEventHandlers() {
352
+ for (const { eventName, handler } of this.configuredEventHandlers) {
353
+ super.off(eventName, handler);
354
+ }
355
+ this.configuredEventHandlers = [];
356
+ }
303
357
  }
304
358
  /** 组件名称 */
305
- Event.componentName = 'Event';
359
+ Event.componentName = 'Event';
360
+ __decorate([
361
+ eva_js.Field(() => HitAreaMetadata),
362
+ __metadata("design:type", Object)
363
+ ], Event.prototype, "hitArea", void 0);
306
364
 
307
365
  exports.Event = Event;
308
366
  exports.EventSystem = Event$2;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@eva/plugin-renderer"),t=require("@eva/eva.js"),o=require("pixi.js");"function"==typeof SuppressedError&&SuppressedError;const a={Circle:o.Circle,Ellipse:o.Ellipse,Polygon:o.Polygon,Rect:o.Rectangle,RoundedRect:o.RoundedRectangle},n={Circle:["x","y","radius"],Ellipse:["x","y","width","height"],Rect:["x","y","width","height"],RoundedRect:["x","y","width","height","radius"],Polygon:["paths"]};let r=class extends e.Renderer{constructor(){super(...arguments),this.name="Event"}init(){this.renderSystem=this.game.getSystem(e.RendererSystem),this.renderSystem.rendererManager.register(this)}componentChanged(e){switch(e.type){case t.OBSERVER_TYPE.ADD:this.add(e);break;case t.OBSERVER_TYPE.REMOVE:this.remove(e);break;case t.OBSERVER_TYPE.CHANGE:this.change(e)}}add(e){const t=this.containerManager.getContainer(e.gameObject.id);t.interactive=!0,t.interactiveChildren=!0;const o=e.component;o.hitArea&&this.addHitArea(e,t,o.hitArea),t.on("pointertap",e=>{o.emit("tap",{stopPropagation:()=>e.stopPropagation(),data:{pointerId:e.data.pointerId,position:{x:e.data.global.x,y:e.data.global.y},localPosition:t.worldTransform.applyInverse(e.data.global)},gameObject:o.gameObject})}),t.on("pointerdown",e=>{o.emit("touchstart",{stopPropagation:()=>e.stopPropagation(),data:{pointerId:e.data.pointerId,position:{x:e.data.global.x,y:e.data.global.y},localPosition:t.worldTransform.applyInverse(e.data.global)},gameObject:o.gameObject})}),t.on("pointermove",e=>{o.emit("touchmove",{stopPropagation:()=>e.stopPropagation(),data:{pointerId:e.data.pointerId,position:{x:e.data.global.x,y:e.data.global.y},localPosition:t.worldTransform.applyInverse(e.data.global)},gameObject:o.gameObject})}),t.on("pointerup",e=>{o.emit("touchend",{stopPropagation:()=>e.stopPropagation(),data:{pointerId:e.data.pointerId,position:{x:e.data.global.x,y:e.data.global.y},localPosition:t.worldTransform.applyInverse(e.data.global)},gameObject:o.gameObject})}),t.on("pointerupoutside",e=>{o.emit("touchendoutside",{stopPropagation:()=>e.stopPropagation(),data:{pointerId:e.data.pointerId,position:{x:e.data.global.x,y:e.data.global.y},localPosition:t.worldTransform.applyInverse(e.data.global)},gameObject:o.gameObject})}),t.on("pointercancel",e=>{o.emit("touchcancel",{stopPropagation:()=>e.stopPropagation(),data:{pointerId:e.data.pointerId,position:{x:e.data.global.x,y:e.data.global.y},localPosition:t.worldTransform.applyInverse(e.data.global)},gameObject:o.gameObject})})}remove(e){const t=this.containerManager.getContainer(e.gameObject.id);t.interactive=!1,t.off("tap"),t.off("pointerdown"),t.off("pointermove"),t.off("pointerup"),t.off("pointerupoutside"),t.off("pointercancel"),e.component.removeAllListeners()}change(e){const t=this.containerManager.getContainer(e.gameObject.id);t.interactive=!0;const o=e.component;o.hitArea?this.addHitArea(e,t,o.hitArea):o.hitArea=null}addHitArea(e,t,o){const{type:r,style:i}=o;if(!a[r])return void console.error(`${e.gameObject.name}'s hitArea type is not defined`);const s=[];for(const e of n[r])s.push(i[e]);const p=new a[r](...s);t.hitArea=p}};r.systemName="Event",r=function(e,t,o,a){var n,r=arguments.length,i=r<3?t:null===a?a=Object.getOwnPropertyDescriptor(t,o):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,o,a);else for(var s=e.length-1;s>=0;s--)(n=e[s])&&(i=(r<3?n(i):r>3?n(t,o,i):n(t,o))||i);return r>3&&i&&Object.defineProperty(t,o,i),i}([t.decorators.componentObserver({Event:[{prop:["hitArea"],deep:!0}]})],r);var i,s=r;exports.HIT_AREA_TYPE=void 0,(i=exports.HIT_AREA_TYPE||(exports.HIT_AREA_TYPE={})).Circle="Circle",i.Ellipse="Ellipse",i.Polygon="Polygon",i.Rect="Rect",i.RoundedRect="RoundedRect";class p extends t.Component{constructor(){super(...arguments),this.hitArea=void 0}init(e){e&&Object.assign(this,e)}emit(e,...t){return super.emit(e,...t)}once(e,t,o){return super.once(e,t,o)}on(e,t,o){return super.on(e,t,o)}}p.componentName="Event",exports.Event=p,exports.EventSystem=s;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@eva/plugin-renderer"),t=require("@eva/eva.js"),r=require("pixi.js");function o(e,t,r,o){var n,i=arguments.length,s=i<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,r):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,o);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(i<3?n(s):i>3?n(t,r,s):n(t,r))||s);return i>3&&s&&Object.defineProperty(t,r,s),s}function n(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}"function"==typeof SuppressedError&&SuppressedError;const i={Circle:r.Circle,Ellipse:r.Ellipse,Polygon:r.Polygon,Rect:r.Rectangle,RoundedRect:r.RoundedRectangle},s={Circle:["x","y","radius"],Ellipse:["x","y","width","height"],Rect:["x","y","width","height"],RoundedRect:["x","y","width","height","radius"],Polygon:["paths"]};let a=class extends e.Renderer{constructor(){super(...arguments),this.name="EventSystem"}init(t){var r;const o=t,n=this.game||("function"==typeof(null==o?void 0:o.getSystem)?o:void 0),i=null===(r=null==n?void 0:n.getSystem)||void 0===r?void 0:r.call(n,e.RendererSystem);(null==i?void 0:i.rendererManager)&&(this.renderSystem=i,this.renderSystem.rendererManager.register(this))}update(e){super.update(e)}componentChanged(e){switch(e.type){case t.OBSERVER_TYPE.ADD:this.add(e);break;case t.OBSERVER_TYPE.REMOVE:this.remove(e);break;case t.OBSERVER_TYPE.CHANGE:this.change(e)}}add(e){var t;const r=null===(t=this.containerManager)||void 0===t?void 0:t.getContainer(e.gameObject.id);if(!r)return;r.interactive=!0,r.interactiveChildren=!0;const o=e.component;o.hitArea&&this.addHitArea(e,r,o.hitArea),r.on("pointertap",e=>{const t=this.createEventParam(r,o,e);o.emit("tap",t),o.emit("click",t)}),r.on("pointerdown",e=>{const t=this.createEventParam(r,o,e);o.emit("touchstart",t),o.emit("mousedown",t)}),r.on("pointermove",e=>{const t=this.createEventParam(r,o,e);o.emit("touchmove",t),o.emit("mousemove",t)}),r.on("pointerup",e=>{const t=this.createEventParam(r,o,e);o.emit("touchend",t),o.emit("mouseup",t)}),r.on("pointerupoutside",e=>{o.emit("touchendoutside",this.createEventParam(r,o,e))}),r.on("pointercancel",e=>{o.emit("touchcancel",this.createEventParam(r,o,e))})}createEventParam(e,t,r){return{stopPropagation:()=>r.stopPropagation(),data:{pointerId:r.data.pointerId,position:{x:r.data.global.x,y:r.data.global.y},localPosition:e.worldTransform.applyInverse(r.data.global)},gameObject:t.gameObject}}remove(e){var t;const r=null===(t=this.containerManager)||void 0===t?void 0:t.getContainer(e.gameObject.id);r&&(r.interactive=!1,r.off("pointertap"),r.off("pointerdown"),r.off("pointermove"),r.off("pointerup"),r.off("pointerupoutside"),r.off("pointercancel"),e.component.removeAllListeners())}change(e){var t;const r=null===(t=this.containerManager)||void 0===t?void 0:t.getContainer(e.gameObject.id);if(!r)return;r.interactive=!0;const o=e.component;o.hitArea?this.addHitArea(e,r,o.hitArea):o.hitArea=null}addHitArea(e,t,r){const{type:o,style:n}=r;if(!i[o])return void console.error(`${e.gameObject.name}'s hitArea type is not defined`);const a=[];for(const e of s[o])a.push(n[e]);const p=new i[o](...a);t.hitArea=p}};a.systemName="EventSystem",a=o([t.decorators.componentObserver({Event:[{prop:["hitArea"],deep:!0}]})],a);var p,c=a;exports.HIT_AREA_TYPE=void 0,(p=exports.HIT_AREA_TYPE||(exports.HIT_AREA_TYPE={})).Circle="Circle",p.Ellipse="Ellipse",p.Polygon="Polygon",p.Rect="Rect",p.RoundedRect="RoundedRect";class d{}o([t.type("number"),t.step(1),n("design:type",Number)],d.prototype,"x",void 0),o([t.type("number"),t.step(1),n("design:type",Number)],d.prototype,"y",void 0),o([t.type("number"),t.step(1),n("design:type",Number)],d.prototype,"radius",void 0),o([t.type("number"),t.step(1),n("design:type",Number)],d.prototype,"width",void 0),o([t.type("number"),t.step(1),n("design:type",Number)],d.prototype,"height",void 0),o([t.type("number"),n("design:type",Array)],d.prototype,"paths",void 0);class l{}o([t.type("string"),n("design:type",String)],l.prototype,"type",void 0),o([t.Field(()=>d),n("design:type",Object)],l.prototype,"style",void 0);class u extends t.Component{constructor(e){super(e),this.hitArea=void 0,this.configuredEventHandlers=[],this.init(e)}init(e){if(this.removeConfiguredEventHandlers(),!e)return;const{on:t}=e,r=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(o=Object.getOwnPropertySymbols(e);n<o.length;n++)t.indexOf(o[n])<0&&Object.prototype.propertyIsEnumerable.call(e,o[n])&&(r[o[n]]=e[o[n]])}return r}(e,["on"]);if(Object.assign(this,r),t)for(const e of Object.keys(t)){const r=t[e];"function"==typeof r&&(super.on(e,r),this.configuredEventHandlers.push({eventName:e,handler:r}))}}emit(e,...t){return super.emit(e,...t)}once(e,t,r){return super.once(e,t,r)}on(e,t,r){return super.on(e,t,r)}destroy(){return this.removeAllListeners(),this.configuredEventHandlers=[],this}onDestroy(){this.destroy()}removeConfiguredEventHandlers(){for(const{eventName:e,handler:t}of this.configuredEventHandlers)super.off(e,t);this.configuredEventHandlers=[]}}u.componentName="Event",o([t.Field(()=>l),n("design:type",Object)],u.prototype,"hitArea",void 0),exports.Event=u,exports.EventSystem=c;
@@ -68,10 +68,14 @@ declare class Event_2 extends Component<EventParams> {
68
68
  static componentName: string;
69
69
  /** 交互热区配置 */
70
70
  hitArea: HitArea;
71
+ interactive?: boolean;
72
+ cursor?: string;
73
+ stopPropagation?: boolean;
74
+ private configuredEventHandlers;
75
+ constructor(params?: EventParams);
71
76
  /**
72
77
  * 初始化组件
73
78
  * @param params - 初始化参数
74
- * @param params.hitArea - 交互热区配置
75
79
  */
76
80
  init(params?: EventParams): void;
77
81
  emit(eventName: TouchEventName, ...args: [EventParam]): boolean;
@@ -80,6 +84,9 @@ declare class Event_2 extends Component<EventParams> {
80
84
  once<T extends string>(eventName: Exclude<T, TouchEventName>, fn: (...args: any[]) => void, context?: any): this;
81
85
  on(eventName: TouchEventName, fn: (arg: EventParam) => void, context?: any): this;
82
86
  on<T extends string>(eventName: Exclude<T, TouchEventName>, fn: (...args: any[]) => void, context?: any): this;
87
+ destroy(): this;
88
+ onDestroy(): void;
89
+ private removeConfiguredEventHandlers;
83
90
  }
84
91
  export { Event_2 as Event }
85
92
 
@@ -103,7 +110,11 @@ declare type EventParam = {
103
110
  };
104
111
 
105
112
  export declare interface EventParams {
106
- hitArea: HitArea;
113
+ interactive?: boolean;
114
+ cursor?: string;
115
+ stopPropagation?: boolean;
116
+ hitArea?: HitArea;
117
+ on?: Record<string, (...args: any[]) => void>;
107
118
  }
108
119
 
109
120
  export declare class EventSystem extends Renderer<EventSystemParams> {
@@ -112,9 +123,13 @@ export declare class EventSystem extends Renderer<EventSystemParams> {
112
123
  renderSystem: RendererSystem;
113
124
  rendererManager: RendererManager;
114
125
  containerManager: ContainerManager;
115
- init(): void;
126
+ init(params?: EventSystemParams | {
127
+ getSystem?: (...args: any[]) => unknown;
128
+ }): void;
129
+ update(frame?: unknown): void;
116
130
  componentChanged(changed: ComponentChanged): void;
117
131
  add(changed: ComponentChanged): void;
132
+ private createEventParam;
118
133
  remove(changed: ComponentChanged): void;
119
134
  change(changed: ComponentChanged): void;
120
135
  addHitArea(changed: ComponentChanged, container: any, hitArea: any): void;
@@ -1,5 +1,5 @@
1
1
  import { Renderer, RendererSystem } from '@eva/plugin-renderer';
2
- import { OBSERVER_TYPE, decorators, Component } from '@eva/eva.js';
2
+ import { OBSERVER_TYPE, decorators, Component, type, step, Field } from '@eva/eva.js';
3
3
  import { Circle, Ellipse, Polygon, Rectangle, RoundedRectangle } from 'pixi.js';
4
4
 
5
5
  /******************************************************************************
@@ -17,6 +17,18 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17
17
  PERFORMANCE OF THIS SOFTWARE.
18
18
  ***************************************************************************** */
19
19
 
20
+ function __rest(s, e) {
21
+ var t = {};
22
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
23
+ t[p] = s[p];
24
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
25
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
26
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
27
+ t[p[i]] = s[p[i]];
28
+ }
29
+ return t;
30
+ }
31
+
20
32
  function __decorate(decorators, target, key, desc) {
21
33
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
22
34
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -24,6 +36,10 @@ function __decorate(decorators, target, key, desc) {
24
36
  return c > 3 && r && Object.defineProperty(target, key, r), r;
25
37
  }
26
38
 
39
+ function __metadata(metadataKey, metadataValue) {
40
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
41
+ }
42
+
27
43
  typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
28
44
  var e = new Error(message);
29
45
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
@@ -46,12 +62,21 @@ const propertyForHitArea = {
46
62
  let Event$1 = class Event extends Renderer {
47
63
  constructor() {
48
64
  super(...arguments);
49
- this.name = 'Event';
65
+ this.name = 'EventSystem';
50
66
  }
51
- init() {
52
- this.renderSystem = this.game.getSystem(RendererSystem);
67
+ init(params) {
68
+ var _a;
69
+ const compatibleParams = params;
70
+ const game = this.game || (typeof (compatibleParams === null || compatibleParams === void 0 ? void 0 : compatibleParams.getSystem) === 'function' ? compatibleParams : undefined);
71
+ const renderSystem = (_a = game === null || game === void 0 ? void 0 : game.getSystem) === null || _a === void 0 ? void 0 : _a.call(game, RendererSystem);
72
+ if (!(renderSystem === null || renderSystem === void 0 ? void 0 : renderSystem.rendererManager))
73
+ return;
74
+ this.renderSystem = renderSystem;
53
75
  this.renderSystem.rendererManager.register(this);
54
76
  }
77
+ update(frame) {
78
+ super.update(frame);
79
+ }
55
80
  componentChanged(changed) {
56
81
  switch (changed.type) {
57
82
  case OBSERVER_TYPE.ADD:
@@ -66,7 +91,10 @@ let Event$1 = class Event extends Renderer {
66
91
  }
67
92
  }
68
93
  add(changed) {
69
- const container = this.containerManager.getContainer(changed.gameObject.id);
94
+ var _a;
95
+ const container = (_a = this.containerManager) === null || _a === void 0 ? void 0 : _a.getContainer(changed.gameObject.id);
96
+ if (!container)
97
+ return;
70
98
  container.interactive = true;
71
99
  container.interactiveChildren = true;
72
100
  const component = changed.component;
@@ -74,100 +102,54 @@ let Event$1 = class Event extends Renderer {
74
102
  this.addHitArea(changed, container, component.hitArea);
75
103
  }
76
104
  container.on('pointertap', e => {
77
- component.emit('tap', {
78
- stopPropagation: () => e.stopPropagation(),
79
- data: {
80
- // @ts-ignore
81
- pointerId: e.data.pointerId,
82
- position: {
83
- x: e.data.global.x,
84
- y: e.data.global.y,
85
- },
86
- localPosition: container.worldTransform.applyInverse(e.data.global),
87
- },
88
- gameObject: component.gameObject,
89
- });
105
+ const eventParam = this.createEventParam(container, component, e);
106
+ component.emit('tap', eventParam);
107
+ component.emit('click', eventParam);
90
108
  });
91
109
  container.on('pointerdown', e => {
92
- component.emit('touchstart', {
93
- stopPropagation: () => e.stopPropagation(),
94
- data: {
95
- // @ts-ignore
96
- pointerId: e.data.pointerId,
97
- position: {
98
- x: e.data.global.x,
99
- y: e.data.global.y,
100
- },
101
- localPosition: container.worldTransform.applyInverse(e.data.global),
102
- },
103
- gameObject: component.gameObject,
104
- });
110
+ const eventParam = this.createEventParam(container, component, e);
111
+ component.emit('touchstart', eventParam);
112
+ component.emit('mousedown', eventParam);
105
113
  });
106
114
  container.on('pointermove', e => {
107
- component.emit('touchmove', {
108
- stopPropagation: () => e.stopPropagation(),
109
- data: {
110
- // @ts-ignore
111
- pointerId: e.data.pointerId,
112
- position: {
113
- x: e.data.global.x,
114
- y: e.data.global.y,
115
- },
116
- localPosition: container.worldTransform.applyInverse(e.data.global),
117
- },
118
- gameObject: component.gameObject,
119
- });
115
+ const eventParam = this.createEventParam(container, component, e);
116
+ component.emit('touchmove', eventParam);
117
+ component.emit('mousemove', eventParam);
120
118
  });
121
119
  container.on('pointerup', e => {
122
- component.emit('touchend', {
123
- stopPropagation: () => e.stopPropagation(),
124
- data: {
125
- // @ts-ignore
126
- pointerId: e.data.pointerId,
127
- position: {
128
- x: e.data.global.x,
129
- y: e.data.global.y,
130
- },
131
- localPosition: container.worldTransform.applyInverse(e.data.global),
132
- },
133
- gameObject: component.gameObject,
134
- });
120
+ const eventParam = this.createEventParam(container, component, e);
121
+ component.emit('touchend', eventParam);
122
+ component.emit('mouseup', eventParam);
135
123
  });
136
124
  container.on('pointerupoutside', e => {
137
- component.emit('touchendoutside', {
138
- stopPropagation: () => e.stopPropagation(),
139
- data: {
140
- // @ts-ignore
141
- pointerId: e.data.pointerId,
142
- position: {
143
- x: e.data.global.x,
144
- y: e.data.global.y,
145
- },
146
- localPosition: container.worldTransform.applyInverse(e.data.global),
147
- },
148
- gameObject: component.gameObject,
149
- });
125
+ component.emit('touchendoutside', this.createEventParam(container, component, e));
150
126
  });
151
127
  container.on('pointercancel', e => {
152
- component.emit('touchcancel', {
153
- stopPropagation: () => e.stopPropagation(),
154
- data: {
155
- // @ts-ignore
156
- pointerId: e.data.pointerId,
157
- position: {
158
- x: e.data.global.x,
159
- y: e.data.global.y,
160
- },
161
- localPosition: container.worldTransform.applyInverse(e.data.global),
162
- },
163
- gameObject: component.gameObject,
164
- });
128
+ component.emit('touchcancel', this.createEventParam(container, component, e));
165
129
  });
166
130
  }
131
+ createEventParam(container, component, e) {
132
+ return {
133
+ stopPropagation: () => e.stopPropagation(),
134
+ data: {
135
+ // @ts-ignore
136
+ pointerId: e.data.pointerId,
137
+ position: {
138
+ x: e.data.global.x,
139
+ y: e.data.global.y,
140
+ },
141
+ localPosition: container.worldTransform.applyInverse(e.data.global),
142
+ },
143
+ gameObject: component.gameObject,
144
+ };
145
+ }
167
146
  remove(changed) {
168
- const container = this.containerManager.getContainer(changed.gameObject.id);
147
+ var _a;
148
+ const container = (_a = this.containerManager) === null || _a === void 0 ? void 0 : _a.getContainer(changed.gameObject.id);
149
+ if (!container)
150
+ return;
169
151
  container.interactive = false;
170
- container.off('tap');
152
+ container.off('pointertap');
171
153
  container.off('pointerdown');
172
154
  container.off('pointermove');
173
155
  container.off('pointerup');
@@ -176,7 +158,10 @@ let Event$1 = class Event extends Renderer {
176
158
  changed.component.removeAllListeners();
177
159
  }
178
160
  change(changed) {
179
- const container = this.containerManager.getContainer(changed.gameObject.id);
161
+ var _a;
162
+ const container = (_a = this.containerManager) === null || _a === void 0 ? void 0 : _a.getContainer(changed.gameObject.id);
163
+ if (!container)
164
+ return;
180
165
  container.interactive = true;
181
166
  const component = changed.component;
182
167
  if (component.hitArea) {
@@ -200,7 +185,7 @@ let Event$1 = class Event extends Renderer {
200
185
  container.hitArea = hitAreaShape;
201
186
  }
202
187
  };
203
- Event$1.systemName = 'Event';
188
+ Event$1.systemName = 'EventSystem';
204
189
  Event$1 = __decorate([
205
190
  decorators.componentObserver({
206
191
  Event: [{ prop: ['hitArea'], deep: true }],
@@ -216,6 +201,47 @@ var HIT_AREA_TYPE;
216
201
  HIT_AREA_TYPE["Rect"] = "Rect";
217
202
  HIT_AREA_TYPE["RoundedRect"] = "RoundedRect";
218
203
  })(HIT_AREA_TYPE || (HIT_AREA_TYPE = {}));
204
+ class HitAreaStyleMetadata {
205
+ }
206
+ __decorate([
207
+ type('number'),
208
+ step(1),
209
+ __metadata("design:type", Number)
210
+ ], HitAreaStyleMetadata.prototype, "x", void 0);
211
+ __decorate([
212
+ type('number'),
213
+ step(1),
214
+ __metadata("design:type", Number)
215
+ ], HitAreaStyleMetadata.prototype, "y", void 0);
216
+ __decorate([
217
+ type('number'),
218
+ step(1),
219
+ __metadata("design:type", Number)
220
+ ], HitAreaStyleMetadata.prototype, "radius", void 0);
221
+ __decorate([
222
+ type('number'),
223
+ step(1),
224
+ __metadata("design:type", Number)
225
+ ], HitAreaStyleMetadata.prototype, "width", void 0);
226
+ __decorate([
227
+ type('number'),
228
+ step(1),
229
+ __metadata("design:type", Number)
230
+ ], HitAreaStyleMetadata.prototype, "height", void 0);
231
+ __decorate([
232
+ type('number'),
233
+ __metadata("design:type", Array)
234
+ ], HitAreaStyleMetadata.prototype, "paths", void 0);
235
+ class HitAreaMetadata {
236
+ }
237
+ __decorate([
238
+ type('string'),
239
+ __metadata("design:type", String)
240
+ ], HitAreaMetadata.prototype, "type", void 0);
241
+ __decorate([
242
+ Field(() => HitAreaStyleMetadata),
243
+ __metadata("design:type", Object)
244
+ ], HitAreaMetadata.prototype, "style", void 0);
219
245
  /**
220
246
  * 事件组件
221
247
  *
@@ -274,18 +300,32 @@ var HIT_AREA_TYPE;
274
300
  * ```
275
301
  */
276
302
  class Event extends Component {
277
- constructor() {
278
- super(...arguments);
303
+ constructor(params) {
304
+ super(params);
279
305
  /** 交互热区配置 */
280
306
  this.hitArea = undefined;
307
+ this.configuredEventHandlers = [];
308
+ this.init(params);
281
309
  }
282
310
  /**
283
311
  * 初始化组件
284
312
  * @param params - 初始化参数
285
- * @param params.hitArea - 交互热区配置
286
313
  */
287
314
  init(params) {
288
- params && Object.assign(this, params);
315
+ this.removeConfiguredEventHandlers();
316
+ if (!params)
317
+ return;
318
+ const { on } = params, options = __rest(params, ["on"]);
319
+ Object.assign(this, options);
320
+ if (on) {
321
+ for (const eventName of Object.keys(on)) {
322
+ const handler = on[eventName];
323
+ if (typeof handler !== 'function')
324
+ continue;
325
+ super.on(eventName, handler);
326
+ this.configuredEventHandlers.push({ eventName, handler });
327
+ }
328
+ }
289
329
  }
290
330
  emit(en, ...args) {
291
331
  return super.emit(en, ...args);
@@ -296,8 +336,26 @@ class Event extends Component {
296
336
  on(en, fn, context) {
297
337
  return super.on(en, fn, context);
298
338
  }
339
+ destroy() {
340
+ this.removeAllListeners();
341
+ this.configuredEventHandlers = [];
342
+ return this;
343
+ }
344
+ onDestroy() {
345
+ this.destroy();
346
+ }
347
+ removeConfiguredEventHandlers() {
348
+ for (const { eventName, handler } of this.configuredEventHandlers) {
349
+ super.off(eventName, handler);
350
+ }
351
+ this.configuredEventHandlers = [];
352
+ }
299
353
  }
300
354
  /** 组件名称 */
301
- Event.componentName = 'Event';
355
+ Event.componentName = 'Event';
356
+ __decorate([
357
+ Field(() => HitAreaMetadata),
358
+ __metadata("design:type", Object)
359
+ ], Event.prototype, "hitArea", void 0);
302
360
 
303
361
  export { Event, Event$2 as EventSystem, HIT_AREA_TYPE };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eva/plugin-renderer-event",
3
- "version": "2.0.2",
3
+ "version": "2.1.0-beta.1",
4
4
  "description": "@eva/plugin-renderer-event",
5
5
  "main": "index.js",
6
6
  "module": "dist/plugin-renderer-event.esm.js",
@@ -18,8 +18,8 @@
18
18
  "license": "MIT",
19
19
  "homepage": "https://eva.js.org",
20
20
  "dependencies": {
21
- "@eva/plugin-renderer": "2.0.2",
22
- "@eva/eva.js": "2.0.2",
21
+ "@eva/plugin-renderer": "2.1.0-beta.1",
22
+ "@eva/eva.js": "2.1.0-beta.1",
23
23
  "pixi.js": "^8.17.0"
24
24
  }
25
25
  }