@hology/core 0.0.92 → 0.0.93

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.
Files changed (55) hide show
  1. package/LICENSE.md +14 -14
  2. package/README.md +2 -2
  3. package/dist/csm.d.ts.map +1 -1
  4. package/dist/effects/vfx/vfx-actor.d.ts +1 -0
  5. package/dist/effects/vfx/vfx-actor.d.ts.map +1 -1
  6. package/dist/effects/vfx/vfx-actor.js +1 -1
  7. package/dist/effects/vfx/vfx-asset.d.ts +3 -0
  8. package/dist/effects/vfx/vfx-asset.d.ts.map +1 -1
  9. package/dist/effects/vfx/vfx-asset.js +1 -1
  10. package/dist/effects/vfx/vfx-collision-behaviour.d.ts +19 -0
  11. package/dist/effects/vfx/vfx-collision-behaviour.d.ts.map +1 -0
  12. package/dist/effects/vfx/vfx-collision-behaviour.js +4 -0
  13. package/dist/effects/vfx/vfx-defs.d.ts +24 -14
  14. package/dist/effects/vfx/vfx-defs.d.ts.map +1 -1
  15. package/dist/effects/vfx/vfx-defs.js +1 -1
  16. package/dist/effects/vfx/vfx-materializer.d.ts +2 -2
  17. package/dist/effects/vfx/vfx-materializer.d.ts.map +1 -1
  18. package/dist/effects/vfx/vfx-materializer.js +1 -1
  19. package/dist/effects/vfx/vfx-renderers.d.ts +1 -0
  20. package/dist/effects/vfx/vfx-renderers.d.ts.map +1 -1
  21. package/dist/effects/vfx/vfx-renderers.js +1 -1
  22. package/dist/gameplay/actors/actor.d.ts.map +1 -1
  23. package/dist/gameplay/actors/builtin/components/character/character-movement.d.ts.map +1 -1
  24. package/dist/gameplay/actors/builtin/components/character/character-movement.js +1 -1
  25. package/dist/gameplay/actors/builtin/components/mesh-component.d.ts.map +1 -1
  26. package/dist/gameplay/actors/builtin/components/mesh-component.js +1 -1
  27. package/dist/gameplay/actors/camera/third-person-camera-component.d.ts.map +1 -1
  28. package/dist/gameplay/actors/camera/third-person-camera-component.js +1 -1
  29. package/dist/gameplay/actors/component.d.ts.map +1 -1
  30. package/dist/gameplay/ai/build-tile.d.ts +1 -1
  31. package/dist/gameplay/ai/build-tile.d.ts.map +1 -1
  32. package/dist/gameplay/ai/dynamic-tiled-navmesh.d.ts.map +1 -1
  33. package/dist/gameplay/input/input.d.ts.map +1 -1
  34. package/dist/gameplay/services/physics/physics-system.d.ts.map +1 -1
  35. package/dist/gameplay/services/physics/physics-system.js +1 -1
  36. package/dist/gameplay/services/pointer-events.d.ts.map +1 -1
  37. package/dist/rendering.d.ts.map +1 -1
  38. package/dist/rendering.js +1 -1
  39. package/dist/scene/materializer.d.ts.map +1 -1
  40. package/dist/scene/materializer.js +1 -1
  41. package/dist/scene/model.d.ts +2 -1
  42. package/dist/scene/model.d.ts.map +1 -1
  43. package/dist/scene/model.js +1 -1
  44. package/dist/scene/objects/shapes.d.ts +1 -1
  45. package/dist/scene/objects/shapes.d.ts.map +1 -1
  46. package/dist/shader/parameter.d.ts +2 -1
  47. package/dist/shader/parameter.d.ts.map +1 -1
  48. package/dist/utils/curve.d.ts +12 -0
  49. package/dist/utils/curve.d.ts.map +1 -0
  50. package/dist/utils/curve.js +4 -0
  51. package/dist/utils/voxel-bitset.d.ts +14 -0
  52. package/dist/utils/voxel-bitset.d.ts.map +1 -0
  53. package/dist/utils/voxel-bitset.js +4 -0
  54. package/package.json +198 -122
  55. package/tsconfig.tsbuildinfo +1 -1
package/LICENSE.md CHANGED
@@ -1,15 +1,15 @@
1
- # Hology Interactive AB Limited License
2
-
3
- This software package, including all associated files and documentation (the "Software"), is licensed to you (the "Licensee") by Hology Interactive AB for use exclusively with the product "Hology Engine."
4
-
5
- By using, copying, modifying, or distributing the Software, Licensee agrees to be bound by the terms of this license.
6
-
7
- 1. License Grant: Hology Interactive AB grants Licensee a limited, non-exclusive, non-transferable license to use the Software solely for the purpose of developing and running software developed with "Hology Engine."
8
-
9
- 2. Restrictions: Licensee may not use, copy, modify, or distribute the Software for any other purpose, including but not limited to the creation of derivative works, standalone applications, or any products not directly associated with "Hology Engine."
10
-
11
- 3. Ownership: Hology Interactive AB retains all intellectual property rights to the Software. This license does not transfer ownership of the Software to Licensee.
12
-
13
- 4. Warranty Disclaimer: THE SOFTWARE IS PROVIDED "AS IS," WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL THE CREATOR OF THIS PACKAGE BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE.
14
-
1
+ # Hology Interactive AB Limited License
2
+
3
+ This software package, including all associated files and documentation (the "Software"), is licensed to you (the "Licensee") by Hology Interactive AB for use exclusively with the product "Hology Engine."
4
+
5
+ By using, copying, modifying, or distributing the Software, Licensee agrees to be bound by the terms of this license.
6
+
7
+ 1. License Grant: Hology Interactive AB grants Licensee a limited, non-exclusive, non-transferable license to use the Software solely for the purpose of developing and running software developed with "Hology Engine."
8
+
9
+ 2. Restrictions: Licensee may not use, copy, modify, or distribute the Software for any other purpose, including but not limited to the creation of derivative works, standalone applications, or any products not directly associated with "Hology Engine."
10
+
11
+ 3. Ownership: Hology Interactive AB retains all intellectual property rights to the Software. This license does not transfer ownership of the Software to Licensee.
12
+
13
+ 4. Warranty Disclaimer: THE SOFTWARE IS PROVIDED "AS IS," WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL THE CREATOR OF THIS PACKAGE BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE.
14
+
15
15
  6. Contact: For any inquiries regarding this license, please email hello@hology.app
package/README.md CHANGED
@@ -1,3 +1,3 @@
1
- # Hology Engine Core
2
-
1
+ # Hology Engine Core
2
+
3
3
  For the development with Hology Engine (https://hology.app/)
package/dist/csm.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"csm.d.ts","sourceRoot":"","sources":["../src/csm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,eAAO,MAAM,OAAO;;8BAEQ,QAAQ,UAAU,MAAM,kCAAkC;;CAmErF,CAAA;AAQD,eAAO,MAAM,SAAS;;;CAkSrB,CAAC"}
1
+ {"version":3,"file":"csm.d.ts","sourceRoot":"","sources":["../src/csm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,eAAO,MAAM,OAAO;mBACM,aAAa;8BACX,QAAQ,UAAU,KAAK,CAAC,kCAAkC;;CAmErF,CAAA;AAQD,eAAO,MAAM,SAAS;;;CAkSrB,CAAC"}
@@ -13,6 +13,7 @@ export declare class VfxActor extends BaseActor {
13
13
  private world;
14
14
  private view;
15
15
  private particleSystemContainer;
16
+ private physics;
16
17
  /**
17
18
  * Replace visual effect with its definition in an asset
18
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"vfx-actor.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-actor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAS,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAKjE,OAAO,EAAE,KAAK,EAAqB,MAAM,sBAAsB,CAAA;AAI/D,qBACa,QAAS,SAAQ,SAAS;IAErC;;OAEG;IACI,SAAS,SAAI;IACb,MAAM,UAAQ;IAErB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,WAAW,CAAU;IAE7B,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,IAAI,CAAyB;IAErC,OAAO,CAAC,uBAAuB,CAAgB;IAE/C;;OAEG;IACU,SAAS,CAAC,KAAK,EAAE,KAAK;IAyDnC,IAAI;IASJ,KAAK;IAIL,IAAI;IAiBJ,OAAO;IAYP,OAAO,CAAC,SAAS,CAAsB;IAEvC,OAAO,CAAC,GAAG,CAAK;IAEhB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAuBjC;;;;;;;;;;OAUG;IAEH,gBAAgB;IAIhB,SAAS,IAAI,IAAI;CAelB"}
1
+ {"version":3,"file":"vfx-actor.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-actor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAS,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAKjE,OAAO,EAAE,KAAK,EAAqB,MAAM,sBAAsB,CAAA;AAK/D,qBACa,QAAS,SAAQ,SAAS;IAErC;;OAEG;IACI,SAAS,SAAI;IACb,MAAM,UAAQ;IAErB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,WAAW,CAAU;IAE7B,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,IAAI,CAAyB;IAErC,OAAO,CAAC,uBAAuB,CAAgB;IAC/C,OAAO,CAAC,OAAO,CAAwB;IAEvC;;OAEG;IACU,SAAS,CAAC,KAAK,EAAE,KAAK;IAyDnC,IAAI;IASJ,KAAK;IAIL,IAAI;IAiBJ,OAAO;IAYP,OAAO,CAAC,SAAS,CAAsB;IAEvC,OAAO,CAAC,GAAG,CAAK;IAEhB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAuBjC;;;;;;;;;;OAUG;IAEH,gBAAgB;IAIhB,SAAS,IAAI,IAAI;CAelB"}
@@ -1,4 +1,4 @@
1
- import{__decorate as s}from"tslib";import*as t from"three";import{Rate as e}from"@hology/nebula";import{Actor as i,BaseActor as r}from"../../gameplay/actors/actor.js";import{inject as o}from"../../gameplay/inject.js";import{AssetLoader as a}from"../../gameplay/services/asset-loader.js";import{ViewController as m}from"../../gameplay/services/render.js";import{World as h}from"../../gameplay/services/world.js";import{DelayRate as d}from"./rates.js";import{materializeVfx as p}from"./vfx-materializer.js";let l=class extends r{constructor(){super(...arguments),this.timescale=1,this.paused=!1,this.assetLoader=o(a),this.world=o(h),this.view=o(m),this._worldPos=new t.Vector3,this.max=0}async fromAsset(s){if("vfx"!==s.type)throw"Asset must be a VFX asset but is "+s.type;null!=this.system&&(this.system.destroy(),this.system.emitters.forEach((s=>s.reset()))),this.sourceAsset=s,this.disposeSystem&&this.disposeSystem(),this.world.scene.add(this.object);const{system:t,dispose:e,container:i}=await p(this.sourceAsset,this.object,{getAsset:s=>this.assetLoader.getAsset(s),getMaterial:s=>this.assetLoader.getMaterialByAssetId(s),getTexture:s=>this.assetLoader.getTextureByAssetId(s),getMesh:s=>this.assetLoader.getModelByAssetId(s).then((s=>s.scene))},this.view);this.system=t,this.disposeSystem=e,this.particleSystemContainer=i}play(){this.paused=!1;this.system.emitters.every((s=>s.dead))&&this.restart()}pause(){this.paused=!0}stop(){this.system.emitters.forEach((s=>{const t=s.rate;t instanceof e&&(t.nextTime=1/0)}))}restart(){for(const s of this.system.emitters){const t=s.rate;t instanceof d?t.restart():t.nextTime=0,s.removeAllParticles()}}onUpdate(s){this.paused||(this.object.getWorldPosition(this._worldPos),this.system?.emitters.forEach((s=>{"world"===s._space&&s.setPosition(this._worldPos)})),this.system?.update(s*this.timescale))}getParticleCount(){return this.system?.getCount()??0}onEndPlay(){this.stop(),null!=this.disposeSystem&&this.disposeSystem()}};l=s([i()],l);export{l as VfxActor};/*
1
+ import{__decorate as s}from"tslib";import*as t from"three";import{Rate as e}from"@hology/nebula";import{Actor as i,BaseActor as r}from"../../gameplay/actors/actor.js";import{inject as o}from"../../gameplay/inject.js";import{AssetLoader as a}from"../../gameplay/services/asset-loader.js";import{ViewController as m}from"../../gameplay/services/render.js";import{World as h}from"../../gameplay/services/world.js";import{DelayRate as p}from"./rates.js";import{materializeVfx as d}from"./vfx-materializer.js";import{PhysicsSystem as l}from"../../gameplay/index.js";let c=class extends r{constructor(){super(...arguments),this.timescale=1,this.paused=!1,this.assetLoader=o(a),this.world=o(h),this.view=o(m),this.physics=o(l),this._worldPos=new t.Vector3,this.max=0}async fromAsset(s){if("vfx"!==s.type)throw"Asset must be a VFX asset but is "+s.type;null!=this.system&&(this.system.destroy(),this.system.emitters.forEach((s=>s.reset()))),this.sourceAsset=s,this.disposeSystem&&this.disposeSystem(),this.world.scene.add(this.object);const{system:t,dispose:e,container:i}=await d(this.sourceAsset,this.object,{getAsset:s=>this.assetLoader.getAsset(s),getMaterial:s=>this.assetLoader.getMaterialByAssetId(s),getTexture:s=>this.assetLoader.getTextureByAssetId(s),getMesh:s=>this.assetLoader.getModelByAssetId(s).then((s=>s.scene))},this.view,this.physics);this.system=t,this.disposeSystem=e,this.particleSystemContainer=i}play(){this.paused=!1;this.system.emitters.every((s=>s.dead))&&this.restart()}pause(){this.paused=!0}stop(){this.system.emitters.forEach((s=>{const t=s.rate;t instanceof e&&(t.nextTime=1/0)}))}restart(){for(const s of this.system.emitters){const t=s.rate;t instanceof p?t.restart():t.nextTime=0,s.removeAllParticles()}}onUpdate(s){this.paused||(this.object.getWorldPosition(this._worldPos),this.system?.emitters.forEach((s=>{"world"===s._space&&s.setPosition(this._worldPos)})),this.system?.update(s*this.timescale))}getParticleCount(){return this.system?.getCount()??0}onEndPlay(){this.stop(),null!=this.disposeSystem&&this.disposeSystem()}};c=s([i()],c);export{c as VfxActor};/*
2
2
  * Copyright (©) 2023. All rights reserved.
3
3
  * See the LICENSE.md file for details.
4
4
  */
@@ -92,7 +92,10 @@ export type EmitterData = {
92
92
  behaviours: BehaviourData[];
93
93
  children?: EmitterData[];
94
94
  output: EmitterOutput;
95
+ spawnEvent?: ParticleChildSpawnEvent;
95
96
  };
97
+ export declare const ParticleChildSpawnEvents: readonly ["collision", "start"];
98
+ export type ParticleChildSpawnEvent = (typeof ParticleChildSpawnEvents)[number];
96
99
  export type VfxAssetData = {
97
100
  /**
98
101
  * Whether particles position should be relative to local space as opposed to world space.
@@ -1 +1 @@
1
- {"version":3,"file":"vfx-asset.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-asset.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vfx-asset.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-asset.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import{SerializedParamType as t}from"../../scene/model.js";import*as e from"three";import{randomString as i}from"../../utils/math.js";export const BlendingModes=["additive","subtractive","multiply","normal"];export const ThreeBlendingMode={normal:e.NormalBlending,additive:e.AdditiveBlending,subtractive:e.SubtractiveBlending,multiply:e.MultiplyBlending};export const FlipbookModes=["clamp","loop"];export function EmitterDataConstructor(){return{id:i(),name:"Emitter",rate:{type:"continuous",count:1,time:.5,delay:0},position:[0,0,0],rotation:[0,0,0],initializers:[{id:i(),type:"lifetime",params:{duration:{type:t.Number,value:1}}}],behaviours:[],children:[],output:{type:"sprite",texture:null,color:"#ffffff",blendingMode:"normal",space:"world",softness:0}}}/*
1
+ import{SerializedParamType as t}from"../../scene/model.js";import*as e from"three";import{randomString as i}from"../../utils/math.js";export const BlendingModes=["additive","subtractive","multiply","normal"];export const ThreeBlendingMode={normal:e.NormalBlending,additive:e.AdditiveBlending,subtractive:e.SubtractiveBlending,multiply:e.MultiplyBlending};export const FlipbookModes=["clamp","loop"];export const ParticleChildSpawnEvents=["collision","start"];export function EmitterDataConstructor(){return{id:i(),name:"Emitter",rate:{type:"continuous",count:1,time:.5,delay:0},position:[0,0,0],rotation:[0,0,0],initializers:[{id:i(),type:"lifetime",params:{duration:{type:t.Number,value:1}}}],behaviours:[],children:[],output:{type:"sprite",texture:null,color:"#ffffff",blendingMode:"normal",space:"world",softness:0}}}/*
2
2
  * Copyright (©) 2023. All rights reserved.
3
3
  * See the LICENSE.md file for details.
4
4
  */
@@ -0,0 +1,19 @@
1
+ import { Behaviour, Emitter, Particle } from "@hology/nebula";
2
+ import { PhysicsSystem } from "../../gameplay/services/physics/physics-system.js";
3
+ export declare class WorldCollisionBehaviour extends Behaviour {
4
+ private physics;
5
+ private bounce;
6
+ private friction;
7
+ private lifeLoss;
8
+ /**
9
+ *
10
+ * @param physics
11
+ * @param bounce - Coefficient of restitution (0 = no bounce, 1 = full bounce).
12
+ * @param friction - If bounce is 0, friction can be used to control how much the particles slide
13
+ * against the surface. Low friction results in more sliding.
14
+ */
15
+ constructor(physics: PhysicsSystem, bounce?: number, friction?: number, lifeLoss?: number);
16
+ initialize(particle: Particle): void;
17
+ mutate(particle: Particle | Emitter, time: number, index: number): void;
18
+ }
19
+ //# sourceMappingURL=vfx-collision-behaviour.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vfx-collision-behaviour.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-collision-behaviour.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAiB,MAAM,mDAAmD,CAAA;AAuChG,qBAAa,uBAAwB,SAAQ,SAAS;IASlD,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,QAAQ;IAXlB;;;;;;OAMG;gBAEO,OAAO,EAAE,aAAa,EACtB,MAAM,GAAE,MAAU,EAClB,QAAQ,GAAE,MAAU,EACpB,QAAQ,GAAE,MAAU;IAK9B,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAgBpC,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAmHxE"}
@@ -0,0 +1,4 @@
1
+ import{Behaviour as o,Emitter as t}from"@hology/nebula";import{RayTestResult as i}from"../../gameplay/services/physics/physics-system.js";import{Color as e,Vector3 as l}from"three";export class WorldCollisionBehaviour extends o{constructor(o,t=0,i=0,e=0){super(),this.physics=o,this.bounce=t,this.friction=i,this.lifeLoss=e}initialize(o){null==o.old.rayFrom?o.old.rayFrom=new l:o.old.rayFrom.set(0,0,0),o.old.rayLength=-1,null==o.old.hitNormal?o.old.hitNormal=new l:o.old.hitNormal.set(0,0,0),o.old.hitDistance=-1}mutate(o,i,e){if(0===o.velocity.length())return;const l=.5*o.scale*.5;a.copy(o.velocity).normalize(),s.copy(o.velocity).multiplyScalar(i);const y=r.copy(o.old.velocity).normalize(),d=o.old.rayFrom,m=o.old.hitDistance,p=o.old.hitNormal,u=o.old.rayLength;if(y.dot(a)>.99&&o.position.distanceTo(d)+l<u)m>0?(n.hasHit=!0,n.distance=m-d.distanceTo(o.position),n.hitNormal.copy(p)):n.hasHit=!1;else{const t=15;c.copy(o.position).addScaledVector(o.velocity,i*t).addScaledVector(a,l),this.physics.rayTest(o.position,c,n),o.old.rayFrom.copy(o.position),o.old.hitDistance=n.hasHit?n.distance:-1,o.old.hitNormal.copy(n.hitNormal),o.old.rayLength=o.position.distanceTo(c)}var f,v,w;n.hasHit&&s.length()+l>n.distance&&(o.acceleration.set(0,0,0),this.bounce>0?(f=o.velocity,v=n.hitNormal,w=this.bounce,o.velocity.copy(f).sub(h.copy(v).multiplyScalar(2*f.dot(v))).multiplyScalar(w)):function(o,t,i=.95,e){const l=h.copy(t).multiplyScalar(o.dot(t)),s=e.sub(l).multiplyScalar(1-i)}(o.velocity,n.hitNormal,this.friction,o.velocity),o.old.hitDistance=-1,o.parent instanceof t&&o.parent.dispatch("PARTICLE_COLLISION",o),this.lifeLoss>0&&setTimeout((()=>{o.life-=this.lifeLoss+30}),30))}}const s=new l,a=new l,c=new l,n=new i,r=(new l,new l),h=new l;(new e).setRGB(Math.random(),Math.random(),Math.random());/*
2
+ * Copyright (©) 2023. All rights reserved.
3
+ * See the LICENSE.md file for details.
4
+ */
@@ -1,8 +1,9 @@
1
1
  import { Vector2, Vector3 } from "three";
2
2
  import { Behaviour, Initializer } from "@hology/nebula";
3
+ import { Curve2 } from "../../utils/curve.js";
3
4
  type HexColor = `#${string}`;
4
- export type ShapeParameterDef<T = boolean | number | string | Vector3 | Vector2 | HexColor> = {
5
- type: T extends number ? 'number' : T extends HexColor ? 'color' : T extends string ? 'string' | 'select' : T extends Vector2 ? 'vec2' : T extends Vector3 ? 'vec3' : T extends boolean ? 'boolean' : never;
5
+ export type ShapeParameterDef<T = boolean | number | string | Vector3 | Vector2 | HexColor | Curve2> = {
6
+ type: T extends number ? 'number' : T extends HexColor ? 'color' : T extends string ? 'string' | 'select' : T extends Vector2 ? 'vec2' : T extends Vector3 ? 'vec3' : T extends Curve2 ? 'curve' : T extends boolean ? 'boolean' : never;
6
7
  default: T;
7
8
  };
8
9
  type FloatParameterDef = ShapeParameterDef<number> & {
@@ -129,14 +130,14 @@ declare class InitialScaleComponentsDef extends BaseIniDef<InitialScaleComponent
129
130
  declare class ForceDef extends BaseBevDef<ForceDef> {
130
131
  parameters: {
131
132
  force: ShapeParameterDef<Vector3>;
132
- ease: SelectParameterDef<string>;
133
+ ease: ShapeParameterDef<Curve2>;
133
134
  };
134
135
  make(params?: ParamsType<this>): Behaviour;
135
136
  }
136
137
  declare class GravityDef extends BaseBevDef<GravityDef> {
137
138
  parameters: {
138
139
  gravity: FloatParameterDef;
139
- easing: SelectParameterDef<string>;
140
+ easing: ShapeParameterDef<Curve2>;
140
141
  };
141
142
  make(params?: ParamsType<this>): Behaviour;
142
143
  }
@@ -144,7 +145,7 @@ declare class ScaleDef extends BaseBevDef<ScaleDef> {
144
145
  parameters: {
145
146
  a: FloatParameterDef;
146
147
  b: FloatParameterDef;
147
- ease: SelectParameterDef<string>;
148
+ ease: ShapeParameterDef<Curve2>;
148
149
  };
149
150
  make(params?: ParamsType<this>): Behaviour;
150
151
  }
@@ -152,14 +153,14 @@ declare class RandomDriftDef extends BaseBevDef<RandomDriftDef> {
152
153
  parameters: {
153
154
  drift: ShapeParameterDef<Vector3>;
154
155
  delay: FloatParameterDef;
155
- ease: SelectParameterDef<string>;
156
+ ease: ShapeParameterDef<Curve2>;
156
157
  };
157
158
  make(params?: ParamsType<this>): Behaviour;
158
159
  }
159
160
  declare class RotateDef extends BaseBevDef<RotateDef> {
160
161
  parameters: {
161
162
  rotation: ShapeParameterDef<Vector3>;
162
- ease: SelectParameterDef<string>;
163
+ ease: ShapeParameterDef<Curve2>;
163
164
  };
164
165
  make(params?: ParamsType<this>): Behaviour;
165
166
  }
@@ -179,7 +180,7 @@ declare class ChangeColorDef extends BaseBevDef<ChangeColorDef> {
179
180
  parameters: {
180
181
  a: ShapeParameterDef<`#${string}`>;
181
182
  b: ShapeParameterDef<`#${string}`>;
182
- ease: SelectParameterDef<string>;
183
+ ease: ShapeParameterDef<Curve2>;
183
184
  };
184
185
  make(params?: ParamsType<this>): Behaviour;
185
186
  }
@@ -187,7 +188,7 @@ declare class ChangeOpacityDef extends BaseBevDef<ChangeOpacityDef> {
187
188
  parameters: {
188
189
  a: FloatParameterDef;
189
190
  b: FloatParameterDef;
190
- ease: SelectParameterDef<string>;
191
+ ease: ShapeParameterDef<Curve2>;
191
192
  };
192
193
  make(params?: ParamsType<this>): Behaviour;
193
194
  }
@@ -203,7 +204,7 @@ declare class RepulsionDef extends BaseBevDef<RepulsionDef> {
203
204
  target: ShapeParameterDef<Vector3>;
204
205
  force: FloatParameterDef;
205
206
  radius: FloatParameterDef;
206
- easing: SelectParameterDef<string>;
207
+ easing: ShapeParameterDef<Curve2>;
207
208
  };
208
209
  make(params?: ParamsType<this>): Behaviour;
209
210
  }
@@ -212,14 +213,14 @@ declare class AttractionDef extends BaseBevDef<AttractionDef> {
212
213
  target: ShapeParameterDef<Vector3>;
213
214
  force: FloatParameterDef;
214
215
  radius: FloatParameterDef;
215
- easing: SelectParameterDef<string>;
216
+ easing: ShapeParameterDef<Curve2>;
216
217
  };
217
218
  make(params?: ParamsType<this>): Behaviour;
218
219
  }
219
220
  declare class MoveToDef extends BaseBevDef<MoveToDef> {
220
221
  parameters: {
221
222
  target: ShapeParameterDef<Vector3>;
222
- ease: SelectParameterDef<string>;
223
+ ease: ShapeParameterDef<Curve2>;
223
224
  };
224
225
  make(params?: ParamsType<this>): Behaviour;
225
226
  }
@@ -229,6 +230,14 @@ declare class LinearDampingDef extends BaseBevDef<LinearDampingDef> {
229
230
  };
230
231
  make(params?: ParamsType<this>): Behaviour;
231
232
  }
233
+ declare class WorldCollisionDef extends BaseBevDef<WorldCollisionDef> {
234
+ parameters: {
235
+ friction: FloatParameterDef;
236
+ bounce: FloatParameterDef;
237
+ lifeLoss: FloatParameterDef;
238
+ };
239
+ make(params?: ParamsType<this>): Behaviour;
240
+ }
232
241
  declare const vfxInitializsers: {
233
242
  lifetime: LifetimeDef;
234
243
  positionPoint: PositionPointDef;
@@ -260,12 +269,13 @@ declare const vfxBehaviours: {
260
269
  moveTo: MoveToDef;
261
270
  linearDamping: LinearDampingDef;
262
271
  followParent: FollowParentDef;
272
+ worldCollision: WorldCollisionDef;
263
273
  };
264
274
  export type LibraryVfxInitalizerType = keyof typeof vfxInitializsers;
265
275
  export declare const VfxInitializserLibrary: Record<LibraryVfxInitalizerType, InitializerDefinition>;
266
- export declare const VfxInitializserLibraryKeys: ("rotation" | "mass" | "scale" | "randomDirection" | "velocity" | "lifetime" | "positionPoint" | "positionBox" | "positionSphere" | "positionLine" | "randomRotation" | "scaleComponents" | "randomScale" | "radialVelocity")[];
276
+ export declare const VfxInitializserLibraryKeys: LibraryVfxInitalizerType[];
267
277
  export type LibraryVfxBehaviourType = keyof typeof vfxBehaviours;
268
278
  export declare const VfxBehaviourLibrary: Record<LibraryVfxBehaviourType, BehaviourDefinition>;
269
- export declare const VfxBehaviourLibraryKeys: ("scale" | "force" | "gravity" | "repulsion" | "attraction" | "randomDrift" | "rotate" | "rotateAdd" | "changeColor" | "changeOpacity" | "vortex" | "moveTo" | "linearDamping" | "followParent")[];
279
+ export declare const VfxBehaviourLibraryKeys: LibraryVfxBehaviourType[];
270
280
  export {};
271
281
  //# sourceMappingURL=vfx-defs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vfx-defs.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-defs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vfx-defs.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-defs.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AACjE,OAAO,EAAqB,SAAS,EAAgE,WAAW,EAAsG,MAAM,gBAAgB,CAAA;AAK5O,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAM7C,KAAK,QAAQ,GAAG,IAAI,MAAM,EAAE,CAAA;AAE5B,MAAM,MAAM,iBAAiB,CAAC,CAAC,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,IAAI;IACrG,IAAI,EAAE,CAAC,SAAS,MAAM,GAAG,QAAQ,GAC3B,CAAC,SAAS,QAAQ,GAAG,OAAO,GAC5B,CAAC,SAAS,MAAM,GAAG,QAAQ,GAAC,QAAQ,GACpC,CAAC,SAAS,OAAO,GAAG,MAAM,GAC1B,CAAC,SAAS,OAAO,GAAG,MAAM,GAC1B,CAAC,SAAS,MAAM,GAAG,OAAO,GAC1B,CAAC,SAAS,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC;CACZ,CAAA;AAED,KAAK,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG;IACnD,KAAK,EAAE,OAAO,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG;IACzD,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAA;CACpB,CAAA;AAED,UAAU,qBAAqB;IAC7B,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,WAAW,CAAA;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;CAC/C;AAED,UAAU,mBAAmB;IAC3B,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,SAAS,CAAA;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;CAC/C;AAED,uBAAe,UAAU,CAAC,CAAC,SAAS,UAAU,CAAE,YAAW,mBAAmB;IAC5E,QAAQ,CAAC,UAAU,MAAC;IACpB,KAAK,CAAC,MAAM,GAAE,UAAU,CAAC,CAAC,CAAM,GAAG,SAAS;IAI5C,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS;CAChD;AAED,uBAAe,UAAU,CAAC,CAAC,SAAS,UAAU,CAAE,YAAW,qBAAqB;IAC9E,QAAQ,CAAC,UAAU,MAAC;IACpB,KAAK,CAAC,MAAM,GAAE,UAAU,CAAC,CAAC,CAAM,GAAG,WAAW;IAI9C,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,WAAW;CAClD;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;CAC/C,CAAA;AAED,KAAK,UAAU,CAAC,CAAC,SAAS,UAAU,IAAI,OAAO,CAAC;KAC7C,CAAC,IAAI,MAAM,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;CAC5D,CAAC,CAAA;AA2DF,cAAM,WAAY,SAAQ,UAAU,CAAC,WAAW,CAAC;IAC/C,UAAU;;MAET;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,WAAW;CAGjD;AAED,cAAM,WAAY,SAAQ,UAAU,CAAC,WAAW,CAAC;IAC/C,UAAU;;MAET;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,WAAW;CAIjD;AAED,cAAM,gBAAiB,SAAQ,UAAU,CAAC,gBAAgB,CAAC;IACzD,UAAU;;MAET;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,WAAW;CAIjD;AAED,cAAM,cAAe,SAAQ,UAAU,CAAC,cAAc,CAAC;IACrD,UAAU;;;MAGT;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,WAAW;CAKjD;AAED,cAAM,iBAAkB,SAAQ,UAAU,CAAC,cAAc,CAAC;IACxD,UAAU;;;MAGT;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,WAAW;CAIjD;AAED,cAAM,eAAgB,SAAQ,UAAU,CAAC,eAAe,CAAC;IACvD,UAAU;;;MAGT;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,WAAW;CAKjD;AAGD,cAAM,iBAAkB,SAAQ,UAAU,CAAC,iBAAiB,CAAC;IAC3D,UAAU;;;;MAIT;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,WAAW;CAGjD;AAID,cAAM,kBAAmB,SAAQ,UAAU,CAAC,kBAAkB,CAAC;IAC7D,UAAU;;MAET;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,WAAW;CAGjD;AAED,cAAM,OAAQ,SAAQ,UAAU,CAAC,OAAO,CAAC;IACvC,UAAU;;MAET;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,WAAW;CAGjD;AAED,cAAM,WAAY,SAAQ,UAAU,CAAC,WAAW,CAAC;IAC/C,UAAU;;MAET;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,WAAW;CAIjD;AAED,cAAM,iBAAkB,SAAQ,UAAU,CAAC,iBAAiB,CAAC;IAC3D,UAAU,KAET;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,WAAW;CAGjD;AAED,cAAM,eAAgB,SAAQ,UAAU,CAAC,eAAe,CAAC;IACvD,UAAU;;MAET;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,WAAW;CAGjD;AAGD,cAAM,cAAe,SAAQ,UAAU,CAAC,cAAc,CAAC;IACrD,UAAU;;;MAGT;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,WAAW;CAGjD;AAGD,cAAM,yBAA0B,SAAQ,UAAU,CAAC,yBAAyB,CAAC;IAC3E,UAAU;;MAET;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,WAAW;CAGjD;AAED,cAAM,QAAS,SAAQ,UAAU,CAAC,QAAQ,CAAC;IACzC,UAAU;;;MAGT;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,SAAS;CAG/C;AAED,cAAM,UAAW,SAAQ,UAAU,CAAC,UAAU,CAAC;IAC7C,UAAU;;;MAGT;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,SAAS;CAG/C;AAED,cAAM,QAAS,SAAQ,UAAU,CAAC,QAAQ,CAAC;IACzC,UAAU;;;;MAIT;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,SAAS;CAG/C;AAED,cAAM,cAAe,SAAQ,UAAU,CAAC,cAAc,CAAC;IACrD,UAAU;;;;MAIT;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,SAAS;CAG/C;AAgBD,cAAM,SAAU,SAAQ,UAAU,CAAC,SAAS,CAAC;IAC3C,UAAU;;;MAGT;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,SAAS;CAI/C;AAED,cAAM,YAAa,SAAQ,UAAU,CAAC,SAAS,CAAC;IAC9C,UAAU;;MAET;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,SAAS;CAM/C;AAWD,cAAM,eAAgB,SAAQ,UAAU,CAAC,eAAe,CAAC;IACvD,UAAU;;MAET;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,SAAS;CAG/C;AAUD,cAAM,cAAe,SAAQ,UAAU,CAAC,cAAc,CAAC;IACrD,UAAU;;;;MAIT;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,SAAS;CAG/C;AAED,cAAM,gBAAiB,SAAQ,UAAU,CAAC,gBAAgB,CAAC;IACzD,UAAU;;;;MAIT;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,SAAS;CAG/C;AAED,cAAM,SAAU,SAAQ,UAAU,CAAC,SAAS,CAAC;IAC3C,UAAU;;;MAGT;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,SAAS;CAG/C;AAED,cAAM,YAAa,SAAQ,UAAU,CAAC,YAAY,CAAC;IACjD,UAAU;;;;;MAMT;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,SAAS;CAI/C;AAED,cAAM,aAAc,SAAQ,UAAU,CAAC,aAAa,CAAC;IACnD,UAAU;;;;;MAMT;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,SAAS;CAI/C;AAGD,cAAM,SAAU,SAAQ,UAAU,CAAC,SAAS,CAAC;IAC3C,UAAU;;;MAGT;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,SAAS;CAG/C;AAED,cAAM,gBAAiB,SAAQ,UAAU,CAAC,gBAAgB,CAAC;IACzD,UAAU;;MAET;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,SAAS;CAK/C;AAED,cAAM,iBAAkB,SAAQ,UAAU,CAAC,iBAAiB,CAAC;IAC3D,UAAU;;;;MAMT;IACD,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,IAAI,CAAM,GAAG,SAAS;CAK/C;AAeD,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;CAerB,CAAA;AAED,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;CAwBlB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,gBAAgB,CAAA;AACpE,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,wBAAwB,EAAE,qBAAqB,CAAoB,CAAA;AAC/G,eAAO,MAAM,0BAA0B,EAA0C,wBAAwB,EAAE,CAAA;AAE3G,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,aAAa,CAAA;AAChE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,uBAAuB,EAAE,mBAAmB,CAAiB,CAAA;AACtG,eAAO,MAAM,uBAAuB,EAAuC,uBAAuB,EAAE,CAAA"}
@@ -1,4 +1,4 @@
1
- import{MathUtils as e,Vector2 as r,Vector3 as t}from"three";import{Alpha as s,Attraction as n,BoxZone as a,Color as o,ease as i,Force as c,Gravity as u,Life as p,LineZone as m,Mass as d,Position as l,RadialVelocity as w,RandomDrift as x,Repulsion as f,Rotate as y,Vector3D as h}from"@hology/nebula";import{AxisDirection as k,AxisPlane as g,Disperse as b,FollowParent as v,LinearDamping as z,MoveOverLife as L,OrientAlongVelocity as T,RotatePosition as R,Scale as V}from"./behaviours.js";import{AdditiveVelocity as j,InitialScale as B,InitialScaleComponents as O,RandomDirection as A,RandomRotation as C,RandomScale as D,Rotation as I}from"./initializsers.js";import{PointZone as K,SphereZone as P}from"./zones.js";class S{build(e={}){const r=M(e,this.parameters);return this.make(r)}}class q{build(e={}){const r=M(e,this.parameters);return this.make(r)}}function E(e,r,t){return{type:"number",default:e,float:!0,min:r,max:t}}function F(e){return{type:"vec3",default:(new t).fromArray(e)}}function G(e){return{type:"color",default:e}}function H(e,r){return{type:"select",opts:e,default:r}}function J(){return H(Array.from(Object.keys(i)).map((e=>e.substring(4))),"Linear")}function M(e,r){const t={};for(let s in r)null==e[s]?t[s]=r[s].default:t[s]=e[s];return t}function N(e){return null!=e?i["ease"+e]:i.easeLinear}const Q={lifetime:new class extends q{constructor(){super(...arguments),this.parameters={duration:E(1,0,1e5)}}make(e={}){return new p(e.duration)}},positionPoint:new class extends q{constructor(){super(...arguments),this.parameters={position:F([0,0,0])}}make(e={}){const{x:r,y:t,z:s}=e.position;return new l(new K(r,t,s))}},positionBox:new class extends q{constructor(){super(...arguments),this.parameters={position:F([0,0,0]),dimensions:F([0,0,0])}}make(e={}){const{x:r,y:t,z:s}=e.position,{x:n,y:o,z:i}=e.dimensions;return new l(new a(r,t,s,n,o,i))}},positionSphere:new class extends q{constructor(){super(...arguments),this.parameters={position:F([0,0,0]),radius:E(1)}}make(e={}){const{x:r,y:t,z:s}=e.position;return new l(new P(r,t,s,e.radius))}},positionLine:new class extends q{constructor(){super(...arguments),this.parameters={a:F([0,0,0]),b:F([0,0,1])}}make(e={}){const{x:r,y:t,z:s}=e.a,{x:n,y:a,z:o}=e.b;return new l(new m(r,t,s,n,a,o))}},rotation:new class extends q{constructor(){super(...arguments),this.parameters={rotation:F([0,0,0])}}make(e={}){const{x:r,y:s,z:n}=e.rotation;return new I(new t(r,s,n))}},randomRotation:new class extends q{constructor(){super(...arguments),this.parameters={}}make(e={}){return new C}},scale:new class extends q{constructor(){super(...arguments),this.parameters={scale:E(1)}}make(e={}){return new B(e.scale)}},scaleComponents:new class extends q{constructor(){super(...arguments),this.parameters={scale:F([1,1,1])}}make(e={}){return new O(e.scale)}},randomScale:new class extends q{constructor(){super(...arguments),this.parameters={min:E(1),max:E(1)}}make(e={}){return new D(e.min,e.max)}},mass:new class extends q{constructor(){super(...arguments),this.parameters={min:E(1)}}make(e={}){return new d(e.min)}},velocity:new class extends q{constructor(){super(...arguments),this.parameters={velocity:F([0,0,0])}}make(e={}){const{x:r,y:s,z:n}=e.velocity;return new j(new t(r,s,n))}},radialVelocity:new class extends q{constructor(){super(...arguments),this.parameters={speed:E(1),direction:F([0,1,0]),spread:E(0)}}make(e={}){return new w(e.speed,new h(e.direction.x,e.direction.y,e.direction.z),e.spread)}},randomDirection:new class extends q{constructor(){super(...arguments),this.parameters={speed:E(1)}}make(e={}){return new A(e.speed)}}},U={force:new class extends S{constructor(){super(...arguments),this.parameters={force:F([0,0,0]),ease:J()}}make(e={}){return new c(e.force.x,e.force.y,e.force.z,void 0,N(e.ease))}},gravity:new class extends S{constructor(){super(...arguments),this.parameters={gravity:E(8),easing:J()}}make(e={}){return new u(e.gravity,void 0,N(e.easing))}},repulsion:new class extends S{constructor(){super(...arguments),this.parameters={target:F([0,0,0]),force:E(1),radius:E(1),easing:J()}}make(e={}){const r=new h(e.target.x,e.target.y,e.target.z);return new f(r,e.force,e.radius,void 0,N(e.easing))}},attraction:new class extends S{constructor(){super(...arguments),this.parameters={target:F([0,0,0]),force:E(1),radius:E(1),easing:J()}}make(e={}){const r=new h(e.target.x,e.target.y,e.target.z);return new n(r,e.force,e.radius,void 0,N(e.easing))}},scale:new class extends S{constructor(){super(...arguments),this.parameters={a:E(1),b:E(1),ease:J()}}make(e={}){return new V(e.a,e.b,N(e.ease))}},randomDrift:new class extends S{constructor(){super(...arguments),this.parameters={drift:F([1,1,1]),delay:E(0),ease:J()}}make(e={}){return new x(e.drift.x,e.drift.y,e.drift.z,e.delay,void 0,N(e.ease))}},rotate:new class extends S{constructor(){super(...arguments),this.parameters={rotation:F([0,0,0]),ease:J()}}make(r={}){const{x:t,y:s,z:n}=r.rotation;return new y(e.degToRad(t),e.degToRad(s),e.degToRad(n),void 0,N(r.ease))}},rotateAdd:new class extends S{constructor(){super(...arguments),this.parameters={rotation:F([0,0,0])}}make(r={}){const{x:t,y:s,z:n}=r.rotation,a=new y(e.degToRad(t),e.degToRad(s),e.degToRad(n),void 0);return a.rotationType="add",a}},changeColor:new class extends S{constructor(){super(...arguments),this.parameters={a:G("#ffffff"),b:G("#ffffff"),ease:J()}}make(e={}){return new o(e.a,e.b,void 0,N(e.ease))}},changeOpacity:new class extends S{constructor(){super(...arguments),this.parameters={a:E(1,0,1),b:E(0,0,1),ease:J()}}make(e={}){return new s(e.a,e.b,void 0,N(e.ease))}},vortex:new class extends S{constructor(){super(...arguments),this.parameters={axis:F([0,1,0]),amount:E(1)}}make(e={}){return new R(e.axis,e.amount)}},moveTo:new class extends S{constructor(){super(...arguments),this.parameters={target:F([0,1,0]),ease:J()}}make(e={}){return new L(e.target.x,e.target.y,e.target.z,N(e.ease))}},linearDamping:new class extends S{constructor(){super(...arguments),this.parameters={factor:E(.1,0,1)}}make(e={}){return new z(e.factor)}},followParent:new class extends S{constructor(){super(...arguments),this.parameters={speed:E(1)}}make(e={}){return new v(e.speed)}}};export const VfxInitializserLibrary=Q;export const VfxInitializserLibraryKeys=Object.keys(VfxInitializserLibrary);export const VfxBehaviourLibrary=U;export const VfxBehaviourLibraryKeys=Object.keys(VfxBehaviourLibrary);/*
1
+ import{MathUtils as e,Vector2 as r,Vector3 as t}from"three";import{Alpha as s,Attraction as n,BoxZone as a,Color as o,ease as i,Force as c,Gravity as u,Life as m,LineZone as p,Mass as d,Position as l,RadialVelocity as w,RandomDrift as x,Repulsion as f,Rotate as h,Vector3D as y}from"@hology/nebula";import{AxisDirection as k,AxisPlane as g,Disperse as v,FollowParent as b,LinearDamping as z,MoveOverLife as L,OrientAlongVelocity as T,RotatePosition as j,Scale as R}from"./behaviours.js";import{AdditiveVelocity as V,InitialScale as B,InitialScaleComponents as C,RandomDirection as D,RandomRotation as I,RandomScale as O,Rotation as A}from"./initializsers.js";import{PointZone as K,SphereZone as P}from"./zones.js";import{WorldCollisionBehaviour as S}from"./vfx-collision-behaviour.js";import{Curve2 as Y}from"../../utils/curve.js";class q{build(e={}){const r=M(e,this.parameters);return this.make(r)}}class E{build(e={}){const r=M(e,this.parameters);return this.make(r)}}function F(e,r,t){return{type:"number",default:e,float:!0,min:r,max:t}}function G(e){return{type:"vec3",default:(new t).fromArray(e)}}function H(e){return{type:"color",default:e}}function J(){return{type:"curve",default:Y.linear()}}function M(e,r){const t={};for(let s in r)null==e[s]?t[s]=r[s].default:t[s]=e[s];return t}function N(e){return r=>e.getY(r)}const Q={lifetime:new class extends E{constructor(){super(...arguments),this.parameters={duration:F(1,0,1e5)}}make(e={}){return new m(e.duration)}},positionPoint:new class extends E{constructor(){super(...arguments),this.parameters={position:G([0,0,0])}}make(e={}){const{x:r,y:t,z:s}=e.position;return new l(new K(r,t,s))}},positionBox:new class extends E{constructor(){super(...arguments),this.parameters={position:G([0,0,0]),dimensions:G([0,0,0])}}make(e={}){const{x:r,y:t,z:s}=e.position,{x:n,y:o,z:i}=e.dimensions;return new l(new a(r,t,s,n,o,i))}},positionSphere:new class extends E{constructor(){super(...arguments),this.parameters={position:G([0,0,0]),radius:F(1)}}make(e={}){const{x:r,y:t,z:s}=e.position;return new l(new P(r,t,s,e.radius))}},positionLine:new class extends E{constructor(){super(...arguments),this.parameters={a:G([0,0,0]),b:G([0,0,1])}}make(e={}){const{x:r,y:t,z:s}=e.a,{x:n,y:a,z:o}=e.b;return new l(new p(r,t,s,n,a,o))}},rotation:new class extends E{constructor(){super(...arguments),this.parameters={rotation:G([0,0,0])}}make(e={}){const{x:r,y:s,z:n}=e.rotation;return new A(new t(r,s,n))}},randomRotation:new class extends E{constructor(){super(...arguments),this.parameters={}}make(e={}){return new I}},scale:new class extends E{constructor(){super(...arguments),this.parameters={scale:F(1)}}make(e={}){return new B(e.scale)}},scaleComponents:new class extends E{constructor(){super(...arguments),this.parameters={scale:G([1,1,1])}}make(e={}){return new C(e.scale)}},randomScale:new class extends E{constructor(){super(...arguments),this.parameters={min:F(1),max:F(1)}}make(e={}){return new O(e.min,e.max)}},mass:new class extends E{constructor(){super(...arguments),this.parameters={min:F(1)}}make(e={}){return new d(e.min)}},velocity:new class extends E{constructor(){super(...arguments),this.parameters={velocity:G([0,0,0])}}make(e={}){const{x:r,y:s,z:n}=e.velocity;return new V(new t(r,s,n))}},radialVelocity:new class extends E{constructor(){super(...arguments),this.parameters={speed:F(1),direction:G([0,1,0]),spread:F(0)}}make(e={}){return new w(e.speed,new y(e.direction.x,e.direction.y,e.direction.z),e.spread)}},randomDirection:new class extends E{constructor(){super(...arguments),this.parameters={speed:F(1)}}make(e={}){return new D(e.speed)}}},U={force:new class extends q{constructor(){super(...arguments),this.parameters={force:G([0,0,0]),ease:J()}}make(e={}){return new c(e.force.x,e.force.y,e.force.z,void 0,N(e.ease))}},gravity:new class extends q{constructor(){super(...arguments),this.parameters={gravity:F(8),easing:J()}}make(e={}){return new u(e.gravity,void 0,N(e.easing))}},repulsion:new class extends q{constructor(){super(...arguments),this.parameters={target:G([0,0,0]),force:F(1),radius:F(1),easing:J()}}make(e={}){const r=new y(e.target.x,e.target.y,e.target.z);return new f(r,e.force,e.radius,void 0,N(e.easing))}},attraction:new class extends q{constructor(){super(...arguments),this.parameters={target:G([0,0,0]),force:F(1),radius:F(1),easing:J()}}make(e={}){const r=new y(e.target.x,e.target.y,e.target.z);return new n(r,e.force,e.radius,void 0,N(e.easing))}},scale:new class extends q{constructor(){super(...arguments),this.parameters={a:F(1),b:F(1),ease:J()}}make(e={}){return new R(e.a,e.b,N(e.ease))}},randomDrift:new class extends q{constructor(){super(...arguments),this.parameters={drift:G([1,1,1]),delay:F(0),ease:J()}}make(e={}){return new x(e.drift.x,e.drift.y,e.drift.z,e.delay,void 0,N(e.ease))}},rotate:new class extends q{constructor(){super(...arguments),this.parameters={rotation:G([0,0,0]),ease:J()}}make(r={}){const{x:t,y:s,z:n}=r.rotation;return new h(e.degToRad(t),e.degToRad(s),e.degToRad(n),void 0,N(r.ease))}},rotateAdd:new class extends q{constructor(){super(...arguments),this.parameters={rotation:G([0,0,0])}}make(r={}){const{x:t,y:s,z:n}=r.rotation,a=new h(e.degToRad(t),e.degToRad(s),e.degToRad(n),void 0);return a.rotationType="add",a}},changeColor:new class extends q{constructor(){super(...arguments),this.parameters={a:H("#ffffff"),b:H("#ffffff"),ease:J()}}make(e={}){return new o(e.a,e.b,void 0,N(e.ease))}},changeOpacity:new class extends q{constructor(){super(...arguments),this.parameters={a:F(1,0,1),b:F(0,0,1),ease:J()}}make(e={}){return new s(e.a,e.b,void 0,N(e.ease))}},vortex:new class extends q{constructor(){super(...arguments),this.parameters={axis:G([0,1,0]),amount:F(1)}}make(e={}){return new j(e.axis,e.amount)}},moveTo:new class extends q{constructor(){super(...arguments),this.parameters={target:G([0,1,0]),ease:J()}}make(e={}){return new L(e.target.x,e.target.y,e.target.z,N(e.ease))}},linearDamping:new class extends q{constructor(){super(...arguments),this.parameters={factor:F(.1,0,1)}}make(e={}){return new z(e.factor)}},followParent:new class extends q{constructor(){super(...arguments),this.parameters={speed:F(1)}}make(e={}){return new b(e.speed)}},worldCollision:new class extends q{constructor(){super(...arguments),this.parameters={friction:F(1,0,1),bounce:F(1,0,1),lifeLoss:F(0,0)}}make(e={}){return new S(null,e.bounce,e.friction,e.lifeLoss)}}};export const VfxInitializserLibrary=Q;export const VfxInitializserLibraryKeys=Object.keys(VfxInitializserLibrary);export const VfxBehaviourLibrary=U;export const VfxBehaviourLibraryKeys=Object.keys(VfxBehaviourLibrary);/*
2
2
  * Copyright (©) 2023. All rights reserved.
3
3
  * See the LICENSE.md file for details.
4
4
  */
@@ -2,7 +2,7 @@ import System from "@hology/nebula";
2
2
  import * as THREE from 'three';
3
3
  import { Object3D } from "three";
4
4
  import { NodeShaderMaterial } from "three-shader-graph";
5
- import { ViewController } from '../../gameplay/index.js';
5
+ import { PhysicsSystem, ViewController } from '../../gameplay/index.js';
6
6
  import { Asset, VfxAsset } from '../../scene/model.js';
7
7
  export type VfxAssetProvider = {
8
8
  getAsset(assetId: string): Promise<Asset>;
@@ -10,7 +10,7 @@ export type VfxAssetProvider = {
10
10
  getMesh(assetId: string): Promise<THREE.Object3D>;
11
11
  getMaterial(assetId: string): Promise<THREE.Material>;
12
12
  };
13
- export declare function materializeVfx(asset: VfxAsset, target: Object3D, assetProvider: VfxAssetProvider, view: ViewController): Promise<{
13
+ export declare function materializeVfx(asset: VfxAsset, target: Object3D, assetProvider: VfxAssetProvider, view: ViewController, physics: PhysicsSystem): Promise<{
14
14
  container: THREE.Object3D<THREE.Object3DEventMap>;
15
15
  system: System;
16
16
  dispose: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"vfx-materializer.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-materializer.ts"],"names":[],"mappings":"AAAA,OAAO,MAAiE,MAAM,gBAAgB,CAAC;AAC/F,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAmD,kBAAkB,EAA4T,MAAM,oBAAoB,CAAC;AAEna,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAavD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;IACzC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACnD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IACjD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;CACtD,CAAA;AAGD,wBAAsB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc;;;;GAyD5H;AA0WD,qBAAa,wBAAyB,SAAQ,kBAAkB;IAE9D,IAAI,KAAK,IAGQ,KAAK,CAAC,mBAAmB,CADzC;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,mBAAmB,EAEzC;IACD,IAAI,QAAQ,IAGQ,MAAM,CADzB;IACD,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAEzB;CACF;AAyPD,qBAAa,WAAW,CAAC,CAAC;IAIZ,OAAO,CAAC,OAAO;IAF3B,SAAS,EAAE,CAAC,EAAE,CAAK;gBAEC,OAAO,EAAE,MAAM,CAAC;IAEpC;;;OAGG;IACH,GAAG,IAAI,CAAC;IAQR;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,CAAC;IAMnB,OAAO;CAGR"}
1
+ {"version":3,"file":"vfx-materializer.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-materializer.ts"],"names":[],"mappings":"AAAA,OAAO,MAAiE,MAAM,gBAAgB,CAAC;AAC/F,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAmD,kBAAkB,EAA4T,MAAM,oBAAoB,CAAC;AAEna,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAExE,OAAO,EAAE,KAAK,EAAuB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAgB5E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;IACzC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACnD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IACjD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;CACtD,CAAA;AAGD,wBAAsB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa;;;;GAyDpJ;AA2YD,qBAAa,wBAAyB,SAAQ,kBAAkB;IAE9D,IAAI,KAAK,IAGQ,KAAK,CAAC,mBAAmB,CADzC;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,mBAAmB,EAEzC;IACD,IAAI,QAAQ,IAGQ,MAAM,CADzB;IACD,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAEzB;CACF;AAgQD,qBAAa,WAAW,CAAC,CAAC;IAIZ,OAAO,CAAC,OAAO;IAF3B,SAAS,EAAE,CAAC,EAAE,CAAK;gBAEC,OAAO,EAAE,MAAM,CAAC;IAEpC;;;OAGG;IACH,GAAG,IAAI,CAAC;IAQR;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,CAAC;IAMnB,OAAO;CAGR"}
@@ -1,4 +1,4 @@
1
- import e,{Behaviour as t,Body as i,Emitter as n,Rate as o}from"@hology/nebula";import*as s from"three";import{Object3D as r}from"three";import{AttributeVec3Node as a,AttributeVec4Node as l,NodeShaderMaterial as c,RgbNode as m,UniformFloatNode as u,UniformVec3Node as p,Vec3ExpressionNode as d,Vec4Node as h,attributeFloat as f,attributeVec3 as g,attributeVec4 as w,attributes as y,float as v,glslFunction as A,lambertMaterial as x,log as b,pow as E,rgb as M,rgba as P,saturate as I,standardMaterial as S,textureSampler2d as R,transformed as B,uniforms as z,varying as V,varyingAttributes as k,varyingVec3 as T,varyingVec4 as j}from"three-shader-graph";import{prepareShapeParameters as C}from"../../scene/materializer.js";import{ShapeLibrary as F}from"../../scene/objects/shapes.js";import{fragmentLinearEyeDepth as D,linearEyeDepth as Q}from"../../shader-nodes/depth.js";import{particleEnergyUniformName as U,particleTimeUniformName as H,particleUniforms as q,particleVelcoityUniformName as G}from"../../shader-nodes/particle.js";import{sampleFlipbook as J}from"../../shader-nodes/texture-sequence.js";import{DefaultInitializer as W}from"./initializsers.js";import{DelayRate as N,OnceRate as L}from"./rates.js";import{StretchedSprite as K}from"./stretched-sprite.js";import{ThreeBlendingMode as O}from"./vfx-asset.js";import{VfxBehaviourLibrary as X,VfxInitializserLibrary as Y}from"./vfx-defs.js";import{MultiRenderer as Z}from"./vfx-renderers.js";export async function materializeVfx(t,i,n,o){let a=i;for(;null!=a.parent;)a=a.parent;const l=new r;l.name="particle system local",i.add(l);const c=new r;c.name="particle system world",a.add(c);const m=new Z(c,l,s,o),u=new e;return(await Promise.all(t.vfx.emitters.map((async e=>{const t=await _(e,n,u);return t.setParentRecursive(u),t.emit()})))).forEach((e=>u.addEmitter(e))),u.addRenderer(m).emit({onEnd:()=>{console.log("ended")}}),{container:c,system:u,dispose:()=>{c.removeFromParent(),l.removeFromParent(),m.dispose()}}}async function _(e,t,n){const m=function(e){let t;switch(e.rate.type){case"continuous":t=new N(e.rate.delay??0,e.rate.count,e.rate.time);break;case"once":t=new L(e.rate.delay??0,e.rate.count);break;default:console.warn(`Failed to configure rate for emitter: ${JSON.stringify(e)}`),t=new o(0,1/0)}return t}(e);let T;switch(e.output.type){case"sprite":T=new i(await async function(e,t){const i=null!=e.texture?await t.getTexture(e.texture):$,n=R(i);let o=n.sample(k.uv);e.flipbook?.enabled&&(o=J(n,y.uv,e.flipbook.columns,e.flipbook.rows,q.time,e.flipbook.fps,e.flipbook.mode));const r=new u("rotation",0),a=new p("color").rgb,l=(new p("opacity").rgb,Q.subtract(D).divide(Q));let c=o.x;if("number"==typeof e.softness&&e.softness>0){const t=E(l,v(e.softness));c=c.multiply(t)}const m=A(h,{position:B.position,modelViewMatrix:z.modelViewMatrix,rotation:r},"\n vec2 center = vec2(0.5, 0.5);\n vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n // Using scale form instance matrix instead of modelMatrix\n vec2 scale;\n scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\n // This times 2 on scale seem to make it appear like when using regular sprites. \n // Not sure if this is correct though.\n vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * (scale);\n\n vec2 rotatedPosition;\n rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\n mvPosition.xy += rotatedPosition;\n return projectionMatrix * mvPosition;\n ");var d=new SpriteNodeShaderMaterial({color:P(a,c).multiply(o),transparent:!0,position:m,uniforms:{color:{value:new s.Color(e.color)}}});d.blending=O[e.blendingMode]??s.NormalBlending;const f=new s.Mesh(new s.PlaneGeometry(1,1),d);return f.name="sprite",f}(e.output,t));break;case"stretchedSprite":T=new i(await async function(e,t){const i=null!=e.texture?await t.getTexture(e.texture):$,n=R(i).sample(k.uv),o=j(new l("color")),r=o.rgb;let a=o.w;if("number"==typeof e.softness&&e.softness>0){const t=Q.subtract(D).divide(b(Q)),i=E(t,v(e.softness));a=I(a.multiply(i))}const c=A(h,{position:y.position,offset:w("offset"),modelViewMatrix:z.modelViewMatrix,velocity:w("velocity"),size:g("size"),rotation:f("rotation")},"\n float lengthFactor = velocity.w;\n float avgSize = (size.x + size.y) * 0.5;\n\n vec4 mvPosition = modelViewMatrix * vec4( offset , 1.0 );\n vec3 viewVelocity = normalMatrix * velocity.xyz;\n float vlength = length(viewVelocity); \n mvPosition.xyz += position.y * normalize(cross(mvPosition.xyz, viewVelocity)) * avgSize; \n mvPosition.xyz -= (position.x + 0.5) * viewVelocity * (1.0 + lengthFactor / vlength) * avgSize;\n return projectionMatrix * mvPosition;\n ");var m=new SpriteNodeShaderMaterial({color:P(r,a).multiply(n),transparent:!0,position:c,uniforms:{}});m.blending=O[e.blendingMode]??s.NormalBlending;const u=new K(new s.PlaneGeometry(1,1),m);return u.scaleFactor=e.scale,u}(e.output,t));break;case"shape":T=new i(await async function(e,t){const i=F[e.shape];if(null==i)return console.error(`No shape with type ${e.shape}`),new r;const n=C(e.params??{}),o=i.geometry(n),l=null!=e.material?function(e){const t=V(new d("instanceColor")).rgb,i=V(new a("particleData")).x;let n;if(e instanceof s.MeshStandardMaterial||e instanceof s.MeshLambertMaterial||e instanceof s.MeshBasicMaterial){let o=t.multiply(M(e.color));null!=e.map&&(o=o.multiply(R(e.map).sample(k.uv).rgb)),e instanceof s.MeshStandardMaterial?n=new c({color:S({color:o,emissive:M(e.emissive),emissiveIntensity:v(e.emissiveIntensity),roughness:e.roughness,metalness:e.metalness}).rgb.rgba(1),transparent:e.transparent}):e instanceof s.MeshLambertMaterial?n=new c({color:x({color:o}).rgb.rgba(i),transparent:e.transparent}):e instanceof s.MeshBasicMaterial&&(n=new c({color:o,transparent:e.transparent}))}null!=n&&(!0===e.userData?.hasBloom&&null!=n&&(n.userData.hasBloom=!0),n.side=e.side,n.transparent=e.transparent);return n??e}(await t.getMaterial(e.material)):function(){const e=V(new d("instanceColor")).rgb,t=V(new a("particleData")).x;return new c({color:x({color:e}).rgb.rgba(t),transparent:!0})}();return new s.Mesh(o,l)}(e.output,t));break;case"mesh":T=new i(await async function(e,t){if(null==e.assetId)return console.warn("Can't use mesh as particle without asset id"),new r;const i=await t.getMesh(e.assetId),n=await t.getAsset(e.assetId),o=[];if(null!=n.materialAssignments)for(const e of n.materialAssignments)i.traverse((i=>{i instanceof s.Mesh&&i.material instanceof s.Material&&i.material.color instanceof s.Color&&(i.material.name!=e.name&&null!=e.name||"#"+i.material.color.getHexString()!==e.color||o.push(t.getMaterial(e.materialId).then((e=>i.material=e))))}));return await Promise.all(o),i.traverse((e=>{})),i}(e.output,t));break;case"trail":T=new i({type:"trail",taper:e.output.taper,headGeometry:null,dragTexture:!1,color:e.output.color,colorEnd:e.output.colorEnd,length:e.output.length,opacityStart:e.output.opacityStart,opacityEnd:e.output.opacityEnd,bloom:e.output.bloom});break;default:console.error("Failed to create particly system body: "+JSON.stringify(e))}const U=new te;U.parent=n,U.setRate(m),U._space=e.output.space;const H=await Promise.all(e.initializers.filter((e=>null!=Y[e.type])).map((async e=>{const t=Y[e.type],i=await C(e.params??{});return t.build(i)})));H.push(T,new W),U.addInitializers(H);const G=await Promise.all(e.behaviours.filter((e=>null!=X[e.type])).map((async e=>{const t=X[e.type],i=await C(e.params??{});return t.build(i)})));G.push(new ee),U.addBehaviours(G);for(const i of e.children){const e=await _(i,t,n),o=new EmitterPool((()=>{const t=e.clone();return t.onExpired=()=>{const e=U.childEmitters.findIndex((e=>e.id===t.id));-1!=e&&U.childEmitters.splice(e,1),o.release(t)},t})),s=U.eventDispatcher,r=new Map;U.bindEmitterEvent=!0,s.addEventListener("PARTICLE_DEAD",(e=>{const t=r.get(e.id);if(null!=t){const e=U.childEmitters.findIndex((e=>e.id===t.id));null!=e&&t.stopEmit()}})),s.addEventListener("PARTICLE_CREATED",(e=>{const t=o.get();t.age=0,t.totalEmitTimes=-1,t.particles.length=0,t.currentEmitTime=0,t.cID=0,U.childEmitters.push(t),r.set(e.id,t),t.parentParticle=e,t.emit()}))}return U}const $=(new s.TextureLoader).load("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJkSURBVHjaxJeJbusgEEW94S1L//83X18M2MSuLd2pbqc4wZGqRLrKBsyZhQHny7Jk73xVL8xpVhWrcmiB5lX+6GJ5YgQ2owbAm8oIwH1VgKZUmGcRqKGGPgtEQQAzGR8hQ59fAmhJHSAagigJ4E7GPWRXOYC6owAd1JM6wDQPADyMWUqZRMqmAojHp1Vn6EQQEgUNMJLnUjMyJsM49wygBkAPw9dVFwXRkncCIIW3GRgoTQUZn6HxCMAFEFd8TwEQ78X4rHbILoAUmeT+RFG4UhQ6MiIAE4W/UsYFjuVjAIa2nIY4q1R0GFtQWG3E84lqw2GO2QOoCKBVu0BAPgDSU0eUDjjQenNkV/AW/pWChhpMTelo1a64AOKM30vk18GzTHXCNtI/Knz3DFBgsUqBGIjTInXRY1yA9xkVoqW5tVq3pDR9A0hfF5BSARmVnh7RMDCaIdcNgbPBkgzn1Bu+SfIEFSpSBmkxyrMicb0fAEuCZrWnN89veA/4XcakrPcjBWzkTuLjlbfTQPOlBhz+HwkqqPXmPQDdrQItxE1moGof1S74j/8txk8EHhTQrAE8qlwfqS5yukm1x/rAJ9Jiaa6nyATqD78aUVBhFo8b1V4DdTXdCW+IxA1zB4JhiOhZMEWO1HqnvdoHZ4FAMIhV9REF8FiUm0jsYPEJx/Fm/N8OhH90HI9YRHesWbXXZwAShU8qThe7H8YAuJmw5yOd989uRINKRTJAhoF8jbqrHKfeCYdIISZfSq26bk/K+yO3YvfKrVgiwQBHnwt8ynPB25+M8hceTt/ybPhnryJ78+tLgAEAuCFyiQgQB30AAAAASUVORK5CYII=");export class SpriteNodeShaderMaterial extends c{get color(){return this.uniforms.color.value}set color(e){this.uniforms.color.value=new s.Color(e)}get rotation(){return this.uniforms.rotation.value}set rotation(e){this.uniforms.rotation.value=e}}(new s.SpriteMaterial).rotation;class ee extends t{initialize(e){if(e.body instanceof s.Mesh){const t=e.body.material;t instanceof c&&(null!=t.uniforms[U]||null!=t.uniforms[H]||null!=t.uniforms[G])&&(e.body.material=t.clone())}}mutate(e,t,i){if(this.energize(e,t),e.target instanceof s.Mesh){const t=e.target.material;t instanceof c&&(null!=t.uniforms[U]&&(t.uniforms[U].value=this.energy),null!=t.uniforms[H]&&(t.uniforms[H].value=e.age),null!=t.uniforms[G]&&(t.uniforms[G].value=e.velocity))}}}class te extends n{constructor(){super(...arguments),this.childEmitters=[],this.bindEmitterEvent=!1,this.onExpired=()=>{}}update(e){if(!this.isEmitting&&0===this.particles.length)return;this.age+=e,(this.dead||this.age>=this.life)&&this.destroy(),this.generate(e),this.integrate(e);let t=this.particles.length;for(;t--;){const e=this.particles[t];e.dead&&(this.system&&this.system.dispatch("PARTICLE_DEAD",e),this.bindEmitterEvent&&this.dispatch("PARTICLE_DEAD",e),this.system.pool.expire(e.reset()),this.particles.splice(t,1))}if(this.updateEmitterBehaviours(e),this.isEmitting||0!==this.particles.length)for(const t of this.childEmitters)null!=t.parentParticle?t.position.copy(t.parentParticle.position):t.setPosition(this.position),t.update(e);else this.onExpired()}clone(){const e=new te;return e.setRate(this.rate.clone()),e.behaviours=this.behaviours,e.initializers=this.initializers,e._space=this._space,e.body=this.body,e.parent=this.parent,e.system=this.system,e}setParentRecursive(e){this.system=e,this.childEmitters.forEach((t=>t.setParentRecursive(e)))}}export class EmitterPool{constructor(e){this.creator=e,this.instances=[]}get(){0==this.instances.length&&this.instances.push(this.creator());return this.instances.pop()}release(e){this.instances.push(e)}dispose(){this.instances.length=0}}/*
1
+ import e,{Behaviour as t,Body as i,Emitter as n,Rate as s}from"@hology/nebula";import*as o from"three";import{Object3D as r}from"three";import{AttributeVec3Node as a,AttributeVec4Node as l,NodeShaderMaterial as c,RgbNode as m,UniformFloatNode as p,UniformVec3Node as u,Vec3ExpressionNode as h,Vec4Node as d,attributeFloat as f,attributeVec3 as y,attributeVec4 as g,attributes as w,float as v,glslFunction as A,lambertMaterial as x,log as E,pow as b,rgb as M,rgba as P,saturate as I,standardMaterial as S,textureSampler2d as R,transformed as C,uniforms as B,varying as k,varyingAttributes as z,varyingVec3 as T,varyingVec4 as V}from"three-shader-graph";import{prepareShapeParameters as j}from"../../scene/materializer.js";import{SerializedParamType as D}from"../../scene/model.js";import{ShapeLibrary as F}from"../../scene/objects/shapes.js";import{fragmentLinearEyeDepth as Q,linearEyeDepth as U}from"../../shader-nodes/depth.js";import{particleEnergyUniformName as L,particleTimeUniformName as H,particleUniforms as q,particleVelcoityUniformName as G}from"../../shader-nodes/particle.js";import{sampleFlipbook as J}from"../../shader-nodes/texture-sequence.js";import{DefaultInitializer as N}from"./initializsers.js";import{DelayRate as W,OnceRate as O}from"./rates.js";import{StretchedSprite as K}from"./stretched-sprite.js";import{ThreeBlendingMode as X}from"./vfx-asset.js";import{VfxBehaviourLibrary as Y,VfxInitializserLibrary as Z}from"./vfx-defs.js";import{MultiRenderer as _}from"./vfx-renderers.js";import{WorldCollisionBehaviour as $}from"./vfx-collision-behaviour.js";export async function materializeVfx(t,i,n,s,a){let l=i;for(;null!=l.parent;)l=l.parent;const c=new r;c.name="particle system local",i.add(c);const m=new r;m.name="particle system world",l.add(m);const p=new _(m,c,o,s),u=new e;return(await Promise.all(t.vfx.emitters.map((async e=>{const t=await ee(e,n,u,a);return t.setParentRecursive(u),t.emit()})))).forEach((e=>u.addEmitter(e))),u.addRenderer(p).emit({onEnd:()=>{}}),{container:m,system:u,dispose:()=>{m.removeFromParent(),c.removeFromParent(),p.dispose()}}}async function ee(e,t,n,m){const T=function(e){let t;switch(e.rate.type){case"continuous":t=new W(e.rate.delay??0,e.rate.count,e.rate.time);break;case"once":t=new O(e.rate.delay??0,e.rate.count);break;default:console.warn(`Failed to configure rate for emitter: ${JSON.stringify(e)}`),t=new s(0,1/0)}return t}(e);let L;switch(e.output.type){case"sprite":L=new i(await async function(e,t){const i=null!=e.texture?await t.getTexture(e.texture):te,n=R(i);let s=n.sample(z.uv);e.flipbook?.enabled&&(s=J(n,w.uv,e.flipbook.columns,e.flipbook.rows,q.time,e.flipbook.fps,e.flipbook.mode));const r=new p("rotation",0),a=new u("color").rgb,l=(new u("opacity").rgb,U.subtract(Q).divide(U));let c=s.x;if("number"==typeof e.softness&&e.softness>0){const t=b(l,v(e.softness));c=c.multiply(t)}const m=A(d,{position:C.position,modelViewMatrix:B.modelViewMatrix,rotation:r},"\n vec2 center = vec2(0.5, 0.5);\n vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n // Using scale form instance matrix instead of modelMatrix\n vec2 scale;\n scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\n // This times 2 on scale seem to make it appear like when using regular sprites. \n // Not sure if this is correct though.\n vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * (scale);\n\n vec2 rotatedPosition;\n rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\n mvPosition.xy += rotatedPosition;\n return projectionMatrix * mvPosition;\n ");var h=new SpriteNodeShaderMaterial({color:P(a,c).multiply(s),transparent:!0,position:m,uniforms:{color:{value:new o.Color(e.color)}}});h.blending=X[e.blendingMode]??o.NormalBlending;const f=new o.Mesh(new o.PlaneGeometry(1,1),h);return f.name="sprite",f}(e.output,t));break;case"stretchedSprite":L=new i(await async function(e,t){const i=null!=e.texture?await t.getTexture(e.texture):te,n=R(i).sample(z.uv),s=V(new l("color")),r=s.rgb;let a=s.w;if("number"==typeof e.softness&&e.softness>0){const t=U.subtract(Q).divide(E(U)),i=b(t,v(e.softness));a=I(a.multiply(i))}const c=A(d,{position:w.position,offset:g("offset"),modelViewMatrix:B.modelViewMatrix,velocity:g("velocity"),size:y("size"),rotation:f("rotation")},"\n float lengthFactor = velocity.w;\n float avgSize = (size.x + size.y) * 0.5;\n\n vec4 mvPosition = modelViewMatrix * vec4( offset , 1.0 );\n vec3 viewVelocity = normalMatrix * velocity.xyz;\n float vlength = length(viewVelocity); \n mvPosition.xyz += position.y * normalize(cross(mvPosition.xyz, viewVelocity)) * avgSize; \n mvPosition.xyz -= (position.x + 0.5) * viewVelocity * (1.0 + lengthFactor / vlength) * avgSize;\n return projectionMatrix * mvPosition;\n ");var m=new SpriteNodeShaderMaterial({color:P(r,a).multiply(n),transparent:!0,position:c,uniforms:{}});m.blending=X[e.blendingMode]??o.NormalBlending;const p=new K(new o.PlaneGeometry(1,1),m);return p.scaleFactor=e.scale,p}(e.output,t));break;case"shape":L=new i(await async function(e,t){const i=F[e.shape];if(null==i)return console.error(`No shape with type ${e.shape}`),new r;const n=j(e.params??{}),s=i.geometry(n),l=null!=e.material?function(e){const t=k(new h("instanceColor")).rgb,i=k(new a("particleData")).x;let n;if(e instanceof o.MeshStandardMaterial||e instanceof o.MeshLambertMaterial||e instanceof o.MeshBasicMaterial){let s=t.multiply(M(e.color));null!=e.map&&(s=s.multiply(R(e.map).sample(z.uv).rgb)),e instanceof o.MeshStandardMaterial?n=new c({color:S({color:s,emissive:M(e.emissive),emissiveIntensity:v(e.emissiveIntensity),roughness:e.roughness,metalness:e.metalness}).rgb.rgba(1),transparent:e.transparent}):e instanceof o.MeshLambertMaterial?n=new c({color:x({color:s}).rgb.rgba(i),transparent:e.transparent}):e instanceof o.MeshBasicMaterial&&(n=new c({color:s,transparent:e.transparent}))}null!=n&&(!0===e.userData?.hasBloom&&null!=n&&(n.userData.hasBloom=!0),n.side=e.side,n.transparent=e.transparent);return n??e}(await t.getMaterial(e.material)):function(){const e=k(new h("instanceColor")).rgb,t=k(new a("particleData")).x;return new c({color:x({color:e}).rgb.rgba(t),transparent:!0})}();return new o.Mesh(s,l)}(e.output,t));break;case"mesh":L=new i(await async function(e,t){if(null==e.assetId)return console.warn("Can't use mesh as particle without asset id"),new r;const i=await t.getMesh(e.assetId),n=await t.getAsset(e.assetId),s=[];if(null!=n.materialAssignments)for(const e of n.materialAssignments)i.traverse((i=>{i instanceof o.Mesh&&i.material instanceof o.Material&&i.material.color instanceof o.Color&&(i.material.name!=e.name&&null!=e.name||"#"+i.material.color.getHexString()!==e.color||s.push(t.getMaterial(e.materialId).then((e=>i.material=e))))}));return await Promise.all(s),i.traverse((e=>{})),i}(e.output,t));break;case"trail":L=new i({type:"trail",taper:e.output.taper,headGeometry:null,dragTexture:!1,color:e.output.color,colorEnd:e.output.colorEnd,length:e.output.length,opacityStart:e.output.opacityStart,opacityEnd:e.output.opacityEnd,bloom:e.output.bloom});break;default:console.error("Failed to create particly system body: "+JSON.stringify(e))}const H=new ne;H.parent=n,H.setRate(T),H._space=e.output.space;const G=await Promise.all(e.initializers.filter((e=>null!=Z[e.type])).map((async e=>{const t=Z[e.type],i=await j(e.params??{});return t.build(i)})));G.push(L,new N),H.addInitializers(G);const _=await Promise.all(e.behaviours.filter((e=>null!=Y[e.type])).map((async e=>{const t=Y[e.type];for(const[i,n]of Object.entries(e.params))t.parameters&&null!=t.parameters[i]&&"curve"===t.parameters[i].type&&n.type!==D.Curve&&(n.type=D.Curve);const i=await j(e.params??{});return t.build(i)})).sort(((e,t)=>e instanceof $?1:0)));_.push(new ie);for(const e of _)e instanceof $&&(e.physics=m);H.addBehaviours(_);for(const i of e.children){const e=await ee(i,t,n,m),s=new EmitterPool((()=>{const t=e.clone();return t.onExpired=()=>{const e=H.childEmitters.findIndex((e=>e.id===t.id));-1!=e&&H.childEmitters.splice(e,1),s.release(t)},t})),o=H.eventDispatcher,r=new Map;H.bindEmitterEvent=!0,o.addEventListener("PARTICLE_DEAD",(e=>{const t=r.get(e.id);if(null!=t){const e=H.childEmitters.findIndex((e=>e.id===t.id));null!=e&&t.stopEmit()}}));let a="PARTICLE_CREATED";if("spawnEvent"in i)switch(i.spawnEvent){case"collision":a="PARTICLE_COLLISION";break;case"start":a="PARTICLE_CREATED"}o.addEventListener(a,(e=>{const t=s.get();t.age=0,t.totalEmitTimes=-1,t.particles.length=0,t.currentEmitTime=0,t.cID=0,t.eventDispatcher.removeAllEventListeners(),H.childEmitters.push(t),r.set(e.id,t),t.parentParticle=e,t.system=H.system,t.emit()}))}return H}const te=(new o.TextureLoader).load("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJkSURBVHjaxJeJbusgEEW94S1L//83X18M2MSuLd2pbqc4wZGqRLrKBsyZhQHny7Jk73xVL8xpVhWrcmiB5lX+6GJ5YgQ2owbAm8oIwH1VgKZUmGcRqKGGPgtEQQAzGR8hQ59fAmhJHSAagigJ4E7GPWRXOYC6owAd1JM6wDQPADyMWUqZRMqmAojHp1Vn6EQQEgUNMJLnUjMyJsM49wygBkAPw9dVFwXRkncCIIW3GRgoTQUZn6HxCMAFEFd8TwEQ78X4rHbILoAUmeT+RFG4UhQ6MiIAE4W/UsYFjuVjAIa2nIY4q1R0GFtQWG3E84lqw2GO2QOoCKBVu0BAPgDSU0eUDjjQenNkV/AW/pWChhpMTelo1a64AOKM30vk18GzTHXCNtI/Knz3DFBgsUqBGIjTInXRY1yA9xkVoqW5tVq3pDR9A0hfF5BSARmVnh7RMDCaIdcNgbPBkgzn1Bu+SfIEFSpSBmkxyrMicb0fAEuCZrWnN89veA/4XcakrPcjBWzkTuLjlbfTQPOlBhz+HwkqqPXmPQDdrQItxE1moGof1S74j/8txk8EHhTQrAE8qlwfqS5yukm1x/rAJ9Jiaa6nyATqD78aUVBhFo8b1V4DdTXdCW+IxA1zB4JhiOhZMEWO1HqnvdoHZ4FAMIhV9REF8FiUm0jsYPEJx/Fm/N8OhH90HI9YRHesWbXXZwAShU8qThe7H8YAuJmw5yOd989uRINKRTJAhoF8jbqrHKfeCYdIISZfSq26bk/K+yO3YvfKrVgiwQBHnwt8ynPB25+M8hceTt/ybPhnryJ78+tLgAEAuCFyiQgQB30AAAAASUVORK5CYII=");export class SpriteNodeShaderMaterial extends c{get color(){return this.uniforms.color.value}set color(e){this.uniforms.color.value=new o.Color(e)}get rotation(){return this.uniforms.rotation.value}set rotation(e){this.uniforms.rotation.value=e}}(new o.SpriteMaterial).rotation;class ie extends t{initialize(e){if(e.body instanceof o.Mesh){const t=e.body.material;t instanceof c&&(null!=t.uniforms[L]||null!=t.uniforms[H]||null!=t.uniforms[G])&&(e.body.material=t.clone())}}mutate(e,t,i){if(this.energize(e,t),e.target instanceof o.Mesh){const t=e.target.material;t instanceof c&&(null!=t.uniforms[L]&&(t.uniforms[L].value=this.energy),null!=t.uniforms[H]&&(t.uniforms[H].value=e.age),null!=t.uniforms[G]&&(t.uniforms[G].value=e.velocity))}}}class ne extends n{constructor(){super(...arguments),this.childEmitters=[],this.bindEmitterEvent=!1,this.onExpired=()=>{}}update(e){if(!this.isEmitting&&0===this.particles.length)return;this.age+=e,(this.dead||this.age>=this.life)&&this.destroy(),this.generate(e),this.integrate(e);let t=this.particles.length;for(;t--;){const e=this.particles[t];e.dead&&(this.system&&this.system.dispatch("PARTICLE_DEAD",e),this.bindEmitterEvent&&this.dispatch("PARTICLE_DEAD",e),this.system.pool.expire(e.reset()),this.particles.splice(t,1))}this.updateEmitterBehaviours(e),this.updateChildren(e),this.isEmitting||0!==this.particles.length||this.onExpired()}updateChildren(e){for(const t of this.childEmitters)null!=t.parentParticle?t.position.copy(t.parentParticle.position):t.setPosition(this.position),t.update(e)}clone(){const e=new ne;return e.setRate(this.rate.clone()),e.behaviours=this.behaviours,e.initializers=this.initializers,e._space=this._space,e.body=this.body,e.parent=this.parent,e.system=this.system,e}setParentRecursive(e){this.system=e,this.childEmitters.forEach((t=>t.setParentRecursive(e)))}}export class EmitterPool{constructor(e){this.creator=e,this.instances=[]}get(){0==this.instances.length&&this.instances.push(this.creator());return this.instances.pop()}release(e){this.instances.push(e)}dispose(){this.instances.length=0}}/*
2
2
  * Copyright (©) 2023. All rights reserved.
3
3
  * See the LICENSE.md file for details.
4
4
  */
@@ -74,6 +74,7 @@ export declare class InstancedRenderer extends MeshRenderer {
74
74
  dispose(): void;
75
75
  onSystemUpdate(): void;
76
76
  private meshes;
77
+ private calcMaxCount;
77
78
  onParticleCreated(particle: Particle & {
78
79
  body?: MeshRenderer['_body'];
79
80
  target: any;
@@ -1 +1 @@
1
- {"version":3,"file":"vfx-renderers.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-renderers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vfx-renderers.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-renderers.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import{CustomRenderer as e,MeshRenderer as t,PUID as r}from"@hology/nebula";import*as a from"three";import{InstancedBufferAttribute as s,Object3D as i}from"three";import{NodeShaderMaterial as n}from"three-shader-graph";import{SpriteNodeShaderMaterial as o}from"../../effects/vfx/vfx-materializer";import{StretchedSprite as l}from"./stretched-sprite.js";import{Trail as c}from"./trail-renderer.js";var d;!function(e){e[e.mesh=0]="mesh",e[e.instanced=1]="instanced",e[e.sprite=2]="sprite",e[e.stretchedBillboard=3]="stretchedBillboard",e[e.trail=4]="trail"}(d||(d={}));export class MultiRenderer extends e{constructor(e,t,r,a){super(),this.worldContainer=e,this.localContainer=t,this.three=r,this.view=a,this.localRenderers=[],this.worldRenderers=[]}onSystemUpdate(){for(const e of this.worldRenderers)e?.onSystemUpdate();for(const e of this.localRenderers)e?.onSystemUpdate()}onParticleCreated(e){this.getRenderer(e)?.onParticleCreated(e)}onParticleUpdate(e){this.getRenderer(e)?.onParticleUpdate(e)}onParticleDead(e){this.getRenderer(e)?.onParticleDead(e),e._renderer=null}getRenderer(e){if(e._renderer)return e._renderer;const t=(null!=e?.parent?e?.parent._space:null)??"world",r="world"===t?this.worldContainer:this.localContainer,s="world"===t?this.worldRenderers:this.localRenderers;return"trail"===e.body.type?(null==s[d.trail]&&(s[d.trail]=new TrailRenderer(r,this.three)),e._renderer=s[d.trail]):e.body instanceof l?(null==s[d.stretchedBillboard]&&(s[d.stretchedBillboard]=new StretchedSpriteInstancedRenderer(r,this.three,this.view)),e._renderer=s[d.stretchedBillboard]):e.body instanceof a.Sprite||e.body instanceof a.Mesh&&"sprite"===e.body.name?(null==s[d.sprite]&&(s[d.sprite]=new CombinedRenderer(r,this.three)),e._renderer=s[d.sprite]):e.body instanceof a.Mesh&&0==e.body.children.length&&e.body.material instanceof n?(null==s[d.instanced]&&(s[d.instanced]=new InstancedRenderer(r,this.three,this.view)),e._renderer=s[d.instanced]):e.body instanceof a.Object3D?(null==s[d.mesh]&&(s[d.mesh]=new CombinedRenderer(r,this.three)),e._renderer=s[d.mesh]):void 0}dispose(){this.localRenderers.forEach((e=>{e instanceof InstancedRenderer&&e.dispose()})),this.worldRenderers.forEach((e=>{e instanceof InstancedRenderer&&e.dispose()}))}}export class TrailRenderer extends t{constructor(){super(...arguments),this.trails=[]}dispose(){}onSystemUpdate(){for(const e of this.trails)e.update()}onParticleCreated(e){const t=e.body,r=new c(this.container,!0),s=new i,n=c.createBaseMaterial();n.uniforms.taper.value=t.taper??!1;const o=new a.Color(t.color??0),l=new a.Color(t.colorEnd??0);n.uniforms.headColor.value.set(o.r,o.g,o.b,t.opacityStart??1),n.uniforms.tailColor.value.set(l.r,l.g,l.b,t.opacityEnd??1),t.bloom&&(n.userData.hasBloom=!0),r.initialize(n,Math.round(t.length??10),!1,0,null,s);const d=e.rotation;s.rotation.set(d.x,d.y,d.z);e.scale;r.activate(),this.trails.push(r),e.target=s}onParticleUpdate(e){const t=e.target;t.position.copy(e.position);e.velocity.clone().normalize();const r=this.trails.findIndex((e=>e.targetObject.id===t.id));if(-1!=r){const t=this.trails[r];if(e.useAlpha){t.material.uniforms.headColor.value.setW(e.alpha);t.material.uniforms.tailColor.value.setW(e.alpha)}}}onParticleDead(e){const t=e.target,r=this.trails.findIndex((e=>e.targetObject.id===t.id));if(-1!=r){const e=this.trails[r];e.removeFromParent(),e.mesh.removeFromParent(),t.removeFromParent(),this.trails.splice(r,1)}}}export class CombinedRenderer extends t{dispose(){}scale(e){const t=e.transform.initialScale;e.target instanceof a.Sprite?null!=t?e.target.scale.set(t.x*e.scale*e.radius,t.y*e.scale*e.radius,1):e.target.scale.set(e.scale*e.radius,e.scale*e.radius,1):null!=t?e.target.scale.set(t.x*e.scale,t.y*e.scale,t.z*e.scale):super.scale(e)}rotate(e){e.target.material.rotation=e.rotation.z}onParticleCreated(e){e.target||(e.target=this._targetPool.get(e.body),(e.useAlpha||e.useColor)&&(e.target instanceof a.Mesh||e.target instanceof a.Sprite&&e.target.material instanceof a.Material)&&(e.target.material.__puid=r.id(e.body.material),e.target.material=this._materialPool.get(e.target.material))),e.target&&e.target instanceof i&&(e.target.position.set(e.position.x,e.position.y,e.position.z),this.container.add(e.target))}onParticleUpdate(e){const{target:t,useAlpha:r,useColor:s,rotation:n}=e;if(t){if(t.position.copy(e.position),this.isThreeSprite(e)||(t instanceof a.Mesh&&t.material instanceof o?e.target.material.rotation=e.rotation.z:t.rotation.set(n.x,n.y,n.z)),this.scale(e),e.transform&&e.transform.orientAlongVelocity&&t instanceof i){const r=m.set(e.velocity.x,e.velocity.y,e.velocity.z).normalize(),a=t.getWorldDirection(h);a.applyAxisAngle(u,Math.PI/-2),p.setFromUnitVectors(a,r),t.quaternion.copy(p)}t.material instanceof a.Material&&(r&&(t.material.opacity=e.alpha,t.material.transparent=!0),s&&null!=t.material.color&&t.material.color.copy(e.color))}}onParticleDead(e){e.target&&(e.target.material&&(e.useAlpha||e.useColor)&&this._materialPool.expire(e.target.material),this._targetPool.expire(e.target),this.container.remove(e.target),e.target=null)}}export class StretchedSpriteInstancedRenderer extends t{constructor(e,t,r){super(e,t),this.view=r,this.meshes=[]}dispose(){this.meshes.forEach((e=>e.mesh.geometry.dispose()))}onSystemUpdate(){for(const e of this.meshes){const t=e.mesh.geometry.getAttribute("offset"),r=e.mesh.geometry.getAttribute("size"),s=e.mesh.geometry.getAttribute("velocity"),i=e.mesh.geometry.getAttribute("rotation"),n=e.mesh.geometry.getAttribute("color");let o=0;for(const l of e.particles){if(null==l||l.dead)continue;if(l.useColor||l.color instanceof a.Color){const e=U.copy(l.color).getRGB(P);n.setXYZW(o,e.r,e.g,e.b,1),n.needsUpdate=!0}l.useAlpha&&(n.setW(o,l.alpha),n.needsUpdate=!0),"number"==typeof l.rotation?i.setX(o,l.rotation):i.setX(o,l.rotation.x);const e=l.position;if(t.setXYZ(o,e.x,e.y,e.z),"number"!=typeof l.scale)throw new Error("Particle scale is not a number");r.setXYZ(o,l.scale,l.scale,l.scale);let c=l.body.scaleFactor;0===c&&(c=.001);const d=1,m=l.velocity;s.setXYZW(o,m.x*c,m.y*c,m.z*c,d),o++}o>0&&(t.clearUpdateRanges(),t.addUpdateRange(0,3*o),t.needsUpdate=!0,r.clearUpdateRanges(),r.addUpdateRange(0,3*o),r.needsUpdate=!0,n.clearUpdateRanges(),n.addUpdateRange(0,4*o),n.needsUpdate=!0,s.clearUpdateRanges(),s.addUpdateRange(0,4*o),s.needsUpdate=!0,i.clearUpdateRanges(),i.addUpdateRange(0,o),i.needsUpdate=!0)}}onParticleCreated(e){if(e.body instanceof l&&null==e.target){const t=e.body;let r=this.meshes.find((e=>e.mesh.material.uuid===t.material.uuid));if(null==r){const i=M(e),n=new a.InstancedBufferGeometry;n.setIndex(t.geometry.getIndex()),n.setAttribute("position",t.geometry.getAttribute("position")),t.geometry.hasAttribute("normal")&&n.setAttribute("normal",t.geometry.getAttribute("normal")),n.setAttribute("uv",t.geometry.getAttribute("uv"));const o=new s(new Float32Array(3*i),3);o.setUsage(a.DynamicDrawUsage),n.setAttribute("offset",o);const l=new s(new Float32Array(4*i),4);l.setUsage(a.DynamicDrawUsage),n.setAttribute("color",l);const c=new s(new Float32Array(3*i),3);c.setUsage(a.DynamicDrawUsage),n.setAttribute("size",c);const d=new s(new Float32Array(4*i),4);d.setUsage(a.DynamicDrawUsage),n.setAttribute("velocity",d);const m=new s(new Float32Array(4*i),1);m.setUsage(a.DynamicDrawUsage),n.setAttribute("rotation",m),r={mesh:new a.Mesh(n,t.material),indices:new Float32Array(i),particles:[]},this.meshes.push(r),this.container.add(r.mesh)}let i=r.indices.findIndex((e=>0===e));i<0&&(i=function(e){let t=e[0],r=0;for(let a=1;a<e.length;a++)e[a]<t&&(t=e[a],r=a);return r}(r.indices)),r.indices[i]=performance.now(),e.target=i,r.particles[i]=e}}onParticleUpdate(e){}onParticleDead(e){const t=e.body;let r=this.meshes.find((e=>e.mesh.material.uuid===t.material.uuid));r&&(r.particles[e.target]=null,r.indices[e.target]=0),e.target=null}}const m=new a.Vector3,h=new a.Vector3,p=new a.Quaternion,u=new a.Vector3(1,0,0);export class InstancedRenderer extends t{constructor(e,t,r){super(e,t),this.view=r,this.meshes=[]}dispose(){this.meshes.forEach((e=>e.mesh.dispose()))}onSystemUpdate(){for(const e of this.meshes);}onParticleCreated(e){if(!(e.body instanceof a.Sprite)){if(null==e.target){const t=e.body;let r=this.meshes.find((e=>e.mesh.geometry.uuid===t.geometry.uuid&&e.mesh.material.uuid===t.material.uuid));if(null==r){const s=e.parent.rate;let i=Math.min(s.numPan.b*Math.ceil(e.life/Math.min(Math.max(s.timePan.a,.01),1)),1e5);r={mesh:new a.InstancedMesh(t.geometry,t.material,i),indices:new Array(i).fill(null),particles:[]},r.mesh.setColorAt(0,U.setScalar(1)),r.mesh.instanceColor.needsUpdate=!0;const n=new Float32Array(3*i);y.makeScale(0,0,0);for(let e=0;e<i;e++)n[3*e+0]=1,n[3*e+1]=1,r.mesh.setMatrixAt(e,y);r.mesh.instanceMatrix.needsUpdate=!0,r.mesh.geometry.setAttribute("particleData",new a.InstancedBufferAttribute(n,3)),this.meshes.push(r),this.container.add(r.mesh)}let s=r.indices.findIndex((e=>null==e));s<0&&(s=r.indices.indexOf(Math.min(...r.indices))),r.indices[s]=performance.now(),e.target=s,r.particles[s]=e}if("number"==typeof e.target){e.transform.initialScale;const t=e.body;let r=this.meshes.find((e=>e.mesh.geometry.uuid===t.geometry.uuid&&e.mesh.material.uuid===t.material.uuid));f(e,r.mesh),e.useAlpha&&(r.mesh.material.transparent=!0)}}}onParticleUpdate(e){const{target:t,useAlpha:r,useColor:a,rotation:s}=e;if(null==t)return;const i=e.body;let n=this.meshes.find((e=>e.mesh.geometry.uuid===i.geometry.uuid&&e.mesh.material.uuid===i.material.uuid));if(f(e,n.mesh),a&&(n.mesh.setColorAt(e.target,U.copy(e.color)),n.mesh.instanceColor.needsUpdate=!0),r){const t=n.mesh.geometry.getAttribute("particleData");t.setX(e.target,e.alpha),t.needsUpdate=!0}}onParticleDead(e){if(null!=e.target){const t=e.body;let r=this.meshes.find((e=>e.mesh.geometry.uuid===t.geometry.uuid&&e.mesh.material.uuid===t.material.uuid));r.indices[e.target]=null,e.scale=0,f(e,r.mesh),r.mesh.instanceMatrix.needsUpdate=!0,e.target=null}}}const g=new i;function f(e,t){if(w.set(e.position.x,e.position.y,e.position.z),e.transform&&e.transform.orientAlongVelocity){const r=m.set(e.position.x-e.old.position.x,e.position.y-e.old.position.y,e.position.z-e.old.position.z).normalize();t.getMatrixAt(e.target,g.matrix);const a=g.getWorldDirection(x);a.applyAxisAngle(u,Math.PI/-2),b.setFromUnitVectors(a,r)}else A.set(e.rotation.x,e.rotation.y,e.rotation.z),b.setFromEuler(A);const r=e.transform.initialScale;null!=r?x.set(r.x*e.scale,r.y*e.scale,r.z*e.scale):x.set(e.scale,e.scale,e.scale),y.compose(w,b,x),t.setMatrixAt(e.target,y),t.instanceMatrix.needsUpdate=!0}const y=new a.Matrix4,b=new a.Quaternion,w=new a.Vector3,x=new a.Vector3,A=new a.Euler,U=new a.Color(0),P={r:0,g:0,b:0};function R(e,t){const r=e.mesh,s=r.count,i=[],n=r.geometry.getAttribute("particleData"),o=new a.Vector3;for(let l=0;l<s;l++){const s=new a.Matrix4,c=new a.Color;r.getMatrixAt(l,s),r.getColorAt(l,c);const d=n.getX(l);o.setFromMatrixPosition(s);const m=o.distanceTo(t.position);i.push({index:l,distance:m,matrix:s,particle:e.particles[l],color:c,pdx:d})}i.sort(((e,t)=>t.distance-e.distance));for(let e=0;e<s;e++){const t=i[e].matrix;null==i[e].particle&&t.makeScale(0,0,0),r.setMatrixAt(e,t),r.setColorAt(e,i[e].color),n.setX(e,i[e].pdx)}r.instanceMatrix.needsUpdate=!0}export{R as sortInstancedMeshByDistance};function M(e){const t=null!=e.parent.parentParticle?M(e.parent.parentParticle):1,r=e.parent.rate;return Math.min(Math.ceil(r.numPan.b/Math.min(Math.max(r.timePan.a,.01),1)),1e5)*e.life*t}/*
1
+ import{CustomRenderer as e,MeshRenderer as t,PUID as r}from"@hology/nebula";import*as a from"three";import{InstancedBufferAttribute as s,Object3D as i}from"three";import{NodeShaderMaterial as n}from"three-shader-graph";import{SpriteNodeShaderMaterial as o}from"../../effects/vfx/vfx-materializer";import{StretchedSprite as l}from"./stretched-sprite.js";import{Trail as c}from"./trail-renderer.js";var d;!function(e){e[e.mesh=0]="mesh",e[e.instanced=1]="instanced",e[e.sprite=2]="sprite",e[e.stretchedBillboard=3]="stretchedBillboard",e[e.trail=4]="trail"}(d||(d={}));export class MultiRenderer extends e{constructor(e,t,r,a){super(),this.worldContainer=e,this.localContainer=t,this.three=r,this.view=a,this.localRenderers=[],this.worldRenderers=[]}onSystemUpdate(){for(const e of this.worldRenderers)e?.onSystemUpdate();for(const e of this.localRenderers)e?.onSystemUpdate()}onParticleCreated(e){this.getRenderer(e)?.onParticleCreated(e)}onParticleUpdate(e){this.getRenderer(e)?.onParticleUpdate(e)}onParticleDead(e){this.getRenderer(e)?.onParticleDead(e),e._renderer=null}getRenderer(e){if(e._renderer)return e._renderer;const t=(null!=e?.parent?e?.parent._space:null)??"world",r="world"===t?this.worldContainer:this.localContainer,s="world"===t?this.worldRenderers:this.localRenderers;return"trail"===e.body.type?(null==s[d.trail]&&(s[d.trail]=new TrailRenderer(r,this.three)),e._renderer=s[d.trail]):e.body instanceof l?(null==s[d.stretchedBillboard]&&(s[d.stretchedBillboard]=new StretchedSpriteInstancedRenderer(r,this.three,this.view)),e._renderer=s[d.stretchedBillboard]):e.body instanceof a.Sprite||e.body instanceof a.Mesh&&"sprite"===e.body.name?(null==s[d.sprite]&&(s[d.sprite]=new CombinedRenderer(r,this.three)),e._renderer=s[d.sprite]):e.body instanceof a.Mesh&&0==e.body.children.length&&e.body.material instanceof n?(null==s[d.instanced]&&(s[d.instanced]=new InstancedRenderer(r,this.three,this.view)),e._renderer=s[d.instanced]):e.body instanceof a.Object3D?(null==s[d.mesh]&&(s[d.mesh]=new CombinedRenderer(r,this.three)),e._renderer=s[d.mesh]):void 0}dispose(){this.localRenderers.forEach((e=>{e instanceof InstancedRenderer&&e.dispose()})),this.worldRenderers.forEach((e=>{e instanceof InstancedRenderer&&e.dispose()}))}}export class TrailRenderer extends t{constructor(){super(...arguments),this.trails=[]}dispose(){}onSystemUpdate(){for(const e of this.trails)e.update()}onParticleCreated(e){const t=e.body,r=new c(this.container,!0),s=new i,n=c.createBaseMaterial();n.uniforms.taper.value=t.taper??!1;const o=new a.Color(t.color??0),l=new a.Color(t.colorEnd??0);n.uniforms.headColor.value.set(o.r,o.g,o.b,t.opacityStart??1),n.uniforms.tailColor.value.set(l.r,l.g,l.b,t.opacityEnd??1),t.bloom&&(n.userData.hasBloom=!0),r.initialize(n,Math.round(t.length??10),!1,0,null,s);const d=e.rotation;s.rotation.set(d.x,d.y,d.z);e.scale;r.activate(),this.trails.push(r),e.target=s}onParticleUpdate(e){const t=e.target;t.position.copy(e.position);e.velocity.clone().normalize();const r=this.trails.findIndex((e=>e.targetObject.id===t.id));if(-1!=r){const t=this.trails[r];if(e.useAlpha){t.material.uniforms.headColor.value.setW(e.alpha);t.material.uniforms.tailColor.value.setW(e.alpha)}}}onParticleDead(e){const t=e.target,r=this.trails.findIndex((e=>e.targetObject.id===t.id));if(-1!=r){const e=this.trails[r];e.removeFromParent(),e.mesh.removeFromParent(),t.removeFromParent(),this.trails.splice(r,1)}}}export class CombinedRenderer extends t{dispose(){}scale(e){const t=e.transform.initialScale;e.target instanceof a.Sprite?null!=t?e.target.scale.set(t.x*e.scale*e.radius,t.y*e.scale*e.radius,1):e.target.scale.set(e.scale*e.radius,e.scale*e.radius,1):null!=t?e.target.scale.set(t.x*e.scale,t.y*e.scale,t.z*e.scale):super.scale(e)}rotate(e){e.target.material.rotation=e.rotation.z}onParticleCreated(e){e.target||(e.target=this._targetPool.get(e.body),(e.useAlpha||e.useColor)&&(e.target instanceof a.Mesh||e.target instanceof a.Sprite&&e.target.material instanceof a.Material)&&(e.target.material.__puid=r.id(e.body.material),e.target.material=this._materialPool.get(e.target.material))),e.target&&e.target instanceof i&&(e.target.position.set(e.position.x,e.position.y,e.position.z),this.container.add(e.target))}onParticleUpdate(e){const{target:t,useAlpha:r,useColor:s,rotation:n}=e;if(t){if(t.position.copy(e.position),this.isThreeSprite(e)||(t instanceof a.Mesh&&t.material instanceof o?e.target.material.rotation=e.rotation.z:t.rotation.set(n.x,n.y,n.z)),this.scale(e),e.transform&&e.transform.orientAlongVelocity&&t instanceof i){const r=m.set(e.velocity.x,e.velocity.y,e.velocity.z).normalize(),a=t.getWorldDirection(h);a.applyAxisAngle(u,Math.PI/-2),p.setFromUnitVectors(a,r),t.quaternion.copy(p)}t.material instanceof a.Material&&(r&&(t.material.opacity=e.alpha,t.material.transparent=!0),s&&null!=t.material.color&&t.material.color.copy(e.color))}}onParticleDead(e){e.target&&(e.target.material&&(e.useAlpha||e.useColor)&&this._materialPool.expire(e.target.material),this._targetPool.expire(e.target),this.container.remove(e.target),e.target=null)}}export class StretchedSpriteInstancedRenderer extends t{constructor(e,t,r){super(e,t),this.view=r,this.meshes=[]}dispose(){this.meshes.forEach((e=>e.mesh.geometry.dispose()))}onSystemUpdate(){for(const e of this.meshes){const t=e.mesh.geometry.getAttribute("offset"),r=e.mesh.geometry.getAttribute("size"),s=e.mesh.geometry.getAttribute("velocity"),i=e.mesh.geometry.getAttribute("rotation"),n=e.mesh.geometry.getAttribute("color");let o=0;for(const l of e.particles){if(null==l||l.dead)continue;if(l.useColor||l.color instanceof a.Color){const e=U.copy(l.color).getRGB(M);n.setXYZW(o,e.r,e.g,e.b,1),n.needsUpdate=!0}l.useAlpha&&(n.setW(o,l.alpha),n.needsUpdate=!0),"number"==typeof l.rotation?i.setX(o,l.rotation):i.setX(o,l.rotation.x);const e=l.position;if(t.setXYZ(o,e.x,e.y,e.z),"number"!=typeof l.scale)throw new Error("Particle scale is not a number");r.setXYZ(o,l.scale,l.scale,l.scale);let c=l.body.scaleFactor;0===c&&(c=.001);const d=1,m=l.velocity;s.setXYZW(o,m.x*c,m.y*c,m.z*c,d),o++}o>0&&(t.clearUpdateRanges(),t.addUpdateRange(0,3*o),t.needsUpdate=!0,r.clearUpdateRanges(),r.addUpdateRange(0,3*o),r.needsUpdate=!0,n.clearUpdateRanges(),n.addUpdateRange(0,4*o),n.needsUpdate=!0,s.clearUpdateRanges(),s.addUpdateRange(0,4*o),s.needsUpdate=!0,i.clearUpdateRanges(),i.addUpdateRange(0,o),i.needsUpdate=!0)}}onParticleCreated(e){if(e.body instanceof l&&null==e.target){const t=e.body;let r=this.meshes.find((e=>e.mesh.material.uuid===t.material.uuid));if(null==r){const i=P(e),n=new a.InstancedBufferGeometry;n.setIndex(t.geometry.getIndex()),n.setAttribute("position",t.geometry.getAttribute("position")),t.geometry.hasAttribute("normal")&&n.setAttribute("normal",t.geometry.getAttribute("normal")),n.setAttribute("uv",t.geometry.getAttribute("uv"));const o=new s(new Float32Array(3*i),3);o.setUsage(a.DynamicDrawUsage),n.setAttribute("offset",o);const l=new s(new Float32Array(4*i),4);l.setUsage(a.DynamicDrawUsage),n.setAttribute("color",l);const c=new s(new Float32Array(3*i),3);c.setUsage(a.DynamicDrawUsage),n.setAttribute("size",c);const d=new s(new Float32Array(4*i),4);d.setUsage(a.DynamicDrawUsage),n.setAttribute("velocity",d);const m=new s(new Float32Array(4*i),1);m.setUsage(a.DynamicDrawUsage),n.setAttribute("rotation",m),r={mesh:new a.Mesh(n,t.material),indices:new Float32Array(i),particles:[]},this.meshes.push(r),this.container.add(r.mesh)}let i=r.indices.findIndex((e=>0===e));i<0&&(i=function(e){let t=e[0],r=0;for(let a=1;a<e.length;a++)e[a]<t&&(t=e[a],r=a);return r}(r.indices)),r.indices[i]=performance.now(),e.target=i,r.particles[i]=e}}onParticleUpdate(e){}onParticleDead(e){const t=e.body;let r=this.meshes.find((e=>e.mesh.material.uuid===t.material.uuid));r&&(r.particles[e.target]=null,r.indices[e.target]=0),e.target=null}}const m=new a.Vector3,h=new a.Vector3,p=new a.Quaternion,u=new a.Vector3(1,0,0);export class InstancedRenderer extends t{constructor(e,t,r){super(e,t),this.view=r,this.meshes=[]}dispose(){this.meshes.forEach((e=>e.mesh.dispose()))}onSystemUpdate(){for(const e of this.meshes);}calcMaxCount(e){if(null==e)return 1;const t=e.parent.rate;return Math.min(t.numPan.b*Math.ceil(e.life/Math.min(Math.max(t.timePan.a,.01),1)),1e5)*this.calcMaxCount(e.parent.parentParticle)}onParticleCreated(e){if(!(e.body instanceof a.Sprite)){if(null==e.target){const t=e.body;let r=this.meshes.find((e=>e.mesh.geometry.uuid===t.geometry.uuid&&e.mesh.material.uuid===t.material.uuid));if(null==r){const s=this.calcMaxCount(e);r={mesh:new a.InstancedMesh(t.geometry,t.material,s),indices:new Array(s).fill(null),particles:[]},r.mesh.setColorAt(0,U.setScalar(1)),r.mesh.instanceColor.needsUpdate=!0;const i=new Float32Array(3*s);y.makeScale(0,0,0);for(let e=0;e<s;e++)i[3*e+0]=1,i[3*e+1]=1,r.mesh.setMatrixAt(e,y);r.mesh.instanceMatrix.needsUpdate=!0,r.mesh.geometry.setAttribute("particleData",new a.InstancedBufferAttribute(i,3)),this.meshes.push(r),this.container.add(r.mesh)}let s=r.indices.findIndex((e=>null==e));s<0&&(s=r.indices.indexOf(Math.min(...r.indices))),r.indices[s]=performance.now(),e.target=s,r.particles[s]=e}if("number"==typeof e.target){e.transform.initialScale;const t=e.body;let r=this.meshes.find((e=>e.mesh.geometry.uuid===t.geometry.uuid&&e.mesh.material.uuid===t.material.uuid));f(e,r.mesh),e.useAlpha&&(r.mesh.material.transparent=!0)}}}onParticleUpdate(e){const{target:t,useAlpha:r,useColor:a,rotation:s}=e;if(null==t)return;const i=e.body;let n=this.meshes.find((e=>e.mesh.geometry.uuid===i.geometry.uuid&&e.mesh.material.uuid===i.material.uuid));if(f(e,n.mesh),a&&(n.mesh.setColorAt(e.target,U.copy(e.color)),n.mesh.instanceColor.needsUpdate=!0),r){const t=n.mesh.geometry.getAttribute("particleData");t.setX(e.target,e.alpha),t.needsUpdate=!0}}onParticleDead(e){if(null!=e.target){const t=e.body;let r=this.meshes.find((e=>e.mesh.geometry.uuid===t.geometry.uuid&&e.mesh.material.uuid===t.material.uuid));r.indices[e.target]=null,e.scale=0,f(e,r.mesh),r.mesh.instanceMatrix.needsUpdate=!0,e.target=null}}}const g=new i;function f(e,t){if(w.set(e.position.x,e.position.y,e.position.z),e.transform&&e.transform.orientAlongVelocity){const r=m.set(e.position.x-e.old.position.x,e.position.y-e.old.position.y,e.position.z-e.old.position.z).normalize();t.getMatrixAt(e.target,g.matrix);const a=g.getWorldDirection(x);a.applyAxisAngle(u,Math.PI/-2),b.setFromUnitVectors(a,r)}else A.set(e.rotation.x,e.rotation.y,e.rotation.z),b.setFromEuler(A);const r=e.transform.initialScale;null!=r?x.set(r.x*e.scale,r.y*e.scale,r.z*e.scale):x.set(e.scale,e.scale,e.scale),y.compose(w,b,x),t.setMatrixAt(e.target,y),t.instanceMatrix.needsUpdate=!0}const y=new a.Matrix4,b=new a.Quaternion,w=new a.Vector3,x=new a.Vector3,A=new a.Euler,U=new a.Color(0),M={r:0,g:0,b:0};function C(e,t){const r=e.mesh,s=r.count,i=[],n=r.geometry.getAttribute("particleData"),o=new a.Vector3;for(let l=0;l<s;l++){const s=new a.Matrix4,c=new a.Color;r.getMatrixAt(l,s),r.getColorAt(l,c);const d=n.getX(l);o.setFromMatrixPosition(s);const m=o.distanceTo(t.position);i.push({index:l,distance:m,matrix:s,particle:e.particles[l],color:c,pdx:d})}i.sort(((e,t)=>t.distance-e.distance));for(let e=0;e<s;e++){const t=i[e].matrix;null==i[e].particle&&t.makeScale(0,0,0),r.setMatrixAt(e,t),r.setColorAt(e,i[e].color),n.setX(e,i[e].pdx)}r.instanceMatrix.needsUpdate=!0}export{C as sortInstancedMeshByDistance};function P(e){const t=null!=e.parent.parentParticle?P(e.parent.parentParticle):1,r=e.parent.rate;return Math.min(Math.ceil(r.numPan.b/Math.min(Math.max(r.timePan.a,.01),1)),1e5)*e.life*t}/*
2
2
  * Copyright (©) 2023. All rights reserved.
3
3
  * See the LICENSE.md file for details.
4
4
  */
@@ -1 +1 @@
1
- {"version":3,"file":"actor.d.ts","sourceRoot":"","sources":["../../../src/gameplay/actors/actor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAa,MAAM,MAAM,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAS,MAAM,OAAO,CAAA;AACvC,OAAkB,EAAE,aAAa,EAAW,MAAM,QAAQ,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAU,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAO7E,wBAAgB,KAAK,qCAQpB;AAED,MAAM,MAAM,OAAO,GAAG,MAAM,CAAA;AAE5B;;GAEG;AACH,8BAAsB,SAAS;IAC7B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAY;IAIzB,eAAe,UAAQ;IAE9B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAc;IACvC,QAAQ,CAAC,QAAQ,gBAAsB;IACvC,IACI,QAAQ,4BAEX;IACD,IACI,UAAU,+BAEb;IACD,IACI,QAAQ,0BAEX;IACD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,GAAC,IAAI;IAC5B,WAAW,IAAI,IAAI;IACnB,SAAS,IAAI,IAAI;IACjB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IACjC;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;;IAYrC,MAAM,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,CAAC;IAiC5F,YAAY,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC;CAOlE;AAID,wBAAgB,8BAA8B,SAO7C"}
1
+ {"version":3,"file":"actor.d.ts","sourceRoot":"","sources":["../../../src/gameplay/actors/actor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAa,MAAM,MAAM,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAS,MAAM,OAAO,CAAA;AACvC,OAAkB,EAAE,aAAa,EAAW,MAAM,QAAQ,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAU,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAO7E,wBAAgB,KAAK,KAEF,sBAAiB,UAMnC;AAED,MAAM,MAAM,OAAO,GAAG,MAAM,CAAA;AAE5B;;GAEG;AACH,8BAAsB,SAAS;IAC7B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAY;IAIzB,eAAe,UAAQ;IAE9B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAc;IACvC,QAAQ,CAAC,QAAQ,gBAAsB;IACvC,IACI,QAAQ,4BAEX;IACD,IACI,UAAU,+BAEb;IACD,IACI,QAAQ,0BAEX;IACD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,GAAC,IAAI;IAC5B,WAAW,IAAI,IAAI;IACnB,SAAS,IAAI,IAAI;IACjB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IACjC;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;;IAYrC,MAAM,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,CAAC;IAiC5F,YAAY,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC;CAOlE;AAID,wBAAgB,8BAA8B,SAO7C"}
@@ -1 +1 @@
1
- {"version":3,"file":"character-movement.d.ts","sourceRoot":"","sources":["../../../../../../src/gameplay/actors/builtin/components/character/character-movement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAiB,MAAM,4DAA4D,CAAC;AAC1G,OAAO,EAAoB,OAAO,EAAwB,eAAe,EAAE,MAAM,OAAO,CAAC;AACzF,OAAO,EAAE,cAAc,EAAa,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAkBnD,qBACa,0BAA2B,SAAQ,cAAc;IA0D9C,OAAO,CAAC,aAAa;IAvDjC,QAAQ,CAAC,cAAc,YAAkB;IACzC,QAAQ,CAAC,SAAS,cAAoB;IACtC,QAAQ,CAAC,WAAW,cAAoB;IACxC,QAAQ,CAAC,aAAa,gBAAsB;IAGrC,eAAe,SAAI;IAGnB,QAAQ,SAAI;IACZ,iBAAiB,SAAI;IACrB,cAAc,SAAK;IACnB,YAAY,SAAI;IAChB,sBAAsB,SAAK;IAC3B,oBAAoB,UAAQ;IAC5B,eAAe,EAAE,MAAM,CAAO;IAC9B,cAAc,EAAE,MAAM,CAAI;IAC1B,cAAc,EAAE,MAAM,CAAK;IAC3B,SAAS,UAAQ;IACjB,IAAI,SAAK;IACT,YAAY,UAAO;IACnB,kBAAkB,SAAyB;IAC3C,kBAAkB,SAAyB;IAC3C,4BAA4B,UAAO;IAC1C,oCAAoC;IAC7B,kBAAkB,UAAQ;IACjC,IAAW,gBAAgB,IACW,MAAM,CADuB;IACnE,IAAW,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAA4G;IACxJ,IAAW,sBAAsB,IAAI,OAAO,CAAmD;IAC/F,IAAW,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAA8F;IAChJ,IAAW,iBAAiB,IACY,MAAM,CADuB;IACrE,IAAW,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAA4G;IAC1J,IAAW,YAAY,IACW,MAAM,CAD2B;IACnE,IAAW,YAAY,CAAC,QAAQ,EAAE,MAAM,EAA0C;IAClF,IAAW,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAiC;IACnE,IAAW,MAAM,IADW,MAAM,CACa;IAC/C,IAAW,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAA0C;IACrF,IAAW,iBAAiB,IADS,MAAM,CAC0B;IAErE;;;;OAIG;IACI,OAAO,UAAO;IAGrB,QAAQ,CAAC,QAAQ,UAAgB;IACjC,IAAI,wBAAgC;IACpC,WAAW,UAAQ;IACnB,WAAW,UAAQ;IAEnB,OAAO,CAAC,EAAE,CAAqC;IAC/C,OAAO,CAAC,aAAa,CAAsB;gBAEvB,aAAa,EAAE,aAAa;IAOhD,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,qBAAqB,CAAwB;IAErD;;;OAGG;IACI,yBAAyB,UAAQ;IAExC,mEAAmE;IAC5D,cAAc,UAAO;IAE5B,MAAM,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IA4R9B,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,gBAAgB,CAAiB;IAClC,mBAAmB,CAAC,MAAM,EAAE,eAAe;IAUlD,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,MAAM;IAKP,mBAAmB;IAI1B,OAAO,CAAC,aAAa;IAkBrB,IAAW,UAAU,YAEpB;IAED,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,IAAI;IA8BZ,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,WAAW;CAQtB"}
1
+ {"version":3,"file":"character-movement.d.ts","sourceRoot":"","sources":["../../../../../../src/gameplay/actors/builtin/components/character/character-movement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAiB,MAAM,4DAA4D,CAAC;AAC1G,OAAO,EAAoB,OAAO,EAAwB,eAAe,EAAE,MAAM,OAAO,CAAC;AACzF,OAAO,EAAE,cAAc,EAAa,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAkBnD,qBACa,0BAA2B,SAAQ,cAAc;IA0D9C,OAAO,CAAC,aAAa;IAvDjC,QAAQ,CAAC,cAAc,YAAkB;IACzC,QAAQ,CAAC,SAAS,cAAoB;IACtC,QAAQ,CAAC,WAAW,cAAoB;IACxC,QAAQ,CAAC,aAAa,gBAAsB;IAGrC,eAAe,SAAI;IAGnB,QAAQ,SAAI;IACZ,iBAAiB,SAAI;IACrB,cAAc,SAAK;IACnB,YAAY,SAAI;IAChB,sBAAsB,SAAK;IAC3B,oBAAoB,UAAQ;IAC5B,eAAe,EAAE,MAAM,CAAO;IAC9B,cAAc,EAAE,MAAM,CAAI;IAC1B,cAAc,EAAE,MAAM,CAAK;IAC3B,SAAS,UAAQ;IACjB,IAAI,SAAK;IACT,YAAY,UAAO;IACnB,kBAAkB,SAAyB;IAC3C,kBAAkB,SAAyB;IAC3C,4BAA4B,UAAO;IAC1C,oCAAoC;IAC7B,kBAAkB,UAAQ;IACjC,IAAW,gBAAgB,IACW,MAAM,CADuB;IACnE,IAAW,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAA4G;IACxJ,IAAW,sBAAsB,IAAI,OAAO,CAAmD;IAC/F,IAAW,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAA8F;IAChJ,IAAW,iBAAiB,IACY,MAAM,CADuB;IACrE,IAAW,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAA4G;IAC1J,IAAW,YAAY,IACW,MAAM,CAD2B;IACnE,IAAW,YAAY,CAAC,QAAQ,EAAE,MAAM,EAA0C;IAClF,IAAW,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAiC;IACnE,IAAW,MAAM,IADW,MAAM,CACa;IAC/C,IAAW,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAA0C;IACrF,IAAW,iBAAiB,IADS,MAAM,CAC0B;IAErE;;;;OAIG;IACI,OAAO,UAAO;IAGrB,QAAQ,CAAC,QAAQ,UAAgB;IACjC,IAAI,wBAAgC;IACpC,WAAW,UAAQ;IACnB,WAAW,UAAQ;IAEnB,OAAO,CAAC,EAAE,CAAqC;IAC/C,OAAO,CAAC,aAAa,CAAsB;gBAEvB,aAAa,EAAE,aAAa;IAOhD,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,qBAAqB,CAAwB;IAErD;;;OAGG;IACI,yBAAyB,UAAQ;IAExC,mEAAmE;IAC5D,cAAc,UAAO;IAE5B,MAAM,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAiT9B,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,gBAAgB,CAAiB;IAClC,mBAAmB,CAAC,MAAM,EAAE,eAAe;IAUlD,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,MAAM;IAKP,mBAAmB;IAI1B,OAAO,CAAC,aAAa;IAkBrB,IAAW,UAAU,YAEpB;IAED,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,IAAI;IA8BZ,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,WAAW;CAQtB"}