@joydle/juice-babylon 0.1.3 → 0.1.19

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.
@@ -0,0 +1,127 @@
1
+ import type { BabylonMesh, BabylonScene } from './types.js';
2
+ export interface AmbientParticleOptions {
3
+ type: 'dust' | 'fireflies' | 'snow' | 'rain' | 'embers' | 'pollen';
4
+ density?: number;
5
+ wind?: {
6
+ x: number;
7
+ y: number;
8
+ z: number;
9
+ };
10
+ color?: number;
11
+ volume?: number;
12
+ }
13
+ export interface IdleBreathingOptions {
14
+ amplitude?: number;
15
+ speed?: number;
16
+ phase?: number;
17
+ }
18
+ /** Sine-wave scale pulse on a Babylon.js mesh. */
19
+ export declare class IdleBreathing {
20
+ private _target;
21
+ private _amplitude;
22
+ private _speed;
23
+ private _phase;
24
+ private _baseScale;
25
+ private _t;
26
+ private _running;
27
+ constructor(target: BabylonMesh, opts?: IdleBreathingOptions);
28
+ start(): void;
29
+ stop(): void;
30
+ update(dt: number): void;
31
+ destroy(): void;
32
+ }
33
+ export interface FloatingMotionOptions {
34
+ bobHeight?: number;
35
+ bobSpeed?: number;
36
+ rotationDrift?: number;
37
+ phase?: number;
38
+ }
39
+ /** Gentle bob + rotation drift for Babylon.js meshes. */
40
+ export declare class FloatingMotion {
41
+ private _target;
42
+ private _bobHeight;
43
+ private _bobSpeed;
44
+ private _rotationDrift;
45
+ private _phase;
46
+ private _baseY;
47
+ private _t;
48
+ private _running;
49
+ constructor(target: BabylonMesh, opts?: FloatingMotionOptions);
50
+ start(): void;
51
+ stop(): void;
52
+ update(dt: number): void;
53
+ destroy(): void;
54
+ }
55
+ export interface EnvironmentPulseOptions {
56
+ cycleDuration?: number;
57
+ warmColor?: number;
58
+ coolColor?: number;
59
+ }
60
+ /** Color temperature shift on Babylon.js mesh materials. */
61
+ export declare class EnvironmentPulse {
62
+ private _targets;
63
+ private _cycleDuration;
64
+ private _warmR;
65
+ private _warmG;
66
+ private _warmB;
67
+ private _coolR;
68
+ private _coolG;
69
+ private _coolB;
70
+ private _t;
71
+ private _running;
72
+ constructor(targets: BabylonMesh[], opts?: EnvironmentPulseOptions);
73
+ start(): void;
74
+ stop(): void;
75
+ update(dt: number): void;
76
+ destroy(): void;
77
+ }
78
+ interface Particle3D {
79
+ x: number;
80
+ y: number;
81
+ z: number;
82
+ vx: number;
83
+ vy: number;
84
+ vz: number;
85
+ life: number;
86
+ maxLife: number;
87
+ alpha: number;
88
+ size: number;
89
+ }
90
+ /** Persistent ambient particles for Babylon.js scenes. */
91
+ export declare class AmbientParticles {
92
+ private _opts;
93
+ private _particles;
94
+ private _t;
95
+ private _running;
96
+ constructor(_scene: BabylonScene, opts: AmbientParticleOptions);
97
+ start(): void;
98
+ stop(): void;
99
+ setWind(x: number, y?: number, z?: number): void;
100
+ update(dt: number): void;
101
+ private _spawn;
102
+ getParticles(): readonly Particle3D[];
103
+ destroy(): void;
104
+ }
105
+ export interface BackgroundSwayOptions {
106
+ windSensitivity?: number;
107
+ maxAngle?: number;
108
+ speed?: number;
109
+ }
110
+ /** Wind-responsive sway for Babylon.js meshes. */
111
+ export declare class BackgroundSway {
112
+ private _target;
113
+ private _windSensitivity;
114
+ private _maxAngle;
115
+ private _speed;
116
+ private _windX;
117
+ private _t;
118
+ private _running;
119
+ constructor(target: BabylonMesh, opts?: BackgroundSwayOptions);
120
+ setWind(x: number, _y?: number, _z?: number): void;
121
+ start(): void;
122
+ stop(): void;
123
+ update(dt: number): void;
124
+ destroy(): void;
125
+ }
126
+ export {};
127
+ //# sourceMappingURL=ambient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ambient.d.ts","sourceRoot":"","sources":["../src/ambient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,243 @@
1
+ // ---------------------------------------------------------------------------
2
+ // @joydle/juice-babylon — Ambient life effects (Babylon.js)
3
+ //
4
+ // Persistent background effects with start() / stop() / update(dt) / destroy().
5
+ // Call update(dt) each frame (dt in seconds).
6
+ // ---------------------------------------------------------------------------
7
+ /** Sine-wave scale pulse on a Babylon.js mesh. */
8
+ export class IdleBreathing {
9
+ _target;
10
+ _amplitude;
11
+ _speed;
12
+ _phase;
13
+ _baseScale = { x: 1, y: 1, z: 1 };
14
+ _t = 0;
15
+ _running = false;
16
+ constructor(target, opts = {}) {
17
+ this._target = target;
18
+ this._amplitude = opts.amplitude ?? 0.02;
19
+ this._speed = opts.speed ?? 0.4;
20
+ this._phase = opts.phase ?? Math.random() * Math.PI * 2;
21
+ }
22
+ start() {
23
+ const s = this._target.scaling;
24
+ if (s)
25
+ this._baseScale = { x: s.x, y: s.y, z: s.z };
26
+ this._running = true;
27
+ }
28
+ stop() {
29
+ this._running = false;
30
+ const s = this._target.scaling;
31
+ if (s) {
32
+ s.x = this._baseScale.x;
33
+ s.y = this._baseScale.y;
34
+ s.z = this._baseScale.z;
35
+ }
36
+ }
37
+ update(dt) {
38
+ if (!this._running)
39
+ return;
40
+ this._t += dt;
41
+ const factor = 1 + Math.sin(this._t * this._speed * Math.PI * 2 + this._phase) * this._amplitude;
42
+ const s = this._target.scaling;
43
+ if (s) {
44
+ s.x = this._baseScale.x * factor;
45
+ s.y = this._baseScale.y * factor;
46
+ s.z = this._baseScale.z * factor;
47
+ }
48
+ }
49
+ destroy() { this.stop(); }
50
+ }
51
+ /** Gentle bob + rotation drift for Babylon.js meshes. */
52
+ export class FloatingMotion {
53
+ _target;
54
+ _bobHeight;
55
+ _bobSpeed;
56
+ _rotationDrift;
57
+ _phase;
58
+ _baseY = 0;
59
+ _t = 0;
60
+ _running = false;
61
+ constructor(target, opts = {}) {
62
+ this._target = target;
63
+ this._bobHeight = opts.bobHeight ?? 0.1;
64
+ this._bobSpeed = opts.bobSpeed ?? 0.5;
65
+ this._rotationDrift = opts.rotationDrift ?? 0.03;
66
+ this._phase = opts.phase ?? Math.random() * Math.PI * 2;
67
+ }
68
+ start() {
69
+ this._baseY = this._target.position?.y ?? 0;
70
+ this._running = true;
71
+ }
72
+ stop() {
73
+ this._running = false;
74
+ const pos = this._target.position;
75
+ if (pos)
76
+ pos.y = this._baseY;
77
+ }
78
+ update(dt) {
79
+ if (!this._running)
80
+ return;
81
+ this._t += dt;
82
+ const angle = this._t * this._bobSpeed * Math.PI * 2 + this._phase;
83
+ const pos = this._target.position;
84
+ const rot = this._target.rotation;
85
+ if (pos)
86
+ pos.y = this._baseY + Math.sin(angle) * this._bobHeight;
87
+ if (rot)
88
+ rot.y += Math.sin(angle * 0.7) * this._rotationDrift * dt;
89
+ }
90
+ destroy() { this.stop(); }
91
+ }
92
+ /** Color temperature shift on Babylon.js mesh materials. */
93
+ export class EnvironmentPulse {
94
+ _targets;
95
+ _cycleDuration;
96
+ _warmR;
97
+ _warmG;
98
+ _warmB;
99
+ _coolR;
100
+ _coolG;
101
+ _coolB;
102
+ _t = 0;
103
+ _running = false;
104
+ constructor(targets, opts = {}) {
105
+ this._targets = targets;
106
+ this._cycleDuration = opts.cycleDuration ?? 8;
107
+ const warm = opts.warmColor ?? 0xffcc88;
108
+ const cool = opts.coolColor ?? 0x88ccff;
109
+ this._warmR = ((warm >> 16) & 0xff) / 255;
110
+ this._warmG = ((warm >> 8) & 0xff) / 255;
111
+ this._warmB = (warm & 0xff) / 255;
112
+ this._coolR = ((cool >> 16) & 0xff) / 255;
113
+ this._coolG = ((cool >> 8) & 0xff) / 255;
114
+ this._coolB = (cool & 0xff) / 255;
115
+ }
116
+ start() { this._running = true; }
117
+ stop() { this._running = false; }
118
+ update(dt) {
119
+ if (!this._running)
120
+ return;
121
+ this._t += dt;
122
+ const mix = (Math.sin(this._t / this._cycleDuration * Math.PI * 2) + 1) * 0.5;
123
+ const r = this._warmR * mix + this._coolR * (1 - mix);
124
+ const g = this._warmG * mix + this._coolG * (1 - mix);
125
+ const b = this._warmB * mix + this._coolB * (1 - mix);
126
+ for (const t of this._targets) {
127
+ const mat = t.material;
128
+ if (mat?.diffuseColor) {
129
+ mat.diffuseColor.r = r;
130
+ mat.diffuseColor.g = g;
131
+ mat.diffuseColor.b = b;
132
+ }
133
+ }
134
+ }
135
+ destroy() { this.stop(); }
136
+ }
137
+ /** Persistent ambient particles for Babylon.js scenes. */
138
+ export class AmbientParticles {
139
+ _opts;
140
+ _particles = [];
141
+ _t = 0;
142
+ _running = false;
143
+ constructor(_scene, opts) {
144
+ this._opts = {
145
+ type: opts.type,
146
+ density: opts.density ?? 30,
147
+ wind: opts.wind ?? { x: 0, y: 0, z: 0 },
148
+ color: opts.color ?? 0xffffff,
149
+ volume: opts.volume ?? 20,
150
+ };
151
+ }
152
+ start() {
153
+ this._running = true;
154
+ for (let i = 0; i < this._opts.density; i++)
155
+ this._particles.push(this._spawn(Math.random()));
156
+ }
157
+ stop() { this._running = false; this._particles = []; }
158
+ setWind(x, y = 0, z = 0) { this._opts.wind = { x, y, z }; }
159
+ update(dt) {
160
+ if (!this._running)
161
+ return;
162
+ this._t += dt;
163
+ const { type, wind, volume } = this._opts;
164
+ for (let i = this._particles.length - 1; i >= 0; i--) {
165
+ const p = this._particles[i];
166
+ p.life -= dt;
167
+ switch (type) {
168
+ case 'snow':
169
+ p.vy -= 0.5 * dt;
170
+ p.vx += wind.x * dt * 0.5;
171
+ break;
172
+ case 'embers':
173
+ p.vy += dt * 2;
174
+ break;
175
+ case 'fireflies':
176
+ p.vx += Math.sin(this._t * 2 + i) * dt * 0.5;
177
+ p.vy += Math.cos(this._t * 1.5 + i) * dt * 0.3;
178
+ break;
179
+ default:
180
+ p.vx += wind.x * dt * 0.2;
181
+ p.vy += wind.y * dt * 0.2;
182
+ p.vz += wind.z * dt * 0.2;
183
+ }
184
+ p.x += p.vx * dt;
185
+ p.y += p.vy * dt;
186
+ p.z += p.vz * dt;
187
+ p.alpha = Math.max(0, Math.min(1, p.life / p.maxLife * 2, (p.maxLife - p.life) / p.maxLife * 4));
188
+ const half = volume / 2;
189
+ if (p.life <= 0 || Math.abs(p.x) > half || Math.abs(p.y) > half)
190
+ this._particles[i] = this._spawn(0);
191
+ }
192
+ while (this._particles.length < this._opts.density)
193
+ this._particles.push(this._spawn(Math.random()));
194
+ }
195
+ _spawn(lifeFraction) {
196
+ const v = this._opts.volume;
197
+ const maxLife = 5 + Math.random() * 5;
198
+ return {
199
+ x: (Math.random() - 0.5) * v, y: (Math.random() - 0.5) * v, z: (Math.random() - 0.5) * v,
200
+ vx: (Math.random() - 0.5) * 0.5, vy: (Math.random() - 0.5) * 0.5, vz: (Math.random() - 0.5) * 0.5,
201
+ life: maxLife * lifeFraction, maxLife, alpha: lifeFraction, size: 0.05 + Math.random() * 0.1,
202
+ };
203
+ }
204
+ getParticles() { return this._particles; }
205
+ destroy() { this.stop(); }
206
+ }
207
+ /** Wind-responsive sway for Babylon.js meshes. */
208
+ export class BackgroundSway {
209
+ _target;
210
+ _windSensitivity;
211
+ _maxAngle;
212
+ _speed;
213
+ _windX = 0;
214
+ _t = 0;
215
+ _running = false;
216
+ constructor(target, opts = {}) {
217
+ this._target = target;
218
+ this._windSensitivity = opts.windSensitivity ?? 1;
219
+ this._maxAngle = opts.maxAngle ?? 0.15;
220
+ this._speed = opts.speed ?? 1;
221
+ }
222
+ setWind(x, _y = 0, _z = 0) { this._windX = x; }
223
+ start() { this._running = true; }
224
+ stop() {
225
+ this._running = false;
226
+ const rot = this._target.rotation;
227
+ if (rot)
228
+ rot.z = 0;
229
+ }
230
+ update(dt) {
231
+ if (!this._running)
232
+ return;
233
+ this._t += dt;
234
+ const strength = Math.abs(this._windX) * this._windSensitivity;
235
+ const target = Math.min(this._maxAngle, strength * 0.1) * Math.sign(this._windX || 1);
236
+ const sway = target + Math.sin(this._t * this._speed * 2.5) * target * 0.3;
237
+ const rot = this._target.rotation;
238
+ if (rot)
239
+ rot.z += (sway - rot.z) * Math.min(1, dt * 4);
240
+ }
241
+ destroy() { this.stop(); }
242
+ }
243
+ //# sourceMappingURL=ambient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ambient.js","sourceRoot":"","sources":["../src/ambient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ type BabylonColor3Like = {
2
+ r: number;
3
+ g: number;
4
+ b: number;
5
+ };
6
+ type BabylonMeshLike = {
7
+ material: {
8
+ diffuseColor?: BabylonColor3Like;
9
+ emissiveColor?: BabylonColor3Like;
10
+ alpha: number;
11
+ };
12
+ };
13
+ export interface PaletteShiftOptions {
14
+ /** Named palettes mapping to per-target diffuse RGB colors */
15
+ palettes?: Record<string, {
16
+ r: number;
17
+ g: number;
18
+ b: number;
19
+ alpha?: number;
20
+ }[]>;
21
+ /** Transition duration in seconds. Default: 0.3 */
22
+ duration?: number;
23
+ }
24
+ /** Lerp material.diffuseColor toward the named palette. */
25
+ export declare class PaletteShift {
26
+ private _running;
27
+ private _targets;
28
+ private _palettes;
29
+ private _duration;
30
+ private _srcColors;
31
+ private _dstColors;
32
+ private _t;
33
+ private _transitioning;
34
+ constructor(targets: BabylonMeshLike[], opts?: PaletteShiftOptions);
35
+ setPalette(name: string): void;
36
+ start(): void;
37
+ stop(): void;
38
+ update(dt: number): void;
39
+ destroy(): void;
40
+ }
41
+ export interface GlowPulseOptions {
42
+ /** Min emissive brightness. Default: 0.0 */
43
+ minBrightness?: number;
44
+ /** Max emissive brightness. Default: 1.0 */
45
+ maxBrightness?: number;
46
+ /** Cycles per second. Default: 1.5 */
47
+ speed?: number;
48
+ /** Emissive base color (normalized 0-1). Default: white */
49
+ color?: BabylonColor3Like;
50
+ }
51
+ /** Pulse material.emissiveColor to suggest a glow. */
52
+ export declare class GlowPulse {
53
+ private _t;
54
+ private _running;
55
+ private _target;
56
+ private _opts;
57
+ constructor(target: BabylonMeshLike, opts?: GlowPulseOptions);
58
+ start(): void;
59
+ stop(): void;
60
+ update(dt: number): void;
61
+ destroy(): void;
62
+ }
63
+ export interface SilhouetteFlashOptions {
64
+ /** Flash color (normalized 0-1). Default: white */
65
+ color?: BabylonColor3Like;
66
+ /** Flash duration in seconds. Default: 0.1 */
67
+ duration?: number;
68
+ }
69
+ /** Set material.diffuseColor to white then restore. */
70
+ export declare class SilhouetteFlash {
71
+ private _flashing;
72
+ private _timer;
73
+ private _target;
74
+ private _opts;
75
+ private _origColor;
76
+ constructor(target: BabylonMeshLike, opts?: SilhouetteFlashOptions);
77
+ flash(): void;
78
+ start(): void;
79
+ stop(): void;
80
+ update(dt: number): void;
81
+ destroy(): void;
82
+ }
83
+ export interface RainbowCycleOptions {
84
+ /** Hue degrees per second. Default: 120 */
85
+ speed?: number;
86
+ }
87
+ /** Cycle through hue colors on material.diffuseColor. */
88
+ export declare class RainbowCycle {
89
+ private _running;
90
+ private _hue;
91
+ private _target;
92
+ private _speed;
93
+ constructor(target: BabylonMeshLike, opts?: RainbowCycleOptions);
94
+ start(): void;
95
+ stop(): void;
96
+ update(dt: number): void;
97
+ destroy(): void;
98
+ }
99
+ export interface DarkenOptions {
100
+ /** Target alpha when darkened. Default: 0.3 */
101
+ targetAlpha?: number;
102
+ /** Transition duration in seconds. Default: 0.5 */
103
+ duration?: number;
104
+ }
105
+ /** Lower material.alpha on multiple meshes (game world darkening on pause). */
106
+ export declare class DarkenOnPause {
107
+ private _running;
108
+ private _targets;
109
+ private _targetAlpha;
110
+ private _duration;
111
+ private _origAlpha;
112
+ private _t;
113
+ private _darkening;
114
+ private _restoring;
115
+ constructor(targets: BabylonMeshLike[], opts?: DarkenOptions);
116
+ darken(): void;
117
+ restore(): void;
118
+ start(): void;
119
+ stop(): void;
120
+ update(dt: number): void;
121
+ destroy(): void;
122
+ }
123
+ export interface SpotlightOptions {
124
+ /** Spotlight radius as fraction of screen (0-1). Default: 0.3 */
125
+ radius?: number;
126
+ /** Edge softness (0-1). Default: 0.2 */
127
+ softness?: number;
128
+ /** Overlay base color. Default: '#000000' */
129
+ color?: string;
130
+ /** Overlay opacity. Default: 0.85 */
131
+ opacity?: number;
132
+ }
133
+ /** Circular "spotlight" cutout using a radial-gradient mask on an HTML overlay element. */
134
+ export declare class SpotlightReveal {
135
+ private _el;
136
+ private _opts;
137
+ private _cx;
138
+ private _cy;
139
+ private _visible;
140
+ constructor(overlayEl: HTMLElement, opts?: SpotlightOptions);
141
+ private _applyStyle;
142
+ setCenter(x: number, y: number): void;
143
+ show(): void;
144
+ hide(): void;
145
+ start(): void;
146
+ stop(): void;
147
+ update(_dt: number): void;
148
+ destroy(): void;
149
+ }
150
+ export {};
151
+ //# sourceMappingURL=color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../src/color.ts"],"names":[],"mappings":"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"}
package/dist/color.js ADDED
@@ -0,0 +1,283 @@
1
+ // ---------------------------------------------------------------------------
2
+ // @joydle/juice-babylon — Color & Lighting effects
3
+ //
4
+ // 6 classes: PaletteShift, GlowPulse, SilhouetteFlash, RainbowCycle,
5
+ // DarkenOnPause, SpotlightReveal
6
+ // All share start() / stop() / update(dt) / destroy().
7
+ // ---------------------------------------------------------------------------
8
+ /** Lerp material.diffuseColor toward the named palette. */
9
+ export class PaletteShift {
10
+ _running = false;
11
+ _targets;
12
+ _palettes;
13
+ _duration;
14
+ _srcColors = [];
15
+ _dstColors = [];
16
+ _t = 0;
17
+ _transitioning = false;
18
+ constructor(targets, opts) {
19
+ this._targets = targets;
20
+ this._palettes = opts?.palettes ?? {};
21
+ this._duration = opts?.duration ?? 0.3;
22
+ }
23
+ setPalette(name) {
24
+ const palette = this._palettes[name];
25
+ if (!palette)
26
+ return;
27
+ this._srcColors = this._targets.map(t => {
28
+ const c = t.material.diffuseColor ?? { r: 1, g: 1, b: 1 };
29
+ return { r: c.r, g: c.g, b: c.b, alpha: t.material.alpha };
30
+ });
31
+ this._dstColors = this._targets.map((_, i) => {
32
+ const e = palette[i] ?? palette[palette.length - 1];
33
+ return { r: e.r, g: e.g, b: e.b, alpha: e.alpha ?? 1 };
34
+ });
35
+ this._t = 0;
36
+ this._transitioning = true;
37
+ }
38
+ start() { this._running = true; }
39
+ stop() { this._running = false; this._transitioning = false; }
40
+ update(dt) {
41
+ if (!this._running || !this._transitioning)
42
+ return;
43
+ this._t += dt;
44
+ const p = Math.min(1, this._duration > 0 ? this._t / this._duration : 1);
45
+ for (let i = 0; i < this._targets.length; i++) {
46
+ const s = this._srcColors[i];
47
+ const d = this._dstColors[i];
48
+ if (!s || !d)
49
+ continue;
50
+ const mat = this._targets[i].material;
51
+ if (mat.diffuseColor) {
52
+ mat.diffuseColor.r = s.r + (d.r - s.r) * p;
53
+ mat.diffuseColor.g = s.g + (d.g - s.g) * p;
54
+ mat.diffuseColor.b = s.b + (d.b - s.b) * p;
55
+ }
56
+ mat.alpha = s.alpha + (d.alpha - s.alpha) * p;
57
+ }
58
+ if (p >= 1)
59
+ this._transitioning = false;
60
+ }
61
+ destroy() { this.stop(); }
62
+ }
63
+ /** Pulse material.emissiveColor to suggest a glow. */
64
+ export class GlowPulse {
65
+ _t = 0;
66
+ _running = false;
67
+ _target;
68
+ _opts;
69
+ constructor(target, opts) {
70
+ this._target = target;
71
+ this._opts = {
72
+ minBrightness: opts?.minBrightness ?? 0.0,
73
+ maxBrightness: opts?.maxBrightness ?? 1.0,
74
+ speed: opts?.speed ?? 1.5,
75
+ color: opts?.color ?? { r: 1, g: 1, b: 1 },
76
+ };
77
+ }
78
+ start() { this._running = true; }
79
+ stop() { this._running = false; }
80
+ update(dt) {
81
+ if (!this._running)
82
+ return;
83
+ this._t += dt;
84
+ const { minBrightness, maxBrightness, speed, color } = this._opts;
85
+ const bright = minBrightness + (maxBrightness - minBrightness) * (0.5 + 0.5 * Math.sin(this._t * speed * Math.PI * 2));
86
+ const em = this._target.material.emissiveColor;
87
+ if (em) {
88
+ em.r = color.r * bright;
89
+ em.g = color.g * bright;
90
+ em.b = color.b * bright;
91
+ }
92
+ }
93
+ destroy() { this.stop(); }
94
+ }
95
+ /** Set material.diffuseColor to white then restore. */
96
+ export class SilhouetteFlash {
97
+ _flashing = false;
98
+ _timer = 0;
99
+ _target;
100
+ _opts;
101
+ _origColor = { r: 1, g: 1, b: 1 };
102
+ constructor(target, opts) {
103
+ this._target = target;
104
+ this._opts = { color: { r: 1, g: 1, b: 1 }, duration: 0.1, ...opts };
105
+ }
106
+ flash() {
107
+ const c = this._target.material.diffuseColor ?? { r: 1, g: 1, b: 1 };
108
+ this._origColor = { r: c.r, g: c.g, b: c.b };
109
+ if (this._target.material.diffuseColor) {
110
+ this._target.material.diffuseColor.r = this._opts.color.r;
111
+ this._target.material.diffuseColor.g = this._opts.color.g;
112
+ this._target.material.diffuseColor.b = this._opts.color.b;
113
+ }
114
+ this._flashing = true;
115
+ this._timer = 0;
116
+ }
117
+ start() { }
118
+ stop() {
119
+ if (this._flashing && this._target.material.diffuseColor) {
120
+ this._target.material.diffuseColor.r = this._origColor.r;
121
+ this._target.material.diffuseColor.g = this._origColor.g;
122
+ this._target.material.diffuseColor.b = this._origColor.b;
123
+ this._flashing = false;
124
+ }
125
+ }
126
+ update(dt) {
127
+ if (!this._flashing)
128
+ return;
129
+ this._timer += dt;
130
+ if (this._timer >= this._opts.duration) {
131
+ if (this._target.material.diffuseColor) {
132
+ this._target.material.diffuseColor.r = this._origColor.r;
133
+ this._target.material.diffuseColor.g = this._origColor.g;
134
+ this._target.material.diffuseColor.b = this._origColor.b;
135
+ }
136
+ this._flashing = false;
137
+ }
138
+ }
139
+ destroy() {
140
+ this.stop();
141
+ if (this._flashing && this._target.material.diffuseColor) {
142
+ this._target.material.diffuseColor.r = this._origColor.r;
143
+ this._target.material.diffuseColor.g = this._origColor.g;
144
+ this._target.material.diffuseColor.b = this._origColor.b;
145
+ }
146
+ }
147
+ }
148
+ /** Cycle through hue colors on material.diffuseColor. */
149
+ export class RainbowCycle {
150
+ _running = false;
151
+ _hue = 0;
152
+ _target;
153
+ _speed;
154
+ constructor(target, opts) {
155
+ this._target = target;
156
+ this._speed = opts?.speed ?? 120;
157
+ }
158
+ start() { this._running = true; }
159
+ stop() {
160
+ this._running = false;
161
+ if (this._target.material.diffuseColor) {
162
+ this._target.material.diffuseColor.r = 1;
163
+ this._target.material.diffuseColor.g = 1;
164
+ this._target.material.diffuseColor.b = 1;
165
+ }
166
+ }
167
+ update(dt) {
168
+ if (!this._running)
169
+ return;
170
+ this._hue = (this._hue + this._speed * dt) % 360;
171
+ const [r, g, b] = _hslToRgb(this._hue / 360, 1, 0.5);
172
+ if (this._target.material.diffuseColor) {
173
+ this._target.material.diffuseColor.r = r;
174
+ this._target.material.diffuseColor.g = g;
175
+ this._target.material.diffuseColor.b = b;
176
+ }
177
+ }
178
+ destroy() { this.stop(); }
179
+ }
180
+ /** Lower material.alpha on multiple meshes (game world darkening on pause). */
181
+ export class DarkenOnPause {
182
+ _running = false;
183
+ _targets;
184
+ _targetAlpha;
185
+ _duration;
186
+ _origAlpha = [];
187
+ _t = 0;
188
+ _darkening = false;
189
+ _restoring = false;
190
+ constructor(targets, opts) {
191
+ this._targets = targets;
192
+ this._targetAlpha = opts?.targetAlpha ?? 0.3;
193
+ this._duration = opts?.duration ?? 0.5;
194
+ }
195
+ darken() {
196
+ this._origAlpha = this._targets.map(t => t.material.alpha);
197
+ this._t = 0;
198
+ this._darkening = true;
199
+ this._restoring = false;
200
+ }
201
+ restore() {
202
+ this._t = 0;
203
+ this._restoring = true;
204
+ this._darkening = false;
205
+ }
206
+ start() { this._running = true; }
207
+ stop() { this._running = false; this._darkening = false; this._restoring = false; }
208
+ update(dt) {
209
+ if (!this._running)
210
+ return;
211
+ if (!this._darkening && !this._restoring)
212
+ return;
213
+ this._t += dt;
214
+ const p = Math.min(1, this._duration > 0 ? this._t / this._duration : 1);
215
+ if (this._darkening) {
216
+ for (let i = 0; i < this._targets.length; i++) {
217
+ const orig = this._origAlpha[i] ?? 1;
218
+ this._targets[i].material.alpha = orig + (this._targetAlpha - orig) * p;
219
+ }
220
+ if (p >= 1)
221
+ this._darkening = false;
222
+ }
223
+ else if (this._restoring) {
224
+ for (let i = 0; i < this._targets.length; i++) {
225
+ const orig = this._origAlpha[i] ?? 1;
226
+ this._targets[i].material.alpha = this._targetAlpha + (orig - this._targetAlpha) * p;
227
+ }
228
+ if (p >= 1)
229
+ this._restoring = false;
230
+ }
231
+ }
232
+ destroy() { this.stop(); }
233
+ }
234
+ /** Circular "spotlight" cutout using a radial-gradient mask on an HTML overlay element. */
235
+ export class SpotlightReveal {
236
+ _el;
237
+ _opts;
238
+ _cx = 0.5;
239
+ _cy = 0.5;
240
+ _visible = false;
241
+ constructor(overlayEl, opts) {
242
+ this._el = overlayEl;
243
+ this._opts = {
244
+ radius: opts?.radius ?? 0.3,
245
+ softness: opts?.softness ?? 0.2,
246
+ color: opts?.color ?? '#000000',
247
+ opacity: opts?.opacity ?? 0.85,
248
+ };
249
+ this._applyStyle();
250
+ }
251
+ _applyStyle() {
252
+ const { radius, softness, color, opacity } = this._opts;
253
+ const inner = Math.max(0, radius - softness * 0.5);
254
+ const outer = radius + softness * 0.5;
255
+ this._el.style.background = `radial-gradient(circle at ${this._cx * 100}% ${this._cy * 100}%, transparent ${inner * 100}%, ${color} ${outer * 100}%)`;
256
+ this._el.style.opacity = String(opacity);
257
+ this._el.style.pointerEvents = 'none';
258
+ this._el.style.position = 'absolute';
259
+ this._el.style.inset = '0';
260
+ }
261
+ setCenter(x, y) {
262
+ this._cx = Math.max(0, Math.min(1, x));
263
+ this._cy = Math.max(0, Math.min(1, y));
264
+ if (this._visible)
265
+ this._applyStyle();
266
+ }
267
+ show() { this._visible = true; this._el.style.display = 'block'; this._applyStyle(); }
268
+ hide() { this._visible = false; this._el.style.display = 'none'; }
269
+ start() { }
270
+ stop() { }
271
+ update(_dt) { }
272
+ destroy() { this.hide(); }
273
+ }
274
+ // ---- Helpers ---------------------------------------------------------------
275
+ function _hslToRgb(h, s, l) {
276
+ const a = s * Math.min(l, 1 - l);
277
+ const f = (n) => {
278
+ const k = (n + h * 12) % 12;
279
+ return l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);
280
+ };
281
+ return [f(0), f(8), f(4)];
282
+ }
283
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../src/color.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ type Vec3Like = {
2
+ x: number;
3
+ y: number;
4
+ z: number;
5
+ };
6
+ type BabylonObjectLike = {
7
+ position: Vec3Like;
8
+ scaling: Vec3Like;
9
+ };
10
+ export interface GhostTrailOptions {
11
+ /** Number of ghost copies in history. Default: 5 */
12
+ count?: number;
13
+ /** Position lag frames between ghosts. Default: 3 */
14
+ spacing?: number;
15
+ /** Starting opacity of the most recent ghost. Default: 0.5 */
16
+ fadeStart?: number;
17
+ /** Tint color (-1 = same as original). Default: -1 */
18
+ color?: number;
19
+ }
20
+ /**
21
+ * Afterimage trail — stores position history each frame.
22
+ * Use `getHistory()` to drive clone meshes for custom rendering.
23
+ */
24
+ export declare class GhostTrail {
25
+ private _running;
26
+ private _history;
27
+ private _opts;
28
+ private _target;
29
+ constructor(target: BabylonObjectLike, opts?: GhostTrailOptions);
30
+ start(): void;
31
+ stop(): void;
32
+ update(_dt: number): void;
33
+ /** Returns sampled ghost positions + alpha. Index 0 is newest. */
34
+ getHistory(): Array<{
35
+ x: number;
36
+ y: number;
37
+ z: number;
38
+ alpha: number;
39
+ }>;
40
+ destroy(): void;
41
+ }
42
+ export interface LandSquashOptions {
43
+ /** Horizontal (X/Z) scaling multiplier on squash. Default: 1.3 */
44
+ squashX?: number;
45
+ /** Vertical (Y) scaling multiplier on squash. Default: 0.7 */
46
+ squashY?: number;
47
+ /** Seconds to spring back to original scale. Default: 0.25 */
48
+ duration?: number;
49
+ }
50
+ /** Squash-stretch on landing using mesh scaling. */
51
+ export declare class LandSquash {
52
+ private _active;
53
+ private _t;
54
+ private _target;
55
+ private _opts;
56
+ private _base;
57
+ constructor(target: BabylonObjectLike, opts?: LandSquashOptions);
58
+ trigger(): void;
59
+ start(): void;
60
+ stop(): void;
61
+ update(dt: number): void;
62
+ destroy(): void;
63
+ }
64
+ export interface XPMagnetOptions {
65
+ /** Base speed in world units per second. Default: 200 */
66
+ speed?: number;
67
+ /** Speed multiplier per second of travel. Default: 2.0 */
68
+ acceleration?: number;
69
+ /** Snap distance in world units. Default: 0.1 */
70
+ snapDistance?: number;
71
+ /** Called when the object reaches the target. */
72
+ onComplete?: () => void;
73
+ }
74
+ /** Fly toward a 3D target point with increasing speed. */
75
+ export declare class XPMagnet {
76
+ private _running;
77
+ private _active;
78
+ private _target;
79
+ private _opts;
80
+ private _goal;
81
+ private _currentSpeed;
82
+ constructor(target: BabylonObjectLike, opts?: XPMagnetOptions);
83
+ flyTo(goalX: number, goalY: number, goalZ?: number): void;
84
+ start(): void;
85
+ stop(): void;
86
+ update(dt: number): void;
87
+ destroy(): void;
88
+ }
89
+ export {};
90
+ //# sourceMappingURL=gamefeel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gamefeel.d.ts","sourceRoot":"","sources":["../src/gamefeel.ts"],"names":[],"mappings":"AAOA,KAAK,QAAQ,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACpD,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,QAAQ,CAAC;CACnB,CAAC;AAIF,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAkD;IAClE,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,OAAO,CAAoB;gBAEvB,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,iBAAiB;IAU/D,KAAK,IAAI,IAAI;IACb,IAAI,IAAI,IAAI;IAEZ,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQzB,kEAAkE;IAClE,UAAU,IAAI,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAYvE,OAAO,IAAI,IAAI;CAChB;AAID,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,oDAAoD;AACpD,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,EAAE,CAAK;IACf,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,KAAK,CAAwB;gBAEzB,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,iBAAiB;IAS/D,OAAO,IAAI,IAAI;IAUf,KAAK,IAAI,IAAI;IACb,IAAI,IAAI,IAAI;IAEZ,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAkBxB,OAAO,IAAI,IAAI;CAChB;AAID,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,0DAA0D;AAC1D,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,KAAK,CAA8E;IAC3F,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,aAAa,CAAK;gBAEd,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,eAAe;IAU7D,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,IAAI;IAMpD,KAAK,IAAI,IAAI;IACb,IAAI,IAAI,IAAI;IAEZ,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAsBxB,OAAO,IAAI,IAAI;CAChB"}
@@ -0,0 +1,156 @@
1
+ // ---------------------------------------------------------------------------
2
+ // @joydle/juice-babylon — Game-feel extras
3
+ //
4
+ // GhostTrail, LandSquash, XPMagnet
5
+ // All share start() / stop() / update(dt) / destroy().
6
+ // ---------------------------------------------------------------------------
7
+ /**
8
+ * Afterimage trail — stores position history each frame.
9
+ * Use `getHistory()` to drive clone meshes for custom rendering.
10
+ */
11
+ export class GhostTrail {
12
+ _running = false;
13
+ _history = [];
14
+ _opts;
15
+ _target;
16
+ constructor(target, opts) {
17
+ this._target = target;
18
+ this._opts = {
19
+ count: opts?.count ?? 5,
20
+ spacing: opts?.spacing ?? 3,
21
+ fadeStart: opts?.fadeStart ?? 0.5,
22
+ color: opts?.color ?? -1,
23
+ };
24
+ }
25
+ start() { this._running = true; this._history = []; }
26
+ stop() { this._running = false; this._history = []; }
27
+ update(_dt) {
28
+ if (!this._running)
29
+ return;
30
+ const p = this._target.position;
31
+ this._history.unshift({ x: p.x, y: p.y, z: p.z });
32
+ const maxLen = this._opts.count * this._opts.spacing;
33
+ if (this._history.length > maxLen)
34
+ this._history.length = maxLen;
35
+ }
36
+ /** Returns sampled ghost positions + alpha. Index 0 is newest. */
37
+ getHistory() {
38
+ const { count, spacing, fadeStart } = this._opts;
39
+ const result = [];
40
+ for (let i = 0; i < count; i++) {
41
+ const idx = i * spacing;
42
+ const entry = this._history[idx];
43
+ if (!entry)
44
+ break;
45
+ result.push({ ...entry, alpha: fadeStart * (1 - i / count) });
46
+ }
47
+ return result;
48
+ }
49
+ destroy() { this.stop(); }
50
+ }
51
+ /** Squash-stretch on landing using mesh scaling. */
52
+ export class LandSquash {
53
+ _active = false;
54
+ _t = 0;
55
+ _target;
56
+ _opts;
57
+ _base = { x: 1, y: 1, z: 1 };
58
+ constructor(target, opts) {
59
+ this._target = target;
60
+ this._opts = {
61
+ squashX: opts?.squashX ?? 1.3,
62
+ squashY: opts?.squashY ?? 0.7,
63
+ duration: opts?.duration ?? 0.25,
64
+ };
65
+ }
66
+ trigger() {
67
+ const sc = this._target.scaling;
68
+ this._base = { x: sc.x, y: sc.y, z: sc.z };
69
+ sc.x = this._base.x * this._opts.squashX;
70
+ sc.y = this._base.y * this._opts.squashY;
71
+ sc.z = this._base.z * this._opts.squashX;
72
+ this._t = 0;
73
+ this._active = true;
74
+ }
75
+ start() { }
76
+ stop() { this._active = false; }
77
+ update(dt) {
78
+ if (!this._active)
79
+ return;
80
+ this._t += dt;
81
+ const p = Math.min(1, this._opts.duration > 0 ? this._t / this._opts.duration : 1);
82
+ const spring = _springOut(p);
83
+ const tx = this._base.x * this._opts.squashX;
84
+ const ty = this._base.y * this._opts.squashY;
85
+ const tz = this._base.z * this._opts.squashX;
86
+ const sc = this._target.scaling;
87
+ sc.x = tx + (this._base.x - tx) * spring;
88
+ sc.y = ty + (this._base.y - ty) * spring;
89
+ sc.z = tz + (this._base.z - tz) * spring;
90
+ if (p >= 1) {
91
+ sc.x = this._base.x;
92
+ sc.y = this._base.y;
93
+ sc.z = this._base.z;
94
+ this._active = false;
95
+ }
96
+ }
97
+ destroy() { this.stop(); }
98
+ }
99
+ /** Fly toward a 3D target point with increasing speed. */
100
+ export class XPMagnet {
101
+ _running = false;
102
+ _active = false;
103
+ _target;
104
+ _opts;
105
+ _goal = { x: 0, y: 0, z: 0 };
106
+ _currentSpeed = 0;
107
+ constructor(target, opts) {
108
+ this._target = target;
109
+ this._opts = {
110
+ speed: opts?.speed ?? 200,
111
+ acceleration: opts?.acceleration ?? 2.0,
112
+ snapDistance: opts?.snapDistance ?? 0.1,
113
+ onComplete: opts?.onComplete,
114
+ };
115
+ }
116
+ flyTo(goalX, goalY, goalZ = 0) {
117
+ this._goal = { x: goalX, y: goalY, z: goalZ };
118
+ this._currentSpeed = this._opts.speed;
119
+ this._active = true;
120
+ }
121
+ start() { this._running = true; }
122
+ stop() { this._running = false; this._active = false; }
123
+ update(dt) {
124
+ if (!this._running || !this._active)
125
+ return;
126
+ const pos = this._target.position;
127
+ const dx = this._goal.x - pos.x;
128
+ const dy = this._goal.y - pos.y;
129
+ const dz = this._goal.z - pos.z;
130
+ const dist = Math.sqrt(dx * dx + dy * dy + dz * dz);
131
+ if (dist <= this._opts.snapDistance) {
132
+ pos.x = this._goal.x;
133
+ pos.y = this._goal.y;
134
+ pos.z = this._goal.z;
135
+ this._active = false;
136
+ this._opts.onComplete?.();
137
+ return;
138
+ }
139
+ this._currentSpeed *= 1 + this._opts.acceleration * dt;
140
+ const move = Math.min(this._currentSpeed * dt, dist);
141
+ pos.x += (dx / dist) * move;
142
+ pos.y += (dy / dist) * move;
143
+ pos.z += (dz / dist) * move;
144
+ }
145
+ destroy() { this.stop(); }
146
+ }
147
+ // ---- Helpers ---------------------------------------------------------------
148
+ function _springOut(t) {
149
+ const c4 = (2 * Math.PI) / 3;
150
+ if (t === 0)
151
+ return 0;
152
+ if (t === 1)
153
+ return 1;
154
+ return Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c4) + 1;
155
+ }
156
+ //# sourceMappingURL=gamefeel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gamefeel.js","sourceRoot":"","sources":["../src/gamefeel.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -10,4 +10,10 @@ export { addMeshHelpers } from './MeshHelpers.js';
10
10
  export type { JuicedMesh, SquashOptions, ExplodeOutOptions, BobOptions, SpinOptions, } from './MeshHelpers.js';
11
11
  export { createBabylonJuiceToolkit } from './toolkit.js';
12
12
  export type { CreateToolkitOptions } from './toolkit.js';
13
+ export { IdleBreathing, FloatingMotion, EnvironmentPulse, AmbientParticles, BackgroundSway, } from './ambient.js';
14
+ export type { IdleBreathingOptions, FloatingMotionOptions, EnvironmentPulseOptions, AmbientParticleOptions, BackgroundSwayOptions, } from './ambient.js';
15
+ export { PaletteShift, GlowPulse, SilhouetteFlash, RainbowCycle, DarkenOnPause, SpotlightReveal, } from './color.js';
16
+ export type { PaletteShiftOptions, GlowPulseOptions, SilhouetteFlashOptions, RainbowCycleOptions, DarkenOptions, SpotlightOptions, } from './color.js';
17
+ export { GhostTrail, LandSquash, XPMagnet } from './gamefeel.js';
18
+ export type { GhostTrailOptions, LandSquashOptions, XPMagnetOptions } from './gamefeel.js';
13
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,YAAY,EACV,WAAW,EACX,YAAY,EACZ,eAAe,EACf,WAAW,EACX,aAAa,EACb,YAAY,EACZ,yBAAyB,EACzB,QAAQ,EACR,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG7E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EACV,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,YAAY,EACV,WAAW,EACX,YAAY,EACZ,eAAe,EACf,WAAW,EACX,aAAa,EACb,YAAY,EACZ,yBAAyB,EACzB,QAAQ,EACR,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG7E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EACV,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGzD,OAAO,EACL,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,GAClF,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,oBAAoB,EAAE,qBAAqB,EAAE,uBAAuB,EACpE,sBAAsB,EAAE,qBAAqB,GAC9C,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,GACvF,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAClF,aAAa,EAAE,gBAAgB,GAChC,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACjE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -15,4 +15,10 @@ export { TrailEffect } from './TrailMesh.js';
15
15
  export { addMeshHelpers } from './MeshHelpers.js';
16
16
  // Toolkit factory
17
17
  export { createBabylonJuiceToolkit } from './toolkit.js';
18
+ // Ambient life effects
19
+ export { IdleBreathing, FloatingMotion, EnvironmentPulse, AmbientParticles, BackgroundSway, } from './ambient.js';
20
+ // Color & Lighting
21
+ export { PaletteShift, GlowPulse, SilhouetteFlash, RainbowCycle, DarkenOnPause, SpotlightReveal, } from './color.js';
22
+ // Game-feel extras
23
+ export { GhostTrail, LandSquash, XPMagnet } from './gamefeel.js';
18
24
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,8CAA8C;AAC9C,8EAA8E;AAE9E,uBAAuB;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAgBtC,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,aAAa;AACb,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASlD,kBAAkB;AAClB,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,8CAA8C;AAC9C,8EAA8E;AAE9E,uBAAuB;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAgBtC,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,aAAa;AACb,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASlD,kBAAkB;AAClB,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAGzD,uBAAuB;AACvB,OAAO,EACL,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,GAClF,MAAM,cAAc,CAAC;AAMtB,mBAAmB;AACnB,OAAO,EACL,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,GACvF,MAAM,YAAY,CAAC;AAMpB,mBAAmB;AACnB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joydle/juice-babylon",
3
- "version": "0.1.3",
3
+ "version": "0.1.19",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",