@galacean/effects-threejs 0.0.1-alpha.0 → 0.0.1-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: v0.0.1-alpha.0
6
+ * Version: v0.0.1-alpha.1
7
7
  */
8
8
 
9
9
  import * as THREE from 'three';
@@ -6665,7 +6665,7 @@ function asserts(condition, msg) {
6665
6665
  * Name: @galacean/effects-specification
6666
6666
  * Description: Galacean Effects JSON Specification
6667
6667
  * Author: Ant Group CO., Ltd.
6668
- * Version: v0.0.1
6668
+ * Version: v0.0.2
6669
6669
  */
6670
6670
 
6671
6671
  /*********************************************/
@@ -7138,7 +7138,7 @@ var ItemEndBehavior$1;
7138
7138
  (function (ItemEndBehavior) {
7139
7139
  ItemEndBehavior[ItemEndBehavior["destroy"] = END_BEHAVIOR_DESTROY$1] = "destroy";
7140
7140
  ItemEndBehavior[ItemEndBehavior["loop"] = END_BEHAVIOR_RESTART$1] = "loop";
7141
- ItemEndBehavior[ItemEndBehavior["forward"] = END_BEHAVIOR_FREEZE$1] = "forward";
7141
+ ItemEndBehavior[ItemEndBehavior["freeze"] = END_BEHAVIOR_FREEZE$1] = "freeze";
7142
7142
  })(ItemEndBehavior$1 || (ItemEndBehavior$1 = {}));
7143
7143
  var ParentItemEndBehavior$1;
7144
7144
  (function (ParentItemEndBehavior) {
@@ -9738,12 +9738,11 @@ var VFXItem = /** @class */ (function () {
9738
9738
  */
9739
9739
  this._frozen = false;
9740
9740
  var id = props.id, name = props.name, delay = props.delay, parentId = props.parentId, endBehavior = props.endBehavior, transform = props.transform, _a = props.listIndex, listIndex = _a === void 0 ? 0 : _a, _b = props.duration, duration = _b === void 0 ? 0 : _b;
9741
- var rootTransform = composition.rootTransform;
9742
9741
  this.composition = composition;
9743
9742
  this.id = id;
9744
9743
  this.name = name;
9745
9744
  this.delay = delay;
9746
- this.transform = new Transform(__assign$1({ name: this.name }, transform), rootTransform);
9745
+ this.transform = new Transform(__assign$1({ name: this.name }, transform), composition.transform);
9747
9746
  this.parentId = parentId;
9748
9747
  this.duration = duration;
9749
9748
  this.delayInms = (delay || 0) * 1000;
@@ -9990,6 +9989,10 @@ var VFXItem = /** @class */ (function () {
9990
9989
  VFXItem.prototype.onEnd = function () {
9991
9990
  // OVERRIDE
9992
9991
  };
9992
+ VFXItem.prototype.setColor = function (r, g, b, a) {
9993
+ };
9994
+ VFXItem.prototype.setOpacity = function (opacity) {
9995
+ };
9993
9996
  /**
9994
9997
  * 获取元素显隐属性
9995
9998
  */
@@ -10041,6 +10044,50 @@ var VFXItem = /** @class */ (function () {
10041
10044
  VFXItem.prototype.getNodeTransform = function (itemId) {
10042
10045
  return this.transform;
10043
10046
  };
10047
+ /**
10048
+ * 设置元素在 3D 坐标轴上相对移动
10049
+ */
10050
+ VFXItem.prototype.translate = function (x, y, z) {
10051
+ this.transform.translate(x, y, z);
10052
+ };
10053
+ /**
10054
+ * 设置元素在 3D 坐标轴上相对旋转(角度)
10055
+ */
10056
+ VFXItem.prototype.rotate = function (x, y, z) {
10057
+ var q = [0, 0, 0, 1];
10058
+ quatFromRotation(q, x, y, z);
10059
+ quatStar(q, q);
10060
+ this.transform.rotateByQuat(q);
10061
+ };
10062
+ /**
10063
+ * 设置元素在 3D 坐标轴上相对缩放
10064
+ */
10065
+ VFXItem.prototype.scale = function (x, y, z) {
10066
+ this.transform.scaleBy(x, y, z);
10067
+ };
10068
+ /**
10069
+ * 元素的在画布上的像素位置
10070
+ */
10071
+ VFXItem.prototype.setPositionByPixel = function (x, y) {
10072
+ };
10073
+ /**
10074
+ * 设置元素在 3D 坐标轴的位置
10075
+ */
10076
+ VFXItem.prototype.setPosition = function (x, y, z) {
10077
+ this.transform.setPosition(x, y, z);
10078
+ };
10079
+ /**
10080
+ * 设置元素在 3D 坐标轴的角度
10081
+ */
10082
+ VFXItem.prototype.setRotation = function (x, y, z) {
10083
+ this.transform.setRotation(x, y, z);
10084
+ };
10085
+ /**
10086
+ * 设置元素在 3D 坐标轴的缩放
10087
+ */
10088
+ VFXItem.prototype.setScale = function (x, y, z) {
10089
+ this.transform.setScale(x, y, z);
10090
+ };
10044
10091
  /**
10045
10092
  * 获取元素包围盒
10046
10093
  * @override
@@ -10095,6 +10142,13 @@ var VFXItem = /** @class */ (function () {
10095
10142
  }
10096
10143
  this.started = false;
10097
10144
  };
10145
+ VFXItem.prototype.translateByPixel = function (x, y) {
10146
+ if (this.composition) {
10147
+ var camera = this.composition.camera;
10148
+ camera.getViewProjectionMatrix();
10149
+ camera.getInverseViewProjectionMatrix();
10150
+ }
10151
+ };
10098
10152
  /**
10099
10153
  * 销毁元素
10100
10154
  */
@@ -11154,6 +11208,21 @@ function generateHalfFloatTexture(engine, data, width, height) {
11154
11208
  });
11155
11209
  }
11156
11210
 
11211
+ var RUNTIME_ENV = 'runtime_env';
11212
+ var LOG_TYPE = 'mars';
11213
+ var RENDER_PREFER_LOOKUP_TEXTURE = 'lookup_texture';
11214
+ // 数据模板使用 offscreen canvas 绘制
11215
+ var TEMPLATE_USE_OFFSCREEN_CANVAS = 'offscreen_canvas';
11216
+ // 后处理配置相关
11217
+ var POST_PROCESS_SETTINGS = 'post_process_settings';
11218
+ var config = {};
11219
+ function getConfig(name) {
11220
+ return config[name];
11221
+ }
11222
+ function setConfig(name, value) {
11223
+ return config[name] = value;
11224
+ }
11225
+
11157
11226
  var HEADER_LEN = 12 + 13 * 4; // identifier + header elements (not including key value meta-data pairs)
11158
11227
  var COMPRESSED_2D = 0; // uses a gl.compressedTexImage2D()
11159
11228
  //const COMPRESSED_3D = 1; // uses a gl.compressedTexImage3D()
@@ -11202,15 +11271,24 @@ var KTXTexture = /** @class */ (function () {
11202
11271
  // value of zero is an indication to generate mipmaps @ runtime. Not usually allowed for compressed, so disregard.
11203
11272
  this.numberOfMipmapLevels = Math.max(1, this.numberOfMipmapLevels);
11204
11273
  if (this.pixelHeight === 0 || this.pixelDepth !== 0) {
11205
- console.warn('only 2D textures currently supported');
11274
+ console.warn({
11275
+ content: 'only 2D textures currently supported',
11276
+ type: LOG_TYPE,
11277
+ });
11206
11278
  return;
11207
11279
  }
11208
11280
  if (this.numberOfArrayElements !== 0) {
11209
- console.warn('texture arrays not currently supported');
11281
+ console.warn({
11282
+ content: 'texture arrays not currently supported',
11283
+ type: LOG_TYPE,
11284
+ });
11210
11285
  return;
11211
11286
  }
11212
11287
  if (this.numberOfFaces !== facesExpected) {
11213
- console.warn('number of faces expected' + facesExpected + ', but found ' + this.numberOfFaces);
11288
+ console.warn({
11289
+ content: 'number of faces expected' + facesExpected + ', but found ' + this.numberOfFaces,
11290
+ type: LOG_TYPE,
11291
+ });
11214
11292
  return;
11215
11293
  }
11216
11294
  // we now have a completely validated file, so could use existence of loadType as success
@@ -11897,20 +11975,6 @@ function generateEmptyTypedArray(type) {
11897
11975
  return new Float32Array(0);
11898
11976
  }
11899
11977
 
11900
- var RUNTIME_ENV = 'runtime_env';
11901
- var RENDER_PREFER_LOOKUP_TEXTURE = 'lookup_texture';
11902
- // 数据模板使用 offscreen canvas 绘制
11903
- var TEMPLATE_USE_OFFSCREEN_CANVAS = 'offscreen_canvas';
11904
- // 后处理配置相关
11905
- var POST_PROCESS_SETTINGS = 'post_process_settings';
11906
- var config = {};
11907
- function getConfig(name) {
11908
- return config[name];
11909
- }
11910
- function setConfig(name, value) {
11911
- return config[name] = value;
11912
- }
11913
-
11914
11978
  var seed$8 = 1;
11915
11979
  /**
11916
11980
  * Mesh 抽象类
@@ -15633,6 +15697,12 @@ var SpriteItem = /** @class */ (function (_super) {
15633
15697
  }
15634
15698
  return ret;
15635
15699
  };
15700
+ SpriteItem.prototype.setColor = function (r, g, b, a) {
15701
+ this.options.startColor = [r, g, b, a];
15702
+ };
15703
+ SpriteItem.prototype.setOpacity = function (opacity) {
15704
+ this.options.startColor[3] = opacity;
15705
+ };
15636
15706
  SpriteItem.prototype.getRenderData = function (_time, init) {
15637
15707
  var ret = _super.prototype.getRenderData.call(this, _time, init);
15638
15708
  var colorInc = vecFill(tempColor, 1);
@@ -15756,6 +15826,12 @@ var SpriteVFXItem = /** @class */ (function (_super) {
15756
15826
  this.transform.assignWorldTRS(pos);
15757
15827
  return pos;
15758
15828
  };
15829
+ SpriteVFXItem.prototype.setColor = function (r, g, b, a) {
15830
+ this.content.setColor(r, g, b, a);
15831
+ };
15832
+ SpriteVFXItem.prototype.setOpacity = function (opacity) {
15833
+ this.content.setOpacity(opacity);
15834
+ };
15759
15835
  /**
15760
15836
  * 获取图层包围盒的类型和世界坐标
15761
15837
  * @returns
@@ -18438,6 +18514,22 @@ var ParticleSystem = /** @class */ (function () {
18438
18514
  this.trailMesh.mesh.setVisible(visible);
18439
18515
  }
18440
18516
  };
18517
+ ParticleSystem.prototype.setOpacity = function (opacity) {
18518
+ var material = this.particleMesh.mesh.material;
18519
+ material.setVector4('uOpacityOverLifetimeValue', [1, 1, 1, opacity]);
18520
+ };
18521
+ ParticleSystem.prototype.setColor = function (r, g, b, a) {
18522
+ var material = this.particleMesh.mesh.material;
18523
+ var geometry = this.particleMesh.mesh.geometry;
18524
+ var data = geometry.getAttributeData('aRot') || [];
18525
+ for (var i = 0; i < data.length; i += 4) {
18526
+ data[0] = r;
18527
+ data[1] = g;
18528
+ data[2] = b;
18529
+ data[3] = a;
18530
+ }
18531
+ material.setVector4('uOpacityOverLifetimeValue', [r, g, b, a]);
18532
+ };
18441
18533
  ParticleSystem.prototype.setParentTransform = function (transform) {
18442
18534
  this.parentTransform = transform;
18443
18535
  };
@@ -18988,6 +19080,12 @@ var ParticleVFXItem = /** @class */ (function (_super) {
18988
19080
  content.meshes.forEach(function (mesh) { return mesh.dispose({ material: { textures: DestroyOptions.keep } }); });
18989
19081
  }
18990
19082
  };
19083
+ ParticleVFXItem.prototype.setColor = function (r, g, b, a) {
19084
+ this.content.setColor(r, g, b, a);
19085
+ };
19086
+ ParticleVFXItem.prototype.setOpacity = function (opacity) {
19087
+ this.content.setOpacity(opacity);
19088
+ };
18991
19089
  ParticleVFXItem.prototype.stopParticleEmission = function () {
18992
19090
  if (this.content) {
18993
19091
  this.content.emissionStopped = true;
@@ -20879,11 +20977,12 @@ var TextItem = /** @class */ (function (_super) {
20879
20977
  var layout = this.textLayout;
20880
20978
  var fontScale = style.fontScale;
20881
20979
  var width = (layout.width + style.fontOffset) * fontScale;
20980
+ var height = layout.height * fontScale;
20882
20981
  var fontSize = style.fontSize * fontScale;
20883
20982
  var lineHeight = layout.lineHeight * fontScale;
20884
20983
  this.char = this.text.split('');
20885
20984
  this.canvas.width = width;
20886
- this.canvas.height = layout.height * fontScale;
20985
+ this.canvas.height = height;
20887
20986
  context.clearRect(0, 0, width, this.canvas.height);
20888
20987
  // fix bug 1/255
20889
20988
  context.fillStyle = 'rgba(255, 255, 255, 0.0039)';
@@ -20948,12 +21047,16 @@ var TextItem = /** @class */ (function (_super) {
20948
21047
  }
20949
21048
  //与 toDataURL() 两种方式都需要像素读取操作
20950
21049
  var imageData = context.getImageData(0, 0, this.canvas.width, this.canvas.height);
20951
- (_a = this.mesh) === null || _a === void 0 ? void 0 : _a.mesh.material.setTexture('uSampler0', Texture.createWithData(this.engine, imageData, {
21050
+ (_a = this.mesh) === null || _a === void 0 ? void 0 : _a.mesh.material.setTexture('uSampler0', Texture.createWithData(this.engine, {
21051
+ data: new Uint8Array(imageData.data),
21052
+ width: imageData.width,
21053
+ height: imageData.height,
21054
+ }, {
20952
21055
  flipY: true,
20953
21056
  magFilter: glContext.LINEAR,
20954
21057
  minFilter: glContext.LINEAR,
20955
- wrapS: glContext.REPEAT,
20956
- wrapT: glContext.REPEAT,
21058
+ wrapS: glContext.CLAMP_TO_EDGE,
21059
+ wrapT: glContext.CLAMP_TO_EDGE,
20957
21060
  }));
20958
21061
  this.isDirty = false;
20959
21062
  };
@@ -21097,7 +21200,7 @@ var TextLoader = /** @class */ (function (_super) {
21097
21200
  return _this;
21098
21201
  }
21099
21202
  TextLoader.prototype.onCompositionDestroyed = function (composition) {
21100
- if (composition.reusable || composition.keepResource) {
21203
+ if (composition.reusable) {
21101
21204
  this.addItems.forEach(function (vfxitem) {
21102
21205
  var _a;
21103
21206
  (_a = vfxitem.content.mesh) === null || _a === void 0 ? void 0 : _a.mesh.dispose({ material: { textures: DestroyOptions.keep } });
@@ -22051,6 +22154,15 @@ var Camera = /** @class */ (function () {
22051
22154
  Camera.prototype.getModelViewProjection = function (out, model) {
22052
22155
  return mat4multiply(out, this.viewProjectionMatrix, model);
22053
22156
  };
22157
+ /**
22158
+ * 获取归一化坐标和 3D 世界坐标的换算比例
22159
+ */
22160
+ Camera.prototype.getInverseVPRatio = function () {
22161
+ var pos = [0, 0, 0];
22162
+ var nz = vec3MulMat4(pos, [0, 0, 0], this.getViewProjectionMatrix())[2];
22163
+ vec3MulMat4(pos, [1, 1, nz], this.getInverseViewProjectionMatrix());
22164
+ return [pos[0], pos[1]];
22165
+ };
22054
22166
  /**
22055
22167
  * 设置相机的旋转四元数
22056
22168
  * @param value - 旋转四元数
@@ -22241,7 +22353,7 @@ var filters = {
22241
22353
  * Name: @galacean/effects-specification
22242
22354
  * Description: Galacean Effects JSON Specification
22243
22355
  * Author: Ant Group CO., Ltd.
22244
- * Version: v0.0.1
22356
+ * Version: v0.0.2
22245
22357
  */
22246
22358
 
22247
22359
  /*********************************************/
@@ -22712,7 +22824,7 @@ var ItemEndBehavior;
22712
22824
  (function (ItemEndBehavior) {
22713
22825
  ItemEndBehavior[ItemEndBehavior["destroy"] = END_BEHAVIOR_DESTROY] = "destroy";
22714
22826
  ItemEndBehavior[ItemEndBehavior["loop"] = END_BEHAVIOR_RESTART] = "loop";
22715
- ItemEndBehavior[ItemEndBehavior["forward"] = END_BEHAVIOR_FREEZE] = "forward";
22827
+ ItemEndBehavior[ItemEndBehavior["freeze"] = END_BEHAVIOR_FREEZE] = "freeze";
22716
22828
  })(ItemEndBehavior || (ItemEndBehavior = {}));
22717
22829
  var ParentItemEndBehavior;
22718
22830
  (function (ParentItemEndBehavior) {
@@ -23580,7 +23692,7 @@ function version21Migration(json) {
23580
23692
  composition.items.forEach(function (item) {
23581
23693
  if (item.type === ItemType.null) {
23582
23694
  if (item.endBehavior === ItemEndBehavior.destroy) {
23583
- item.endBehavior = ItemEndBehavior.forward;
23695
+ item.endBehavior = ItemEndBehavior.freeze;
23584
23696
  }
23585
23697
  }
23586
23698
  });
@@ -23588,6 +23700,24 @@ function version21Migration(json) {
23588
23700
  json.version = '2.1';
23589
23701
  return json;
23590
23702
  }
23703
+ /**
23704
+ * 2.2 以下版本数据适配(mars-player@2.5.0 及以上版本支持 2.2 以下数据的适配)
23705
+ */
23706
+ function version22Migration(json) {
23707
+ var _a;
23708
+ var singleVersion = (_a = json.version) === null || _a === void 0 ? void 0 : _a.split('.');
23709
+ if (!singleVersion || Number(singleVersion[0]) > 2 || (Number(singleVersion[0]) === 2 && Number(singleVersion[1]) >= 2)) {
23710
+ return json;
23711
+ }
23712
+ json.compositions.forEach(function (composition) {
23713
+ composition.items.forEach(function (item) {
23714
+ if (item.type === ItemType.mesh || item.type === ItemType.light) {
23715
+ item.endBehavior = item.endBehavior === 1 ? ItemEndBehavior.destroy : item.endBehavior;
23716
+ }
23717
+ });
23718
+ });
23719
+ return json;
23720
+ }
23591
23721
 
23592
23722
  var v0 = /^(\d+)\.(\d+)\.(\d+)(-(\w+)\.\d+)?$/;
23593
23723
  var standardVersion = /^(\d+)\.(\d+)$/;
@@ -23597,6 +23727,8 @@ function getStandardJSON(json) {
23597
23727
  if (!json || typeof json !== 'object') {
23598
23728
  throw Error('expect a json object');
23599
23729
  }
23730
+ // 修正老版本数据中,meshItem以及lightItem结束行为错误问题
23731
+ version22Migration(json);
23600
23732
  if (v0.test(json.version)) {
23601
23733
  reverseParticle = ((_a = (/^(\d+)/).exec(json.version)) === null || _a === void 0 ? void 0 : _a[0]) === '0';
23602
23734
  return version21Migration(getStandardJSONFromV0(json));
@@ -24195,7 +24327,10 @@ var AssetManager = /** @class */ (function () {
24195
24327
  // 触发插件系统 pluginSystem 的回调 prepareResource
24196
24328
  _d.sent();
24197
24329
  totalTime = performance.now() - startTime;
24198
- console.debug("".concat(timeLabel, ": ").concat(totalTime.toFixed(4), "ms, ").concat(timeInfos.join(' ')));
24330
+ console.info({
24331
+ content: "".concat(timeLabel, ": ").concat(totalTime.toFixed(4), "ms, ").concat(timeInfos.join(' ')),
24332
+ type: LOG_TYPE,
24333
+ });
24199
24334
  window.clearTimeout(loadTimer);
24200
24335
  scene.totalTime = totalTime;
24201
24336
  scene.startTime = startTime;
@@ -24319,7 +24454,10 @@ var AssetManager = /** @class */ (function () {
24319
24454
  return [3 /*break*/, 4];
24320
24455
  case 3:
24321
24456
  _b.sent();
24322
- console.warn("Invalid fonts source: ".concat(font.fontURL));
24457
+ console.warn({
24458
+ content: "Invalid fonts source: ".concat(font.fontURL),
24459
+ type: LOG_TYPE,
24460
+ });
24323
24461
  return [3 /*break*/, 4];
24324
24462
  case 4: return [2 /*return*/];
24325
24463
  }
@@ -24726,6 +24864,9 @@ var CompVFXItem = /** @class */ (function (_super) {
24726
24864
  this.tempQueue.length = 0;
24727
24865
  this.itemsToRemove.length = 0;
24728
24866
  };
24867
+ CompVFXItem.prototype.handleVisibleChanged = function (visible) {
24868
+ this.items.forEach(function (item) { return item.setVisible(visible); });
24869
+ };
24729
24870
  CompVFXItem.prototype.getUpdateTime = function (t) {
24730
24871
  var startTime = this.startTimeInms;
24731
24872
  var now = this.timeInms;
@@ -24793,6 +24934,7 @@ var CompVFXItem = /** @class */ (function (_super) {
24793
24934
  };
24794
24935
  /**
24795
24936
  * 获取指定元素当前时刻真正起作用的父元素, 需要在元素生命周期内获取
24937
+ * @internal
24796
24938
  * @param item - 指定元素
24797
24939
  * @return 当父元素生命周期结束时,返回空
24798
24940
  */
@@ -24903,17 +25045,22 @@ var Composition = /** @class */ (function () {
24903
25045
  this.paused = false;
24904
25046
  this.lastVideoUpdateTime = 0;
24905
25047
  this.postLoaders = [];
24906
- var keepResource = props.keepResource, _b = props.reusable, reusable = _b === void 0 ? false : _b, _c = props.baseRenderOrder, baseRenderOrder = _c === void 0 ? 0 : _c, renderer = props.renderer, handlePlayerPause = props.handlePlayerPause, handleMessageItem = props.handleMessageItem, handleEnd = props.handleEnd, event = props.event, width = props.width, height = props.height;
25048
+ var _b = props.reusable, reusable = _b === void 0 ? false : _b, _c = props.speed, speed = _c === void 0 ? 1 : _c, _d = props.baseRenderOrder, baseRenderOrder = _d === void 0 ? 0 : _d, renderer = props.renderer, handlePlayerPause = props.handlePlayerPause, handleMessageItem = props.handleMessageItem, handleEnd = props.handleEnd, event = props.event, width = props.width, height = props.height;
24907
25049
  this.compositionSourceManager = new CompositionSourceManager(scene, renderer.engine);
24908
25050
  scene.jsonScene.imgUsage = undefined;
24909
- if (!keepResource) {
25051
+ if (reusable) {
25052
+ this.keepResource = true;
24910
25053
  scene.textures = undefined;
24911
25054
  scene.consumed = true;
24912
25055
  }
24913
- var _d = this.compositionSourceManager, sourceContent = _d.sourceContent, pluginSystem = _d.pluginSystem, imgUsage = _d.imgUsage, totalTime = _d.totalTime, renderLevel = _d.renderLevel;
25056
+ var _e = this.compositionSourceManager, sourceContent = _e.sourceContent, pluginSystem = _e.pluginSystem, imgUsage = _e.imgUsage, totalTime = _e.totalTime, renderLevel = _e.renderLevel;
24914
25057
  assertExist(sourceContent);
24915
25058
  var vfxItem = new CompVFXItem(sourceContent, this);
24916
25059
  var imageUsage = (!reusable && imgUsage);
25060
+ this.transform = new Transform({
25061
+ name: this.name,
25062
+ });
25063
+ vfxItem.transform = this.transform;
24917
25064
  this.globalVolume = sourceContent.globalVolume;
24918
25065
  this.width = width;
24919
25066
  this.height = height;
@@ -24924,21 +25071,19 @@ var Composition = /** @class */ (function () {
24924
25071
  this.event = event;
24925
25072
  this.statistic = { loadTime: totalTime !== null && totalTime !== void 0 ? totalTime : 0, loadStart: (_a = scene.startTime) !== null && _a !== void 0 ? _a : 0, firstFrameTime: 0 };
24926
25073
  this.reusable = reusable;
25074
+ this.speed = speed;
24927
25075
  this.renderLevel = renderLevel;
24928
- this.handlePlayerPause = handlePlayerPause;
24929
- this.handleMessageItem = handleMessageItem;
24930
- this.handleEnd = handleEnd;
24931
- this.rootTransform = new Transform();
24932
- vfxItem.transform = this.rootTransform;
24933
- this.autoRefTex = !keepResource && imageUsage && vfxItem.endBehavior !== END_BEHAVIOR_RESTART$1;
25076
+ this.autoRefTex = !this.keepResource && imageUsage && vfxItem.endBehavior !== END_BEHAVIOR_RESTART$1;
24934
25077
  this.content = vfxItem;
24935
25078
  this.name = vfxItem.name;
24936
- this.rootTransform.name = this.name;
24937
25079
  this.pluginSystem = pluginSystem;
24938
25080
  this.pluginSystem.initializeComposition(this, scene);
24939
25081
  this.camera = new Camera(this.name, __assign$1(__assign$1({}, sourceContent === null || sourceContent === void 0 ? void 0 : sourceContent.camera), { aspect: width / height }));
24940
25082
  this.url = scene.url;
24941
25083
  this.assigned = true;
25084
+ this.handlePlayerPause = handlePlayerPause;
25085
+ this.handleMessageItem = handleMessageItem;
25086
+ this.handleEnd = handleEnd;
24942
25087
  this.createRenderFrame();
24943
25088
  this.reset();
24944
25089
  }
@@ -25000,7 +25145,7 @@ var Composition = /** @class */ (function () {
25000
25145
  this.content.reset();
25001
25146
  this.prepareRender();
25002
25147
  this.reset();
25003
- this.rootTransform.setValid(true);
25148
+ this.transform.setValid(true);
25004
25149
  this.content.start();
25005
25150
  this.forwardTime(this.startTime);
25006
25151
  this.content.onUpdate(0);
@@ -25021,10 +25166,10 @@ var Composition = /** @class */ (function () {
25021
25166
  return this.renderOrder;
25022
25167
  };
25023
25168
  Composition.prototype.play = function () {
25024
- if (this.paused) {
25025
- this.resume();
25169
+ if (this.content.ended && this.reusable) {
25170
+ this.restart();
25026
25171
  }
25027
- this.content.start();
25172
+ this.gotoAndPlay(this.time);
25028
25173
  };
25029
25174
  /**
25030
25175
  * 暂停合成的播放
@@ -25039,12 +25184,16 @@ var Composition = /** @class */ (function () {
25039
25184
  this.paused = false;
25040
25185
  };
25041
25186
  Composition.prototype.gotoAndPlay = function (time) {
25187
+ this.resume();
25188
+ if (!this.content.started) {
25189
+ this.content.start();
25190
+ this.forwardTime(this.startTime);
25191
+ }
25192
+ this.forwardTime(time);
25042
25193
  };
25043
- Composition.prototype.gotoAndPause = function (time) {
25044
- };
25045
- // TODO: 待废弃
25046
- Composition.prototype.start = function () {
25047
- this.content.start();
25194
+ Composition.prototype.gotoAndStop = function (time) {
25195
+ this.gotoAndPlay(time);
25196
+ this.pause();
25048
25197
  };
25049
25198
  /**
25050
25199
  *
@@ -25061,29 +25210,29 @@ var Composition = /** @class */ (function () {
25061
25210
  };
25062
25211
  /**
25063
25212
  * 跳到指定时间点(不做任何播放行为)
25064
- *
25065
- * @param time - 时间点(秒),可正可负
25213
+ * @param time - 指定的时间
25066
25214
  */
25067
25215
  Composition.prototype.setTime = function (time) {
25216
+ var pause = this.paused;
25217
+ if (pause) {
25218
+ this.resume();
25219
+ }
25220
+ this.forwardTime(time, true);
25221
+ if (pause) {
25222
+ this.pause();
25223
+ }
25068
25224
  };
25069
- /**
25070
- * 快进/快退指定时间间隔
25071
- * @param timeInSeconds - 需要快进/快退的时间长度(秒),可正可负
25072
- */
25073
- Composition.prototype.forwardTime = function (timeInSeconds) {
25074
- var time = Math.round(timeInSeconds * 1000);
25075
- if (time) {
25076
- var reverse = time < 0;
25077
- var step = 15;
25078
- var t = Math.abs(time);
25079
- for (var ss = reverse ? -step : step; t > step; t -= step) {
25080
- this.update(ss);
25081
- }
25082
- if (t > 0) {
25083
- var ss = reverse ? -t : t;
25084
- this.update(ss);
25085
- }
25225
+ Composition.prototype.forwardTime = function (time, skipRender) {
25226
+ if (skipRender === void 0) { skipRender = false; }
25227
+ var deltaTime = (this.startTime + Math.max(0, time)) * 1000 - this.content.timeInms;
25228
+ var reverse = deltaTime < 0;
25229
+ var step = 15;
25230
+ var t = Math.abs(deltaTime);
25231
+ var ss = reverse ? -step : step;
25232
+ for (t; t > step; t -= step) {
25233
+ this.update(ss, skipRender);
25086
25234
  }
25235
+ this.update(reverse ? -t : t, skipRender);
25087
25236
  };
25088
25237
  /**
25089
25238
  * 重置状态函数
@@ -25125,14 +25274,19 @@ var Composition = /** @class */ (function () {
25125
25274
  * @returns 销毁合成标志位
25126
25275
  */
25127
25276
  Composition.prototype.shouldDispose = function () {
25277
+ if (this.reusable) {
25278
+ return false;
25279
+ }
25128
25280
  var _a = this.content, ended = _a.ended, endBehavior = _a.endBehavior;
25129
25281
  return ended && (!endBehavior || endBehavior === END_BEHAVIOR_PAUSE_AND_DESTROY$1);
25130
25282
  };
25131
25283
  /**
25132
25284
  * 合成更新,针对所有 item 的更新
25133
25285
  * @param deltaTime - 更新的时间步长
25286
+ * @param skipRender - 是否需要渲染
25134
25287
  */
25135
- Composition.prototype.update = function (deltaTime) {
25288
+ Composition.prototype.update = function (deltaTime, skipRender) {
25289
+ if (skipRender === void 0) { skipRender = false; }
25136
25290
  if (!this.assigned || this.paused) {
25137
25291
  return;
25138
25292
  }
@@ -25149,7 +25303,9 @@ var Composition = /** @class */ (function () {
25149
25303
  this.dispose();
25150
25304
  }
25151
25305
  else {
25152
- this.prepareRender();
25306
+ if (!skipRender) {
25307
+ this.prepareRender();
25308
+ }
25153
25309
  }
25154
25310
  };
25155
25311
  /**
@@ -25437,7 +25593,10 @@ var Composition = /** @class */ (function () {
25437
25593
  (_a = this.rendererOptions) === null || _a === void 0 ? void 0 : _a.emptyTexture.dispose();
25438
25594
  (_b = this.pluginSystem) === null || _b === void 0 ? void 0 : _b.destroyComposition(this);
25439
25595
  this.update = function () {
25440
- console.error("Update disposed composition: ".concat(_this.name, "."));
25596
+ console.error({
25597
+ content: "Update disposed composition: ".concat(_this.name, "."),
25598
+ type: LOG_TYPE,
25599
+ });
25441
25600
  };
25442
25601
  this.handlePlayerPause = noop;
25443
25602
  this.dispose = noop;
@@ -25456,6 +25615,37 @@ var Composition = /** @class */ (function () {
25456
25615
  Composition.prototype.setEditorTransform = function (scale, dx, dy) {
25457
25616
  this.renderFrame.editorTransform = [scale, scale, dx, dy];
25458
25617
  };
25618
+ /**
25619
+ * 合成整体在水平方向移动 x 像素,垂直方向移动 y 像素
25620
+ */
25621
+ Composition.prototype.translateByPixel = function (x, y) {
25622
+ if (!this.renderer) {
25623
+ console.warn('Can not translate position when container not assigned');
25624
+ return;
25625
+ }
25626
+ var _a = __read$1(this.camera.getInverseVPRatio(), 2), rx = _a[0], ry = _a[1];
25627
+ var width = this.renderer.getWidth();
25628
+ var height = this.renderer.getHeight();
25629
+ this.content.translate(2 * x * rx / width, -2 * y * ry / height, 0);
25630
+ };
25631
+ /**
25632
+ * 设置合成在 3D 坐标轴上相对移动
25633
+ */
25634
+ Composition.prototype.translate = function (x, y, z) {
25635
+ this.content.translate(x, y, z);
25636
+ };
25637
+ /**
25638
+ * 设置合成在 3D 坐标轴上相对旋转(角度)
25639
+ */
25640
+ Composition.prototype.rotate = function (x, y, z) {
25641
+ this.content.rotate(x, y, z);
25642
+ };
25643
+ /**
25644
+ * 设置合成在 3D 坐标轴上相对缩放
25645
+ */
25646
+ Composition.prototype.scale = function (x, y, z) {
25647
+ this.content.scale(x, y, z);
25648
+ };
25459
25649
  /**
25460
25650
  * 卸载贴图纹理方法,减少内存
25461
25651
  */
@@ -25495,14 +25685,6 @@ var Composition = /** @class */ (function () {
25495
25685
  };
25496
25686
  return Composition;
25497
25687
  }());
25498
- /**
25499
- * 根据 id 查找对应的合成,可能找不到
25500
- * @param compositions - 合成列表
25501
- * @param id - 目标合成 id
25502
- */
25503
- function getComposition(compositions, id) {
25504
- return compositions.find(function (f) { return f.id === id; });
25505
- }
25506
25688
 
25507
25689
  /**
25508
25690
  * Engine 基类,负责维护所有 GPU 资源的销毁
@@ -25608,7 +25790,10 @@ var Engine = /** @class */ (function () {
25608
25790
  info.push("Tex ".concat(this.textures.length));
25609
25791
  }
25610
25792
  if (info.length > 0) {
25611
- console.warn("Release GPU memory: ".concat(info.join(', ')));
25793
+ console.warn({
25794
+ content: "Release GPU memory: ".concat(info.join(', ')),
25795
+ type: LOG_TYPE,
25796
+ });
25612
25797
  }
25613
25798
  this.renderPasses.forEach(function (pass) {
25614
25799
  pass.dispose();
@@ -27249,8 +27434,11 @@ Geometry.create = function (engine, options) {
27249
27434
  Mesh.create = function (engine, props) {
27250
27435
  return new ThreeMesh(engine, props);
27251
27436
  };
27252
- var version = "0.0.1-alpha.0";
27253
- console.info('[Galacean Effects THREEJS] version: ' + "0.0.1-alpha.0");
27437
+ var version = "0.0.1-alpha.1";
27438
+ console.info({
27439
+ content: '[Galacean Effects THREEJS] version: ' + "0.0.1-alpha.1",
27440
+ type: LOG_TYPE,
27441
+ });
27254
27442
 
27255
- export { AbstractPlugin, AssetManager, BYTES_TYPE_MAP, BezierSegments, 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, CalculateItem, CalculateLoader, CalculateVFXItem, Camera, CameraController, CameraVFXItem, CameraVFXItemLoader, Composition, CompositionSourceManager, CurveValue, DEFAULT_FONTS, DEG2RAD, DestroyOptions, Downloader, EFFECTS_COPY_MESH_NAME, EVENT_TYPE_CLICK, EVENT_TYPE_TOUCH_END, EVENT_TYPE_TOUCH_MOVE, EVENT_TYPE_TOUCH_START, Engine, EventSystem, FILTER_NAME_NONE, FilterMode, FilterSpriteVFXItem, Float16ArrayWrapper, FrameBuffer, GLSLVersion, GPUCapability, Geometry, GlobalUniforms, GradientValue, HELP_LINK, HitTestType, InteractBehavior$1 as InteractBehavior, InteractItem, InteractLoader, InteractMesh, InteractVFXItem, KTXTexture, LineSegments, LinearValue, Material, MaterialDataBlock, MaterialRenderType, Mesh, NumberEpsilon, OrderType, PLAYER_OPTIONS_ENV_EDITOR, POST_PROCESS_SETTINGS, ParticleLoader, ParticleMesh, ParticleSystem, ParticleVFXItem, PassTextureCache, PathSegments, PluginSystem, QCanvasViewer, QText, QTextWrapMode, RENDER_PASS_NAME_PREFIX, RENDER_PREFER_LOOKUP_TEXTURE, RUNTIME_ENV, RandomSetValue, RandomValue, RandomVectorValue, RenderBuffer, RenderFrame, RenderPass, RenderPassAttachmentStorageType, RenderPassDestroyAttachmentType, RenderPassPriorityNormal, RenderPassPriorityPostprocess, RenderPassPriorityPrepare, RenderTargetHandle, RenderTextureFormat, Renderer, 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, SemanticMap, Shader, ShaderCompileResultStatus, ShaderType, SpriteItem, SpriteLoader, SpriteMesh, SpriteVFXItem, StaticValue, TEMPLATE_USE_OFFSCREEN_CANVAS, TEXTURE_UNIFORM_MAP, TextItem, TextLoader, TextMesh, TextVFXItem, Texture, TextureFactory, TextureLoadAction, TextureSourceType, TextureStoreAction, ThreeComposition, ThreeDisplayObject, ThreeMaterial, ThreeTexture, Ticker, TimelineComponent, Transform, VFXItem, VFX_ITEM_TYPE_TREE, ValueGetter, addByOrder, addItem, addItemWithOrder, alphaFrameFrag, alphaMaskFrag, assertExist, asserts, blend, bloomMixVert, bloomThresholdVert, calculateTranslation, cameraMove_frag as cameraMoveFrag, cameraMoveVert, canvasPool, clamp$1 as clamp, colorGradingFrag, colorStopsFromGradient, colorToArr$1 as colorToArr, combineImageTemplate, combineImageTemplate1, combineImageTemplate1Async, combineImageTemplate2, combineImageTemplate2Async, combineImageTemplateAsync, compatible_frag as compatibleFrag, compatible_vert as compatibleVert, convertAnchor, copyFrag, createCopyShader, createFilter, createFilterShaders, createGLContext, createKeyFrameMeta, createShaderWithMarcos, createShape, createVFXItem, createValueGetter, deepClone, defaultGlobalVolume, defaultPlugins, delayFrag, deserializeMipmapTexture, distortionFrag, distortionVert, dotInTriangle, earcut, enlargeBuffer, ensureVec3, filters, findPreviousRenderPass, gaussianDown_frag as gaussianDownFrag, gaussianDownHFrag, gaussianDownVFrag, gaussianUpFrag, generateEmptyTypedArray, generateHalfFloatTexture, getBackgroundImage, getColorFromGradientStops, getComposition, getConfig, getDefaultTemplateCanvasPool, getDefaultTextureFactory, getGeometryByShape, getGeometryTriangles, getImageItemRenderInfo, getKTXTextureOptions, getKeyFrameMetaByRawValue, getMat4TR, getMat4TRS, getParticleMeshShader, getPixelRatio, getPreMultiAlpha, getStandardComposition, getStandardImage, getStandardItem, getStandardJSON, getTextureSize, glContext, gpuTimer, imageDataFromColor, imageDataFromGradient, initErrors, initGLContext, integrate, interpolateColor, intersectRayBox, intersectRaySphere, intersectRayTriangle, isAndroid, isArray, isFunction, isIOS, isIdentityMatrix, isObject, isScene, isSimulatorCellPhone, isString, isUniformStruct, isUniformStructArray, isWebGL2, isZeroVec, item_define as itemDefine, itemFrag, itemFrameFrag, itemVert, loadBinary, loadBlob, loadImage, loadVideo, loadWebPOptional, mat3FromQuat, mat3FromRotation, mat3FromRotationZ, mat4Clone, mat4Determinate, mat4ToIdentityMatrix, mat4create, mat4fromRotationTranslationScale, mat4invert, mat4multiply, mat4perspective, maxSpriteMeshItemCount, maxSpriteTextureCount, modifyMaxKeyframeShader, nearestPowerOfTwo, noop, parsePercent$1 as parsePercent, particleFrag, particleOriginTranslateMap, particleVert, pluginLoaderMap, quatFromRotation, quatMultiply, quatStar, random, registerFilter, registerFilters, registerPlugin, removeItem, requestAsync, rotateByQuat, rotateVec2, rotationFromMat3, screenMeshVert, setBlendMode, setConfig, setDefaultTextureFactory, setMaskMode, setMaxSpriteMeshItemCount, setRayFromCamera, setSideMode, setSpriteMeshMaxFragmentTextures, setSpriteMeshMaxItemCountByGPU, setUniformValue, sortByOrder, index as spec, spriteMeshShaderFromFilter, spriteMeshShaderFromRenderInfo, spriteMeshShaderIdFromRenderInfo, thresholdFrag, throwDestroyedError, trailVert, translatePoint, trianglesFromRect, unregisterPlugin, valIfUndefined, value, valueDefine, vec3Cross, vec3MulMat3, vec3MulMat4, vec3RotateByMat4, vecAdd, vecAssign, vecDot, vecFill, vecMinus, vecMulCombine, vecMulScalar, vecNormalize, vecSquareDistance, version };
27443
+ export { AbstractPlugin, AssetManager, BYTES_TYPE_MAP, BezierSegments, 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, CalculateItem, CalculateLoader, CalculateVFXItem, Camera, CameraController, CameraVFXItem, CameraVFXItemLoader, Composition, CompositionSourceManager, CurveValue, DEFAULT_FONTS, DEG2RAD, DestroyOptions, Downloader, EFFECTS_COPY_MESH_NAME, EVENT_TYPE_CLICK, EVENT_TYPE_TOUCH_END, EVENT_TYPE_TOUCH_MOVE, EVENT_TYPE_TOUCH_START, Engine, EventSystem, FILTER_NAME_NONE, FilterMode, FilterSpriteVFXItem, Float16ArrayWrapper, FrameBuffer, GLSLVersion, GPUCapability, Geometry, GlobalUniforms, GradientValue, HELP_LINK, HitTestType, InteractBehavior$1 as InteractBehavior, InteractItem, InteractLoader, InteractMesh, InteractVFXItem, KTXTexture, LOG_TYPE, LineSegments, LinearValue, Material, MaterialDataBlock, MaterialRenderType, Mesh, NumberEpsilon, OrderType, PLAYER_OPTIONS_ENV_EDITOR, POST_PROCESS_SETTINGS, ParticleLoader, ParticleMesh, ParticleSystem, ParticleVFXItem, PassTextureCache, PathSegments, PluginSystem, QCanvasViewer, QText, QTextWrapMode, RENDER_PASS_NAME_PREFIX, RENDER_PREFER_LOOKUP_TEXTURE, RUNTIME_ENV, RandomSetValue, RandomValue, RandomVectorValue, RenderBuffer, RenderFrame, RenderPass, RenderPassAttachmentStorageType, RenderPassDestroyAttachmentType, RenderPassPriorityNormal, RenderPassPriorityPostprocess, RenderPassPriorityPrepare, RenderTargetHandle, RenderTextureFormat, Renderer, 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, SemanticMap, Shader, ShaderCompileResultStatus, ShaderType, SpriteItem, SpriteLoader, SpriteMesh, SpriteVFXItem, StaticValue, TEMPLATE_USE_OFFSCREEN_CANVAS, TEXTURE_UNIFORM_MAP, TextItem, TextLoader, TextMesh, TextVFXItem, Texture, TextureFactory, TextureLoadAction, TextureSourceType, TextureStoreAction, ThreeComposition, ThreeDisplayObject, ThreeMaterial, ThreeTexture, Ticker, TimelineComponent, Transform, VFXItem, VFX_ITEM_TYPE_TREE, ValueGetter, addByOrder, addItem, addItemWithOrder, alphaFrameFrag, alphaMaskFrag, assertExist, asserts, blend, bloomMixVert, bloomThresholdVert, calculateTranslation, cameraMove_frag as cameraMoveFrag, cameraMoveVert, canvasPool, clamp$1 as clamp, colorGradingFrag, colorStopsFromGradient, colorToArr$1 as colorToArr, combineImageTemplate, combineImageTemplate1, combineImageTemplate1Async, combineImageTemplate2, combineImageTemplate2Async, combineImageTemplateAsync, compatible_frag as compatibleFrag, compatible_vert as compatibleVert, convertAnchor, copyFrag, createCopyShader, createFilter, createFilterShaders, createGLContext, createKeyFrameMeta, createShaderWithMarcos, createShape, createVFXItem, createValueGetter, deepClone, defaultGlobalVolume, defaultPlugins, delayFrag, deserializeMipmapTexture, distortionFrag, distortionVert, dotInTriangle, earcut, enlargeBuffer, ensureVec3, filters, findPreviousRenderPass, gaussianDown_frag as gaussianDownFrag, gaussianDownHFrag, gaussianDownVFrag, gaussianUpFrag, generateEmptyTypedArray, generateHalfFloatTexture, getBackgroundImage, getColorFromGradientStops, getConfig, getDefaultTemplateCanvasPool, getDefaultTextureFactory, getGeometryByShape, getGeometryTriangles, getImageItemRenderInfo, getKTXTextureOptions, getKeyFrameMetaByRawValue, getMat4TR, getMat4TRS, getParticleMeshShader, getPixelRatio, getPreMultiAlpha, getStandardComposition, getStandardImage, getStandardItem, getStandardJSON, getTextureSize, glContext, gpuTimer, imageDataFromColor, imageDataFromGradient, initErrors, initGLContext, integrate, interpolateColor, intersectRayBox, intersectRaySphere, intersectRayTriangle, isAndroid, isArray, isFunction, isIOS, isIdentityMatrix, isObject, isScene, isSimulatorCellPhone, isString, isUniformStruct, isUniformStructArray, isWebGL2, isZeroVec, item_define as itemDefine, itemFrag, itemFrameFrag, itemVert, loadBinary, loadBlob, loadImage, loadVideo, loadWebPOptional, mat3FromQuat, mat3FromRotation, mat3FromRotationZ, mat4Clone, mat4Determinate, mat4ToIdentityMatrix, mat4create, mat4fromRotationTranslationScale, mat4invert, mat4multiply, mat4perspective, maxSpriteMeshItemCount, maxSpriteTextureCount, modifyMaxKeyframeShader, nearestPowerOfTwo, noop, parsePercent$1 as parsePercent, particleFrag, particleOriginTranslateMap, particleVert, pluginLoaderMap, quatFromRotation, quatMultiply, quatStar, random, registerFilter, registerFilters, registerPlugin, removeItem, requestAsync, rotateByQuat, rotateVec2, rotationFromMat3, screenMeshVert, setBlendMode, setConfig, setDefaultTextureFactory, setMaskMode, setMaxSpriteMeshItemCount, setRayFromCamera, setSideMode, setSpriteMeshMaxFragmentTextures, setSpriteMeshMaxItemCountByGPU, setUniformValue, sortByOrder, index as spec, spriteMeshShaderFromFilter, spriteMeshShaderFromRenderInfo, spriteMeshShaderIdFromRenderInfo, thresholdFrag, throwDestroyedError, trailVert, translatePoint, trianglesFromRect, unregisterPlugin, valIfUndefined, value, valueDefine, vec3Cross, vec3MulMat3, vec3MulMat4, vec3RotateByMat4, vecAdd, vecAssign, vecDot, vecFill, vecMinus, vecMulCombine, vecMulScalar, vecNormalize, vecSquareDistance, version };
27256
27444
  //# sourceMappingURL=index.mjs.map