@hology/core 0.0.92 → 0.0.95

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 (80) hide show
  1. package/dist/csm.d.ts.map +1 -1
  2. package/dist/effects/vfx/initializsers.d.ts +4 -1
  3. package/dist/effects/vfx/initializsers.d.ts.map +1 -1
  4. package/dist/effects/vfx/initializsers.js +1 -1
  5. package/dist/effects/vfx/rates.d.ts +8 -0
  6. package/dist/effects/vfx/rates.d.ts.map +1 -1
  7. package/dist/effects/vfx/rates.js +1 -1
  8. package/dist/effects/vfx/vfx-actor.d.ts +2 -1
  9. package/dist/effects/vfx/vfx-actor.d.ts.map +1 -1
  10. package/dist/effects/vfx/vfx-actor.js +1 -1
  11. package/dist/effects/vfx/vfx-asset.d.ts +3 -0
  12. package/dist/effects/vfx/vfx-asset.d.ts.map +1 -1
  13. package/dist/effects/vfx/vfx-asset.js +1 -1
  14. package/dist/effects/vfx/vfx-collision-behaviour.d.ts +19 -0
  15. package/dist/effects/vfx/vfx-collision-behaviour.d.ts.map +1 -0
  16. package/dist/effects/vfx/vfx-collision-behaviour.js +4 -0
  17. package/dist/effects/vfx/vfx-defs.d.ts +27 -15
  18. package/dist/effects/vfx/vfx-defs.d.ts.map +1 -1
  19. package/dist/effects/vfx/vfx-defs.js +1 -1
  20. package/dist/effects/vfx/vfx-materializer.d.ts +3 -4
  21. package/dist/effects/vfx/vfx-materializer.d.ts.map +1 -1
  22. package/dist/effects/vfx/vfx-materializer.js +1 -1
  23. package/dist/effects/vfx/vfx-renderers.d.ts +1 -0
  24. package/dist/effects/vfx/vfx-renderers.d.ts.map +1 -1
  25. package/dist/effects/vfx/vfx-renderers.js +1 -1
  26. package/dist/gameplay/actors/actor.d.ts.map +1 -1
  27. package/dist/gameplay/actors/builtin/components/character/character-movement.d.ts.map +1 -1
  28. package/dist/gameplay/actors/builtin/components/character/character-movement.js +1 -1
  29. package/dist/gameplay/actors/builtin/components/mesh-component.d.ts.map +1 -1
  30. package/dist/gameplay/actors/builtin/components/mesh-component.js +1 -1
  31. package/dist/gameplay/actors/builtin/navmesh-actor.d.ts +11 -0
  32. package/dist/gameplay/actors/builtin/navmesh-actor.d.ts.map +1 -1
  33. package/dist/gameplay/actors/builtin/navmesh-actor.js +1 -1
  34. package/dist/gameplay/actors/camera/third-person-camera-component.d.ts.map +1 -1
  35. package/dist/gameplay/actors/camera/third-person-camera-component.js +1 -1
  36. package/dist/gameplay/actors/component.d.ts.map +1 -1
  37. package/dist/gameplay/ai/build-tile.d.ts +1 -1
  38. package/dist/gameplay/ai/build-tile.d.ts.map +1 -1
  39. package/dist/gameplay/ai/dynamic-tiled-navmesh.d.ts.map +1 -1
  40. package/dist/gameplay/ai/dynamic-tiled-navmesh.js +1 -1
  41. package/dist/gameplay/input/input.d.ts.map +1 -1
  42. package/dist/gameplay/services/physics/physics-system.d.ts.map +1 -1
  43. package/dist/gameplay/services/physics/physics-system.js +1 -1
  44. package/dist/gameplay/services/pointer-events.d.ts.map +1 -1
  45. package/dist/rendering.d.ts.map +1 -1
  46. package/dist/rendering.js +1 -1
  47. package/dist/scene/asset-resource-loader.js +1 -1
  48. package/dist/scene/collision/collision-shape-import.d.ts.map +1 -1
  49. package/dist/scene/collision/collision-shape-import.js +1 -1
  50. package/dist/scene/materializer.d.ts +11 -2
  51. package/dist/scene/materializer.d.ts.map +1 -1
  52. package/dist/scene/materializer.js +1 -1
  53. package/dist/scene/model.d.ts +4 -3
  54. package/dist/scene/model.d.ts.map +1 -1
  55. package/dist/scene/model.js +1 -1
  56. package/dist/scene/objects/prefab.d.ts +8 -0
  57. package/dist/scene/objects/prefab.d.ts.map +1 -0
  58. package/dist/scene/objects/prefab.js +4 -0
  59. package/dist/scene/objects/shapes.d.ts +1 -1
  60. package/dist/scene/objects/shapes.d.ts.map +1 -1
  61. package/dist/scene/scene-data-service.d.ts +17 -7
  62. package/dist/scene/scene-data-service.d.ts.map +1 -1
  63. package/dist/scene/scene-data-service.js +1 -1
  64. package/dist/scene/storage/storage.d.ts +9 -8
  65. package/dist/scene/storage/storage.d.ts.map +1 -1
  66. package/dist/scene/storage/storage.js +1 -1
  67. package/dist/shader/parameter.d.ts +2 -1
  68. package/dist/shader/parameter.d.ts.map +1 -1
  69. package/dist/shader-nodes/particle.d.ts +4 -2
  70. package/dist/shader-nodes/particle.d.ts.map +1 -1
  71. package/dist/shader-nodes/particle.js +1 -1
  72. package/dist/utils/curve.d.ts +12 -0
  73. package/dist/utils/curve.d.ts.map +1 -0
  74. package/dist/utils/curve.js +4 -0
  75. package/dist/utils/math.js +1 -1
  76. package/dist/utils/voxel-bitset.d.ts +14 -0
  77. package/dist/utils/voxel-bitset.d.ts.map +1 -0
  78. package/dist/utils/voxel-bitset.js +4 -0
  79. package/package.json +198 -122
  80. package/tsconfig.tsbuildinfo +1 -1
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"}
@@ -9,8 +9,11 @@ export declare class Rotation extends Initializer {
9
9
  constructor(rotation: Vector3);
10
10
  initialize(target: Particle): void;
11
11
  }
12
+ export declare const randomRotationAxis: readonly ["XYZ", "X", "Y", "Z"];
13
+ export type RandomRotationAxis = typeof randomRotationAxis[number];
12
14
  export declare class RandomRotation extends Initializer {
13
- constructor();
15
+ private axis;
16
+ constructor(axis: RandomRotationAxis);
14
17
  initialize(particle: Particle): void;
15
18
  private randomAngle;
16
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"initializsers.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/initializsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAA6B,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE3F,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;IAIzC,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI;CAG7C;AAGD,qBAAa,QAAS,SAAQ,WAAW;IAC3B,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,OAAO;IACrC,UAAU,CAAC,MAAM,EAAE,QAAQ;CAK5B;AAGD,qBAAa,cAAe,SAAQ,WAAW;;IAE7C,UAAU,CAAE,QAAQ,EAAE,QAAQ;IAI9B,OAAO,CAAC,WAAW;CAGpB;AAGD,qBAAa,YAAa,SAAQ,WAAW;IAC/B,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,MAAM;IACjC,UAAU,CAAC,QAAQ,EAAE,QAAQ;CAG9B;AAED,qBAAa,WAAY,SAAQ,WAAW;IAC9B,OAAO,CAAC,GAAG;IAAU,OAAO,CAAC,GAAG;gBAAxB,GAAG,EAAE,MAAM,EAAU,GAAG,EAAE,MAAM;IACpD,UAAU,CAAC,QAAQ,EAAE,QAAQ;CAG9B;AAGD,qBAAa,sBAAuB,SAAQ,WAAW;IACzC,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,OAAO;IAClC,UAAU,CAAE,QAAQ,EAAE,QAAQ;CAG/B;AAED,qBAAa,gBAAiB,SAAQ,WAAW;IACnC,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,OAAO;IAErC,UAAU,CAAC,QAAQ,EAAE,QAAQ;CAK9B;AAGD,qBAAa,eAAgB,SAAQ,WAAW;IAClC,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,MAAM;IAEjC,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI;CAO7C;AAED;;GAEG;AAcH,qBAAa,cAAe,SAAQ,WAAW;IAIjC,OAAO,CAAC,GAAG;IAAW,OAAO,CAAC,GAAG;IAH7C,OAAO,CAAC,CAAC,CAAmC;IAC5C,OAAO,CAAC,CAAC,CAAmC;IAC5C,OAAO,CAAC,CAAC,CAAmC;gBACxB,GAAG,EAAE,OAAO,EAAU,GAAG,EAAE,OAAO;IACtD,UAAU,CAAC,MAAM,EAAE,QAAQ;CAM5B"}
1
+ {"version":3,"file":"initializsers.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/initializsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAA6B,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE3F,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;IAIzC,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI;CAG7C;AAGD,qBAAa,QAAS,SAAQ,WAAW;IAC3B,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,OAAO;IACrC,UAAU,CAAC,MAAM,EAAE,QAAQ;CAK5B;AAED,eAAO,MAAM,kBAAkB,iCAAkC,CAAA;AACjE,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAA;AAClE,qBAAa,cAAe,SAAQ,WAAW;IACjC,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,kBAAkB;IAC5C,UAAU,CAAC,QAAQ,EAAE,QAAQ;IAiB7B,OAAO,CAAC,WAAW;CAGpB;AAGD,qBAAa,YAAa,SAAQ,WAAW;IAC/B,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,MAAM;IACjC,UAAU,CAAC,QAAQ,EAAE,QAAQ;CAG9B;AAED,qBAAa,WAAY,SAAQ,WAAW;IAC9B,OAAO,CAAC,GAAG;IAAU,OAAO,CAAC,GAAG;gBAAxB,GAAG,EAAE,MAAM,EAAU,GAAG,EAAE,MAAM;IACpD,UAAU,CAAC,QAAQ,EAAE,QAAQ;CAG9B;AAGD,qBAAa,sBAAuB,SAAQ,WAAW;IACzC,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,OAAO;IAClC,UAAU,CAAE,QAAQ,EAAE,QAAQ;CAG/B;AAED,qBAAa,gBAAiB,SAAQ,WAAW;IACnC,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,OAAO;IAErC,UAAU,CAAC,QAAQ,EAAE,QAAQ;CAK9B;AAGD,qBAAa,eAAgB,SAAQ,WAAW;IAClC,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,MAAM;IAEjC,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI;CAO7C;AAED;;GAEG;AAcH,qBAAa,cAAe,SAAQ,WAAW;IAIjC,OAAO,CAAC,GAAG;IAAW,OAAO,CAAC,GAAG;IAH7C,OAAO,CAAC,CAAC,CAAmC;IAC5C,OAAO,CAAC,CAAC,CAAmC;IAC5C,OAAO,CAAC,CAAC,CAAmC;gBACxB,GAAG,EAAE,OAAO,EAAU,GAAG,EAAE,OAAO;IACtD,UAAU,CAAC,MAAM,EAAE,QAAQ;CAM5B"}
@@ -1,4 +1,4 @@
1
- import{Vector3 as t}from"three";import{Span as i,Initializer as e}from"@hology/nebula";export class DefaultInitializer extends e{init(t,i){i.parent=t}initialize(t){}}export class Rotation extends e{constructor(t){super(),this.rotation=t}initialize(t){"number"!=typeof t.rotation&&t.rotation.copy(this.rotation)}}export class RandomRotation extends e{constructor(){super()}initialize(t){t.rotation.set(this.randomAngle(),this.randomAngle(),this.randomAngle())}randomAngle(){return 2*Math.PI*Math.random()}}export class InitialScale extends e{constructor(t){super(),this.scale=t}initialize(t){t.scale=this.scale}}export class RandomScale extends e{constructor(t,i){super(),this.min=t,this.max=i}initialize(t){var i,e;t.scale=(i=this.min,e=this.max,Math.random()*(e-i)+i)}}export class InitialScaleComponents extends e{constructor(t){super(),this.scale=t}initialize(t){t.transform.initialScale=this.scale}}export class AdditiveVelocity extends e{constructor(t){super(),this.velocity=t}initialize(t){t.velocity.x+=this.velocity.x,t.velocity.y+=this.velocity.y,t.velocity.z+=this.velocity.z}}export class RandomDirection extends e{constructor(t){super(),this.speed=t}initialize(t){s.set(2*Math.random()-1,2*Math.random()-1,2*Math.random()-1).normalize().multiplyScalar(this.speed),t.velocity.x+=s.x,t.velocity.y+=s.y,t.velocity.z+=s.z}}export class RandomVelocity extends e{constructor(t,e){super(),this.min=t,this.max=e,this.x=new i(this.min.x,this.max.x),this.y=new i(this.min.y,this.max.y),this.z=new i(this.min.z,this.max.z)}initialize(t){t.velocity.x+=this.x.getValue(),t.velocity.y+=this.y.getValue(),t.velocity.z+=this.z.getValue()}}const s=new t;/*
1
+ import{Vector3 as t}from"three";import{Span as i,Initializer as e}from"@hology/nebula";export class DefaultInitializer extends e{init(t,i){i.parent=t}initialize(t){}}export class Rotation extends e{constructor(t){super(),this.rotation=t}initialize(t){"number"!=typeof t.rotation&&t.rotation.copy(this.rotation)}}export const randomRotationAxis=["XYZ","X","Y","Z"];export class RandomRotation extends e{constructor(t){super(),this.axis=t}initialize(t){switch(this.axis){case"XYZ":t.rotation.set(this.randomAngle(),this.randomAngle(),this.randomAngle());break;case"X":t.rotation.x=this.randomAngle();break;case"Y":t.rotation.y=this.randomAngle();break;case"Z":t.rotation.z=this.randomAngle()}}randomAngle(){return 2*Math.PI*Math.random()}}export class InitialScale extends e{constructor(t){super(),this.scale=t}initialize(t){t.scale=this.scale}}export class RandomScale extends e{constructor(t,i){super(),this.min=t,this.max=i}initialize(t){var i,e;t.scale=(i=this.min,e=this.max,Math.random()*(e-i)+i)}}export class InitialScaleComponents extends e{constructor(t){super(),this.scale=t}initialize(t){t.transform.initialScale=this.scale}}export class AdditiveVelocity extends e{constructor(t){super(),this.velocity=t}initialize(t){t.velocity.x+=this.velocity.x,t.velocity.y+=this.velocity.y,t.velocity.z+=this.velocity.z}}export class RandomDirection extends e{constructor(t){super(),this.speed=t}initialize(t){s.set(2*Math.random()-1,2*Math.random()-1,2*Math.random()-1).normalize().multiplyScalar(this.speed),t.velocity.x+=s.x,t.velocity.y+=s.y,t.velocity.z+=s.z}}export class RandomVelocity extends e{constructor(t,e){super(),this.min=t,this.max=e,this.x=new i(this.min.x,this.max.x),this.y=new i(this.min.y,this.max.y),this.z=new i(this.min.z,this.max.z)}initialize(t){t.velocity.x+=this.x.getValue(),t.velocity.y+=this.y.getValue(),t.velocity.z+=this.z.getValue()}}const s=new t;/*
2
2
  * Copyright (©) 2023. All rights reserved.
3
3
  * See the LICENSE.md file for details.
4
4
  */
@@ -15,4 +15,12 @@ export declare class OnceRate extends DelayRate {
15
15
  init(): void;
16
16
  getValue(time: any): number;
17
17
  }
18
+ export declare class ConstantRate extends DelayRate {
19
+ private perSecond;
20
+ private emitted;
21
+ constructor(delay: number, perSecond?: number);
22
+ clone(): ConstantRate;
23
+ init(): void;
24
+ getValue(time: any): number;
25
+ }
18
26
  //# sourceMappingURL=rates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rates.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/rates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAC,IAAI,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAErC,qBAAa,SAAU,SAAQ,IAAI;aACL,KAAK,EAAE,MAAM;gBAAb,KAAK,GAAE,MAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,IAAI;IAK1H,OAAO,IAAI,IAAI;IAOf,KAAK;CAGN;AAED,qBAAa,QAAS,SAAQ,SAAS;IAEV,OAAO,CAAC,KAAK;IADxC,OAAO,CAAC,KAAK,CAAK;gBACN,KAAK,EAAE,MAAM,EAAU,KAAK,SAAI;IAK5C,KAAK;IAGL,IAAI;IAGJ,QAAQ,CAAC,IAAI,KAAA;CAuBd"}
1
+ {"version":3,"file":"rates.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/rates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAC,IAAI,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAErC,qBAAa,SAAU,SAAQ,IAAI;aACL,KAAK,EAAE,MAAM;gBAAb,KAAK,GAAE,MAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,IAAI;IAK1H,OAAO,IAAI,IAAI;IAOf,KAAK;CAGN;AAED,qBAAa,QAAS,SAAQ,SAAS;IAEV,OAAO,CAAC,KAAK;IADxC,OAAO,CAAC,KAAK,CAAK;gBACN,KAAK,EAAE,MAAM,EAAU,KAAK,SAAI;IAK5C,KAAK;IAGL,IAAI;IAGJ,QAAQ,CAAC,IAAI,KAAA;CAuBd;AAED,qBAAa,YAAa,SAAQ,SAAS;IAGd,OAAO,CAAC,SAAS;IAF5C,OAAO,CAAC,OAAO,CAAI;gBAEP,KAAK,EAAE,MAAM,EAAU,SAAS,SAAI;IAQhD,KAAK;IAGL,IAAI;IAIJ,QAAQ,CAAC,IAAI,KAAA;CAkBd"}
@@ -1,4 +1,4 @@
1
- import{Rate as t}from"@hology/nebula";export{Rate}from"@hology/nebula";export class DelayRate extends t{constructor(t=0,e,s){super(e,s),this.delay=t,this.restart()}restart(){this.nextTime=0,null!=this.delay&&this.delay>0&&(this.startTime=-this.delay)}clone(){return new DelayRate(this.delay,this.numPan,this.timePan)}}export class OnceRate extends DelayRate{constructor(t,e=1){super(t,e,1/0),this.count=e,this.calls=0,this.nextTime=0}clone(){return new OnceRate(this.delay,this.count)}init(){this.restart()}getValue(t){return this.calls++,this.startTime+=t,this.startTime>=this.nextTime?(this.nextTime=1/0,this.count):0}}/*
1
+ import{Rate as t}from"@hology/nebula";export{Rate}from"@hology/nebula";export class DelayRate extends t{constructor(t=0,e,s){super(e,s),this.delay=t,this.restart()}restart(){this.nextTime=0,null!=this.delay&&this.delay>0&&(this.startTime=-this.delay)}clone(){return new DelayRate(this.delay,this.numPan,this.timePan)}}export class OnceRate extends DelayRate{constructor(t,e=1){super(t,e,1/0),this.count=e,this.calls=0,this.nextTime=0}clone(){return new OnceRate(this.delay,this.count)}init(){this.restart()}getValue(t){return this.calls++,this.startTime+=t,this.startTime>=this.nextTime?(this.nextTime=1/0,this.count):0}}export class ConstantRate extends DelayRate{constructor(t,e=1){super(t,e,1),this.perSecond=e,this.emitted=0,this.nextTime=0}clone(){return new ConstantRate(this.delay,this.perSecond)}init(){this.restart(),this.emitted=0}getValue(t){if(this.startTime+=t,this.startTime>=this.nextTime){let t=0;for(;this.emitted+t<this.startTime*this.perSecond;)t++;return this.emitted+=t,t}return 0}}/*
2
2
  * Copyright (©) 2023. All rights reserved.
3
3
  * See the LICENSE.md file for details.
4
4
  */
@@ -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
  */
@@ -35,7 +36,7 @@ export declare class VfxActor extends BaseActor {
35
36
  * The container is a child of the actor so still objects move along with the actor
36
37
  *
37
38
  */
38
- getParticleCount(): number;
39
+ getParticleCount(): any;
39
40
  onEndPlay(): void;
40
41
  }
41
42
  //# sourceMappingURL=vfx-actor.d.ts.map
@@ -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":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAA0B,MAAM,eAAe,CAAC;AAM1G,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAA;IAEZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AACD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,YAAY,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AACD,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAC,kBAAkB,CAAA;AAEtD,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,wBAAwB,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;CACzC,CAAA;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,uBAAuB,CAAA;IAE7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;CACzC;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAWlD,eAAO,MAAM,aAAa,4DAA6D,CAAA;AACvF,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AACzD,eAAO,MAAM,iBAAiB;;;;;CAKU,CAAA;AAExC,eAAO,MAAM,aAAa,4BAA6B,CAAA;AACvD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAEzD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,YAAY,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,OAAO,GAAC,OAAO,CAAA;CACvB,CAAA;AACD,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,YAAY,CAAA;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,gBAAgB,CAAA;CAC5B,GAAG,YAAY,CAAA;AAChB,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,iBAAiB,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,YAAY,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB,GAAG,YAAY,CAAA;AAChB,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;CACjB,GAAG,YAAY,CAAA;AAChB,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IAEd,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,OAAO,CAAA;CAMf,GAAG,YAAY,CAAA;AAChB,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,gBAAgB,CAAC;IAExB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAOxC,QAAQ,EAAE,OAAO,CAAA;CAClB,GAAG,YAAY,CAAA;AAChB,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,qBAAqB,GAAG,WAAW,CAAA;AAEzG,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAA;IAIZ,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAA;IAGxB,MAAM,EAAE,aAAa,CAAA;IAErB,UAAU,CAAC,EAAE,uBAAuB,CAAA;CACrC,CAAA;AAED,eAAO,MAAM,wBAAwB,iCAAkC,CAAA;AACvE,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/E,MAAM,MAAM,YAAY,GAAG;IACzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,EAAE,WAAW,EAAE,CAAA;CAExB,CAAA;AAGD,wBAAgB,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCrC"}
@@ -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> & {
@@ -104,7 +105,9 @@ declare class RotationDef extends BaseIniDef<RotationDef> {
104
105
  make(params?: ParamsType<this>): Initializer;
105
106
  }
106
107
  declare class RandomRotationDef extends BaseIniDef<RandomRotationDef> {
107
- parameters: {};
108
+ parameters: {
109
+ axis: SelectParameterDef<string>;
110
+ };
108
111
  make(params?: ParamsType<this>): Initializer;
109
112
  }
110
113
  declare class InitialScaleDef extends BaseIniDef<InitialScaleDef> {
@@ -129,14 +132,14 @@ declare class InitialScaleComponentsDef extends BaseIniDef<InitialScaleComponent
129
132
  declare class ForceDef extends BaseBevDef<ForceDef> {
130
133
  parameters: {
131
134
  force: ShapeParameterDef<Vector3>;
132
- ease: SelectParameterDef<string>;
135
+ ease: ShapeParameterDef<Curve2>;
133
136
  };
134
137
  make(params?: ParamsType<this>): Behaviour;
135
138
  }
136
139
  declare class GravityDef extends BaseBevDef<GravityDef> {
137
140
  parameters: {
138
141
  gravity: FloatParameterDef;
139
- easing: SelectParameterDef<string>;
142
+ easing: ShapeParameterDef<Curve2>;
140
143
  };
141
144
  make(params?: ParamsType<this>): Behaviour;
142
145
  }
@@ -144,7 +147,7 @@ declare class ScaleDef extends BaseBevDef<ScaleDef> {
144
147
  parameters: {
145
148
  a: FloatParameterDef;
146
149
  b: FloatParameterDef;
147
- ease: SelectParameterDef<string>;
150
+ ease: ShapeParameterDef<Curve2>;
148
151
  };
149
152
  make(params?: ParamsType<this>): Behaviour;
150
153
  }
@@ -152,14 +155,14 @@ declare class RandomDriftDef extends BaseBevDef<RandomDriftDef> {
152
155
  parameters: {
153
156
  drift: ShapeParameterDef<Vector3>;
154
157
  delay: FloatParameterDef;
155
- ease: SelectParameterDef<string>;
158
+ ease: ShapeParameterDef<Curve2>;
156
159
  };
157
160
  make(params?: ParamsType<this>): Behaviour;
158
161
  }
159
162
  declare class RotateDef extends BaseBevDef<RotateDef> {
160
163
  parameters: {
161
164
  rotation: ShapeParameterDef<Vector3>;
162
- ease: SelectParameterDef<string>;
165
+ ease: ShapeParameterDef<Curve2>;
163
166
  };
164
167
  make(params?: ParamsType<this>): Behaviour;
165
168
  }
@@ -179,7 +182,7 @@ declare class ChangeColorDef extends BaseBevDef<ChangeColorDef> {
179
182
  parameters: {
180
183
  a: ShapeParameterDef<`#${string}`>;
181
184
  b: ShapeParameterDef<`#${string}`>;
182
- ease: SelectParameterDef<string>;
185
+ ease: ShapeParameterDef<Curve2>;
183
186
  };
184
187
  make(params?: ParamsType<this>): Behaviour;
185
188
  }
@@ -187,7 +190,7 @@ declare class ChangeOpacityDef extends BaseBevDef<ChangeOpacityDef> {
187
190
  parameters: {
188
191
  a: FloatParameterDef;
189
192
  b: FloatParameterDef;
190
- ease: SelectParameterDef<string>;
193
+ ease: ShapeParameterDef<Curve2>;
191
194
  };
192
195
  make(params?: ParamsType<this>): Behaviour;
193
196
  }
@@ -203,7 +206,7 @@ declare class RepulsionDef extends BaseBevDef<RepulsionDef> {
203
206
  target: ShapeParameterDef<Vector3>;
204
207
  force: FloatParameterDef;
205
208
  radius: FloatParameterDef;
206
- easing: SelectParameterDef<string>;
209
+ easing: ShapeParameterDef<Curve2>;
207
210
  };
208
211
  make(params?: ParamsType<this>): Behaviour;
209
212
  }
@@ -212,14 +215,14 @@ declare class AttractionDef extends BaseBevDef<AttractionDef> {
212
215
  target: ShapeParameterDef<Vector3>;
213
216
  force: FloatParameterDef;
214
217
  radius: FloatParameterDef;
215
- easing: SelectParameterDef<string>;
218
+ easing: ShapeParameterDef<Curve2>;
216
219
  };
217
220
  make(params?: ParamsType<this>): Behaviour;
218
221
  }
219
222
  declare class MoveToDef extends BaseBevDef<MoveToDef> {
220
223
  parameters: {
221
224
  target: ShapeParameterDef<Vector3>;
222
- ease: SelectParameterDef<string>;
225
+ ease: ShapeParameterDef<Curve2>;
223
226
  };
224
227
  make(params?: ParamsType<this>): Behaviour;
225
228
  }
@@ -229,6 +232,14 @@ declare class LinearDampingDef extends BaseBevDef<LinearDampingDef> {
229
232
  };
230
233
  make(params?: ParamsType<this>): Behaviour;
231
234
  }
235
+ declare class WorldCollisionDef extends BaseBevDef<WorldCollisionDef> {
236
+ parameters: {
237
+ friction: FloatParameterDef;
238
+ bounce: FloatParameterDef;
239
+ lifeLoss: FloatParameterDef;
240
+ };
241
+ make(params?: ParamsType<this>): Behaviour;
242
+ }
232
243
  declare const vfxInitializsers: {
233
244
  lifetime: LifetimeDef;
234
245
  positionPoint: PositionPointDef;
@@ -260,12 +271,13 @@ declare const vfxBehaviours: {
260
271
  moveTo: MoveToDef;
261
272
  linearDamping: LinearDampingDef;
262
273
  followParent: FollowParentDef;
274
+ worldCollision: WorldCollisionDef;
263
275
  };
264
276
  export type LibraryVfxInitalizerType = keyof typeof vfxInitializsers;
265
277
  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")[];
278
+ export declare const VfxInitializserLibraryKeys: LibraryVfxInitalizerType[];
267
279
  export type LibraryVfxBehaviourType = keyof typeof vfxBehaviours;
268
280
  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")[];
281
+ export declare const VfxBehaviourLibraryKeys: LibraryVfxBehaviourType[];
270
282
  export {};
271
283
  //# 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":"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"}
@@ -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 d,LineZone as p,Mass as m,Position as l,RadialVelocity as w,RandomDrift as x,Repulsion as f,Rotate as y,Vector3D as h}from"@hology/nebula";import{AxisDirection as g,AxisPlane as k,Disperse as v,FollowParent as b,LinearDamping as z,MoveOverLife as T,OrientAlongVelocity as R,RotatePosition as L,Scale as j}from"./behaviours.js";import{AdditiveVelocity as V,InitialScale as B,InitialScaleComponents as C,RandomDirection as D,RandomRotation as I,randomRotationAxis as O,RandomScale as A,Rotation as K}from"./initializsers.js";import{PointZone as P,SphereZone as S}from"./zones.js";import{WorldCollisionBehaviour as Y}from"./vfx-collision-behaviour.js";import{Curve2 as X}from"../../utils/curve.js";class Z{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{type:"curve",default:X.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 q{constructor(){super(...arguments),this.parameters={duration:E(1,0,1e5)}}make(e={}){return new d(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 P(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 S(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 p(r,t,s,n,a,o))}},rotation:new class extends q{constructor(){super(...arguments),this.parameters={rotation:F([0,0,0])}}make(r={}){const{x:s,y:n,z:a}=r.rotation;return new K(new t(e.degToRad(s),e.degToRad(n),e.degToRad(a)))}},randomRotation:new class extends q{constructor(){super(...arguments),this.parameters={axis:H(O,"XYZ")}}make(e={}){return new I(e.axis)}},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 C(e.scale)}},randomScale:new class extends q{constructor(){super(...arguments),this.parameters={min:E(1),max:E(1)}}make(e={}){return new A(e.min,e.max)}},mass:new class extends q{constructor(){super(...arguments),this.parameters={min:E(1)}}make(e={}){return new m(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 V(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 D(e.speed)}}},U={force:new class extends Z{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 Z{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 Z{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 Z{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 Z{constructor(){super(...arguments),this.parameters={a:E(1),b:E(1),ease:J()}}make(e={}){return new j(e.a,e.b,N(e.ease))}},randomDrift:new class extends Z{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 Z{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 Z{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 Z{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 Z{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 Z{constructor(){super(...arguments),this.parameters={axis:F([0,1,0]),amount:E(1)}}make(e={}){return new L(e.axis,e.amount)}},moveTo:new class extends Z{constructor(){super(...arguments),this.parameters={target:F([0,1,0]),ease:J()}}make(e={}){return new T(e.target.x,e.target.y,e.target.z,N(e.ease))}},linearDamping:new class extends Z{constructor(){super(...arguments),this.parameters={factor:E(.1,0,1)}}make(e={}){return new z(e.factor)}},followParent:new class extends Z{constructor(){super(...arguments),this.parameters={speed:E(1)}}make(e={}){return new b(e.speed)}},worldCollision:new class extends Z{constructor(){super(...arguments),this.parameters={friction:E(1,0,1),bounce:E(1,0,1),lifeLoss:E(0,0)}}make(e={}){return new Y(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
  */
@@ -1,8 +1,7 @@
1
- import System from "@hology/nebula";
2
1
  import * as THREE from 'three';
3
2
  import { Object3D } from "three";
4
3
  import { NodeShaderMaterial } from "three-shader-graph";
5
- import { ViewController } from '../../gameplay/index.js';
4
+ import { PhysicsSystem, ViewController } from '../../gameplay/index.js';
6
5
  import { Asset, VfxAsset } from '../../scene/model.js';
7
6
  export type VfxAssetProvider = {
8
7
  getAsset(assetId: string): Promise<Asset>;
@@ -10,9 +9,9 @@ export type VfxAssetProvider = {
10
9
  getMesh(assetId: string): Promise<THREE.Object3D>;
11
10
  getMaterial(assetId: string): Promise<THREE.Material>;
12
11
  };
13
- export declare function materializeVfx(asset: VfxAsset, target: Object3D, assetProvider: VfxAssetProvider, view: ViewController): Promise<{
12
+ export declare function materializeVfx(asset: VfxAsset, target: Object3D, assetProvider: VfxAssetProvider, view: ViewController, physics: PhysicsSystem): Promise<{
14
13
  container: THREE.Object3D<THREE.Object3DEventMap>;
15
- system: System;
14
+ system: any;
16
15
  dispose: () => void;
17
16
  }>;
18
17
  export declare class SpriteNodeShaderMaterial extends NodeShaderMaterial {
@@ -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":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAmD,kBAAkB,EAA0U,MAAM,oBAAoB,CAAC;AAEjb,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;AA8YD,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;AA8RD,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,uniformFloat as B,uniforms as j,varying as k,varyingAttributes as z,varyingVec3 as T,varyingVec4 as V}from"three-shader-graph";import{prepareShapeParameters as D}from"../../scene/materializer.js";import{SerializedParamType as F}from"../../scene/model.js";import{ShapeLibrary as Q}from"../../scene/objects/shapes.js";import{fragmentLinearEyeDepth as U,linearEyeDepth as W}from"../../shader-nodes/depth.js";import{particleEnergyUniformName as L,particleTimeUniformName as q,particleUniforms as H,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 O,OnceRate as K}from"./rates.js";import{StretchedSprite as X}from"./stretched-sprite.js";import{ThreeBlendingMode as Y}from"./vfx-asset.js";import{VfxBehaviourLibrary as Z,VfxInitializserLibrary as _}from"./vfx-defs.js";import{MultiRenderer as $}from"./vfx-renderers.js";import{WorldCollisionBehaviour as ee}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 te(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 te(e,t,n,m){const T=function(e){let t;switch(e.rate.type){case"continuous":t=new O(e.rate.delay??0,e.rate.count,e.rate.time);break;case"once":t=new K(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):ie,n=R(i);let s=n.sample(z.uv);e.flipbook?.enabled&&(s=J(n,w.uv,e.flipbook.columns,e.flipbook.rows,H.time,e.flipbook.fps,e.flipbook.mode));const r=new p("rotation",0),a=new u("color").rgb,l=B("opacity",1),c=W.subtract(U).divide(W);let m=s.x.multiply(l);if("number"==typeof e.softness&&e.softness>0){const t=b(c,v(e.softness));m=m.multiply(t)}const h=A(d,{position:C.position,modelViewMatrix:j.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 f=new SpriteNodeShaderMaterial({color:P(a,m).multiply(s),transparent:!0,position:h,uniforms:{color:{value:new o.Color(e.color)}}});f.blending=Y[e.blendingMode]??o.NormalBlending;const y=new o.Mesh(new o.PlaneGeometry(1,1),f);return y.name="sprite",y}(e.output,t));break;case"stretchedSprite":L=new i(await async function(e,t){const i=null!=e.texture?await t.getTexture(e.texture):ie,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=W.subtract(U).divide(E(W)),i=b(t,v(e.softness));a=I(a.multiply(i))}const c=A(d,{position:w.position,offset:g("offset"),modelViewMatrix:j.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=Y[e.blendingMode]??o.NormalBlending;const p=new X(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){if(null==e.shape)return console.log("Shape is null"),new r;const i=Q[e.shape];if(null==i)return console.error(`No shape with type ${e.shape}`),new r;const n=D(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))))}));await Promise.all(s);const a=[];if(i.traverse((e=>{e instanceof o.Mesh&&a.push(e)})),1===a.length){const e=a[0];return e.updateWorldMatrix(!0,!0),e.updateMatrixWorld(),e.matrix.copy(e.matrixWorld),e.matrixWorld.decompose(e.position,e.quaternion,e.scale),e.removeFromParent(),e}return 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 q=new se;q.parent=n,q.setRate(T),q._space=e.output.space;const G=await Promise.all(e.initializers.filter((e=>null!=_[e.type])).map((async e=>{const t=_[e.type],i=await D(e.params??{});return t.build(i)})));G.push(L,new N),q.addInitializers(G);const $=await Promise.all(e.behaviours.filter((e=>null!=Z[e.type])).map((async e=>{const t=Z[e.type];for(const[i,n]of Object.entries(e.params))t.parameters&&null!=t.parameters[i]&&"curve"===t.parameters[i].type&&n.type!==F.Curve&&(n.type=F.Curve);const i=await D(e.params??{});return t.build(i)})).sort(((e,t)=>e instanceof ee?1:0)));$.push(new ne);for(const e of $)e instanceof ee&&(e.physics=m);q.addBehaviours($);for(const i of e.children){const e=await te(i,t,n,m),s=new EmitterPool((()=>{const t=e.clone();return t.onExpired=()=>{const e=q.childEmitters.findIndex((e=>e.id===t.id));-1!=e&&q.childEmitters.splice(e,1),s.release(t)},t})),o=q.eventDispatcher,r=new Map;q.bindEmitterEvent=!0,o.addEventListener("PARTICLE_DEAD",(e=>{const t=r.get(e.id);if(null!=t){const e=q.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(),q.childEmitters.push(t),r.set(e.id,t),t.parentParticle=e,t.system=q.system,t.emit()}))}return q}const ie=(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 ne extends t{initialize(e){e.body instanceof o.Object3D&&e.body.traverse((e=>{if(e instanceof o.Mesh){const t=e.material;t instanceof c&&(null!=t.uniforms[L]||null!=t.uniforms[q]||t.uniforms[G])}}))}mutate(e,t,i){this.energize(e,t),e.target instanceof r&&e.target.traverse((t=>{if(t instanceof o.Mesh){const i=t.material;i instanceof c&&(null!=i.uniforms[L]&&(i.uniforms[L].value=this.energy),null!=i.uniforms[q]&&(i.uniforms[q].value=e.age),null!=i.uniforms[G]&&(i.uniforms[G].value=e.velocity))}}))}}class se 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 se;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(p,Math.PI/-2),u.setFromUnitVectors(a,r),t.quaternion.copy(u)}t.material instanceof a.Material&&(r&&(t.material instanceof o&&null!=t.material.uniforms.opacity&&(t.material.uniforms.opacity.value=e.alpha,t.material.uniformsNeedUpdate=!0),t.material.opacity=e.alpha,t.material.transparent=!0),s&&(null!=t.material.color?t.material.color.copy(e.color):t.material instanceof a.ShaderMaterial&&null!=t.material.uniforms.color&&(t.material.uniforms.color.value=e.color,t.material.uniformsNeedUpdate=!0)))}}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,u=new a.Quaternion,p=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,r.mesh.material.defines.USE_INSTANCING="";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));f(e,n.mesh),a&&(n.mesh.setColorAt(e.target,U.copy(e.color)),n.mesh.instanceColor.needsUpdate=!0);const o=n.mesh.geometry.getAttribute("particleData");r&&o.setX(e.target,e.alpha),o.setY(e.target,e.energy),o.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(p,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"}