@tsparticles/engine 3.0.0-beta.3 → 3.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/Core/Canvas.js +2 -2
- package/browser/Core/Container.js +36 -19
- package/browser/Core/Engine.js +18 -5
- package/browser/Core/Particle.js +75 -40
- package/browser/Core/Particles.js +51 -26
- package/browser/Core/Retina.js +0 -2
- package/browser/Core/Utils/QuadTree.js +1 -1
- package/browser/Options/Classes/BackgroundMask/BackgroundMask.js +1 -2
- package/browser/Options/Classes/ColorAnimation.js +4 -24
- package/browser/Options/Classes/Particles/Bounce/ParticlesBounceFactor.js +0 -1
- package/browser/Options/Classes/Particles/Effect/Effect.js +32 -0
- package/browser/Options/Classes/Particles/Number/ParticlesNumber.js +3 -5
- package/browser/Options/Classes/Particles/Number/ParticlesNumberLimit.js +17 -0
- package/browser/Options/Classes/Particles/Opacity/Opacity.js +2 -3
- package/browser/Options/Classes/Particles/ParticlesOptions.js +3 -0
- package/browser/Options/Classes/Particles/Size/Size.js +2 -3
- package/browser/Options/Classes/ValueWithRandom.js +1 -10
- package/browser/Utils/CanvasUtils.js +23 -18
- package/browser/Utils/ColorUtils.js +24 -38
- package/browser/Utils/NumberUtils.js +7 -16
- package/browser/Utils/Utils.js +7 -7
- package/browser/export-types.js +4 -0
- package/browser/exports.js +2 -3
- package/cjs/Core/Canvas.js +2 -2
- package/cjs/Core/Container.js +36 -19
- package/cjs/Core/Engine.js +18 -5
- package/cjs/Core/Particle.js +74 -39
- package/cjs/Core/Particles.js +51 -26
- package/cjs/Core/Retina.js +0 -2
- package/cjs/Core/Utils/QuadTree.js +1 -1
- package/cjs/Options/Classes/BackgroundMask/BackgroundMask.js +1 -2
- package/cjs/Options/Classes/ColorAnimation.js +4 -24
- package/cjs/Options/Classes/Particles/Bounce/ParticlesBounceFactor.js +0 -1
- package/cjs/Options/Classes/Particles/Effect/Effect.js +36 -0
- package/cjs/Options/Classes/Particles/Number/ParticlesNumber.js +3 -5
- package/cjs/Options/Classes/Particles/Number/ParticlesNumberLimit.js +21 -0
- package/cjs/Options/Classes/Particles/Opacity/Opacity.js +1 -2
- package/cjs/Options/Classes/Particles/ParticlesOptions.js +3 -0
- package/cjs/Options/Classes/Particles/Size/Size.js +2 -3
- package/cjs/Options/Classes/ValueWithRandom.js +1 -10
- package/cjs/Options/Interfaces/Particles/Number/IParticlesNumberLimit.js +2 -0
- package/cjs/Utils/CanvasUtils.js +26 -21
- package/cjs/Utils/ColorUtils.js +24 -38
- package/cjs/Utils/NumberUtils.js +8 -18
- package/cjs/Utils/Utils.js +6 -6
- package/cjs/export-types.js +4 -0
- package/cjs/exports.js +2 -3
- package/esm/Core/Canvas.js +2 -2
- package/esm/Core/Container.js +36 -19
- package/esm/Core/Engine.js +18 -5
- package/esm/Core/Particle.js +75 -40
- package/esm/Core/Particles.js +51 -26
- package/esm/Core/Retina.js +0 -2
- package/esm/Core/Utils/QuadTree.js +1 -1
- package/esm/Options/Classes/BackgroundMask/BackgroundMask.js +1 -2
- package/esm/Options/Classes/ColorAnimation.js +4 -24
- package/esm/Options/Classes/Particles/Bounce/ParticlesBounceFactor.js +0 -1
- package/esm/Options/Classes/Particles/Effect/Effect.js +32 -0
- package/esm/Options/Classes/Particles/Number/ParticlesNumber.js +3 -5
- package/esm/Options/Classes/Particles/Number/ParticlesNumberLimit.js +17 -0
- package/esm/Options/Classes/Particles/Opacity/Opacity.js +2 -3
- package/esm/Options/Classes/Particles/ParticlesOptions.js +3 -0
- package/esm/Options/Classes/Particles/Size/Size.js +2 -3
- package/esm/Options/Classes/ValueWithRandom.js +1 -10
- package/esm/Options/Interfaces/Particles/Effect/IEffect.js +1 -0
- package/esm/Options/Interfaces/Particles/Number/IParticlesNumberLimit.js +1 -0
- package/esm/Utils/CanvasUtils.js +23 -18
- package/esm/Utils/ColorUtils.js +24 -38
- package/esm/Utils/NumberUtils.js +7 -16
- package/esm/Utils/Utils.js +7 -7
- package/esm/export-types.js +4 -0
- package/esm/exports.js +2 -3
- package/package.json +1 -1
- package/report.html +4 -22
- package/tsparticles.engine.js +387 -283
- package/tsparticles.engine.min.js +1 -1
- package/tsparticles.engine.min.js.LICENSE.txt +1 -1
- package/types/Core/Canvas.d.ts +0 -1
- package/types/Core/Container.d.ts +8 -7
- package/types/Core/Engine.d.ts +7 -2
- package/types/Core/Interfaces/IContainerPlugin.d.ts +2 -3
- package/types/Core/Interfaces/IEffectDrawer.d.ts +10 -0
- package/types/Core/Interfaces/IExternalInteractor.d.ts +3 -4
- package/types/Core/Interfaces/IInteractor.d.ts +3 -3
- package/types/Core/Interfaces/IParticleRetinaProps.d.ts +0 -1
- package/types/Core/Interfaces/IParticlesInteractor.d.ts +3 -3
- package/types/Core/Interfaces/IShapeDrawData.d.ts +10 -0
- package/types/Core/Interfaces/IShapeDrawer.d.ts +2 -10
- package/types/Core/Particle.d.ts +6 -2
- package/types/Core/Particles.d.ts +10 -7
- package/types/Core/Retina.d.ts +0 -1
- package/types/Core/Utils/ExternalInteractorBase.d.ts +4 -4
- package/types/Core/Utils/InteractionManager.d.ts +1 -2
- package/types/Core/Utils/ParticlesInteractorBase.d.ts +5 -5
- package/types/Enums/Modes/LimitMode.d.ts +4 -0
- package/types/Enums/Types/EasingType.d.ts +3 -0
- package/types/Options/Classes/BackgroundMask/BackgroundMask.d.ts +1 -1
- package/types/Options/Classes/ColorAnimation.d.ts +2 -7
- package/types/Options/Classes/Interactivity/Events/ClickEvent.d.ts +1 -2
- package/types/Options/Classes/Interactivity/Events/DivEvent.d.ts +1 -2
- package/types/Options/Classes/Interactivity/Events/Events.d.ts +3 -3
- package/types/Options/Classes/Interactivity/Events/HoverEvent.d.ts +2 -3
- package/types/Options/Classes/Interactivity/Interactivity.d.ts +2 -2
- package/types/Options/Classes/Options.d.ts +6 -6
- package/types/Options/Classes/Particles/Bounce/ParticlesBounce.d.ts +2 -2
- package/types/Options/Classes/Particles/Collisions/Collisions.d.ts +3 -3
- package/types/Options/Classes/Particles/Effect/Effect.d.ts +13 -0
- package/types/Options/Classes/Particles/Move/Move.d.ts +8 -8
- package/types/Options/Classes/Particles/Move/MoveTrail.d.ts +1 -1
- package/types/Options/Classes/Particles/Number/ParticlesNumber.d.ts +3 -2
- package/types/Options/Classes/Particles/Number/ParticlesNumberLimit.d.ts +10 -0
- package/types/Options/Classes/Particles/Opacity/Opacity.d.ts +3 -3
- package/types/Options/Classes/Particles/ParticlesOptions.d.ts +12 -10
- package/types/Options/Classes/Particles/Size/Size.d.ts +3 -3
- package/types/Options/Classes/Theme/Theme.d.ts +1 -1
- package/types/Options/Classes/ValueWithRandom.d.ts +2 -4
- package/types/Options/Interfaces/IValueWithRandom.d.ts +0 -2
- package/types/Options/Interfaces/Interactivity/Events/IClickEvent.d.ts +1 -2
- package/types/Options/Interfaces/Interactivity/Events/IDivEvent.d.ts +1 -2
- package/types/Options/Interfaces/Interactivity/Events/IHoverEvent.d.ts +1 -2
- package/types/Options/Interfaces/Particles/Effect/IEffect.d.ts +8 -0
- package/types/Options/Interfaces/Particles/IParticlesOptions.d.ts +2 -0
- package/types/Options/Interfaces/Particles/Number/IParticlesNumber.d.ts +2 -1
- package/types/Options/Interfaces/Particles/Number/IParticlesNumberLimit.d.ts +5 -0
- package/types/Utils/CanvasUtils.d.ts +2 -2
- package/types/Utils/NumberUtils.d.ts +0 -2
- package/types/Utils/Utils.d.ts +2 -3
- package/types/export-types.d.ts +5 -0
- package/types/exports.d.ts +2 -3
- package/umd/Core/Canvas.js +2 -2
- package/umd/Core/Container.js +36 -19
- package/umd/Core/Engine.js +18 -5
- package/umd/Core/Particle.js +74 -39
- package/umd/Core/Particles.js +51 -26
- package/umd/Core/Retina.js +0 -2
- package/umd/Core/Utils/QuadTree.js +1 -1
- package/umd/Options/Classes/BackgroundMask/BackgroundMask.js +1 -2
- package/umd/Options/Classes/ColorAnimation.js +5 -25
- package/umd/Options/Classes/Particles/Bounce/ParticlesBounceFactor.js +0 -1
- package/umd/Options/Classes/Particles/Effect/Effect.js +46 -0
- package/umd/Options/Classes/Particles/Number/ParticlesNumber.js +4 -6
- package/umd/Options/Classes/{Random.js → Particles/Number/ParticlesNumberLimit.js} +9 -9
- package/umd/Options/Classes/Particles/Opacity/Opacity.js +1 -2
- package/umd/Options/Classes/Particles/ParticlesOptions.js +4 -1
- package/umd/Options/Classes/Particles/Size/Size.js +3 -4
- package/umd/Options/Classes/ValueWithRandom.js +2 -11
- package/umd/Options/Interfaces/Particles/Number/IParticlesNumberLimit.js +12 -0
- package/umd/Utils/CanvasUtils.js +26 -21
- package/umd/Utils/ColorUtils.js +24 -38
- package/umd/Utils/NumberUtils.js +9 -19
- package/umd/Utils/Utils.js +6 -6
- package/umd/export-types.js +5 -1
- package/umd/exports.js +3 -4
- package/browser/Options/Classes/Random.js +0 -17
- package/cjs/Options/Classes/Random.js +0 -21
- package/esm/Options/Classes/Random.js +0 -17
- package/types/Enums/Modes/ClickMode.d.ts +0 -9
- package/types/Enums/Modes/DivMode.d.ts +0 -5
- package/types/Enums/Modes/HoverMode.d.ts +0 -11
- package/types/Options/Classes/Random.d.ts +0 -9
- package/types/Options/Interfaces/IRandom.d.ts +0 -4
- /package/browser/{Enums/Modes/ClickMode.js → Core/Interfaces/IEffectDrawer.js} +0 -0
- /package/browser/{Enums/Modes/DivMode.js → Core/Interfaces/IShapeDrawData.js} +0 -0
- /package/browser/Enums/Modes/{HoverMode.js → LimitMode.js} +0 -0
- /package/browser/Options/Interfaces/{IRandom.js → Particles/Effect/IEffect.js} +0 -0
- /package/{esm/Enums/Modes/ClickMode.js → browser/Options/Interfaces/Particles/Number/IParticlesNumberLimit.js} +0 -0
- /package/cjs/{Enums/Modes/ClickMode.js → Core/Interfaces/IEffectDrawer.js} +0 -0
- /package/cjs/{Enums/Modes/DivMode.js → Core/Interfaces/IShapeDrawData.js} +0 -0
- /package/cjs/Enums/Modes/{HoverMode.js → LimitMode.js} +0 -0
- /package/cjs/Options/Interfaces/{IRandom.js → Particles/Effect/IEffect.js} +0 -0
- /package/esm/{Enums/Modes/DivMode.js → Core/Interfaces/IEffectDrawer.js} +0 -0
- /package/esm/{Enums/Modes/HoverMode.js → Core/Interfaces/IShapeDrawData.js} +0 -0
- /package/esm/{Options/Interfaces/IRandom.js → Enums/Modes/LimitMode.js} +0 -0
- /package/umd/{Enums/Modes/ClickMode.js → Core/Interfaces/IEffectDrawer.js} +0 -0
- /package/umd/{Enums/Modes/DivMode.js → Core/Interfaces/IShapeDrawData.js} +0 -0
- /package/umd/Enums/Modes/{HoverMode.js → LimitMode.js} +0 -0
- /package/umd/Options/Interfaces/{IRandom.js → Particles/Effect/IEffect.js} +0 -0
|
@@ -8,7 +8,6 @@ import type { IDrawParticleParams } from "../Core/Interfaces/IDrawParticleParams
|
|
|
8
8
|
import type { IHsl } from "../Core/Interfaces/Colors.js";
|
|
9
9
|
import type { Particle } from "../Core/Particle.js";
|
|
10
10
|
export declare function drawLine(context: CanvasRenderingContext2D, begin: ICoordinates, end: ICoordinates): void;
|
|
11
|
-
export declare function drawTriangle(context: CanvasRenderingContext2D, p1: ICoordinates, p2: ICoordinates, p3: ICoordinates): void;
|
|
12
11
|
export declare function paintBase(context: CanvasRenderingContext2D, dimension: IDimension, baseColor?: string): void;
|
|
13
12
|
export declare function paintImage(context: CanvasRenderingContext2D, dimension: IDimension, image: HTMLImageElement | undefined, opacity: number): void;
|
|
14
13
|
export declare function clear(context: CanvasRenderingContext2D, dimension: IDimension): void;
|
|
@@ -21,8 +20,9 @@ type DrawShapeData = {
|
|
|
21
20
|
particle: Particle;
|
|
22
21
|
radius: number;
|
|
23
22
|
};
|
|
23
|
+
export declare function drawEffect(data: DrawShapeData): void;
|
|
24
24
|
export declare function drawShape(data: DrawShapeData): void;
|
|
25
|
-
export declare function
|
|
25
|
+
export declare function drawShapeAfterDraw(data: DrawShapeData): void;
|
|
26
26
|
export declare function drawPlugin(context: CanvasRenderingContext2D, plugin: IContainerPlugin, delta: IDelta): void;
|
|
27
27
|
export declare function drawParticlePlugin(context: CanvasRenderingContext2D, plugin: IContainerPlugin, particle: Particle, delta: IDelta): void;
|
|
28
28
|
export declare function alterHsl(color: IHsl, type: AlterType, value: number): IHsl;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { EasingType, EasingTypeAlt } from "../Enums/Types/EasingType.js";
|
|
2
2
|
import type { IPositionFromSizeParams, IRangedPositionFromSizeParams } from "../Core/Interfaces/IPositionFromSizeParams.js";
|
|
3
3
|
import type { ICoordinates } from "../Core/Interfaces/ICoordinates.js";
|
|
4
|
-
import type { IValueWithRandom } from "../Options/Interfaces/IValueWithRandom.js";
|
|
5
4
|
import { MoveDirection } from "../Enums/Directions/MoveDirection.js";
|
|
6
5
|
import type { MoveDirectionAlt } from "../Enums/Directions/MoveDirection.js";
|
|
7
6
|
import type { RangeValue } from "../Types/RangeValue.js";
|
|
@@ -18,7 +17,6 @@ export declare function getRangeValue(value: RangeValue): number;
|
|
|
18
17
|
export declare function getRangeMin(value: RangeValue): number;
|
|
19
18
|
export declare function getRangeMax(value: RangeValue): number;
|
|
20
19
|
export declare function setRangeValue(source: RangeValue, value?: number): RangeValue;
|
|
21
|
-
export declare function getValue(options: IValueWithRandom): number;
|
|
22
20
|
export declare function getDistances(pointA: ICoordinates, pointB: ICoordinates): {
|
|
23
21
|
distance: number;
|
|
24
22
|
dx: number;
|
package/types/Utils/Utils.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { ICoordinates, ICoordinatesWithMode } from "../Core/Interfaces/ICoordinates.js";
|
|
2
2
|
import type { IDimension, IDimensionWithMode } from "../Core/Interfaces/IDimension.js";
|
|
3
3
|
import type { DivEvent } from "../Options/Classes/Interactivity/Events/DivEvent.js";
|
|
4
|
-
import type { DivMode } from "../Enums/Modes/DivMode.js";
|
|
5
4
|
import type { IBounds } from "../Core/Interfaces/IBounds.js";
|
|
6
5
|
import type { ICircleBouncer } from "../Core/Interfaces/ICircleBouncer.js";
|
|
7
6
|
import type { IModeDiv } from "../Options/Interfaces/Interactivity/Modes/IModeDiv.js";
|
|
@@ -33,8 +32,8 @@ export declare function isPointInside(point: ICoordinates, size: IDimension, off
|
|
|
33
32
|
export declare function areBoundsInside(bounds: IBounds, size: IDimension, offset: ICoordinates, direction?: OutModeDirection): boolean;
|
|
34
33
|
export declare function calculateBounds(point: ICoordinates, radius: number): IBounds;
|
|
35
34
|
export declare function deepExtend(destination: unknown, ...sources: unknown[]): unknown;
|
|
36
|
-
export declare function isDivModeEnabled(mode:
|
|
37
|
-
export declare function divModeExecute(mode:
|
|
35
|
+
export declare function isDivModeEnabled(mode: string, divs: SingleOrMultiple<DivEvent>): boolean;
|
|
36
|
+
export declare function divModeExecute(mode: string, divs: SingleOrMultiple<DivEvent>, callback: (id: string, div: DivEvent) => void): void;
|
|
38
37
|
export declare function singleDivModeExecute(div: DivEvent, callback: (selector: string, div: DivEvent) => void): void;
|
|
39
38
|
export declare function divMode<T extends IModeDiv>(divs?: SingleOrMultiple<T>, element?: HTMLElement): T | undefined;
|
|
40
39
|
export declare function circleBounceDataFromParticle(p: Particle): ICircleBouncer;
|
package/types/export-types.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export * from "./Core/Interfaces/IDelta.js";
|
|
|
11
11
|
export * from "./Core/Interfaces/IDimension.js";
|
|
12
12
|
export * from "./Core/Interfaces/IDistance.js";
|
|
13
13
|
export * from "./Core/Interfaces/IDrawParticleParams.js";
|
|
14
|
+
export * from "./Core/Interfaces/IEffectDrawer.js";
|
|
14
15
|
export * from "./Core/Interfaces/IExternalInteractor.js";
|
|
15
16
|
export * from "./Core/Interfaces/IInteractor.js";
|
|
16
17
|
export * from "./Core/Interfaces/ILoadParams.js";
|
|
@@ -30,6 +31,7 @@ export * from "./Core/Interfaces/IPlugin.js";
|
|
|
30
31
|
export * from "./Core/Interfaces/IPositionFromSizeParams.js";
|
|
31
32
|
export * from "./Core/Interfaces/IRangeValue.js";
|
|
32
33
|
export * from "./Core/Interfaces/IRectSideResult.js";
|
|
34
|
+
export * from "./Core/Interfaces/IShapeDrawData.js";
|
|
33
35
|
export * from "./Core/Interfaces/IShapeDrawer.js";
|
|
34
36
|
export * from "./Core/Interfaces/IShapeValues.js";
|
|
35
37
|
export * from "./Core/Interfaces/ISlowParticleData.js";
|
|
@@ -62,6 +64,7 @@ export * from "./Options/Interfaces/Particles/Bounce/IParticlesBounce.js";
|
|
|
62
64
|
export * from "./Options/Interfaces/Particles/Collisions/ICollisions.js";
|
|
63
65
|
export * from "./Options/Interfaces/Particles/Collisions/ICollisionsAbsorb.js";
|
|
64
66
|
export * from "./Options/Interfaces/Particles/Collisions/ICollisionsOverlap.js";
|
|
67
|
+
export * from "./Options/Interfaces/Particles/Effect/IEffect.js";
|
|
65
68
|
export * from "./Options/Interfaces/Particles/IParticlesOptions.js";
|
|
66
69
|
export * from "./Options/Interfaces/Particles/IShadow.js";
|
|
67
70
|
export * from "./Options/Interfaces/Particles/IStroke.js";
|
|
@@ -76,6 +79,7 @@ export * from "./Options/Interfaces/Particles/Move/ISpin.js";
|
|
|
76
79
|
export * from "./Options/Interfaces/Particles/Move/IMoveTrail.js";
|
|
77
80
|
export * from "./Options/Interfaces/Particles/Number/IParticlesDensity.js";
|
|
78
81
|
export * from "./Options/Interfaces/Particles/Number/IParticlesNumber.js";
|
|
82
|
+
export * from "./Options/Interfaces/Particles/Number/IParticlesNumberLimit.js";
|
|
79
83
|
export * from "./Options/Interfaces/Particles/Opacity/IOpacity.js";
|
|
80
84
|
export * from "./Options/Interfaces/Particles/Opacity/IOpacityAnimation.js";
|
|
81
85
|
export * from "./Options/Interfaces/Particles/Shape/IShape.js";
|
|
@@ -103,3 +107,4 @@ export type { Particle } from "./Core/Particle.js";
|
|
|
103
107
|
export type { Particles } from "./Core/Particles.js";
|
|
104
108
|
export type { Retina } from "./Core/Retina.js";
|
|
105
109
|
export type { Engine, Engine as Main };
|
|
110
|
+
export type { IParticlesNumberLimit } from "./Options/Interfaces/Particles/Number/IParticlesNumberLimit.js";
|
package/types/exports.d.ts
CHANGED
|
@@ -11,10 +11,8 @@ export * from "./Enums/Directions/MoveDirection.js";
|
|
|
11
11
|
export * from "./Enums/Directions/RotateDirection.js";
|
|
12
12
|
export * from "./Enums/Directions/OutModeDirection.js";
|
|
13
13
|
export * from "./Enums/Modes/AnimationMode.js";
|
|
14
|
-
export * from "./Enums/Modes/ClickMode.js";
|
|
15
|
-
export * from "./Enums/Modes/DivMode.js";
|
|
16
|
-
export * from "./Enums/Modes/HoverMode.js";
|
|
17
14
|
export * from "./Enums/Modes/CollisionMode.js";
|
|
15
|
+
export * from "./Enums/Modes/LimitMode.js";
|
|
18
16
|
export * from "./Enums/Modes/OutMode.js";
|
|
19
17
|
export * from "./Enums/Modes/PixelMode.js";
|
|
20
18
|
export * from "./Enums/Modes/ThemeMode.js";
|
|
@@ -69,6 +67,7 @@ export * from "./Options/Classes/Particles/Move/Path/MovePath.js";
|
|
|
69
67
|
export * from "./Options/Classes/Particles/Move/Spin.js";
|
|
70
68
|
export * from "./Options/Classes/Particles/Move/MoveTrail.js";
|
|
71
69
|
export * from "./Options/Classes/Particles/Number/ParticlesNumber.js";
|
|
70
|
+
export * from "./Options/Classes/Particles/Number/ParticlesNumberLimit.js";
|
|
72
71
|
export * from "./Options/Classes/Particles/Number/ParticlesDensity.js";
|
|
73
72
|
export * from "./Options/Classes/Particles/Opacity/Opacity.js";
|
|
74
73
|
export * from "./Options/Classes/Particles/Opacity/OpacityAnimation.js";
|
package/umd/Core/Canvas.js
CHANGED
|
@@ -414,10 +414,10 @@
|
|
|
414
414
|
this.element.width = size.width = this.element.offsetWidth * pxRatio;
|
|
415
415
|
this.element.height = size.height = this.element.offsetHeight * pxRatio;
|
|
416
416
|
if (this.container.started) {
|
|
417
|
-
|
|
417
|
+
container.particles.setResizeFactor({
|
|
418
418
|
width: size.width / oldSize.width,
|
|
419
419
|
height: size.height / oldSize.height,
|
|
420
|
-
};
|
|
420
|
+
});
|
|
421
421
|
}
|
|
422
422
|
return true;
|
|
423
423
|
}
|
package/umd/Core/Container.js
CHANGED
|
@@ -48,16 +48,16 @@
|
|
|
48
48
|
};
|
|
49
49
|
this._nextFrame = async (timestamp) => {
|
|
50
50
|
try {
|
|
51
|
-
if (!this.
|
|
52
|
-
this.
|
|
53
|
-
timestamp < this.
|
|
51
|
+
if (!this._smooth &&
|
|
52
|
+
this._lastFrameTime !== undefined &&
|
|
53
|
+
timestamp < this._lastFrameTime + 1000 / this.fpsLimit) {
|
|
54
54
|
this.draw(false);
|
|
55
55
|
return;
|
|
56
56
|
}
|
|
57
|
-
this.
|
|
58
|
-
const delta = initDelta(timestamp - this.
|
|
57
|
+
this._lastFrameTime ??= timestamp;
|
|
58
|
+
const delta = initDelta(timestamp - this._lastFrameTime, this.fpsLimit, this._smooth);
|
|
59
59
|
this.addLifeTime(delta.value);
|
|
60
|
-
this.
|
|
60
|
+
this._lastFrameTime = timestamp;
|
|
61
61
|
if (delta.value > 1000) {
|
|
62
62
|
this.draw(false);
|
|
63
63
|
return;
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
this._engine = engine;
|
|
79
79
|
this.id = Symbol(id);
|
|
80
80
|
this.fpsLimit = 120;
|
|
81
|
-
this.
|
|
81
|
+
this._smooth = false;
|
|
82
82
|
this._delay = 0;
|
|
83
83
|
this._duration = 0;
|
|
84
84
|
this._lifeTime = 0;
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
this.started = false;
|
|
87
87
|
this.destroyed = false;
|
|
88
88
|
this._paused = true;
|
|
89
|
-
this.
|
|
89
|
+
this._lastFrameTime = 0;
|
|
90
90
|
this.zLayers = 100;
|
|
91
91
|
this.pageHidden = false;
|
|
92
92
|
this._sourceOptions = sourceOptions;
|
|
@@ -102,7 +102,8 @@
|
|
|
102
102
|
},
|
|
103
103
|
};
|
|
104
104
|
this.plugins = new Map();
|
|
105
|
-
this.
|
|
105
|
+
this.effectDrawers = new Map();
|
|
106
|
+
this.shapeDrawers = new Map();
|
|
106
107
|
this._options = loadContainerOptions(this._engine, this);
|
|
107
108
|
this.actualOptions = loadContainerOptions(this._engine, this);
|
|
108
109
|
this._eventListeners = new EventListeners_js_1.EventListeners(this);
|
|
@@ -212,11 +213,17 @@
|
|
|
212
213
|
this.stop();
|
|
213
214
|
this.particles.destroy();
|
|
214
215
|
this.canvas.destroy();
|
|
215
|
-
for (const [,
|
|
216
|
-
|
|
216
|
+
for (const [, effectDrawer] of this.effectDrawers) {
|
|
217
|
+
effectDrawer.destroy && effectDrawer.destroy(this);
|
|
217
218
|
}
|
|
218
|
-
for (const
|
|
219
|
-
|
|
219
|
+
for (const [, shapeDrawer] of this.shapeDrawers) {
|
|
220
|
+
shapeDrawer.destroy && shapeDrawer.destroy(this);
|
|
221
|
+
}
|
|
222
|
+
for (const key of this.effectDrawers.keys()) {
|
|
223
|
+
this.effectDrawers.delete(key);
|
|
224
|
+
}
|
|
225
|
+
for (const key of this.shapeDrawers.keys()) {
|
|
226
|
+
this.shapeDrawers.delete(key);
|
|
220
227
|
}
|
|
221
228
|
this._engine.clearPlugins(this);
|
|
222
229
|
this.destroyed = true;
|
|
@@ -233,7 +240,7 @@
|
|
|
233
240
|
let refreshTime = force;
|
|
234
241
|
this._drawAnimationFrame = requestAnimationFrame(async (timestamp) => {
|
|
235
242
|
if (refreshTime) {
|
|
236
|
-
this.
|
|
243
|
+
this._lastFrameTime = undefined;
|
|
237
244
|
refreshTime = false;
|
|
238
245
|
}
|
|
239
246
|
await this._nextFrame(timestamp);
|
|
@@ -268,11 +275,18 @@
|
|
|
268
275
|
if (!guardCheck(this)) {
|
|
269
276
|
return;
|
|
270
277
|
}
|
|
278
|
+
const effects = this._engine.getSupportedEffects();
|
|
279
|
+
for (const type of effects) {
|
|
280
|
+
const drawer = this._engine.getEffectDrawer(type);
|
|
281
|
+
if (drawer) {
|
|
282
|
+
this.effectDrawers.set(type, drawer);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
271
285
|
const shapes = this._engine.getSupportedShapes();
|
|
272
286
|
for (const type of shapes) {
|
|
273
287
|
const drawer = this._engine.getShapeDrawer(type);
|
|
274
288
|
if (drawer) {
|
|
275
|
-
this.
|
|
289
|
+
this.shapeDrawers.set(type, drawer);
|
|
276
290
|
}
|
|
277
291
|
}
|
|
278
292
|
this._options = loadContainerOptions(this._engine, this, this._initialSourceOptions, this.sourceOptions);
|
|
@@ -291,8 +305,11 @@
|
|
|
291
305
|
this._delay = (0, NumberUtils_js_1.getRangeValue)(this.actualOptions.delay) * 1000;
|
|
292
306
|
this._lifeTime = 0;
|
|
293
307
|
this.fpsLimit = this.actualOptions.fpsLimit > 0 ? this.actualOptions.fpsLimit : 120;
|
|
294
|
-
this.
|
|
295
|
-
for (const [, drawer] of this.
|
|
308
|
+
this._smooth = this.actualOptions.smooth;
|
|
309
|
+
for (const [, drawer] of this.effectDrawers) {
|
|
310
|
+
drawer.init && (await drawer.init(this));
|
|
311
|
+
}
|
|
312
|
+
for (const [, drawer] of this.shapeDrawers) {
|
|
296
313
|
drawer.init && (await drawer.init(this));
|
|
297
314
|
}
|
|
298
315
|
for (const [, plugin] of this.plugins) {
|
|
@@ -421,10 +438,10 @@
|
|
|
421
438
|
this.actualOptions.responsive = [];
|
|
422
439
|
const newMaxWidth = this.actualOptions.setResponsive(this.canvas.size.width, this.retina.pixelRatio, this._options);
|
|
423
440
|
this.actualOptions.setTheme(this._currentTheme);
|
|
424
|
-
if (this.
|
|
441
|
+
if (this._responsiveMaxWidth === newMaxWidth) {
|
|
425
442
|
return false;
|
|
426
443
|
}
|
|
427
|
-
this.
|
|
444
|
+
this._responsiveMaxWidth = newMaxWidth;
|
|
428
445
|
return true;
|
|
429
446
|
}
|
|
430
447
|
}
|
package/umd/Core/Engine.js
CHANGED
|
@@ -51,7 +51,8 @@
|
|
|
51
51
|
this.movers = new Map();
|
|
52
52
|
this.updaters = new Map();
|
|
53
53
|
this.presets = new Map();
|
|
54
|
-
this.
|
|
54
|
+
this.effectDrawers = new Map();
|
|
55
|
+
this.shapeDrawers = new Map();
|
|
55
56
|
this.pathGenerators = new Map();
|
|
56
57
|
}
|
|
57
58
|
get configs() {
|
|
@@ -62,13 +63,19 @@
|
|
|
62
63
|
return res;
|
|
63
64
|
}
|
|
64
65
|
get version() {
|
|
65
|
-
return "3.0.0-beta.
|
|
66
|
+
return "3.0.0-beta.4";
|
|
66
67
|
}
|
|
67
68
|
addConfig(config) {
|
|
68
69
|
const name = config.name ?? "default";
|
|
69
70
|
this._configs.set(name, config);
|
|
70
71
|
this._eventDispatcher.dispatchEvent("configAdded", { data: { name, config } });
|
|
71
72
|
}
|
|
73
|
+
async addEffect(effect, drawer, refresh = true) {
|
|
74
|
+
(0, Utils_js_1.executeOnSingleOrMultiple)(effect, (type) => {
|
|
75
|
+
!this.getEffectDrawer(type) && this.effectDrawers.set(type, drawer);
|
|
76
|
+
});
|
|
77
|
+
await this.refresh(refresh);
|
|
78
|
+
}
|
|
72
79
|
addEventListener(type, listener) {
|
|
73
80
|
this._eventDispatcher.addEventListener(type, listener);
|
|
74
81
|
}
|
|
@@ -98,7 +105,7 @@
|
|
|
98
105
|
}
|
|
99
106
|
async addShape(shape, drawer, refresh = true) {
|
|
100
107
|
(0, Utils_js_1.executeOnSingleOrMultiple)(shape, (type) => {
|
|
101
|
-
!this.getShapeDrawer(type) && this.
|
|
108
|
+
!this.getShapeDrawer(type) && this.shapeDrawers.set(type, drawer);
|
|
102
109
|
});
|
|
103
110
|
await this.refresh(refresh);
|
|
104
111
|
}
|
|
@@ -128,6 +135,9 @@
|
|
|
128
135
|
}
|
|
129
136
|
return res;
|
|
130
137
|
}
|
|
138
|
+
getEffectDrawer(type) {
|
|
139
|
+
return this.effectDrawers.get(type);
|
|
140
|
+
}
|
|
131
141
|
getInteractors(container, force = false) {
|
|
132
142
|
return getItemsFromInitializer(container, this.interactors, this._initializers.interactors, force);
|
|
133
143
|
}
|
|
@@ -144,10 +154,13 @@
|
|
|
144
154
|
return this.presets.get(preset);
|
|
145
155
|
}
|
|
146
156
|
getShapeDrawer(type) {
|
|
147
|
-
return this.
|
|
157
|
+
return this.shapeDrawers.get(type);
|
|
158
|
+
}
|
|
159
|
+
getSupportedEffects() {
|
|
160
|
+
return this.effectDrawers.keys();
|
|
148
161
|
}
|
|
149
162
|
getSupportedShapes() {
|
|
150
|
-
return this.
|
|
163
|
+
return this.shapeDrawers.keys();
|
|
151
164
|
}
|
|
152
165
|
getUpdaters(container, force = false) {
|
|
153
166
|
return getItemsFromInitializer(container, this.updaters, this._initializers.updaters, force);
|
package/umd/Core/Particle.js
CHANGED
|
@@ -19,6 +19,16 @@
|
|
|
19
19
|
const CanvasUtils_js_1 = require("../Utils/CanvasUtils.js");
|
|
20
20
|
const Constants_js_1 = require("./Utils/Constants.js");
|
|
21
21
|
const OptionsUtils_js_1 = require("../Utils/OptionsUtils.js");
|
|
22
|
+
function loadEffectData(effect, effectOptions, id, reduceDuplicates) {
|
|
23
|
+
const effectData = effectOptions.options[effect];
|
|
24
|
+
if (!effectData) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
return (0, Utils_js_1.deepExtend)({
|
|
28
|
+
close: effectOptions.close,
|
|
29
|
+
fill: effectOptions.fill,
|
|
30
|
+
}, (0, Utils_js_1.itemFromSingleOrMultiple)(effectData, id, reduceDuplicates));
|
|
31
|
+
}
|
|
22
32
|
function loadShapeData(shape, shapeOptions, id, reduceDuplicates) {
|
|
23
33
|
const shapeData = shapeOptions.options[shape];
|
|
24
34
|
if (!shapeData) {
|
|
@@ -88,8 +98,8 @@
|
|
|
88
98
|
return res;
|
|
89
99
|
}
|
|
90
100
|
const rad = (Math.PI / 180) * (0, NumberUtils_js_1.getRangeValue)(moveOptions.angle.value), radOffset = (Math.PI / 180) * (0, NumberUtils_js_1.getRangeValue)(moveOptions.angle.offset), range = {
|
|
91
|
-
left: radOffset - rad
|
|
92
|
-
right: radOffset + rad
|
|
101
|
+
left: radOffset - rad * 0.5,
|
|
102
|
+
right: radOffset + rad * 0.5,
|
|
93
103
|
};
|
|
94
104
|
if (!moveOptions.straight) {
|
|
95
105
|
res.angle += (0, NumberUtils_js_1.randomInRange)((0, NumberUtils_js_1.setRangeValue)(range.left, range.right));
|
|
@@ -118,7 +128,7 @@
|
|
|
118
128
|
if (!color || !this.roll || (!this.backColor && !this.roll.alter)) {
|
|
119
129
|
return color;
|
|
120
130
|
}
|
|
121
|
-
const backFactor = this.roll.horizontal && this.roll.vertical ? 2 : 1, backSum = this.roll.horizontal ? Math.PI
|
|
131
|
+
const backFactor = this.roll.horizontal && this.roll.vertical ? 2 : 1, backSum = this.roll.horizontal ? Math.PI * 0.5 : 0, rolled = Math.floor(((this.roll.angle ?? 0) + backSum) / (Math.PI / backFactor)) % 2;
|
|
122
132
|
if (!rolled) {
|
|
123
133
|
return color;
|
|
124
134
|
}
|
|
@@ -163,18 +173,12 @@
|
|
|
163
173
|
this.slow.inRange = false;
|
|
164
174
|
const container = this.container, pathGenerator = this.pathGenerator;
|
|
165
175
|
for (const [, plugin] of container.plugins) {
|
|
166
|
-
|
|
167
|
-
plugin.particleDestroyed(this, override);
|
|
168
|
-
}
|
|
176
|
+
plugin.particleDestroyed && plugin.particleDestroyed(this, override);
|
|
169
177
|
}
|
|
170
178
|
for (const updater of container.particles.updaters) {
|
|
171
|
-
|
|
172
|
-
updater.particleDestroyed(this, override);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
if (pathGenerator) {
|
|
176
|
-
pathGenerator.reset(this);
|
|
179
|
+
updater.particleDestroyed && updater.particleDestroyed(this, override);
|
|
177
180
|
}
|
|
181
|
+
pathGenerator && pathGenerator.reset(this);
|
|
178
182
|
}
|
|
179
183
|
draw(delta) {
|
|
180
184
|
const container = this.container, canvas = container.canvas;
|
|
@@ -187,7 +191,7 @@
|
|
|
187
191
|
return this._getRollColor(this.bubble.color ?? (0, ColorUtils_js_1.getHslFromAnimation)(this.color));
|
|
188
192
|
}
|
|
189
193
|
getMass() {
|
|
190
|
-
return
|
|
194
|
+
return this.getRadius() ** 2 * Math.PI * 0.5;
|
|
191
195
|
}
|
|
192
196
|
getPosition() {
|
|
193
197
|
return {
|
|
@@ -206,9 +210,11 @@
|
|
|
206
210
|
const container = this.container, engine = this._engine;
|
|
207
211
|
this.id = id;
|
|
208
212
|
this.group = group;
|
|
209
|
-
this.
|
|
213
|
+
this.effectClose = true;
|
|
214
|
+
this.effectFill = true;
|
|
215
|
+
this.shapeClose = true;
|
|
216
|
+
this.shapeFill = true;
|
|
210
217
|
this.pathRotation = false;
|
|
211
|
-
this.close = true;
|
|
212
218
|
this.lastPathTime = 0;
|
|
213
219
|
this.destroyed = false;
|
|
214
220
|
this.unbreakable = false;
|
|
@@ -219,18 +225,33 @@
|
|
|
219
225
|
};
|
|
220
226
|
this.outType = "normal";
|
|
221
227
|
this.ignoresResizeRatio = true;
|
|
222
|
-
const pxRatio = container.retina.pixelRatio, mainOptions = container.actualOptions, particlesOptions = (0, OptionsUtils_js_1.loadParticlesOptions)(this._engine, container, mainOptions.particles), shapeType = particlesOptions.shape.type, { reduceDuplicates } = particlesOptions;
|
|
228
|
+
const pxRatio = container.retina.pixelRatio, mainOptions = container.actualOptions, particlesOptions = (0, OptionsUtils_js_1.loadParticlesOptions)(this._engine, container, mainOptions.particles), effectType = particlesOptions.effect.type, shapeType = particlesOptions.shape.type, { reduceDuplicates } = particlesOptions;
|
|
229
|
+
this.effect = (0, Utils_js_1.itemFromSingleOrMultiple)(effectType, this.id, reduceDuplicates);
|
|
223
230
|
this.shape = (0, Utils_js_1.itemFromSingleOrMultiple)(shapeType, this.id, reduceDuplicates);
|
|
224
|
-
const shapeOptions = particlesOptions.shape;
|
|
225
|
-
if (overrideOptions
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
231
|
+
const effectOptions = particlesOptions.effect, shapeOptions = particlesOptions.shape;
|
|
232
|
+
if (overrideOptions) {
|
|
233
|
+
if (overrideOptions.effect && overrideOptions.effect.type) {
|
|
234
|
+
const overrideEffectType = overrideOptions.effect.type, effect = (0, Utils_js_1.itemFromSingleOrMultiple)(overrideEffectType, this.id, reduceDuplicates);
|
|
235
|
+
if (effect) {
|
|
236
|
+
this.effect = effect;
|
|
237
|
+
effectOptions.load(overrideOptions.effect);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (overrideOptions.shape && overrideOptions.shape.type) {
|
|
241
|
+
const overrideShapeType = overrideOptions.shape.type, shape = (0, Utils_js_1.itemFromSingleOrMultiple)(overrideShapeType, this.id, reduceDuplicates);
|
|
242
|
+
if (shape) {
|
|
243
|
+
this.shape = shape;
|
|
244
|
+
shapeOptions.load(overrideOptions.shape);
|
|
245
|
+
}
|
|
230
246
|
}
|
|
231
247
|
}
|
|
248
|
+
this.effectData = loadEffectData(this.effect, effectOptions, this.id, reduceDuplicates);
|
|
232
249
|
this.shapeData = loadShapeData(this.shape, shapeOptions, this.id, reduceDuplicates);
|
|
233
250
|
particlesOptions.load(overrideOptions);
|
|
251
|
+
const effectData = this.effectData;
|
|
252
|
+
if (effectData) {
|
|
253
|
+
particlesOptions.load(effectData.particles);
|
|
254
|
+
}
|
|
234
255
|
const shapeData = this.shapeData;
|
|
235
256
|
if (shapeData) {
|
|
236
257
|
particlesOptions.load(shapeData.particles);
|
|
@@ -239,11 +260,13 @@
|
|
|
239
260
|
interactivity.load(container.actualOptions.interactivity);
|
|
240
261
|
interactivity.load(particlesOptions.interactivity);
|
|
241
262
|
this.interactivity = interactivity;
|
|
242
|
-
this.
|
|
243
|
-
this.
|
|
263
|
+
this.effectFill = effectData?.fill ?? particlesOptions.effect.fill;
|
|
264
|
+
this.effectClose = effectData?.close ?? particlesOptions.effect.close;
|
|
265
|
+
this.shapeFill = shapeData?.fill ?? particlesOptions.shape.fill;
|
|
266
|
+
this.shapeClose = shapeData?.close ?? particlesOptions.shape.close;
|
|
244
267
|
this.options = particlesOptions;
|
|
245
268
|
const pathOptions = this.options.move.path;
|
|
246
|
-
this.pathDelay = (0, NumberUtils_js_1.
|
|
269
|
+
this.pathDelay = (0, NumberUtils_js_1.getRangeValue)(pathOptions.delay.value) * 1000;
|
|
247
270
|
if (pathOptions.generator) {
|
|
248
271
|
this.pathGenerator = this._engine.getPathGenerator(pathOptions.generator);
|
|
249
272
|
if (this.pathGenerator && container.addPath(pathOptions.generator, this.pathGenerator)) {
|
|
@@ -264,34 +287,46 @@
|
|
|
264
287
|
this.velocity = this.initialVelocity.copy();
|
|
265
288
|
this.moveDecay = 1 - (0, NumberUtils_js_1.getRangeValue)(this.options.move.decay);
|
|
266
289
|
const particles = container.particles;
|
|
267
|
-
particles.
|
|
268
|
-
particles.lastZIndex = this.position.z;
|
|
290
|
+
particles.setLastZIndex(this.position.z);
|
|
269
291
|
this.zIndexFactor = this.position.z / container.zLayers;
|
|
270
292
|
this.sides = 24;
|
|
271
|
-
let
|
|
272
|
-
if (!
|
|
273
|
-
|
|
274
|
-
if (
|
|
275
|
-
container.
|
|
293
|
+
let effectDrawer = container.effectDrawers.get(this.effect);
|
|
294
|
+
if (!effectDrawer) {
|
|
295
|
+
effectDrawer = this._engine.getEffectDrawer(this.effect);
|
|
296
|
+
if (effectDrawer) {
|
|
297
|
+
container.effectDrawers.set(this.effect, effectDrawer);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
if (effectDrawer && effectDrawer.loadEffect) {
|
|
301
|
+
effectDrawer.loadEffect(this);
|
|
302
|
+
}
|
|
303
|
+
let shapeDrawer = container.shapeDrawers.get(this.shape);
|
|
304
|
+
if (!shapeDrawer) {
|
|
305
|
+
shapeDrawer = this._engine.getShapeDrawer(this.shape);
|
|
306
|
+
if (shapeDrawer) {
|
|
307
|
+
container.shapeDrawers.set(this.shape, shapeDrawer);
|
|
276
308
|
}
|
|
277
309
|
}
|
|
278
|
-
if (
|
|
279
|
-
|
|
310
|
+
if (shapeDrawer && shapeDrawer.loadShape) {
|
|
311
|
+
shapeDrawer.loadShape(this);
|
|
280
312
|
}
|
|
281
|
-
const sideCountFunc =
|
|
313
|
+
const sideCountFunc = shapeDrawer?.getSidesCount;
|
|
282
314
|
if (sideCountFunc) {
|
|
283
315
|
this.sides = sideCountFunc(this);
|
|
284
316
|
}
|
|
285
317
|
this.spawning = false;
|
|
286
318
|
this.shadowColor = (0, ColorUtils_js_1.rangeColorToRgb)(this.options.shadow.color);
|
|
287
|
-
for (const updater of
|
|
319
|
+
for (const updater of particles.updaters) {
|
|
288
320
|
updater.init(this);
|
|
289
321
|
}
|
|
290
|
-
for (const mover of
|
|
322
|
+
for (const mover of particles.movers) {
|
|
291
323
|
mover.init && mover.init(this);
|
|
292
324
|
}
|
|
293
|
-
if (
|
|
294
|
-
|
|
325
|
+
if (effectDrawer && effectDrawer.particleInit) {
|
|
326
|
+
effectDrawer.particleInit(container, this);
|
|
327
|
+
}
|
|
328
|
+
if (shapeDrawer && shapeDrawer.particleInit) {
|
|
329
|
+
shapeDrawer.particleInit(container, this);
|
|
295
330
|
}
|
|
296
331
|
for (const [, plugin] of container.plugins) {
|
|
297
332
|
plugin.particleCreated && plugin.particleCreated(this);
|