custom-pixi-particles 4.7.0 → 4.8.0

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.
@@ -10,5 +10,6 @@ declare const _default: {
10
10
  COLLISION_BEHAVIOUR: string;
11
11
  ATTRACTION_REPULSION_BEHAVIOUR: string;
12
12
  NOISE_BASED_MOTION_BEHAVIOUR: string;
13
+ FORCE_FIELDS_BEHAVIOUR: string;
13
14
  };
14
15
  export default _default;
@@ -10,5 +10,6 @@ export default {
10
10
  COLLISION_BEHAVIOUR: 'CollisionBehaviour',
11
11
  ATTRACTION_REPULSION_BEHAVIOUR: 'AttractionRepulsionBehaviour',
12
12
  NOISE_BASED_MOTION_BEHAVIOUR: 'NoiseBasedMotionBehaviour',
13
+ FORCE_FIELDS_BEHAVIOUR: 'ForceFieldsBehaviour',
13
14
  };
14
15
  //# sourceMappingURL=BehaviourNames.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BehaviourNames.js","sourceRoot":"","sources":["../../../src/lib/behaviour/BehaviourNames.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,iBAAiB,EAAE,0BAA0B;IAC7C,cAAc,EAAE,eAAe;IAC/B,eAAe,EAAE,gBAAgB;IACjC,kBAAkB,EAAE,mBAAmB;IACvC,cAAc,EAAE,eAAe;IAC/B,cAAc,EAAE,wBAAwB;IACxC,kBAAkB,EAAE,mBAAmB;IACvC,oBAAoB,EAAE,qBAAqB;IAC3C,mBAAmB,EAAE,oBAAoB;IACzC,8BAA8B,EAAE,8BAA8B;IAC9D,4BAA4B,EAAE,2BAA2B;CAC1D,CAAA"}
1
+ {"version":3,"file":"BehaviourNames.js","sourceRoot":"","sources":["../../../src/lib/behaviour/BehaviourNames.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,iBAAiB,EAAE,0BAA0B;IAC7C,cAAc,EAAE,eAAe;IAC/B,eAAe,EAAE,gBAAgB;IACjC,kBAAkB,EAAE,mBAAmB;IACvC,cAAc,EAAE,eAAe;IAC/B,cAAc,EAAE,wBAAwB;IACxC,kBAAkB,EAAE,mBAAmB;IACvC,oBAAoB,EAAE,qBAAqB;IAC3C,mBAAmB,EAAE,oBAAoB;IACzC,8BAA8B,EAAE,8BAA8B;IAC9D,4BAA4B,EAAE,2BAA2B;IACzD,sBAAsB,EAAE,sBAAsB;CAC/C,CAAA"}
@@ -0,0 +1,53 @@
1
+ import { Behaviour } from './index';
2
+ import Particle from '../Particle';
3
+ import { Point } from '../util';
4
+ /**
5
+ * ForceFieldsBehaviour applies region-based forces (wind, gravity, turbulence) to particles.
6
+ * @extends Behaviour
7
+ */
8
+ export default class ForceFieldsBehaviour extends Behaviour {
9
+ enabled: boolean;
10
+ priority: number;
11
+ /**
12
+ * List of force fields
13
+ */
14
+ fields: {
15
+ position: Point;
16
+ radius: number;
17
+ strength: number;
18
+ type: 'wind' | 'gravity' | 'turbulence';
19
+ direction?: Point;
20
+ }[];
21
+ /**
22
+ * Initializes the particle, but does not modify position directly.
23
+ * @param {Particle} particle - The particle to initialize.
24
+ */
25
+ init: (particle: Particle) => void;
26
+ /**
27
+ * Applies the force field behavior to particles.
28
+ * @param {Particle} particle - The particle to apply the behavior to.
29
+ * @param {number} deltaTime - Time elapsed since the last frame.
30
+ */
31
+ apply: (particle: Particle, deltaTime: number) => void;
32
+ /**
33
+ * Gets the name of the behaviour.
34
+ * @returns {string} - The name of the behaviour.
35
+ */
36
+ getName(): string;
37
+ /**
38
+ * Gets the properties of the behaviour.
39
+ * @returns {object} - The properties of the behaviour.
40
+ */
41
+ getProps(): {
42
+ enabled: boolean;
43
+ priority: number;
44
+ fields: {
45
+ position: Point;
46
+ radius: number;
47
+ strength: number;
48
+ type: "wind" | "gravity" | "turbulence";
49
+ direction?: Point;
50
+ }[];
51
+ name: string;
52
+ };
53
+ }
@@ -0,0 +1,80 @@
1
+ import { Behaviour, BehaviourNames } from './index';
2
+ /**
3
+ * ForceFieldsBehaviour applies region-based forces (wind, gravity, turbulence) to particles.
4
+ * @extends Behaviour
5
+ */
6
+ export default class ForceFieldsBehaviour extends Behaviour {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.enabled = true;
10
+ this.priority = 300; // Executes after initial movement behaviors
11
+ /**
12
+ * List of force fields
13
+ */
14
+ this.fields = [];
15
+ /**
16
+ * Initializes the particle, but does not modify position directly.
17
+ * @param {Particle} particle - The particle to initialize.
18
+ */
19
+ this.init = (particle) => {
20
+ // Initialization logic if needed.
21
+ };
22
+ /**
23
+ * Applies the force field behavior to particles.
24
+ * @param {Particle} particle - The particle to apply the behavior to.
25
+ * @param {number} deltaTime - Time elapsed since the last frame.
26
+ */
27
+ this.apply = (particle, deltaTime) => {
28
+ if (!this.enabled || particle.skipPositionBehaviour)
29
+ return;
30
+ this.fields.forEach((field) => {
31
+ const distance = Math.sqrt(Math.pow((particle.x - field.position.x), 2) + Math.pow((particle.y - field.position.y), 2));
32
+ // Check if the particle is within the field's radius
33
+ if (distance <= field.radius) {
34
+ const influence = (field.radius - distance) / field.radius; // Influence factor (closer = stronger)
35
+ switch (field.type) {
36
+ case 'wind':
37
+ if (field.direction) {
38
+ particle.movement.x += field.direction.x * field.strength * influence * deltaTime;
39
+ particle.movement.y += field.direction.y * field.strength * influence * deltaTime;
40
+ }
41
+ break;
42
+ case 'gravity':
43
+ const dx = field.position.x - particle.x;
44
+ const dy = field.position.y - particle.y;
45
+ const angle = Math.atan2(dy, dx);
46
+ particle.movement.x += Math.cos(angle) * field.strength * influence * deltaTime;
47
+ particle.movement.y += Math.sin(angle) * field.strength * influence * deltaTime;
48
+ break;
49
+ case 'turbulence':
50
+ const randomForceX = (Math.random() - 0.5) * 2 * field.strength * influence;
51
+ const randomForceY = (Math.random() - 0.5) * 2 * field.strength * influence;
52
+ particle.movement.x += randomForceX * deltaTime;
53
+ particle.movement.y += randomForceY * deltaTime;
54
+ break;
55
+ }
56
+ }
57
+ });
58
+ };
59
+ }
60
+ /**
61
+ * Gets the name of the behaviour.
62
+ * @returns {string} - The name of the behaviour.
63
+ */
64
+ getName() {
65
+ return BehaviourNames.FORCE_FIELDS_BEHAVIOUR;
66
+ }
67
+ /**
68
+ * Gets the properties of the behaviour.
69
+ * @returns {object} - The properties of the behaviour.
70
+ */
71
+ getProps() {
72
+ return {
73
+ enabled: this.enabled,
74
+ priority: this.priority,
75
+ fields: this.fields,
76
+ name: this.getName(),
77
+ };
78
+ }
79
+ }
80
+ //# sourceMappingURL=ForceFieldsBehaviour.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForceFieldsBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/ForceFieldsBehaviour.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAInD;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,SAAS;IAA3D;;QACE,YAAO,GAAG,IAAI,CAAA;QACd,aAAQ,GAAG,GAAG,CAAA,CAAC,4CAA4C;QAE3D;;WAEG;QACH,WAAM,GAMA,EAAE,CAAA;QAER;;;WAGG;QACH,SAAI,GAAG,CAAC,QAAkB,EAAE,EAAE;YAC5B,kCAAkC;QACpC,CAAC,CAAA;QAED;;;;WAIG;QACH,UAAK,GAAG,CAAC,QAAkB,EAAE,SAAiB,EAAE,EAAE;YAChD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,qBAAqB;gBAAE,OAAM;YAE3D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAA,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAI,CAAC,CAAA,GAAG,SAAA,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAI,CAAC,CAAA,CAAC,CAAA;gBAEvG,qDAAqD;gBACrD,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC7B,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAC,MAAM,CAAA,CAAC,uCAAuC;oBAElG,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;wBACnB,KAAK,MAAM;4BACT,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gCACpB,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;gCACjF,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;4BACnF,CAAC;4BACD,MAAK;wBAEP,KAAK,SAAS;4BACZ,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAA;4BACxC,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAA;4BACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;4BAChC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;4BAC/E,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;4BAC/E,MAAK;wBAEP,KAAK,YAAY;4BACf,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAA;4BAC3E,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAA;4BAC3E,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,YAAY,GAAG,SAAS,CAAA;4BAC/C,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,YAAY,GAAG,SAAS,CAAA;4BAC/C,MAAK;oBACT,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAA;IAsBH,CAAC;IApBC;;;OAGG;IACH,OAAO;QACL,OAAO,cAAc,CAAC,sBAAsB,CAAA;IAC9C,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;SACrB,CAAA;IACH,CAAC;CACF"}
@@ -12,4 +12,5 @@ import RotationBehaviour from './RotationBehaviour';
12
12
  import TurbulenceBehaviour from './TurbulenceBehaviour';
13
13
  import CollisionBehaviour from './CollisionBehaviour';
14
14
  import NoiseBasedMotionBehaviour from './NoiseBasedMotionBehaviour';
15
- export { EmitterBehaviours, Behaviour, LifeBehaviour, PositionBehaviour, ColorBehaviour, SizeBehaviour, AngularVelocityBehaviour, EmitDirectionBehaviour, RotationBehaviour, TurbulenceBehaviour, CollisionBehaviour, AttractionRepulsionBehaviour, NoiseBasedMotionBehaviour, BehaviourNames, };
15
+ import ForceFieldsBehaviour from './ForceFieldsBehaviour';
16
+ export { EmitterBehaviours, Behaviour, LifeBehaviour, PositionBehaviour, ColorBehaviour, SizeBehaviour, AngularVelocityBehaviour, EmitDirectionBehaviour, RotationBehaviour, TurbulenceBehaviour, CollisionBehaviour, AttractionRepulsionBehaviour, NoiseBasedMotionBehaviour, ForceFieldsBehaviour, BehaviourNames, };
@@ -12,5 +12,6 @@ import RotationBehaviour from './RotationBehaviour';
12
12
  import TurbulenceBehaviour from './TurbulenceBehaviour';
13
13
  import CollisionBehaviour from './CollisionBehaviour';
14
14
  import NoiseBasedMotionBehaviour from './NoiseBasedMotionBehaviour';
15
- export { EmitterBehaviours, Behaviour, LifeBehaviour, PositionBehaviour, ColorBehaviour, SizeBehaviour, AngularVelocityBehaviour, EmitDirectionBehaviour, RotationBehaviour, TurbulenceBehaviour, CollisionBehaviour, AttractionRepulsionBehaviour, NoiseBasedMotionBehaviour, BehaviourNames, };
15
+ import ForceFieldsBehaviour from './ForceFieldsBehaviour';
16
+ export { EmitterBehaviours, Behaviour, LifeBehaviour, PositionBehaviour, ColorBehaviour, SizeBehaviour, AngularVelocityBehaviour, EmitDirectionBehaviour, RotationBehaviour, TurbulenceBehaviour, CollisionBehaviour, AttractionRepulsionBehaviour, NoiseBasedMotionBehaviour, ForceFieldsBehaviour, BehaviourNames, };
16
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/behaviour/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,OAAO,iBAAiB,MAAM,qBAAqB,CAAA;AACnD,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAC3C,OAAO,iBAAiB,MAAM,qBAAqB,CAAA;AACnD,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,OAAO,4BAA4B,MAAM,gCAAgC,CAAA;AACzE,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAC3C,OAAO,wBAAwB,MAAM,4BAA4B,CAAA;AACjE,OAAO,sBAAsB,MAAM,0BAA0B,CAAA;AAC7D,OAAO,iBAAiB,MAAM,qBAAqB,CAAA;AACnD,OAAO,mBAAmB,MAAM,uBAAuB,CAAA;AACvD,OAAO,kBAAkB,MAAM,sBAAsB,CAAA;AACrD,OAAO,yBAAyB,MAAM,6BAA6B,CAAA;AAEnE,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,EAC5B,yBAAyB,EACzB,cAAc,GACf,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/behaviour/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,OAAO,iBAAiB,MAAM,qBAAqB,CAAA;AACnD,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAC3C,OAAO,iBAAiB,MAAM,qBAAqB,CAAA;AACnD,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,OAAO,4BAA4B,MAAM,gCAAgC,CAAA;AACzE,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAC3C,OAAO,wBAAwB,MAAM,4BAA4B,CAAA;AACjE,OAAO,sBAAsB,MAAM,0BAA0B,CAAA;AAC7D,OAAO,iBAAiB,MAAM,qBAAqB,CAAA;AACnD,OAAO,mBAAmB,MAAM,uBAAuB,CAAA;AACvD,OAAO,kBAAkB,MAAM,sBAAsB,CAAA;AACrD,OAAO,yBAAyB,MAAM,6BAA6B,CAAA;AACnE,OAAO,oBAAoB,MAAM,wBAAwB,CAAA;AAEzD,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,EAC5B,yBAAyB,EACzB,oBAAoB,EACpB,cAAc,GACf,CAAA"}
package/package.json CHANGED
@@ -41,5 +41,5 @@
41
41
  "lint": "tslint 'src/**/*.ts'",
42
42
  "lint:fix": "tslint --fix 'src/**/*.ts'"
43
43
  },
44
- "version": "4.7.0"
44
+ "version": "4.8.0"
45
45
  }