@eva/plugin-renderer-video 2.1.0-beta.13 → 2.1.0-beta.15

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.
@@ -1,8 +1,9 @@
1
1
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
+ var globalThis = typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : Function('return this')();
2
3
  globalThis.EVA = globalThis.EVA || {};
3
4
  globalThis.EVA.plugin = globalThis.EVA.plugin || {};
4
5
  globalThis.EVA.plugin.renderer = globalThis.EVA.plugin.renderer || {};
5
- var _EVA_IIFE_video = function (exports, eva_js, pluginRenderer, pixi_js) {
6
+ var _EVA_IIFE_video = function (exports, eva_js, inspectorDecorator, pluginRenderer, pixi_js) {
6
7
  'use strict';
7
8
  function __decorate(decorators, target, key, desc) {
8
9
  var c = arguments.length,
@@ -41,110 +42,6 @@ var _EVA_IIFE_video = function (exports, eva_js, pluginRenderer, pixi_js) {
41
42
  step((generator = generator.apply(thisArg, _arguments || [])).next());
42
43
  });
43
44
  }
44
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
45
- var e = new Error(message);
46
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
47
- };
48
- function __rest(s, e) {
49
- var t = {};
50
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
51
- if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
52
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
53
- }
54
- return t;
55
- }
56
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
57
- var e = new Error(message);
58
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
59
- };
60
- class SymbolKeysNotSupportedError extends Error {
61
- constructor() {
62
- super('Symbol keys are not supported yet!');
63
- Object.setPrototypeOf(this, new.target.prototype);
64
- }
65
- }
66
- const IDE_PROPERTY_METADATA = 'IDE_PROPERTY_METADATA';
67
- function transformBasicType(type) {
68
- if (type === String) {
69
- return 'string';
70
- }
71
- if (type === Number) {
72
- return 'number';
73
- }
74
- if (type === Boolean) {
75
- return 'boolean';
76
- }
77
- return 'unknown';
78
- }
79
- function defineLegacyIDEProp(target, propertyKey, patch) {
80
- const constructor = target.constructor;
81
- const current = constructor.IDEProps || {};
82
- current[propertyKey] = _extends(_extends({
83
- key: propertyKey
84
- }, current[propertyKey]), patch);
85
- constructor.IDEProps = current;
86
- }
87
- function defineTypes(target, key, options, returnTypeFunction) {
88
- let type = Reflect.getMetadata('design:type', target, key);
89
- let isArray = type === Array;
90
- const str = transformBasicType(type);
91
- if (str !== 'unknown') {
92
- type = str;
93
- }
94
- if (returnTypeFunction) {
95
- const returnType = returnTypeFunction();
96
- if (Array.isArray(returnType)) {
97
- isArray = true;
98
- type = returnType[0];
99
- } else {
100
- type = returnType;
101
- }
102
- }
103
- const properties = Reflect.getMetadata(IDE_PROPERTY_METADATA, target.constructor) || {};
104
- const current = properties[key] || {};
105
- const property = _extends(_extends(_extends({}, current), {
106
- type,
107
- isArray: isArray
108
- }), options);
109
- properties[key] = property;
110
- Reflect.defineMetadata(IDE_PROPERTY_METADATA, properties, target.constructor);
111
- const legacyProperty = __rest(property, ["isArray"]);
112
- defineLegacyIDEProp(target, key, legacyProperty);
113
- }
114
- function type(type) {
115
- return Field({
116
- type
117
- });
118
- }
119
- function getTypeDecoratorParams(returnTypeFuncOrOptions, maybeOptions) {
120
- if (typeof returnTypeFuncOrOptions === 'function') {
121
- return {
122
- returnTypeFunc: returnTypeFuncOrOptions,
123
- options: maybeOptions || {}
124
- };
125
- }
126
- return {
127
- options: returnTypeFuncOrOptions || {}
128
- };
129
- }
130
- function Field(returnTypeFunction, maybeOptions) {
131
- return (target, propertyKey) => {
132
- if (typeof propertyKey === 'symbol') {
133
- throw new SymbolKeysNotSupportedError();
134
- }
135
- const {
136
- options,
137
- returnTypeFunc
138
- } = getTypeDecoratorParams(returnTypeFunction, maybeOptions);
139
- defineTypes(target, propertyKey, options, returnTypeFunc);
140
- };
141
- }
142
- var ExecuteMode;
143
- (function (ExecuteMode) {
144
- ExecuteMode[ExecuteMode["Edit"] = 2] = "Edit";
145
- ExecuteMode[ExecuteMode["Game"] = 4] = "Game";
146
- ExecuteMode[ExecuteMode["All"] = 6] = "All";
147
- })(ExecuteMode || (ExecuteMode = {}));
148
45
  class Video extends eva_js.Component {
149
46
  constructor() {
150
47
  super(...arguments);
@@ -209,15 +106,15 @@ var _EVA_IIFE_video = function (exports, eva_js, pluginRenderer, pixi_js) {
209
106
  }
210
107
  }
211
108
  Video.componentName = 'Video';
212
- __decorate([type('string'), __metadata("design:type", String)], Video.prototype, "src", void 0);
213
- __decorate([type('boolean'), __metadata("design:type", Boolean)], Video.prototype, "loop", void 0);
214
- __decorate([type('boolean'), __metadata("design:type", Boolean)], Video.prototype, "autoplay", void 0);
215
- __decorate([type('boolean'), __metadata("design:type", Boolean)], Video.prototype, "muted", void 0);
216
- __decorate([type('number'), __metadata("design:type", Number)], Video.prototype, "volume", void 0);
217
- __decorate([type('number'), __metadata("design:type", Number)], Video.prototype, "playbackRate", void 0);
218
- __decorate([type('number'), __metadata("design:type", Number)], Video.prototype, "anchorX", void 0);
219
- __decorate([type('number'), __metadata("design:type", Number)], Video.prototype, "anchorY", void 0);
220
- __decorate([type('boolean'), __metadata("design:type", Boolean)], Video.prototype, "playsInline", void 0);
109
+ __decorate([inspectorDecorator.type('string'), __metadata("design:type", String)], Video.prototype, "src", void 0);
110
+ __decorate([inspectorDecorator.type('boolean'), __metadata("design:type", Boolean)], Video.prototype, "loop", void 0);
111
+ __decorate([inspectorDecorator.type('boolean'), __metadata("design:type", Boolean)], Video.prototype, "autoplay", void 0);
112
+ __decorate([inspectorDecorator.type('boolean'), __metadata("design:type", Boolean)], Video.prototype, "muted", void 0);
113
+ __decorate([inspectorDecorator.type('number'), __metadata("design:type", Number)], Video.prototype, "volume", void 0);
114
+ __decorate([inspectorDecorator.type('number'), __metadata("design:type", Number)], Video.prototype, "playbackRate", void 0);
115
+ __decorate([inspectorDecorator.type('number'), __metadata("design:type", Number)], Video.prototype, "anchorX", void 0);
116
+ __decorate([inspectorDecorator.type('number'), __metadata("design:type", Number)], Video.prototype, "anchorY", void 0);
117
+ __decorate([inspectorDecorator.type('boolean'), __metadata("design:type", Boolean)], Video.prototype, "playsInline", void 0);
221
118
  function resolveSrc(src) {
222
119
  if (!src) return '';
223
120
  if (src.startsWith('http://') || src.startsWith('https://') || src.startsWith('//') || src.startsWith('/')) {
@@ -474,5 +371,5 @@ var _EVA_IIFE_video = function (exports, eva_js, pluginRenderer, pixi_js) {
474
371
  value: true
475
372
  });
476
373
  return exports;
477
- }({}, EVA, EVA.plugin.renderer, PIXI);
374
+ }({}, EVA, inspectorDecorator, EVA.plugin.renderer, PIXI);
478
375
  globalThis.EVA.plugin.renderer.video = globalThis.EVA.plugin.renderer.video || _EVA_IIFE_video;
@@ -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 n in o)({}).hasOwnProperty.call(o,n)&&(e[n]=o[n])}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_video=function(e,t,o,n){"use strict";function r(e,t,o,n){var r,i=arguments.length,a=i<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,o):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,o,n);else for(var d=e.length-1;d>=0;d--)(r=e[d])&&(a=(i<3?r(a):i>3?r(t,o,a):r(t,o))||a);return i>3&&a&&Object.defineProperty(t,o,a),a}function i(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function a(e,t,o,n){return new(o||(o=Promise))(function(r,i){function a(e){try{s(n.next(e))}catch(e){i(e)}}function d(e){try{s(n.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?r(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(a,d)}s((n=n.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError,"function"==typeof SuppressedError&&SuppressedError;class d extends Error{constructor(){super("Symbol keys are not supported yet!"),Object.setPrototypeOf(this,new.target.prototype)}}const s="IDE_PROPERTY_METADATA";function c(e,t,o,n){let r=Reflect.getMetadata("design:type",e,t),i=r===Array;const a=function(e){return e===String?"string":e===Number?"number":e===Boolean?"boolean":"unknown"}(r);if("unknown"!==a&&(r=a),n){const e=n();Array.isArray(e)?(i=!0,r=e[0]):r=e}const d=Reflect.getMetadata(s,e.constructor)||{},c=_extends(_extends(_extends({},d[t]||{}),{type:r,isArray:i}),o);d[t]=c,Reflect.defineMetadata(s,d,e.constructor);!function(e,t,o){const n=e.constructor,r=n.IDEProps||{};r[t]=_extends(_extends({key:t},r[t]),o),n.IDEProps=r}(e,t,function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(o[n[r]]=e[n[r]])}return o}(c,["isArray"]))}function l(e){return t={type:e},(e,n)=>{if("symbol"==typeof n)throw new d;const{options:r,returnTypeFunc:i}=function(e,t){return"function"==typeof e?{returnTypeFunc:e,options:t||{}}:{options:e||{}}}(t,o);c(e,n,r,i)};var t,o}var u;!function(e){e[e.Edit=2]="Edit",e[e.Game=4]="Game",e[e.All=6]="All"}(u||(u={}));class p extends t.Component{constructor(){super(...arguments),this.src="",this.loop=!1,this.autoplay=!0,this.muted=!0,this.volume=1,this.playbackRate=1,this.anchorX=.5,this.anchorY=.5,this.crossOrigin="anonymous",this.playsInline=!0,this.completed=!1}init(e){e&&_extends(this,e)}play(){if(this.videoElement)try{const e=this.videoElement.play();if(e&&"function"==typeof e.catch)return e.catch(e=>{console.warn("[Video] play() rejected:",e)})}catch(e){console.warn("[Video] play() threw:",e)}}pause(){if(this.videoElement)try{this.videoElement.pause()}catch(e){}}setCurrentTime(e){if(this.videoElement)try{this.videoElement.currentTime=Math.max(0,e)}catch(e){}}snapshot(e){var t,o,n,r;const i=this.videoElement;if(!i||i.readyState<2)return null;const a=null!==(t=null==e?void 0:e.width)&&void 0!==t?t:i.videoWidth,d=null!==(o=null==e?void 0:e.height)&&void 0!==o?o:i.videoHeight;if(a<=0||d<=0)return null;try{const t=document.createElement("canvas");t.width=a,t.height=d;const o=t.getContext("2d");return o?(o.drawImage(i,null!==(n=null==e?void 0:e.x)&&void 0!==n?n:0,null!==(r=null==e?void 0:e.y)&&void 0!==r?r:0,a,d,0,0,a,d),t):null}catch(e){return null}}}function h(e){if(!e)return"";if(e.startsWith("http://")||e.startsWith("https://")||e.startsWith("//")||e.startsWith("/"))return e;if(/\.(mp4|webm|ogv|m4v|mov)(\?|#|$)/i.test(e))return e;try{const o=t.resource.resourcesMap||t.resource.resources;if(o&&o[e]){const t=o[e],n=t.src||t.data||{},r=n.video||n.audio||n.image||n;if(null==r?void 0:r.url)return r.url;if(null==r?void 0:r.src)return r.src}}catch(e){}return e}p.componentName="Video",r([l("string"),i("design:type",String)],p.prototype,"src",void 0),r([l("boolean"),i("design:type",Boolean)],p.prototype,"loop",void 0),r([l("boolean"),i("design:type",Boolean)],p.prototype,"autoplay",void 0),r([l("boolean"),i("design:type",Boolean)],p.prototype,"muted",void 0),r([l("number"),i("design:type",Number)],p.prototype,"volume",void 0),r([l("number"),i("design:type",Number)],p.prototype,"playbackRate",void 0),r([l("number"),i("design:type",Number)],p.prototype,"anchorX",void 0),r([l("number"),i("design:type",Number)],p.prototype,"anchorY",void 0),r([l("boolean"),i("design:type",Boolean)],p.prototype,"playsInline",void 0);let v=class extends o.Renderer{constructor(){super(...arguments),this.name="Video",this.records={}}init(){this.renderSystem=this.game.getSystem(o.RendererSystem),this.renderSystem.rendererManager.register(this)}rendererUpdate(e){var t,o,r,i,a;const d=this.records[e.id];if(!d)return;const s=d.component,c=d.video;if(d.ctx&&c.readyState>=2&&c.videoWidth>0&&c.videoHeight>0){if(!d.resizedToVideo){d.canvas.width=c.videoWidth,d.canvas.height=c.videoHeight,d.resizedToVideo=!0;const e=d.texture,t=n.Texture.from(d.canvas);if(d.texture=t,d.sprite.texture=t,e&&e!==t)try{e.destroy(!1)}catch(e){}}try{d.ctx.drawImage(c,0,0,d.canvas.width,d.canvas.height);const e=null===(t=d.texture)||void 0===t?void 0:t.source;e&&("function"==typeof e.update?e.update():e.dirty=!0)}catch(e){}}const l=null!==(o=s.width)&&void 0!==o?o:c.videoWidth||256,u=null!==(r=s.height)&&void 0!==r?r:c.videoHeight||256;d.sprite.width=l,d.sprite.height=u,d.sprite.anchor.set(null!==(i=s.anchorX)&&void 0!==i?i:.5,null!==(a=s.anchorY)&&void 0!==a?a:.5)}componentChanged(e){var o,n,r,i,d;return a(this,void 0,void 0,function*(){if("Video"!==e.componentName)return;const a=e.component,s=e.gameObject.id;if(e.type===t.OBSERVER_TYPE.ADD){const t=this.createRecord(a);this.records[s]=t;const o=this.containerManager.getContainer(s);o&&o.addChildAt(t.sprite,0),this.attachEndedHandler(t,e.gameObject),this.startLoad(t)}else if(e.type===t.OBSERVER_TYPE.CHANGE){const t=this.records[s];if(!t)return;const d=null===(n=null===(o=e.prop)||void 0===o?void 0:o.prop)||void 0===n?void 0:n[0];if("src"===d){try{t.video.pause()}catch(e){}const e=h(a.src);t.video.src=e,t.component=a,a.videoElement=t.video,a.completed=!1,t.resizedToVideo=!1;try{t.video.load()}catch(e){}!1!==a.autoplay&&this.tryPlay(t.video)}else"loop"===d?t.video.loop=!!a.loop:"muted"===d?t.video.muted=!!a.muted:"volume"===d?t.video.volume=Math.max(0,Math.min(1,null!==(r=a.volume)&&void 0!==r?r:1)):"playbackRate"===d&&(t.video.playbackRate=null!==(i=a.playbackRate)&&void 0!==i?i:1)}else if(e.type===t.OBSERVER_TYPE.REMOVE){const e=this.records[s];if(!e)return;this.tearDown(e);const t=null===(d=this.containerManager)||void 0===d?void 0:d.getContainer(s);t&&t.removeChild(e.sprite);try{e.sprite.destroy({children:!0})}catch(e){}delete this.records[s]}})}createRecord(e){var t,o,r,i,a,d,s;const c=document.createElement("video");c.crossOrigin=null!==(t=e.crossOrigin)&&void 0!==t?t:"anonymous",c.loop=!!e.loop,c.muted=!1!==e.muted,c.volume=Math.max(0,Math.min(1,null!==(o=e.volume)&&void 0!==o?o:1)),c.playbackRate=null!==(r=e.playbackRate)&&void 0!==r?r:1,c.playsInline=!1!==e.playsInline,c["webkit-playsinline"]="",c.preload="auto",e.videoElement=c;const l=document.createElement("canvas");l.width=null!==(i=e.width)&&void 0!==i?i:256,l.height=null!==(a=e.height)&&void 0!==a?a:256;const u=l.getContext("2d"),p=n.Texture.from("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="),h=new n.Sprite(p);return h.anchor.set(null!==(d=e.anchorX)&&void 0!==d?d:.5,null!==(s=e.anchorY)&&void 0!==s?s:.5),{video:c,canvas:l,ctx:u,texture:p,sprite:h,component:e,endedHandler:null,resizedToVideo:!1}}attachEndedHandler(e,t){const o=()=>{e.component.completed=!0;try{e.video.dispatchEvent(new Event("eva-video-complete"))}catch(e){}};e.video.addEventListener("ended",o),e.endedHandler=o}startLoad(e){const t=h(e.component.src);e.video.src=t;try{e.video.load()}catch(e){}if(!1!==e.component.autoplay){const t=()=>{e.video.removeEventListener("canplay",t),e.video.removeEventListener("loadeddata",t),this.tryPlay(e.video)};e.video.readyState>=2?this.tryPlay(e.video):(e.video.addEventListener("canplay",t),e.video.addEventListener("loadeddata",t))}}tryPlay(e){try{const t=e.play();t&&"function"==typeof t.catch&&t.catch(e=>{console.warn("[Video] autoplay rejected:",(null==e?void 0:e.message)||e)})}catch(e){console.warn("[Video] autoplay threw:",e)}}tearDown(e){try{e.video.pause()}catch(e){}if(e.endedHandler)try{e.video.removeEventListener("ended",e.endedHandler)}catch(e){}try{e.video.removeAttribute("src"),e.video.load()}catch(e){}if(e.texture){try{e.texture.destroy(!1)}catch(e){}e.texture=null}}destroy(){var e;for(const t in this.records){const o=parseInt(t),n=this.records[o];this.tearDown(n);const r=null===(e=this.containerManager)||void 0===e?void 0:e.getContainer(o);r&&r.removeChild(n.sprite);try{n.sprite.destroy({children:!0})}catch(e){}delete this.records[o]}}};v.systemName="Video",v=r([t.decorators.componentObserver({Video:[{prop:["src"],deep:!1},{prop:["loop"],deep:!1},{prop:["muted"],deep:!1},{prop:["volume"],deep:!1},{prop:["playbackRate"],deep:!1}]})],v);var y=v;return e.Video=p,e.VideoSystem=y,Object.defineProperty(e,"__esModule",{value:!0}),e}({},EVA,EVA.plugin.renderer,PIXI);globalThis.EVA.plugin.renderer.video=globalThis.EVA.plugin.renderer.video||_EVA_IIFE_video;
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 n in o)({}).hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},_extends.apply(null,arguments)}var globalThis="undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")();globalThis.EVA=globalThis.EVA||{},globalThis.EVA.plugin=globalThis.EVA.plugin||{},globalThis.EVA.plugin.renderer=globalThis.EVA.plugin.renderer||{};var _EVA_IIFE_video=function(e,t,o,n){"use strict";var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])},r(e,t)};function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function o(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}var a=function(){return a=Object.assign||function(e){for(var t,o=1,n=arguments.length;o<n;o++)for(var r in t=arguments[o])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},a.apply(this,arguments)};function s(e,t,o,n){var r,i=arguments.length,a=i<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,o):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,o,n);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(i<3?r(a):i>3?r(t,o,a):r(t,o))||a);return i>3&&a&&Object.defineProperty(t,o,a),a}function c(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function d(e,t,o,n){return new(o||(o=Promise))(function(r,i){function a(e){try{c(n.next(e))}catch(e){i(e)}}function s(e){try{c(n.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(a,s)}c((n=n.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;var l=function(e){function t(){var t=this.constructor,o=e.call(this,"Symbol keys are not supported yet!")||this;return Object.setPrototypeOf(o,t.prototype),o}return i(t,e),t}(Error);!function(e){function t(){var t=this.constructor,o=e.call(this,"getProperties is not a function!")||this;return Object.setPrototypeOf(o,t.prototype),o}i(t,e)}(Error);var u,p="IDE_PROPERTY_METADATA";function h(e,t,o,n){var r=Reflect.getMetadata("design:type",e,t),i=r===Array,s=function(e){return e===String?"string":e===Number?"number":e===Boolean?"boolean":"unknown"}(r);if("unknown"!==s&&(r=s),n){var c=n();Array.isArray(c)?(i=!0,r=c[0]):r=c}var d=Reflect.getMetadata(p,e.constructor)||{},l=d[t]||{},u=a(a(a({},l),{type:r,isArray:i}),o);d[t]=u,Reflect.defineMetadata(p,d,e.constructor),u.isArray,function(e,t,o){var n=e.constructor,r=n.IDEProps||{};r[t]=a(a({key:t},r[t]),o),n.IDEProps=r}(e,t,function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(o[n[r]]=e[n[r]])}return o}(u,["isArray"]))}function v(e){return t={type:e},function(e,n){if("symbol"==typeof n)throw new l;var r=function(e,t){return"function"==typeof e?{returnTypeFunc:e,options:t||{}}:{options:e||{}}}(t,o);h(e,n,r.options,r.returnTypeFunc)};var t,o}!function(e){e[e.Edit=2]="Edit",e[e.Game=4]="Game",e[e.All=6]="All"}(u||(u={}));class y extends t.Component{constructor(){super(...arguments),this.src="",this.loop=!1,this.autoplay=!0,this.muted=!0,this.volume=1,this.playbackRate=1,this.anchorX=.5,this.anchorY=.5,this.crossOrigin="anonymous",this.playsInline=!0,this.completed=!1}init(e){e&&_extends(this,e)}play(){if(this.videoElement)try{const e=this.videoElement.play();if(e&&"function"==typeof e.catch)return e.catch(e=>{console.warn("[Video] play() rejected:",e)})}catch(e){console.warn("[Video] play() threw:",e)}}pause(){if(this.videoElement)try{this.videoElement.pause()}catch(e){}}setCurrentTime(e){if(this.videoElement)try{this.videoElement.currentTime=Math.max(0,e)}catch(e){}}snapshot(e){var t,o,n,r;const i=this.videoElement;if(!i||i.readyState<2)return null;const a=null!==(t=null==e?void 0:e.width)&&void 0!==t?t:i.videoWidth,s=null!==(o=null==e?void 0:e.height)&&void 0!==o?o:i.videoHeight;if(a<=0||s<=0)return null;try{const t=document.createElement("canvas");t.width=a,t.height=s;const o=t.getContext("2d");return o?(o.drawImage(i,null!==(n=null==e?void 0:e.x)&&void 0!==n?n:0,null!==(r=null==e?void 0:e.y)&&void 0!==r?r:0,a,s,0,0,a,s),t):null}catch(e){return null}}}function f(e){if(!e)return"";if(e.startsWith("http://")||e.startsWith("https://")||e.startsWith("//")||e.startsWith("/"))return e;if(/\.(mp4|webm|ogv|m4v|mov)(\?|#|$)/i.test(e))return e;try{const o=t.resource.resourcesMap||t.resource.resources;if(o&&o[e]){const t=o[e],n=t.src||t.data||{},r=n.video||n.audio||n.image||n;if(null==r?void 0:r.url)return r.url;if(null==r?void 0:r.src)return r.src}}catch(e){}return e}y.componentName="Video",s([v("string"),c("design:type",String)],y.prototype,"src",void 0),s([v("boolean"),c("design:type",Boolean)],y.prototype,"loop",void 0),s([v("boolean"),c("design:type",Boolean)],y.prototype,"autoplay",void 0),s([v("boolean"),c("design:type",Boolean)],y.prototype,"muted",void 0),s([v("number"),c("design:type",Number)],y.prototype,"volume",void 0),s([v("number"),c("design:type",Number)],y.prototype,"playbackRate",void 0),s([v("number"),c("design:type",Number)],y.prototype,"anchorX",void 0),s([v("number"),c("design:type",Number)],y.prototype,"anchorY",void 0),s([v("boolean"),c("design:type",Boolean)],y.prototype,"playsInline",void 0);let m=class extends o.Renderer{constructor(){super(...arguments),this.name="Video",this.records={}}init(){this.renderSystem=this.game.getSystem(o.RendererSystem),this.renderSystem.rendererManager.register(this)}rendererUpdate(e){var t,o,r,i,a;const s=this.records[e.id];if(!s)return;const c=s.component,d=s.video;if(s.ctx&&d.readyState>=2&&d.videoWidth>0&&d.videoHeight>0){if(!s.resizedToVideo){s.canvas.width=d.videoWidth,s.canvas.height=d.videoHeight,s.resizedToVideo=!0;const e=s.texture,t=n.Texture.from(s.canvas);if(s.texture=t,s.sprite.texture=t,e&&e!==t)try{e.destroy(!1)}catch(e){}}try{s.ctx.drawImage(d,0,0,s.canvas.width,s.canvas.height);const e=null===(t=s.texture)||void 0===t?void 0:t.source;e&&("function"==typeof e.update?e.update():e.dirty=!0)}catch(e){}}const l=null!==(o=c.width)&&void 0!==o?o:d.videoWidth||256,u=null!==(r=c.height)&&void 0!==r?r:d.videoHeight||256;s.sprite.width=l,s.sprite.height=u,s.sprite.anchor.set(null!==(i=c.anchorX)&&void 0!==i?i:.5,null!==(a=c.anchorY)&&void 0!==a?a:.5)}componentChanged(e){var o,n,r,i,a;return d(this,void 0,void 0,function*(){if("Video"!==e.componentName)return;const s=e.component,c=e.gameObject.id;if(e.type===t.OBSERVER_TYPE.ADD){const t=this.createRecord(s);this.records[c]=t;const o=this.containerManager.getContainer(c);o&&o.addChildAt(t.sprite,0),this.attachEndedHandler(t,e.gameObject),this.startLoad(t)}else if(e.type===t.OBSERVER_TYPE.CHANGE){const t=this.records[c];if(!t)return;const a=null===(n=null===(o=e.prop)||void 0===o?void 0:o.prop)||void 0===n?void 0:n[0];if("src"===a){try{t.video.pause()}catch(e){}const e=f(s.src);t.video.src=e,t.component=s,s.videoElement=t.video,s.completed=!1,t.resizedToVideo=!1;try{t.video.load()}catch(e){}!1!==s.autoplay&&this.tryPlay(t.video)}else"loop"===a?t.video.loop=!!s.loop:"muted"===a?t.video.muted=!!s.muted:"volume"===a?t.video.volume=Math.max(0,Math.min(1,null!==(r=s.volume)&&void 0!==r?r:1)):"playbackRate"===a&&(t.video.playbackRate=null!==(i=s.playbackRate)&&void 0!==i?i:1)}else if(e.type===t.OBSERVER_TYPE.REMOVE){const e=this.records[c];if(!e)return;this.tearDown(e);const t=null===(a=this.containerManager)||void 0===a?void 0:a.getContainer(c);t&&t.removeChild(e.sprite);try{e.sprite.destroy({children:!0})}catch(e){}delete this.records[c]}})}createRecord(e){var t,o,r,i,a,s,c;const d=document.createElement("video");d.crossOrigin=null!==(t=e.crossOrigin)&&void 0!==t?t:"anonymous",d.loop=!!e.loop,d.muted=!1!==e.muted,d.volume=Math.max(0,Math.min(1,null!==(o=e.volume)&&void 0!==o?o:1)),d.playbackRate=null!==(r=e.playbackRate)&&void 0!==r?r:1,d.playsInline=!1!==e.playsInline,d["webkit-playsinline"]="",d.preload="auto",e.videoElement=d;const l=document.createElement("canvas");l.width=null!==(i=e.width)&&void 0!==i?i:256,l.height=null!==(a=e.height)&&void 0!==a?a:256;const u=l.getContext("2d"),p=n.Texture.from("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="),h=new n.Sprite(p);return h.anchor.set(null!==(s=e.anchorX)&&void 0!==s?s:.5,null!==(c=e.anchorY)&&void 0!==c?c:.5),{video:d,canvas:l,ctx:u,texture:p,sprite:h,component:e,endedHandler:null,resizedToVideo:!1}}attachEndedHandler(e,t){const o=()=>{e.component.completed=!0;try{e.video.dispatchEvent(new Event("eva-video-complete"))}catch(e){}};e.video.addEventListener("ended",o),e.endedHandler=o}startLoad(e){const t=f(e.component.src);e.video.src=t;try{e.video.load()}catch(e){}if(!1!==e.component.autoplay){const t=()=>{e.video.removeEventListener("canplay",t),e.video.removeEventListener("loadeddata",t),this.tryPlay(e.video)};e.video.readyState>=2?this.tryPlay(e.video):(e.video.addEventListener("canplay",t),e.video.addEventListener("loadeddata",t))}}tryPlay(e){try{const t=e.play();t&&"function"==typeof t.catch&&t.catch(e=>{console.warn("[Video] autoplay rejected:",(null==e?void 0:e.message)||e)})}catch(e){console.warn("[Video] autoplay threw:",e)}}tearDown(e){try{e.video.pause()}catch(e){}if(e.endedHandler)try{e.video.removeEventListener("ended",e.endedHandler)}catch(e){}try{e.video.removeAttribute("src"),e.video.load()}catch(e){}if(e.texture){try{e.texture.destroy(!1)}catch(e){}e.texture=null}}destroy(){var e;for(const t in this.records){const o=parseInt(t),n=this.records[o];this.tearDown(n);const r=null===(e=this.containerManager)||void 0===e?void 0:e.getContainer(o);r&&r.removeChild(n.sprite);try{n.sprite.destroy({children:!0})}catch(e){}delete this.records[o]}}};m.systemName="Video",m=s([t.decorators.componentObserver({Video:[{prop:["src"],deep:!1},{prop:["loop"],deep:!1},{prop:["muted"],deep:!1},{prop:["volume"],deep:!1},{prop:["playbackRate"],deep:!1}]})],m);var g=m;return e.Video=y,e.VideoSystem=g,Object.defineProperty(e,"__esModule",{value:!0}),e}({},EVA,EVA.plugin.renderer,PIXI);globalThis.EVA.plugin.renderer.video=globalThis.EVA.plugin.renderer.video||_EVA_IIFE_video;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eva/plugin-renderer-video",
3
- "version": "2.1.0-beta.13",
3
+ "version": "2.1.0-beta.15",
4
4
  "description": "@eva/plugin-renderer-video",
5
5
  "main": "index.js",
6
6
  "module": "dist/plugin-renderer-video.esm.js",
@@ -20,8 +20,8 @@
20
20
  "homepage": "https://eva.js.org",
21
21
  "dependencies": {
22
22
  "@eva/inspector-decorator": "^2.0.0-beta.0",
23
- "@eva/eva.js": "2.1.0-beta.13",
24
- "@eva/plugin-renderer": "2.1.0-beta.13",
25
- "pixi.js": "^8.6.3"
23
+ "@eva/eva.js": "2.1.0-beta.15",
24
+ "@eva/plugin-renderer": "2.1.0-beta.15",
25
+ "pixi.js": "8.19.0"
26
26
  }
27
27
  }