@galacean/effects-threejs 2.4.8 → 2.5.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -3,7 +3,7 @@
3
3
  * Description: Galacean Effects runtime threejs plugin for the web
4
4
  * Author: Ant Group CO., Ltd.
5
5
  * Contributors: 燃然,飂兮,十弦,云垣,茂安,意绮
6
- * Version: v2.4.8
6
+ * Version: v2.5.0-alpha.1
7
7
  */
8
8
 
9
9
  import * as THREE from 'three';
@@ -343,11 +343,6 @@ function colorToArr$1(hex, normalized) {
343
343
  parseInt(m[2], 16),
344
344
  parseInt(m[3], 16),
345
345
  255
346
- ] || [
347
- 0,
348
- 0,
349
- 0,
350
- 255
351
346
  ];
352
347
  }
353
348
  } else if (_instanceof1(hex, Array)) {
@@ -683,6 +678,17 @@ function asserts(condition, msg) {
683
678
  return /^[^\d.][\w-]*$/.test(fontFamily);
684
679
  }
685
680
 
681
+ /**
682
+ * Simple implementation of the deferred pattern.
683
+ * An object that exposes a promise and functions to resolve and reject it.
684
+ */ var Deferred = function Deferred() {
685
+ var _this = this;
686
+ this.promise = new Promise(function(resolve, reject) {
687
+ _this.resolve = resolve;
688
+ _this.reject = reject;
689
+ });
690
+ };
691
+
686
692
  var prefix = "[Galacean Effects]";
687
693
  var localLogger;
688
694
  function format(message) {
@@ -7628,6 +7634,8 @@ var MaterialRenderType;
7628
7634
  var MaskProcessor = /*#__PURE__*/ function() {
7629
7635
  function MaskProcessor(engine) {
7630
7636
  this.engine = engine;
7637
+ this.alphaMaskEnabled = false;
7638
+ this.maskMode = MaskMode.NONE;
7631
7639
  this.maskable = null;
7632
7640
  this.stencilClearAction = {
7633
7641
  stencilAction: TextureLoadAction.clear
@@ -7638,19 +7646,17 @@ var MaskProcessor = /*#__PURE__*/ function() {
7638
7646
  return 1;
7639
7647
  };
7640
7648
  _proto.getMaskMode = function getMaskMode(data) {
7641
- var maskMode = MaskMode.NONE;
7642
- if (data.mask) {
7643
- var _data_mask = data.mask, _data_mask_mask = _data_mask.mask, mask = _data_mask_mask === void 0 ? false : _data_mask_mask, _data_mask_mode = _data_mask.mode, mode = _data_mask_mode === void 0 ? MaskMode.NONE : _data_mask_mode, ref = _data_mask.ref;
7644
- if (mask) {
7645
- maskMode = MaskMode.MASK;
7646
- } else if (mode === ObscuredMode.OBSCURED || mode === ObscuredMode.REVERSE_OBSCURED) {
7647
- maskMode = mode === ObscuredMode.OBSCURED ? MaskMode.OBSCURED : MaskMode.REVERSE_OBSCURED;
7648
- if (ref) {
7649
- this.maskable = ref;
7650
- }
7649
+ var _data_isMask = data.isMask, isMask = _data_isMask === void 0 ? false : _data_isMask, _data_inverted = data.inverted, inverted = _data_inverted === void 0 ? false : _data_inverted, reference = data.reference, _data_alphaMaskEnabled = data.alphaMaskEnabled, alphaMaskEnabled = _data_alphaMaskEnabled === void 0 ? false : _data_alphaMaskEnabled;
7650
+ this.alphaMaskEnabled = alphaMaskEnabled;
7651
+ if (isMask) {
7652
+ this.maskMode = MaskMode.MASK;
7653
+ } else {
7654
+ this.maskMode = inverted ? MaskMode.REVERSE_OBSCURED : MaskMode.OBSCURED;
7655
+ if (reference) {
7656
+ this.maskable = this.engine.findObject(reference);
7651
7657
  }
7652
7658
  }
7653
- return maskMode;
7659
+ return this.maskMode;
7654
7660
  };
7655
7661
  _proto.drawStencilMask = function drawStencilMask(renderer) {
7656
7662
  if (this.maskable) {
@@ -10210,7 +10216,7 @@ var itemFrame_frag = "#version 100\nprecision highp float;vec4 blendColor(vec4 c
10210
10216
 
10211
10217
  var integrate = "float calculateMovement(float t,vec2 p1,vec2 p2,vec2 p3,vec2 p4){float movement=0.0;float h=(t-p1.x)*0.05;for(int i=0;i<=20;i++){float t=float(i)*h;float nt=binarySearchT(t,p1.x,p2.x,p3.x,p4.x);float y=cubicBezier(nt,p1.y,p2.y,p3.y,p4.y);float weight=(i==0||i==20)? 1.0 :(mod(float(i),2.)!=0.)? 4.0 : 2.0;movement+=weight*y;}movement*=h/3.;return movement;}float integrateFromBezierCurveFrames(float time,float frameStart,float frameCount){int start=int(frameStart);int count=int(frameCount-1.);float ret=0.;for(int i=0;i<ITR_END;i+=2){vec4 k0=lookup_curve(i+start);vec4 k1=lookup_curve(i+1+start);if(i==0&&time<k0.x){return ret;}vec2 p1=vec2(k0.x,k0.y);vec2 p2=vec2(k0.z,k0.w);vec2 p3=vec2(k1.z,k1.w);vec2 p4=vec2(k1.x,k1.y);if(time>=k1.x){ret+=calculateMovement(k1.x,p1,p2,p3,p4);}if(time>=k0.x&&time<k1.x){return ret+calculateMovement(time,p1,p2,p3,p4);}}return ret;}float integrateByTimeLineSeg(float t,vec2 p0,vec2 p1){float t0=p0.x;float t1=p1.x;float y0=p0.y;float y1=p1.y;vec4 tSqr=vec4(t,t,t0,t0);tSqr=tSqr*tSqr;vec4 a=vec4(2.*t,3.,-t0,3.)*tSqr;float t1y0=t1*y0;vec4 b=vec4(y0-y1,t0*y1-t1y0,2.*y0+y1,t1y0);float r=dot(a,b);return r/(t0-t1)*0.16666667;}float integrateLineSeg(float time,vec2 p0,vec2 p1){float h=time-p0.x;float y0=p0.y;return(y0+y0+(p1.y-y0)*h/(p1.x-p0.x))*h/2.;}float integrateFromLineSeg(float time,float frameStart,float frameCount){if(time==0.){return 0.;}int start=int(frameStart);int count=int(frameCount-1.);float ret=0.;for(int i=0;i<ITR_END;i++){if(i>count){return ret;}vec4 ks=lookup_curve(i+start);vec2 k0=ks.xy;vec2 k1=ks.zw;if(time>k0.x&&time<=k1.x){return ret+integrateLineSeg(time,k0,k1);}ret+=integrateLineSeg(k1.x,k0,k1);vec2 k2=lookup_curve(i+start+1).xy;if(time>k1.x&&time<=k2.x){return ret+integrateLineSeg(time,k1,k2);}ret+=integrateLineSeg(k2.x,k1,k2);}return ret;}float integrateByTimeFromLineSeg(float time,float frameStart,float frameCount){if(time==0.){return 0.;}int start=int(frameStart);int count=int(frameCount-1.);float ret=0.;for(int i=0;i<ITR_END;i++){if(i>count){return ret;}vec4 ks=lookup_curve(i+start);vec2 k0=ks.xy;vec2 k1=ks.zw;if(time>k0.x&&time<=k1.x){return ret+integrateByTimeLineSeg(time,k0,k1);}ret+=integrateByTimeLineSeg(k1.x,k0,k1);vec2 k2=lookup_curve(i+start+1).xy;if(time>k1.x&&time<=k2.x){return ret+integrateByTimeLineSeg(time,k1,k2);}ret+=integrateByTimeLineSeg(k2.x,k1,k2);}return ret;}float getIntegrateFromTime0(float t1,vec4 value){float type=value.x;if(type==0.){return value.y*t1;}if(type==1.){vec2 p0=vec2(0.,value.y);vec2 p1=vec2(value.w,value.z);return integrateLineSeg(t1,p0,p1);}if(type==3.){return integrateFromLineSeg(t1,value.y,value.z);}if(type==4.){return mix(value.y,value.z,aSeed)*t1;}if(type==5.){return integrateFromBezierCurveFrames(t1,value.z,value.w);}return 0.;}float getIntegrateByTimeFromTime(float t0,float t1,vec4 value){float type=value.x;if(type==0.){return value.y*(t1*t1-t0*t0)/2.;}else if(type==1.){vec2 p0=vec2(0.,value.y);vec2 p1=vec2(value.w,value.z);return integrateByTimeLineSeg(t1,p0,p1)-integrateByTimeLineSeg(t0,p0,p1);}if(type==3.){return integrateByTimeFromLineSeg(t1,value.y,value.z)-integrateByTimeFromLineSeg(t0,value.y,value.z);}if(type==4.){return mix(value.y,value.z,aSeed)*(t1*t1-t0*t0)/2.;}if(type==5.){return integrateFromBezierCurveFrames(t1,value.z,value.w)-integrateFromBezierCurveFrames(t0,value.z,value.w);}return 0.;}";
10212
10218
 
10213
- var itemVert = "precision highp float;attribute vec2 atlasOffset;attribute vec3 aPos;varying vec2 vTexCoord;varying vec3 vParams;varying vec4 vColor;uniform vec2 _Size;uniform vec3 _Scale;uniform vec4 _Color;uniform vec4 _TexParams;uniform vec4 _TexOffset;uniform mat4 effects_MatrixVP;uniform mat4 effects_ObjectToWorld;uniform mat4 effects_MatrixV;\n#ifdef ENV_EDITOR\nuniform vec4 uEditorTransform;\n#endif\nvoid main(){vec4 texParams=_TexParams;vTexCoord=vec2(atlasOffset.xy*_TexOffset.zw+_TexOffset.xy);vColor=_Color;vParams=vec3(texParams.w,texParams.y,texParams.x);if(texParams.z==1.0){vec4 pos=vec4(aPos.xy*_Size,aPos.z,1.0);gl_Position=effects_MatrixVP*effects_ObjectToWorld*pos;}else{mat4 view=effects_MatrixV;vec3 camRight=vec3(view[0][0],view[1][0],view[2][0]);vec3 camUp=vec3(view[0][1],view[1][1],view[2][1]);vec3 worldPosition=vec3(effects_ObjectToWorld*vec4(0.0,0.0,0.0,1.0));vec3 vertexPosition=worldPosition+camRight*aPos.x*_Size.x*_Scale.x+camUp*aPos.y*_Size.y*_Scale.y;gl_Position=effects_MatrixVP*vec4(vertexPosition,1.0);}\n#ifdef ENV_EDITOR\ngl_Position=vec4(gl_Position.xy*uEditorTransform.xy+uEditorTransform.zw*gl_Position.w,gl_Position.zw);\n#endif\n}";
10219
+ var itemVert = "precision highp float;attribute vec2 aUV;attribute vec3 aPos;varying vec2 vTexCoord;varying vec3 vParams;varying vec4 vColor;uniform vec2 _Size;uniform vec3 _Scale;uniform vec4 _Color;uniform vec4 _TexParams;uniform vec4 _TexOffset;uniform mat4 effects_MatrixVP;uniform mat4 effects_ObjectToWorld;uniform mat4 effects_MatrixV;\n#ifdef ENV_EDITOR\nuniform vec4 uEditorTransform;\n#endif\nvoid main(){vec4 texParams=_TexParams;vTexCoord=vec2(aUV.xy*_TexOffset.zw+_TexOffset.xy);vColor=_Color;vParams=vec3(texParams.w,texParams.y,texParams.x);if(texParams.z==1.0){vec4 pos=vec4(aPos.xy*_Size,aPos.z,1.0);gl_Position=effects_MatrixVP*effects_ObjectToWorld*pos;}else{mat4 view=effects_MatrixV;vec3 camRight=vec3(view[0][0],view[1][0],view[2][0]);vec3 camUp=vec3(view[0][1],view[1][1],view[2][1]);vec3 worldPosition=vec3(effects_ObjectToWorld*vec4(0.0,0.0,0.0,1.0));vec3 vertexPosition=worldPosition+camRight*aPos.x*_Size.x*_Scale.x+camUp*aPos.y*_Size.y*_Scale.y;gl_Position=effects_MatrixVP*vec4(vertexPosition,1.0);}\n#ifdef ENV_EDITOR\ngl_Position=vec4(gl_Position.xy*uEditorTransform.xy+uEditorTransform.zw*gl_Position.w,gl_Position.zw);\n#endif\n}";
10214
10220
 
10215
10221
  var itemFrag = "precision highp float;varying vec4 vColor;varying vec2 vTexCoord;varying vec3 vParams;uniform sampler2D _MainTex;vec4 blendColor(vec4 color,vec4 vc,float mode){vec4 ret=color*vc;float alpha=ret.a;if(mode==1.){ret.rgb*=alpha;}else if(mode==2.){ret.rgb*=alpha;ret.a=dot(ret.rgb,vec3(0.33333333));}else if(mode==3.){alpha=color.r*alpha;ret=vec4(vc.rgb*alpha,alpha);}return ret;}void main(){vec4 color=vec4(0.);\n#ifdef TRANSPARENT_VIDEO\nfloat halfX=vTexCoord.x*0.5;vec2 uv_rgb=vec2(halfX,vTexCoord.y);vec2 uv_alpha=vec2(halfX+0.5,vTexCoord.y);vec3 rgb=texture2D(_MainTex,uv_rgb).rgb;float alpha=max(texture2D(_MainTex,uv_alpha).r,1e-5);vec4 texColor=vec4(rgb/alpha,alpha);\n#else\nvec4 texColor=texture2D(_MainTex,vTexCoord.xy);\n#endif\ncolor=blendColor(texColor,vColor,floor(0.5+vParams.y));\n#ifdef ALPHA_CLIP\nif(color.a<0.04){discard;}\n#endif\ncolor.a=clamp(color.a,0.0,1.0);gl_FragColor=color;}";
10216
10222
 
@@ -12446,6 +12452,15 @@ function getBezier2DValue(out, t, p0, p1, cpx0, cpy0, cpx1, cpy1) {
12446
12452
  return out;
12447
12453
  }
12448
12454
 
12455
+ var singleSplits = [
12456
+ [
12457
+ 0,
12458
+ 0,
12459
+ 1,
12460
+ 1,
12461
+ undefined
12462
+ ]
12463
+ ];
12449
12464
  /**
12450
12465
  * @since 2.1.0
12451
12466
  */ var BaseRenderComponent = /*#__PURE__*/ function(RendererComponent) {
@@ -12453,11 +12468,12 @@ function getBezier2DValue(out, t, p0, p1, cpx0, cpy0, cpx1, cpy1) {
12453
12468
  function BaseRenderComponent(engine) {
12454
12469
  var _this;
12455
12470
  _this = RendererComponent.call(this, engine) || this;
12456
- _this.color = new Color(1, 1, 1, 1);
12457
12471
  _this.visible = true;
12472
+ _this.splits = singleSplits;
12458
12473
  /**
12459
12474
  * 用于点击测试的碰撞器
12460
12475
  */ _this.meshCollider = new MeshCollider();
12476
+ _this._color = new Color(1, 1, 1, 1);
12461
12477
  // TODO 点击测试后续抽象一个 Collider 组件
12462
12478
  _this.getHitTestParams = function(force) {
12463
12479
  var sizeMatrix = Matrix4.fromScale(_this.transform.size.x, _this.transform.size.y, 1);
@@ -12484,10 +12500,60 @@ function getBezier2DValue(out, t, p0, p1, cpx0, cpy0, cpx1, cpy1) {
12484
12500
  occlusion: false,
12485
12501
  transparentOcclusion: false,
12486
12502
  side: SideMode.DOUBLE,
12487
- maskMode: MaskMode.NONE,
12488
- mask: 0,
12489
- alphaMask: false
12503
+ mask: 0
12490
12504
  };
12505
+ _this.defaultGeometry = Geometry.create(_this.engine, {
12506
+ attributes: {
12507
+ aPos: {
12508
+ type: glContext.FLOAT,
12509
+ size: 3,
12510
+ data: new Float32Array([
12511
+ -0.5,
12512
+ 0.5,
12513
+ 0,
12514
+ -0.5,
12515
+ -0.5,
12516
+ 0,
12517
+ 0.5,
12518
+ 0.5,
12519
+ 0,
12520
+ 0.5,
12521
+ -0.5,
12522
+ 0
12523
+ ])
12524
+ },
12525
+ aUV: {
12526
+ size: 2,
12527
+ offset: 0,
12528
+ releasable: true,
12529
+ type: glContext.FLOAT,
12530
+ data: new Float32Array([
12531
+ 0,
12532
+ 1,
12533
+ 0,
12534
+ 0,
12535
+ 1,
12536
+ 1,
12537
+ 1,
12538
+ 0
12539
+ ])
12540
+ }
12541
+ },
12542
+ indices: {
12543
+ data: new Uint16Array([
12544
+ 0,
12545
+ 1,
12546
+ 2,
12547
+ 2,
12548
+ 1,
12549
+ 3
12550
+ ]),
12551
+ releasable: true
12552
+ },
12553
+ mode: glContext.TRIANGLES,
12554
+ drawCount: 6
12555
+ });
12556
+ _this.geometry = _this.defaultGeometry;
12491
12557
  var material = Material.create(_this.engine, {
12492
12558
  shader: {
12493
12559
  fragment: itemFrag,
@@ -12496,12 +12562,7 @@ function getBezier2DValue(out, t, p0, p1, cpx0, cpy0, cpx1, cpy1) {
12496
12562
  }
12497
12563
  });
12498
12564
  _this.material = material;
12499
- _this.material.setColor("_Color", new Color().setFromArray([
12500
- 1,
12501
- 1,
12502
- 1,
12503
- 1
12504
- ]));
12565
+ _this.material.setColor("_Color", new Color(1, 1, 1, 1));
12505
12566
  _this.maskManager = new MaskProcessor(engine);
12506
12567
  return _this;
12507
12568
  }
@@ -12521,11 +12582,11 @@ function getBezier2DValue(out, t, p0, p1, cpx0, cpy0, cpx1, cpy1) {
12521
12582
  };
12522
12583
  _proto.setColor = function setColor(color) {
12523
12584
  if (_instanceof1(color, Color)) {
12524
- this.color.copyFrom(color);
12585
+ this._color.copyFrom(color);
12525
12586
  } else {
12526
- this.color.setFromArray(color);
12587
+ this._color.setFromArray(color);
12527
12588
  }
12528
- this.material.setColor("_Color", this.color);
12589
+ this.material.setColor("_Color", this._color);
12529
12590
  };
12530
12591
  _proto.setTexture = function setTexture(input) {
12531
12592
  var _this = this;
@@ -12588,103 +12649,149 @@ function getBezier2DValue(out, t, p0, p1, cpx0, cpy0, cpx1, cpy1) {
12588
12649
  var boundingBox = this.meshCollider.getBoundingBox();
12589
12650
  return boundingBox;
12590
12651
  };
12591
- _proto.getItemGeometryData = function getItemGeometryData(geometry) {
12592
- var renderer = this.renderer;
12652
+ _proto.getItemGeometryData = function getItemGeometryData(renderer) {
12653
+ var _this = this, splits = _this.splits, textureSheetAnimation = _this.textureSheetAnimation;
12654
+ var sx = 1, sy = 1;
12655
+ var geometry = this.defaultGeometry;
12593
12656
  if (renderer.shape) {
12594
12657
  var _renderer_shape = renderer.shape, _renderer_shape_index = _renderer_shape.index, index = _renderer_shape_index === void 0 ? [] : _renderer_shape_index, _renderer_shape_aPoint = _renderer_shape.aPoint, aPoint = _renderer_shape_aPoint === void 0 ? [] : _renderer_shape_aPoint;
12595
12658
  var point = new Float32Array(aPoint);
12596
12659
  var position = [];
12597
- var atlasOffset = [];
12660
+ var aUV = [];
12598
12661
  for(var i = 0; i < point.length; i += 6){
12599
- atlasOffset.push(aPoint[i + 2], aPoint[i + 3]);
12662
+ point[i] *= sx;
12663
+ point[i + 1] *= sy;
12664
+ aUV.push(aPoint[i + 2], aPoint[i + 3]);
12600
12665
  position.push(point[i], point[i + 1], 0.0);
12601
12666
  }
12602
12667
  geometry.setAttributeData("aPos", new Float32Array(position));
12603
12668
  return {
12604
12669
  index: index,
12605
- atlasOffset: atlasOffset
12670
+ aUV: aUV
12606
12671
  };
12607
- } else {
12608
- geometry.setAttributeData("aPos", new Float32Array([
12609
- -0.5,
12610
- 0.5,
12672
+ }
12673
+ var originData = [
12674
+ -.5,
12675
+ .5,
12676
+ -.5,
12677
+ -.5,
12678
+ .5,
12679
+ .5,
12680
+ .5,
12681
+ -.5
12682
+ ];
12683
+ var aUV1 = [];
12684
+ var index1 = [];
12685
+ var position1 = [];
12686
+ if (splits.length === 1) {
12687
+ var split = textureSheetAnimation ? [
12611
12688
  0,
12612
- -0.5,
12613
- -0.5,
12614
12689
  0,
12615
- 0.5,
12616
- 0.5,
12690
+ 1,
12691
+ 1,
12692
+ splits[0][4]
12693
+ ] : splits[0];
12694
+ var texOffset = split[4] ? [
12617
12695
  0,
12618
- 0.5,
12619
- -0.5,
12696
+ 0,
12697
+ 1,
12698
+ 0,
12699
+ 0,
12700
+ 1,
12701
+ 1,
12702
+ 1
12703
+ ] : [
12704
+ 0,
12705
+ 1,
12706
+ 0,
12707
+ 0,
12708
+ 1,
12709
+ 1,
12710
+ 1,
12620
12711
  0
12621
- ]));
12622
- return {
12623
- index: [
12624
- 0,
12625
- 1,
12626
- 2,
12627
- 2,
12628
- 1,
12629
- 3
12630
- ],
12631
- atlasOffset: [
12632
- 0,
12633
- 1,
12634
- 0,
12635
- 0,
12636
- 1,
12637
- 1,
12638
- 1,
12639
- 0
12640
- ]
12641
- };
12642
- }
12643
- };
12644
- _proto.createGeometry = function createGeometry() {
12645
- var geometry = Geometry.create(this.engine, {
12646
- attributes: {
12647
- aPos: {
12648
- type: glContext.FLOAT,
12649
- size: 3,
12650
- data: new Float32Array([
12651
- -0.5,
12652
- 0.5,
12712
+ ];
12713
+ var tox = split[0];
12714
+ var toy = split[1];
12715
+ var tsx = split[4] ? split[3] : split[2];
12716
+ var tsy = split[4] ? split[2] : split[3];
12717
+ aUV1.push(texOffset[0] * tsx + tox, texOffset[1] * tsy + toy, texOffset[2] * tsx + tox, texOffset[3] * tsy + toy, texOffset[4] * tsx + tox, texOffset[5] * tsy + toy, texOffset[6] * tsx + tox, texOffset[7] * tsy + toy);
12718
+ position1.push(originData[0], originData[1], 0.0, originData[2], originData[3], 0.0, originData[4], originData[5], 0.0, originData[6], originData[7], 0.0);
12719
+ index1.push(0, 1, 2, 2, 1, 3);
12720
+ } else {
12721
+ // TODO: 原有打包纹理拆分逻辑,待移除
12722
+ //-------------------------------------------------------------------------
12723
+ var col = 2;
12724
+ var row = 2;
12725
+ for(var x = 0; x < col; x++){
12726
+ for(var y = 0; y < row; y++){
12727
+ var base = (y * 2 + x) * 4;
12728
+ // @ts-expect-error
12729
+ var split1 = textureSheetAnimation ? [
12653
12730
  0,
12654
- -0.5,
12655
- -0.5,
12656
12731
  0,
12657
- 0.5,
12658
- 0.5,
12732
+ 1,
12733
+ 1,
12734
+ splits[0][4]
12735
+ ] : splits[y * 2 + x];
12736
+ var texOffset1 = split1[4] ? [
12659
12737
  0,
12660
- 0.5,
12661
- -0.5,
12738
+ 0,
12739
+ 1,
12740
+ 0,
12741
+ 0,
12742
+ 1,
12743
+ 1,
12744
+ 1
12745
+ ] : [
12746
+ 0,
12747
+ 1,
12748
+ 0,
12749
+ 0,
12750
+ 1,
12751
+ 1,
12752
+ 1,
12662
12753
  0
12663
- ])
12664
- },
12665
- atlasOffset: {
12666
- size: 2,
12667
- offset: 0,
12668
- releasable: true,
12669
- type: glContext.FLOAT,
12670
- data: new Float32Array(0)
12754
+ ];
12755
+ var dw = ((x + x + 1) / col - 1) / 2;
12756
+ var dh = ((y + y + 1) / row - 1) / 2;
12757
+ var tox1 = split1[0];
12758
+ var toy1 = split1[1];
12759
+ var tsx1 = split1[4] ? split1[3] : split1[2];
12760
+ var tsy1 = split1[4] ? split1[2] : split1[3];
12761
+ var origin = [
12762
+ originData[0] / col + dw,
12763
+ originData[1] / row + dh,
12764
+ originData[2] / col + dw,
12765
+ originData[3] / row + dh,
12766
+ originData[4] / col + dw,
12767
+ originData[5] / row + dh,
12768
+ originData[6] / col + dw,
12769
+ originData[7] / row + dh
12770
+ ];
12771
+ aUV1.push(texOffset1[0] * tsx1 + tox1, texOffset1[1] * tsy1 + toy1, texOffset1[2] * tsx1 + tox1, texOffset1[3] * tsy1 + toy1, texOffset1[4] * tsx1 + tox1, texOffset1[5] * tsy1 + toy1, texOffset1[6] * tsx1 + tox1, texOffset1[7] * tsy1 + toy1);
12772
+ position1.push(origin[0] * sx, origin[1] * sy, 0.0, origin[2] * sx, origin[3] * sy, 0.0, origin[4] * sx, origin[5] * sy, 0.0, origin[6] * sx, origin[7] * sy, 0.0);
12773
+ index1.push(base, 1 + base, 2 + base, 2 + base, 1 + base, 3 + base);
12671
12774
  }
12672
- },
12673
- indices: {
12674
- data: new Uint16Array(0),
12675
- releasable: true
12676
- },
12677
- mode: glContext.TRIANGLES
12678
- });
12679
- var geoData = this.getItemGeometryData(geometry);
12680
- var index = geoData.index, atlasOffset = geoData.atlasOffset;
12775
+ }
12776
+ }
12777
+ geometry.setAttributeData("aPos", new Float32Array(position1));
12778
+ return {
12779
+ index: index1,
12780
+ aUV: aUV1
12781
+ };
12782
+ };
12783
+ _proto.configureDefaultGeometry = function configureDefaultGeometry(renderer) {
12784
+ var geoData = this.getItemGeometryData(renderer);
12785
+ var index = geoData.index, aUV = geoData.aUV;
12786
+ var geometry = this.defaultGeometry;
12681
12787
  geometry.setIndexData(new Uint16Array(index));
12682
- geometry.setAttributeData("atlasOffset", new Float32Array(atlasOffset));
12788
+ geometry.setAttributeData("aUV", new Float32Array(aUV));
12683
12789
  geometry.setDrawCount(index.length);
12684
12790
  return geometry;
12685
12791
  };
12686
12792
  _proto.configureMaterial = function configureMaterial(renderer) {
12687
- var side = renderer.side, occlusion = renderer.occlusion, blendMode = renderer.blending, maskMode = renderer.maskMode, mask = renderer.mask, texture = renderer.texture;
12793
+ var side = renderer.side, occlusion = renderer.occlusion, blendMode = renderer.blending, mask = renderer.mask, texture = renderer.texture;
12794
+ var maskMode = this.maskManager.maskMode;
12688
12795
  var material = this.material;
12689
12796
  material.blending = true;
12690
12797
  material.depthTest = true;
@@ -12698,17 +12805,16 @@ function getBezier2DValue(out, t, p0, p1, cpx0, cpy0, cpx1, cpy1) {
12698
12805
  setMaskMode(material, maskMode);
12699
12806
  setSideMode(material, side);
12700
12807
  material.shader.shaderData.properties = '_MainTex("_MainTex",2D) = "white" {}';
12701
- material.setColor("_Color", new Color(0, 0, 0, 1));
12702
12808
  material.setVector4("_TexOffset", new Vector4(0, 0, 1, 1));
12703
12809
  material.setTexture("_MainTex", texture);
12704
- this.preMultiAlpha = getPreMultiAlpha(blendMode);
12810
+ var preMultiAlpha = getPreMultiAlpha(blendMode);
12705
12811
  var texParams = new Vector4();
12706
12812
  texParams.x = renderer.occlusion ? +renderer.transparentOcclusion : 1;
12707
- texParams.y = +this.preMultiAlpha;
12813
+ texParams.y = preMultiAlpha;
12708
12814
  texParams.z = renderer.renderMode;
12709
- texParams.w = renderer.maskMode;
12815
+ texParams.w = maskMode;
12710
12816
  material.setVector4("_TexParams", texParams);
12711
- if (texParams.x === 0 || renderer.alphaMask) {
12817
+ if (texParams.x === 0 || this.maskManager.alphaMaskEnabled) {
12712
12818
  material.enableMacro("ALPHA_CLIP");
12713
12819
  } else {
12714
12820
  material.disableMacro("ALPHA_CLIP");
@@ -12730,39 +12836,63 @@ function getBezier2DValue(out, t, p0, p1, cpx0, cpy0, cpx1, cpy1) {
12730
12836
  };
12731
12837
  _proto.fromData = function fromData(data) {
12732
12838
  RendererComponent.prototype.fromData.call(this, data);
12733
- var _data_renderer;
12734
- var renderer = (_data_renderer = data.renderer) != null ? _data_renderer : {};
12735
- var maskProps = data.mask;
12736
- if (maskProps && maskProps.ref) {
12737
- maskProps.ref = this.engine.findObject(maskProps.ref);
12839
+ var baseRenderComponentData = data;
12840
+ var _baseRenderComponentData_renderer;
12841
+ var renderer = (_baseRenderComponentData_renderer = baseRenderComponentData.renderer) != null ? _baseRenderComponentData_renderer : {};
12842
+ var splits = baseRenderComponentData.splits;
12843
+ var textureSheetAnimation = baseRenderComponentData.textureSheetAnimation;
12844
+ var maskOptions = baseRenderComponentData.mask;
12845
+ if (maskOptions) {
12846
+ this.maskManager.getMaskMode(maskOptions);
12738
12847
  }
12739
- var maskMode = this.maskManager.getMaskMode(data);
12740
12848
  // TODO 新蒙板上线后移除
12741
12849
  //-------------------------------------------------------------------------
12742
12850
  var shapeData = renderer.shape;
12743
- //@ts-expect-error
12744
- var split = data.splits && !data.textureSheetAnimation ? data.splits[0] : undefined;
12851
+ var split = splits && !textureSheetAnimation ? splits[0] : undefined;
12745
12852
  var shapeGeometry = undefined;
12746
12853
  if (shapeData !== undefined && shapeData !== null && !("aPoint" in shapeData && "index" in shapeData)) {
12747
12854
  shapeGeometry = getGeometryByShape(shapeData, split);
12748
12855
  }
12749
- var _renderer_renderMode, _renderer_blending, _renderer_side, _renderer_alphaMask;
12750
12856
  //-------------------------------------------------------------------------
12857
+ this.splits = splits || singleSplits;
12858
+ this.textureSheetAnimation = textureSheetAnimation;
12859
+ var _renderer_renderMode, _renderer_blending, _renderer_side;
12751
12860
  this.renderer = {
12752
12861
  renderMode: (_renderer_renderMode = renderer.renderMode) != null ? _renderer_renderMode : RenderMode.MESH,
12753
12862
  blending: (_renderer_blending = renderer.blending) != null ? _renderer_blending : BlendingMode.ALPHA,
12754
12863
  texture: renderer.texture ? this.engine.findObject(renderer.texture) : this.engine.emptyTexture,
12755
12864
  occlusion: !!renderer.occlusion,
12756
- transparentOcclusion: !!renderer.transparentOcclusion || maskMode === MaskMode.MASK,
12865
+ transparentOcclusion: !!renderer.transparentOcclusion || this.maskManager.maskMode === MaskMode.MASK,
12757
12866
  side: (_renderer_side = renderer.side) != null ? _renderer_side : SideMode.DOUBLE,
12758
12867
  mask: this.maskManager.getRefValue(),
12759
- shape: shapeGeometry,
12760
- maskMode: maskMode,
12761
- //@ts-expect-error TODO 新蒙版兼容老数据需要增加纹理透明度蒙版是否开启参数
12762
- alphaMask: (_renderer_alphaMask = renderer.alphaMask) != null ? _renderer_alphaMask : false
12868
+ shape: shapeGeometry
12763
12869
  };
12764
12870
  this.configureMaterial(this.renderer);
12871
+ if (baseRenderComponentData.geometry) {
12872
+ this.geometry = this.engine.findObject(baseRenderComponentData.geometry);
12873
+ } else {
12874
+ this.geometry = this.defaultGeometry;
12875
+ this.configureDefaultGeometry(this.renderer);
12876
+ }
12765
12877
  };
12878
+ _create_class(BaseRenderComponent, [
12879
+ {
12880
+ key: "color",
12881
+ get: /**
12882
+ * 获取当前图层的颜色
12883
+ * @since 2.5.0
12884
+ */ function get() {
12885
+ return this._color;
12886
+ },
12887
+ set: /**
12888
+ * 设置当前图层的颜色
12889
+ * @since 2.5.0
12890
+ */ function set(value) {
12891
+ this._color = value;
12892
+ this.material.setColor("_Color", this._color);
12893
+ }
12894
+ }
12895
+ ]);
12766
12896
  return BaseRenderComponent;
12767
12897
  }(RendererComponent);
12768
12898
 
@@ -12777,37 +12907,8 @@ var ShapeComponent = /*#__PURE__*/ function(BaseRenderComponent) {
12777
12907
  _this.graphicsPath = new GraphicsPath();
12778
12908
  _this.vert = "\nprecision highp float;\n\nattribute vec3 aPos;//x y\n\nuniform mat4 effects_MatrixVP;\nuniform mat4 effects_MatrixInvV;\nuniform mat4 effects_ObjectToWorld;\n\nvoid main() {\n vec4 pos = vec4(aPos.xyz, 1.0);\n gl_Position = effects_MatrixVP * effects_ObjectToWorld * pos;\n}\n";
12779
12909
  _this.frag = "\nprecision highp float;\n\nuniform vec4 _Color;\n\nvoid main() {\n vec4 color = _Color;\n color.rgb *= color.a;\n gl_FragColor = color;\n}\n";
12780
- // Create Geometry
12910
+ // Add Geometry SubMesh
12781
12911
  //-------------------------------------------------------------------------
12782
- _this.geometry = Geometry.create(engine, {
12783
- attributes: {
12784
- aPos: {
12785
- type: glContext.FLOAT,
12786
- size: 3,
12787
- data: new Float32Array([
12788
- -0.5,
12789
- 0.5,
12790
- 0,
12791
- -0.5,
12792
- -0.5,
12793
- 0,
12794
- 0.5,
12795
- 0.5,
12796
- 0,
12797
- 0.5,
12798
- -0.5,
12799
- 0
12800
- ])
12801
- },
12802
- aUV: {
12803
- type: glContext.FLOAT,
12804
- size: 2,
12805
- data: new Float32Array()
12806
- }
12807
- },
12808
- mode: glContext.TRIANGLES,
12809
- drawCount: 4
12810
- });
12811
12912
  _this.geometry.subMeshes.push({
12812
12913
  offset: 0,
12813
12914
  indexCount: 0,
@@ -13107,17 +13208,15 @@ var ShapeComponent = /*#__PURE__*/ function(BaseRenderComponent) {
13107
13208
  break;
13108
13209
  }
13109
13210
  }
13110
- var maskProps = data.mask;
13111
- if (maskProps && maskProps.ref) {
13112
- maskProps.ref = this.engine.findObject(maskProps.ref);
13211
+ if (data.mask) {
13212
+ this.maskManager.getMaskMode(data.mask);
13113
13213
  }
13114
- var maskMode = this.maskManager.getMaskMode(data);
13115
13214
  var maskRef = this.maskManager.getRefValue();
13116
13215
  this.material.stencilRef = maskRef !== undefined ? [
13117
13216
  maskRef,
13118
13217
  maskRef
13119
13218
  ] : undefined;
13120
- setMaskMode(this.material, maskMode);
13219
+ setMaskMode(this.material, this.maskManager.maskMode);
13121
13220
  };
13122
13221
  _create_class(ShapeComponent, [
13123
13222
  {
@@ -19592,11 +19691,7 @@ var ParticleSystem = /*#__PURE__*/ function(Component) {
19592
19691
  var maskMode = MaskMode.NONE;
19593
19692
  var maskRef = 0;
19594
19693
  if (data.mask) {
19595
- var maskProps = data.mask;
19596
- if (maskProps && maskProps.ref) {
19597
- maskProps.ref = this.engine.findObject(maskProps.ref);
19598
- }
19599
- maskMode = this.maskManager.getMaskMode(data);
19694
+ maskMode = this.maskManager.getMaskMode(data.mask);
19600
19695
  maskRef = this.maskManager.getRefValue();
19601
19696
  }
19602
19697
  return {
@@ -20137,7 +20232,7 @@ var RuntimeClip = /*#__PURE__*/ function() {
20137
20232
  this.playable.play();
20138
20233
  }
20139
20234
  this.parentMixer.setClipWeight(this.playable, weight);
20140
- var clipTime = clip.toLocalTime(localTime);
20235
+ var clipTime = parseFloat(clip.toLocalTime(localTime).toFixed(3));
20141
20236
  this.playable.setTime(clipTime);
20142
20237
  // 判断动画是否结束
20143
20238
  if (ended) {
@@ -21326,12 +21421,11 @@ var LateUpdateTickData = /*#__PURE__*/ function(TickData) {
21326
21421
  * 前进合成到指定时间
21327
21422
  * @param time - 相对0时刻的时间
21328
21423
  */ _proto.forwardTime = function forwardTime(time) {
21329
- var deltaTime = time * 1000 - this.time * 1000;
21424
+ var deltaTime = time * 1000 - this.rootComposition.time * 1000;
21330
21425
  var reverse = deltaTime < 0;
21331
21426
  var step = 15;
21332
21427
  var t = Math.abs(deltaTime);
21333
21428
  var ss = reverse ? -step : step;
21334
- // FIXME Update 中可能会修改合成时间,这边需要优化更新逻辑
21335
21429
  for(t; t > step; t -= step){
21336
21430
  this.update(ss);
21337
21431
  }
@@ -21371,14 +21465,13 @@ var LateUpdateTickData = /*#__PURE__*/ function(TickData) {
21371
21465
  this.callAwake(this.rootItem);
21372
21466
  this.rootItem.beginPlay();
21373
21467
  }
21374
- var previousCompositionTime = this.time;
21375
- this.updateCompositionTime(deltaTime * this.speed / 1000);
21376
- var deltaTimeInMs = (this.time - previousCompositionTime) * 1000;
21468
+ var dt = parseFloat(this.getUpdateTime(deltaTime * this.speed).toFixed(0));
21469
+ this.updateRootComposition(dt / 1000);
21377
21470
  this.updateVideo();
21378
21471
  // 更新 model-tree-plugin
21379
- this.updatePluginLoaders(deltaTimeInMs);
21380
- this.sceneTicking.update.tick(deltaTimeInMs);
21381
- this.sceneTicking.lateUpdate.tick(deltaTimeInMs);
21472
+ this.updatePluginLoaders(deltaTime);
21473
+ this.sceneTicking.update.tick(dt);
21474
+ this.sceneTicking.lateUpdate.tick(dt);
21382
21475
  this.updateCamera();
21383
21476
  this.prepareRender();
21384
21477
  if (this.isEnded && !this.isEndCalled) {
@@ -21394,6 +21487,14 @@ var LateUpdateTickData = /*#__PURE__*/ function(TickData) {
21394
21487
  _proto.shouldDispose = function shouldDispose() {
21395
21488
  return this.isEnded && this.rootItem.endBehavior === EndBehavior.destroy && !this.reusable;
21396
21489
  };
21490
+ _proto.getUpdateTime = function getUpdateTime(t) {
21491
+ var startTimeInMs = this.startTime * 1000;
21492
+ var now = this.rootComposition.time * 1000;
21493
+ if (t < 0 && now + t < startTimeInMs) {
21494
+ return startTimeInMs - now;
21495
+ }
21496
+ return t;
21497
+ };
21397
21498
  _proto.callAwake = function callAwake(item) {
21398
21499
  for(var _iterator = _create_for_of_iterator_helper_loose(item.components), _step; !(_step = _iterator()).done;){
21399
21500
  var component = _step.value;
@@ -21438,18 +21539,14 @@ var LateUpdateTickData = /*#__PURE__*/ function(TickData) {
21438
21539
  };
21439
21540
  /**
21440
21541
  * 更新主合成组件
21441
- */ _proto.updateCompositionTime = function updateCompositionTime(deltaTime) {
21542
+ */ _proto.updateRootComposition = function updateRootComposition(deltaTime) {
21442
21543
  if (this.rootComposition.state === PlayState.Paused || !this.rootComposition.isActiveAndEnabled) {
21443
21544
  return;
21444
21545
  }
21445
- // 相对于合成开始时间的时间
21446
- var localTime = this.time + deltaTime - this.startTime;
21447
- if (deltaTime < 0 && localTime < 0) {
21448
- localTime = 0;
21449
- }
21546
+ var localTime = parseFloat((this.time + deltaTime - this.rootItem.start).toFixed(3));
21547
+ var isEnded = false;
21450
21548
  var duration = this.rootItem.duration;
21451
21549
  var endBehavior = this.rootItem.endBehavior;
21452
- var isEnded = false;
21453
21550
  if (localTime - duration > 0.001) {
21454
21551
  isEnded = true;
21455
21552
  switch(endBehavior){
@@ -21474,7 +21571,7 @@ var LateUpdateTickData = /*#__PURE__*/ function(TickData) {
21474
21571
  }
21475
21572
  }
21476
21573
  }
21477
- this.rootComposition.time = localTime + this.startTime;
21574
+ this.rootComposition.time = localTime;
21478
21575
  // end state changed, handle onEnd flags
21479
21576
  if (this.isEnded !== isEnded) {
21480
21577
  if (isEnded) {
@@ -22630,15 +22727,6 @@ var ColorPlayable = /*#__PURE__*/ function(Playable) {
22630
22727
  return ColorPlayable;
22631
22728
  }(Playable);
22632
22729
 
22633
- var singleSplits = [
22634
- [
22635
- 0,
22636
- 0,
22637
- 1,
22638
- 1,
22639
- undefined
22640
- ]
22641
- ];
22642
22730
  var seed$3 = 0;
22643
22731
  var SpriteColorPlayableAsset = /*#__PURE__*/ function(PlayableAsset) {
22644
22732
  _inherits(SpriteColorPlayableAsset, PlayableAsset);
@@ -22664,10 +22752,8 @@ var SpriteComponent = /*#__PURE__*/ function(BaseRenderComponent) {
22664
22752
  function SpriteComponent(engine, props) {
22665
22753
  var _this;
22666
22754
  _this = BaseRenderComponent.call(this, engine) || this;
22667
- _this.splits = singleSplits;
22668
22755
  _this.frameAnimationLoop = false;
22669
22756
  _this.name = "MSprite" + seed$3++;
22670
- _this.geometry = _this.createGeometry();
22671
22757
  if (props) {
22672
22758
  _this.fromData(props);
22673
22759
  }
@@ -22757,111 +22843,10 @@ var SpriteComponent = /*#__PURE__*/ function(BaseRenderComponent) {
22757
22843
  source.video.load();
22758
22844
  }
22759
22845
  };
22760
- _proto.getItemGeometryData = function getItemGeometryData(geometry) {
22761
- var _this = this, splits = _this.splits, textureSheetAnimation = _this.textureSheetAnimation;
22762
- var sx = 1, sy = 1;
22763
- var renderer = this.renderer;
22764
- if (renderer.shape) {
22765
- var _renderer_shape = renderer.shape, _renderer_shape_index = _renderer_shape.index, index = _renderer_shape_index === void 0 ? [] : _renderer_shape_index, _renderer_shape_aPoint = _renderer_shape.aPoint, aPoint = _renderer_shape_aPoint === void 0 ? [] : _renderer_shape_aPoint;
22766
- var point = new Float32Array(aPoint);
22767
- var position = [];
22768
- var atlasOffset = [];
22769
- for(var i = 0; i < point.length; i += 6){
22770
- point[i] *= sx;
22771
- point[i + 1] *= sy;
22772
- atlasOffset.push(aPoint[i + 2], aPoint[i + 3]);
22773
- position.push(point[i], point[i + 1], 0.0);
22774
- }
22775
- geometry.setAttributeData("aPos", new Float32Array(position));
22776
- return {
22777
- index: index,
22778
- atlasOffset: atlasOffset
22779
- };
22780
- }
22781
- var originData = [
22782
- -.5,
22783
- .5,
22784
- -.5,
22785
- -.5,
22786
- .5,
22787
- .5,
22788
- .5,
22789
- -.5
22790
- ];
22791
- var atlasOffset1 = [];
22792
- var index1 = [];
22793
- var col = 2;
22794
- var row = 2;
22795
- if (splits.length === 1) {
22796
- col = 1;
22797
- row = 1;
22798
- }
22799
- var position1 = [];
22800
- for(var x = 0; x < col; x++){
22801
- for(var y = 0; y < row; y++){
22802
- var base = (y * 2 + x) * 4;
22803
- // @ts-expect-error
22804
- var split = textureSheetAnimation ? [
22805
- 0,
22806
- 0,
22807
- 1,
22808
- 1,
22809
- splits[0][4]
22810
- ] : splits[y * 2 + x];
22811
- var texOffset = split[4] ? [
22812
- 0,
22813
- 0,
22814
- 1,
22815
- 0,
22816
- 0,
22817
- 1,
22818
- 1,
22819
- 1
22820
- ] : [
22821
- 0,
22822
- 1,
22823
- 0,
22824
- 0,
22825
- 1,
22826
- 1,
22827
- 1,
22828
- 0
22829
- ];
22830
- var dw = ((x + x + 1) / col - 1) / 2;
22831
- var dh = ((y + y + 1) / row - 1) / 2;
22832
- var tox = split[0];
22833
- var toy = split[1];
22834
- var tsx = split[4] ? split[3] : split[2];
22835
- var tsy = split[4] ? split[2] : split[3];
22836
- var origin = [
22837
- originData[0] / col + dw,
22838
- originData[1] / row + dh,
22839
- originData[2] / col + dw,
22840
- originData[3] / row + dh,
22841
- originData[4] / col + dw,
22842
- originData[5] / row + dh,
22843
- originData[6] / col + dw,
22844
- originData[7] / row + dh
22845
- ];
22846
- atlasOffset1.push(texOffset[0] * tsx + tox, texOffset[1] * tsy + toy, texOffset[2] * tsx + tox, texOffset[3] * tsy + toy, texOffset[4] * tsx + tox, texOffset[5] * tsy + toy, texOffset[6] * tsx + tox, texOffset[7] * tsy + toy);
22847
- position1.push(origin[0] * sx, origin[1] * sy, 0.0, origin[2] * sx, origin[3] * sy, 0.0, origin[4] * sx, origin[5] * sy, 0.0, origin[6] * sx, origin[7] * sy, 0.0);
22848
- index1.push(base, 1 + base, 2 + base, 2 + base, 1 + base, 3 + base);
22849
- }
22850
- }
22851
- geometry.setAttributeData("aPos", new Float32Array(position1));
22852
- return {
22853
- index: index1,
22854
- atlasOffset: atlasOffset1
22855
- };
22856
- };
22857
22846
  _proto.fromData = function fromData(data) {
22858
22847
  BaseRenderComponent.prototype.fromData.call(this, data);
22859
22848
  var interaction = data.interaction, options = data.options;
22860
22849
  this.interaction = interaction;
22861
- this.splits = data.splits || singleSplits;
22862
- this.textureSheetAnimation = data.textureSheetAnimation;
22863
- var geometry = this.createGeometry();
22864
- this.geometry = geometry;
22865
22850
  var startColor = options.startColor || [
22866
22851
  1,
22867
22852
  1,
@@ -26140,7 +26125,6 @@ var TextComponent = /*#__PURE__*/ function(BaseRenderComponent) {
26140
26125
  _this.SCALE_FACTOR = 0.1;
26141
26126
  _this.ALPHA_FIX_VALUE = 1 / 255;
26142
26127
  _this.name = "MText" + seed$2++;
26143
- _this.geometry = _this.createGeometry();
26144
26128
  if (props) {
26145
26129
  _this.fromData(props);
26146
26130
  }
@@ -27021,11 +27005,6 @@ function colorToArr(hex, normalized) {
27021
27005
  parseInt(m[2], 16),
27022
27006
  parseInt(m[3], 16),
27023
27007
  255
27024
- ] || [
27025
- 0,
27026
- 0,
27027
- 0,
27028
- 255
27029
27008
  ];
27030
27009
  }
27031
27010
  } else if (_instanceof1(hex, Array)) {
@@ -27565,13 +27544,13 @@ function processMask(renderContent) {
27565
27544
  }
27566
27545
  if (maskMode === MaskMode.MASK) {
27567
27546
  renderContent.mask = {
27568
- mask: true
27547
+ isMask: true
27569
27548
  };
27570
27549
  currentMaskComponent = renderContent.id;
27571
27550
  } else if (maskMode === ObscuredMode.OBSCURED || maskMode === ObscuredMode.REVERSE_OBSCURED) {
27572
27551
  renderContent.mask = {
27573
- mode: maskMode,
27574
- ref: {
27552
+ inverted: maskMode === ObscuredMode.REVERSE_OBSCURED ? true : false,
27553
+ reference: {
27575
27554
  "id": currentMaskComponent
27576
27555
  }
27577
27556
  };
@@ -28395,6 +28374,7 @@ function getStandardSpriteContent(sprite, transform) {
28395
28374
  return ret;
28396
28375
  }
28397
28376
 
28377
+ var version$2 = "2.5.0-alpha.1";
28398
28378
  var v0 = /^(\d+)\.(\d+)\.(\d+)(-(\w+)\.\d+)?$/;
28399
28379
  var standardVersion = /^(\d+)\.(\d+)$/;
28400
28380
  var reverseParticle = false;
@@ -28402,6 +28382,11 @@ function getStandardJSON(json) {
28402
28382
  if (!json || typeof json !== "object") {
28403
28383
  throw new Error("Invalid input: Expected a JSON object.");
28404
28384
  }
28385
+ // 如果 JSON 中的 runtime 版本高于当前运行时版本,则发出警告
28386
+ if (checkRuntimeVersion(json)) {
28387
+ var _json_playerVersion;
28388
+ console.warn("The JSON need higher than " + ((_json_playerVersion = json.playerVersion) == null ? void 0 : _json_playerVersion.web) + " runtime version(current: " + version$2 + "). Some features may not work as expected.");
28389
+ }
28405
28390
  // 修正老版本数据中,meshItem 以及 lightItem 结束行为错误问题
28406
28391
  version22Migration(json);
28407
28392
  if (v0.test(json.version)) {
@@ -28717,6 +28702,21 @@ function getStandardItem(item, opt) {
28717
28702
  return {};
28718
28703
  }
28719
28704
  }
28705
+ /**
28706
+ * 检查 json.playerVersion.web 的版本号是否低于当前 runtime 的版本
28707
+ */ function checkRuntimeVersion(json) {
28708
+ var _ref = json.playerVersion || {}, _ref_web = _ref.web, web = _ref_web === void 0 ? "" : _ref_web;
28709
+ if (web) {
28710
+ var _v0_exec;
28711
+ var jsonVersionMatch = (_v0_exec = v0.exec(web)) != null ? _v0_exec : [];
28712
+ var _v0_exec1;
28713
+ var runtimeVersionMatch = (_v0_exec1 = v0.exec(version$2)) != null ? _v0_exec1 : [];
28714
+ var major = jsonVersionMatch[1], minor = jsonVersionMatch[2];
28715
+ var currentMajor = runtimeVersionMatch[1], currentMinor = runtimeVersionMatch[2];
28716
+ return Number(currentMajor) < Number(major) || Number(currentMajor) === Number(major) && Number(currentMinor) < Number(minor);
28717
+ }
28718
+ return false;
28719
+ }
28720
28720
 
28721
28721
  var _obj$1;
28722
28722
  /**
@@ -31624,7 +31624,7 @@ registerPlugin("sprite", SpriteLoader, VFXItem);
31624
31624
  registerPlugin("particle", ParticleLoader, VFXItem);
31625
31625
  registerPlugin("cal", CalculateLoader, VFXItem);
31626
31626
  registerPlugin("interact", InteractLoader, VFXItem);
31627
- var version$1 = "2.4.8";
31627
+ var version$1 = "2.5.0-alpha.1";
31628
31628
  logger.info("Core version: " + version$1 + ".");
31629
31629
 
31630
31630
  var _obj;
@@ -33226,8 +33226,8 @@ setMaxSpriteMeshItemCount(8);
33226
33226
  */ Mesh.create = function(engine, props) {
33227
33227
  return new ThreeMesh(engine, props);
33228
33228
  };
33229
- var version = "2.4.8";
33229
+ var version = "2.5.0-alpha.1";
33230
33230
  logger.info("THREEJS plugin version: " + version + ".");
33231
33231
 
33232
- export { AbstractPlugin, ActivationPlayable, ActivationPlayableAsset, ActivationTrack, AnimationClip, AnimationClipPlayable, Asset, AssetLoader, AssetManager, AssetService, BYTES_TYPE_MAP, BaseRenderComponent, Behaviour, BezierCurve, BezierCurvePath, BezierCurveQuat, BinaryAsset, COMPRESSED_TEXTURE, CONSTANT_MAP_BLEND, CONSTANT_MAP_DEPTH, CONSTANT_MAP_STENCIL_FUNC, CONSTANT_MAP_STENCIL_OP, COPY_FRAGMENT_SHADER, COPY_MESH_SHADER_ID, COPY_VERTEX_SHADER, CalculateLoader, Camera, CameraController, CameraVFXItemLoader, ColorCurve, ColorPropertyPlayableAsset, ColorPropertyTrack, Component, Composition, CompositionComponent, DEFAULT_FONTS, DEFAULT_FPS, Database, DestroyOptions, Downloader, EFFECTS_COPY_MESH_NAME, EVENT_TYPE_CLICK, EVENT_TYPE_TOUCH_END, EVENT_TYPE_TOUCH_MOVE, EVENT_TYPE_TOUCH_START, EffectComponent, EffectsObject, EffectsPackage, Ellipse, Engine, EventEmitter, EventSystem, Fake3DAnimationMode, Fake3DComponent, FilterMode, Float16ArrayWrapper, FloatPropertyPlayableAsset, FloatPropertyTrack, Framebuffer, GLSLVersion, GPUCapability, Geometry, GlobalUniforms, GradientValue, GraphicsPath, HELP_LINK, HitTestType, InteractComponent, InteractLoader, InteractMesh, Item, KTXTexture, LineSegments, LinearValue, MaskMode, MaskProcessor, Material, MaterialDataBlock, MaterialRenderType, MaterialTrack, Mesh, MeshCollider, ObjectBindingTrack, OrderType, PLAYER_OPTIONS_ENV_EDITOR, POST_PROCESS_SETTINGS, ParticleBehaviourPlayable, ParticleBehaviourPlayableAsset, ParticleLoader, ParticleMesh, ParticleSystem, ParticleSystemRenderer, ParticleTrack, PassTextureCache, PathSegments, PluginSystem, PolyStar, Polygon, PostProcessVolume, PropertyTrack, RENDER_PASS_NAME_PREFIX, RENDER_PREFER_LOOKUP_TEXTURE, RUNTIME_ENV, RandomSetValue, RandomValue, RandomVectorValue, RenderFrame, RenderPass, RenderPassAttachmentStorageType, RenderPassDestroyAttachmentType, RenderPassPriorityNormal, RenderPassPriorityPostprocess, RenderPassPriorityPrepare, RenderTargetHandle, RenderTextureFormat, Renderbuffer, Renderer, RendererComponent, RuntimeClip, SEMANTIC_MAIN_PRE_COLOR_ATTACHMENT_0, SEMANTIC_MAIN_PRE_COLOR_ATTACHMENT_SIZE_0, SEMANTIC_PRE_COLOR_ATTACHMENT_0, SEMANTIC_PRE_COLOR_ATTACHMENT_SIZE_0, SPRITE_VERTEX_STRIDE, Scene, SemanticMap, SerializationHelper, Shader, ShaderCompileResultStatus, ShaderFactory, ShaderType, ShaderVariant, ShapeComponent, ShapePath, SpriteColorPlayableAsset, SpriteColorTrack, SpriteComponent, SpriteLoader, StarType, StaticValue, SubCompositionPlayableAsset, SubCompositionTrack, TEMPLATE_USE_OFFSCREEN_CANVAS, TEXTURE_UNIFORM_MAP, TextComponent, TextComponentBase, TextLayout, TextLoader, TextStyle, Texture, TextureFactory, TextureLoadAction, TextureSourceType, TextureStoreAction, ThreeComposition, ThreeDisplayObject, ThreeEngine, ThreeMaterial, ThreeSpriteComponent, ThreeTextComponent, ThreeTexture, Ticker, TimelineAsset, TimelineClip, TimelinePlayable, TrackAsset, TrackSortWrapper, TrackType, Transform, TransformAnimationPlayable, TransformPlayableAsset, TransformTrack, VFXItem, ValueGetter, Vector2Curve, Vector2PropertyPlayableAsset, Vector2PropertyTrack, Vector4Curve, Vector4PropertyPlayableAsset, Vector4PropertyTrack, addByOrder, addItem, addItemWithOrder, applyMixins, assertExist, asserts, base64ToFile, blend, buildLine, calculateTranslation, canvasPool, closePointEps, colorGradingFrag, colorStopsFromGradient, colorToArr$1 as colorToArr, combineImageTemplate, createCopyShader, createGLContext, createKeyFrameMeta, createShape, createValueGetter, curveEps, decimalEqual, defaultPlugins, deserializeMipmapTexture, earcut, effectsClass, effectsClassStore, enlargeBuffer, ensureFixedNumber, ensureVec3, findPreviousRenderPass, gaussianDown_frag as gaussianDownFrag, gaussianDownHFrag, gaussianDownVFrag, gaussianUpFrag, generateEmptyTypedArray, generateGUID, generateHalfFloatTexture, generateTransparentTexture, generateWhiteTexture, getBackgroundImage, getColorFromGradientStops, getConfig, getDefaultTextureFactory, getGeometryByShape, getGeometryTriangles, getKTXTextureOptions, getKeyFrameMetaByRawValue, getMergedStore, getParticleMeshShader, getPixelRatio, getPreMultiAlpha, getStandardComposition, getStandardImage, getStandardItem, getStandardJSON, getTextureSize, glContext, glType2VertexFormatType, gpuTimer, imageDataFromColor, imageDataFromGradient, initErrors, initGLContext, integrate, interpolateColor, isAlipayMiniApp, isAndroid, isArray, isCanvas, isFunction, isIOS, isIOSByUA, isMiniProgram, isObject, isOpenHarmony, isSimulatorCellPhone, isString, isUniformStruct, isUniformStructArray, isValidFontFamily, isWebGL2, isWechatMiniApp, itemFrag, itemFrame_frag as itemFrameFrag, itemVert, loadAVIFOptional, loadBinary, loadBlob, loadImage, loadMedia, loadVideo, loadWebPOptional, logger, index as math, maxSpriteMeshItemCount, modifyMaxKeyframeShader, nearestPowerOfTwo, noop, normalizeColor, numberToFix, parsePercent$1 as parsePercent, particleFrag, particleOriginTranslateMap$1 as particleOriginTranslateMap, particleUniformTypeMap, particleVert, passRenderLevel, pluginLoaderMap, randomInRange, registerPlugin, removeItem, rotateVec2, screenMeshVert, serialize, setBlendMode, setConfig, setDefaultTextureFactory, setMaskMode, setMaxSpriteMeshItemCount, setRayFromCamera, setSideMode, setSpriteMeshMaxItemCountByGPU, setUniformValue, sortByOrder, index$1 as spec, thresholdFrag, throwDestroyedError, trailVert, translatePoint, trianglesFromRect, unregisterPlugin, valIfUndefined, value, valueDefine, vecFill, vecMulCombine, version, vertexFormatType2GLType };
33232
+ export { AbstractPlugin, ActivationPlayable, ActivationPlayableAsset, ActivationTrack, AnimationClip, AnimationClipPlayable, Asset, AssetLoader, AssetManager, AssetService, BYTES_TYPE_MAP, BaseRenderComponent, Behaviour, BezierCurve, BezierCurvePath, BezierCurveQuat, BinaryAsset, COMPRESSED_TEXTURE, CONSTANT_MAP_BLEND, CONSTANT_MAP_DEPTH, CONSTANT_MAP_STENCIL_FUNC, CONSTANT_MAP_STENCIL_OP, COPY_FRAGMENT_SHADER, COPY_MESH_SHADER_ID, COPY_VERTEX_SHADER, CalculateLoader, Camera, CameraController, CameraVFXItemLoader, ColorCurve, ColorPropertyPlayableAsset, ColorPropertyTrack, Component, Composition, CompositionComponent, DEFAULT_FONTS, DEFAULT_FPS, Database, Deferred, DestroyOptions, Downloader, EFFECTS_COPY_MESH_NAME, EVENT_TYPE_CLICK, EVENT_TYPE_TOUCH_END, EVENT_TYPE_TOUCH_MOVE, EVENT_TYPE_TOUCH_START, EffectComponent, EffectsObject, EffectsPackage, Ellipse, Engine, EventEmitter, EventSystem, Fake3DAnimationMode, Fake3DComponent, FilterMode, Float16ArrayWrapper, FloatPropertyPlayableAsset, FloatPropertyTrack, Framebuffer, GLSLVersion, GPUCapability, Geometry, GlobalUniforms, GradientValue, GraphicsPath, HELP_LINK, HitTestType, InteractComponent, InteractLoader, InteractMesh, Item, KTXTexture, LineSegments, LinearValue, MaskMode, MaskProcessor, Material, MaterialDataBlock, MaterialRenderType, MaterialTrack, Mesh, MeshCollider, ObjectBindingTrack, OrderType, PLAYER_OPTIONS_ENV_EDITOR, POST_PROCESS_SETTINGS, ParticleBehaviourPlayable, ParticleBehaviourPlayableAsset, ParticleLoader, ParticleMesh, ParticleSystem, ParticleSystemRenderer, ParticleTrack, PassTextureCache, PathSegments, PluginSystem, PolyStar, Polygon, PostProcessVolume, PropertyTrack, RENDER_PASS_NAME_PREFIX, RENDER_PREFER_LOOKUP_TEXTURE, RUNTIME_ENV, RandomSetValue, RandomValue, RandomVectorValue, RenderFrame, RenderPass, RenderPassAttachmentStorageType, RenderPassDestroyAttachmentType, RenderPassPriorityNormal, RenderPassPriorityPostprocess, RenderPassPriorityPrepare, RenderTargetHandle, RenderTextureFormat, Renderbuffer, Renderer, RendererComponent, RuntimeClip, SEMANTIC_MAIN_PRE_COLOR_ATTACHMENT_0, SEMANTIC_MAIN_PRE_COLOR_ATTACHMENT_SIZE_0, SEMANTIC_PRE_COLOR_ATTACHMENT_0, SEMANTIC_PRE_COLOR_ATTACHMENT_SIZE_0, SPRITE_VERTEX_STRIDE, Scene, SemanticMap, SerializationHelper, Shader, ShaderCompileResultStatus, ShaderFactory, ShaderType, ShaderVariant, ShapeComponent, ShapePath, SpriteColorPlayableAsset, SpriteColorTrack, SpriteComponent, SpriteLoader, StarType, StaticValue, SubCompositionPlayableAsset, SubCompositionTrack, TEMPLATE_USE_OFFSCREEN_CANVAS, TEXTURE_UNIFORM_MAP, TextComponent, TextComponentBase, TextLayout, TextLoader, TextStyle, Texture, TextureFactory, TextureLoadAction, TextureSourceType, TextureStoreAction, ThreeComposition, ThreeDisplayObject, ThreeEngine, ThreeMaterial, ThreeSpriteComponent, ThreeTextComponent, ThreeTexture, Ticker, TimelineAsset, TimelineClip, TimelinePlayable, TrackAsset, TrackSortWrapper, TrackType, Transform, TransformAnimationPlayable, TransformPlayableAsset, TransformTrack, VFXItem, ValueGetter, Vector2Curve, Vector2PropertyPlayableAsset, Vector2PropertyTrack, Vector4Curve, Vector4PropertyPlayableAsset, Vector4PropertyTrack, addByOrder, addItem, addItemWithOrder, applyMixins, assertExist, asserts, base64ToFile, blend, buildLine, calculateTranslation, canvasPool, closePointEps, colorGradingFrag, colorStopsFromGradient, colorToArr$1 as colorToArr, combineImageTemplate, createCopyShader, createGLContext, createKeyFrameMeta, createShape, createValueGetter, curveEps, decimalEqual, defaultPlugins, deserializeMipmapTexture, earcut, effectsClass, effectsClassStore, enlargeBuffer, ensureFixedNumber, ensureVec3, findPreviousRenderPass, gaussianDown_frag as gaussianDownFrag, gaussianDownHFrag, gaussianDownVFrag, gaussianUpFrag, generateEmptyTypedArray, generateGUID, generateHalfFloatTexture, generateTransparentTexture, generateWhiteTexture, getBackgroundImage, getColorFromGradientStops, getConfig, getDefaultTextureFactory, getGeometryByShape, getGeometryTriangles, getKTXTextureOptions, getKeyFrameMetaByRawValue, getMergedStore, getParticleMeshShader, getPixelRatio, getPreMultiAlpha, getStandardComposition, getStandardImage, getStandardItem, getStandardJSON, getTextureSize, glContext, glType2VertexFormatType, gpuTimer, imageDataFromColor, imageDataFromGradient, initErrors, initGLContext, integrate, interpolateColor, isAlipayMiniApp, isAndroid, isArray, isCanvas, isFunction, isIOS, isIOSByUA, isMiniProgram, isObject, isOpenHarmony, isSimulatorCellPhone, isString, isUniformStruct, isUniformStructArray, isValidFontFamily, isWebGL2, isWechatMiniApp, itemFrag, itemFrame_frag as itemFrameFrag, itemVert, loadAVIFOptional, loadBinary, loadBlob, loadImage, loadMedia, loadVideo, loadWebPOptional, logger, index as math, maxSpriteMeshItemCount, modifyMaxKeyframeShader, nearestPowerOfTwo, noop, normalizeColor, numberToFix, parsePercent$1 as parsePercent, particleFrag, particleOriginTranslateMap$1 as particleOriginTranslateMap, particleUniformTypeMap, particleVert, passRenderLevel, pluginLoaderMap, randomInRange, registerPlugin, removeItem, rotateVec2, screenMeshVert, serialize, setBlendMode, setConfig, setDefaultTextureFactory, setMaskMode, setMaxSpriteMeshItemCount, setRayFromCamera, setSideMode, setSpriteMeshMaxItemCountByGPU, setUniformValue, sortByOrder, index$1 as spec, thresholdFrag, throwDestroyedError, trailVert, translatePoint, trianglesFromRect, unregisterPlugin, valIfUndefined, value, valueDefine, vecFill, vecMulCombine, version, vertexFormatType2GLType };
33233
33233
  //# sourceMappingURL=index.mjs.map