@kya-os/cli 0.1.0-beta.6 → 0.1.0-beta.7
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/README.md +210 -34
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +28 -6
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/cli-experience-demo-simple.d.ts +14 -0
- package/dist/commands/cli-experience-demo-simple.d.ts.map +1 -0
- package/dist/commands/cli-experience-demo-simple.js +119 -0
- package/dist/commands/cli-experience-demo-simple.js.map +1 -0
- package/dist/commands/cli-experience-demo.d.ts +14 -0
- package/dist/commands/cli-experience-demo.d.ts.map +1 -0
- package/dist/commands/cli-experience-demo.js +172 -0
- package/dist/commands/cli-experience-demo.js.map +1 -0
- package/dist/commands/effects-demo.d.ts +10 -0
- package/dist/commands/effects-demo.d.ts.map +1 -0
- package/dist/commands/effects-demo.js +292 -0
- package/dist/commands/effects-demo.js.map +1 -0
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +12 -2
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +262 -136
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/rotate.d.ts.map +1 -1
- package/dist/commands/rotate.js +19 -3
- package/dist/commands/rotate.js.map +1 -1
- package/dist/dev.d.ts +7 -0
- package/dist/dev.d.ts.map +1 -0
- package/dist/dev.js +9 -0
- package/dist/dev.js.map +1 -0
- package/dist/effects/__tests__/effects.test.d.ts +5 -0
- package/dist/effects/__tests__/effects.test.d.ts.map +1 -0
- package/dist/effects/__tests__/effects.test.js +206 -0
- package/dist/effects/__tests__/effects.test.js.map +1 -0
- package/dist/effects/animation-engine.d.ts +173 -0
- package/dist/effects/animation-engine.d.ts.map +1 -0
- package/dist/effects/animation-engine.js +254 -0
- package/dist/effects/animation-engine.js.map +1 -0
- package/dist/effects/cli-integration.d.ts +86 -0
- package/dist/effects/cli-integration.d.ts.map +1 -0
- package/dist/effects/cli-integration.js +309 -0
- package/dist/effects/cli-integration.js.map +1 -0
- package/dist/effects/config.d.ts +95 -0
- package/dist/effects/config.d.ts.map +1 -0
- package/dist/effects/config.js +216 -0
- package/dist/effects/config.js.map +1 -0
- package/dist/effects/effect-runner.d.ts +69 -0
- package/dist/effects/effect-runner.d.ts.map +1 -0
- package/dist/effects/effect-runner.js +255 -0
- package/dist/effects/effect-runner.js.map +1 -0
- package/dist/effects/gradient.d.ts +131 -0
- package/dist/effects/gradient.d.ts.map +1 -0
- package/dist/effects/gradient.js +236 -0
- package/dist/effects/gradient.js.map +1 -0
- package/dist/effects/implementations/beams.d.ts +80 -0
- package/dist/effects/implementations/beams.d.ts.map +1 -0
- package/dist/effects/implementations/beams.js +221 -0
- package/dist/effects/implementations/beams.js.map +1 -0
- package/dist/effects/implementations/binary-path.d.ts +88 -0
- package/dist/effects/implementations/binary-path.d.ts.map +1 -0
- package/dist/effects/implementations/binary-path.js +296 -0
- package/dist/effects/implementations/binary-path.js.map +1 -0
- package/dist/effects/implementations/blackhole.d.ts +98 -0
- package/dist/effects/implementations/blackhole.d.ts.map +1 -0
- package/dist/effects/implementations/blackhole.js +394 -0
- package/dist/effects/implementations/blackhole.js.map +1 -0
- package/dist/effects/implementations/burn.d.ts +74 -0
- package/dist/effects/implementations/burn.d.ts.map +1 -0
- package/dist/effects/implementations/burn.js +234 -0
- package/dist/effects/implementations/burn.js.map +1 -0
- package/dist/effects/implementations/decrypt.d.ts +115 -0
- package/dist/effects/implementations/decrypt.d.ts.map +1 -0
- package/dist/effects/implementations/decrypt.js +394 -0
- package/dist/effects/implementations/decrypt.js.map +1 -0
- package/dist/effects/implementations/test.d.ts +113 -0
- package/dist/effects/implementations/test.d.ts.map +1 -0
- package/dist/effects/implementations/test.js +552 -0
- package/dist/effects/implementations/test.js.map +1 -0
- package/dist/effects/implementations/waves.d.ts +78 -0
- package/dist/effects/implementations/waves.d.ts.map +1 -0
- package/dist/effects/implementations/waves.js +278 -0
- package/dist/effects/implementations/waves.js.map +1 -0
- package/dist/effects/index.d.ts +37 -0
- package/dist/effects/index.d.ts.map +1 -0
- package/dist/effects/index.js +79 -0
- package/dist/effects/index.js.map +1 -0
- package/dist/effects/motion-engine.d.ts +168 -0
- package/dist/effects/motion-engine.d.ts.map +1 -0
- package/dist/effects/motion-engine.js +353 -0
- package/dist/effects/motion-engine.js.map +1 -0
- package/dist/effects/safe-executor.d.ts +55 -0
- package/dist/effects/safe-executor.d.ts.map +1 -0
- package/dist/effects/safe-executor.js +210 -0
- package/dist/effects/safe-executor.js.map +1 -0
- package/dist/effects/template/effect-template.d.ts +97 -0
- package/dist/effects/template/effect-template.d.ts.map +1 -0
- package/dist/effects/template/effect-template.js +208 -0
- package/dist/effects/template/effect-template.js.map +1 -0
- package/dist/effects/types.d.ts +199 -0
- package/dist/effects/types.d.ts.map +1 -0
- package/dist/effects/types.js +80 -0
- package/dist/effects/types.js.map +1 -0
- package/dist/effects/utils.d.ts +104 -0
- package/dist/effects/utils.d.ts.map +1 -0
- package/dist/effects/utils.js +280 -0
- package/dist/effects/utils.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +48 -42
- package/dist/index.js.map +1 -1
- package/package.json +4 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Blackhole Effect
|
|
3
|
+
* Characters are consumed by a black hole and explode outwards
|
|
4
|
+
*/
|
|
5
|
+
import { BaseEffect } from "../types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Configuration options for the Blackhole effect
|
|
8
|
+
*/
|
|
9
|
+
export interface BlackholeEffectOptions {
|
|
10
|
+
/** Duration in milliseconds */
|
|
11
|
+
duration?: number;
|
|
12
|
+
/** Color for the blackhole border stars */
|
|
13
|
+
blackholeColor?: string;
|
|
14
|
+
/** Colors for stars during explosion */
|
|
15
|
+
starColors?: string[];
|
|
16
|
+
/** Final color for characters */
|
|
17
|
+
finalColor?: string;
|
|
18
|
+
/** Use gradient for final color */
|
|
19
|
+
useGradient?: boolean;
|
|
20
|
+
/** Gradient direction */
|
|
21
|
+
gradientDirection?: "vertical" | "horizontal" | "diagonal";
|
|
22
|
+
/** Size of the blackhole relative to canvas (0.1 - 0.5) */
|
|
23
|
+
blackholeSize?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Blackhole effect implementation
|
|
27
|
+
*/
|
|
28
|
+
export declare class BlackholeEffect extends BaseEffect {
|
|
29
|
+
readonly name = "Blackhole";
|
|
30
|
+
readonly description = "Characters are consumed by a black hole and explode outwards";
|
|
31
|
+
private options;
|
|
32
|
+
private characterStates;
|
|
33
|
+
private animationFrameCount;
|
|
34
|
+
private totalFrames;
|
|
35
|
+
private _isEffectComplete;
|
|
36
|
+
private currentPhase;
|
|
37
|
+
private phaseProgress;
|
|
38
|
+
private blackholeCenter;
|
|
39
|
+
private blackholeRadius;
|
|
40
|
+
private blackholeChars;
|
|
41
|
+
private consumptionQueue;
|
|
42
|
+
private readonly starSymbols;
|
|
43
|
+
private readonly starfieldColors;
|
|
44
|
+
constructor(options?: BlackholeEffectOptions);
|
|
45
|
+
/**
|
|
46
|
+
* Initialize the effect
|
|
47
|
+
*/
|
|
48
|
+
protected onInitialize(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Calculate gradient colors
|
|
51
|
+
*/
|
|
52
|
+
private calculateGradientColors;
|
|
53
|
+
/**
|
|
54
|
+
* Get gradient key based on direction
|
|
55
|
+
*/
|
|
56
|
+
private getGradientKey;
|
|
57
|
+
/**
|
|
58
|
+
* Render the next frame
|
|
59
|
+
*/
|
|
60
|
+
render(): Promise<string[]>;
|
|
61
|
+
/**
|
|
62
|
+
* Update animation state for all characters
|
|
63
|
+
*/
|
|
64
|
+
private updateAnimationState;
|
|
65
|
+
/**
|
|
66
|
+
* Update individual character position
|
|
67
|
+
*/
|
|
68
|
+
private updateCharacterPosition;
|
|
69
|
+
/**
|
|
70
|
+
* Create visual representation of a character
|
|
71
|
+
*/
|
|
72
|
+
private createCharacterVisual;
|
|
73
|
+
/**
|
|
74
|
+
* Calculate distance between two coordinates
|
|
75
|
+
*/
|
|
76
|
+
private calculateDistance;
|
|
77
|
+
/**
|
|
78
|
+
* Get ANSI color code for a color
|
|
79
|
+
*/
|
|
80
|
+
private getColorCode;
|
|
81
|
+
/**
|
|
82
|
+
* Interpolate between two colors
|
|
83
|
+
*/
|
|
84
|
+
private interpolateColor;
|
|
85
|
+
/**
|
|
86
|
+
* Render fallback for when effects are disabled
|
|
87
|
+
*/
|
|
88
|
+
renderFallback(): string[];
|
|
89
|
+
/**
|
|
90
|
+
* Check if effect is complete
|
|
91
|
+
*/
|
|
92
|
+
isComplete(): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Reset the effect
|
|
95
|
+
*/
|
|
96
|
+
protected onReset(): void;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=blackhole.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blackhole.d.ts","sourceRoot":"","sources":["../../../src/effects/implementations/blackhole.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,UAAU,EAMX,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yBAAyB;IACzB,iBAAiB,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,UAAU,CAAC;IAC3D,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAmBD;;GAEG;AACH,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,WAAW,kEAAkE;IAEtF,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,eAAe,CAAmD;IAC1E,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,iBAAiB,CAAkB;IAG3C,OAAO,CAAC,YAAY,CAAgF;IAEpG,OAAO,CAAC,aAAa,CAAa;IAGlC,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,cAAc,CAAyB;IAE/C,OAAO,CAAC,gBAAgB,CAAyB;IAGjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiD;IAC7E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgE;gBAEpF,OAAO,GAAE,sBAA2B;IAchD;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IA0E9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgC/B;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAyCjC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuB5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwG/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2D7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAiBpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,cAAc,IAAI,MAAM,EAAE;IAI1B;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,SAAS,CAAC,OAAO,IAAI,IAAI;CAU1B"}
|
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Blackhole Effect
|
|
3
|
+
* Characters are consumed by a black hole and explode outwards
|
|
4
|
+
*/
|
|
5
|
+
import { BaseEffect, } from "../types.js";
|
|
6
|
+
import { ANSI } from "../utils.js";
|
|
7
|
+
/**
|
|
8
|
+
* Blackhole effect implementation
|
|
9
|
+
*/
|
|
10
|
+
export class BlackholeEffect extends BaseEffect {
|
|
11
|
+
constructor(options = {}) {
|
|
12
|
+
super();
|
|
13
|
+
this.name = "Blackhole";
|
|
14
|
+
this.description = "Characters are consumed by a black hole and explode outwards";
|
|
15
|
+
this.characterStates = new Map();
|
|
16
|
+
this.animationFrameCount = 0;
|
|
17
|
+
this.totalFrames = 0;
|
|
18
|
+
this._isEffectComplete = false;
|
|
19
|
+
// Animation phase tracking
|
|
20
|
+
this.currentPhase = "forming";
|
|
21
|
+
// @ts-ignore - Reserved for phase transitions
|
|
22
|
+
this.phaseProgress = 0;
|
|
23
|
+
// Blackhole properties
|
|
24
|
+
this.blackholeCenter = { x: 0, y: 0 };
|
|
25
|
+
this.blackholeRadius = 0;
|
|
26
|
+
this.blackholeChars = [];
|
|
27
|
+
// @ts-ignore - Reserved for queued consumption
|
|
28
|
+
this.consumptionQueue = [];
|
|
29
|
+
// Star symbols
|
|
30
|
+
this.starSymbols = ["*", "'", "`", "¤", "•", "°", "·", "✦", "✧"];
|
|
31
|
+
this.starfieldColors = ["4a4a4d", "808080", "a0a0a0", "c0c0c0", "e0e0e0", "ffffff"];
|
|
32
|
+
this.options = {
|
|
33
|
+
duration: 6000,
|
|
34
|
+
blackholeColor: "ffffff",
|
|
35
|
+
starColors: ["ffcc0d", "ff7326", "ff194d", "bf2669", "702a8c", "049dbf"],
|
|
36
|
+
finalColor: "ffffff",
|
|
37
|
+
useGradient: true,
|
|
38
|
+
gradientDirection: "diagonal",
|
|
39
|
+
blackholeSize: 0.3,
|
|
40
|
+
...options,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Initialize the effect
|
|
45
|
+
*/
|
|
46
|
+
onInitialize() {
|
|
47
|
+
this.totalFrames = Math.floor((this.options.duration / 1000) * this.config.frameRate);
|
|
48
|
+
const dimensions = this.getCanvasDimensions();
|
|
49
|
+
this.blackholeCenter = {
|
|
50
|
+
x: Math.floor(dimensions.width / 2),
|
|
51
|
+
y: Math.floor(dimensions.height / 2),
|
|
52
|
+
};
|
|
53
|
+
this.blackholeRadius = Math.max(3, Math.floor(Math.min(dimensions.width * this.options.blackholeSize, dimensions.height * this.options.blackholeSize)));
|
|
54
|
+
// Initialize character states
|
|
55
|
+
this.characterStates.clear();
|
|
56
|
+
this.blackholeChars = [];
|
|
57
|
+
this.consumptionQueue = [];
|
|
58
|
+
// Calculate final colors for gradient
|
|
59
|
+
const gradientColors = this.calculateGradientColors(dimensions);
|
|
60
|
+
// Select characters for blackhole ring
|
|
61
|
+
const blackholeCharCount = Math.min(Math.floor(this.blackholeRadius * 3), Math.floor(this.characters.length * 0.3));
|
|
62
|
+
const shuffledChars = [...this.characters].sort(() => Math.random() - 0.5);
|
|
63
|
+
this.blackholeChars = shuffledChars.slice(0, blackholeCharCount);
|
|
64
|
+
this.consumptionQueue = shuffledChars.slice(blackholeCharCount);
|
|
65
|
+
// Initialize all character states
|
|
66
|
+
for (const char of this.characters) {
|
|
67
|
+
const key = `${char.originalPosition.x},${char.originalPosition.y}`;
|
|
68
|
+
const isBlackholeChar = this.blackholeChars.includes(char);
|
|
69
|
+
let finalColor = this.options.finalColor;
|
|
70
|
+
if (this.options.useGradient) {
|
|
71
|
+
const gradientKey = this.getGradientKey(char.originalPosition, dimensions);
|
|
72
|
+
finalColor = gradientColors[gradientKey] || this.options.finalColor;
|
|
73
|
+
}
|
|
74
|
+
// Random starfield position
|
|
75
|
+
const starfieldPos = {
|
|
76
|
+
x: Math.floor(Math.random() * dimensions.width),
|
|
77
|
+
y: Math.floor(Math.random() * dimensions.height),
|
|
78
|
+
};
|
|
79
|
+
this.characterStates.set(key, {
|
|
80
|
+
phase: "starfield",
|
|
81
|
+
isBlackholeRing: isBlackholeChar,
|
|
82
|
+
starSymbol: this.starSymbols[Math.floor(Math.random() * this.starSymbols.length)],
|
|
83
|
+
starColor: this.starfieldColors[Math.floor(Math.random() * this.starfieldColors.length)],
|
|
84
|
+
position: { ...starfieldPos },
|
|
85
|
+
targetPosition: { ...char.originalPosition },
|
|
86
|
+
spiralAngle: Math.random() * Math.PI * 2,
|
|
87
|
+
spiralRadius: this.calculateDistance(starfieldPos, this.blackholeCenter),
|
|
88
|
+
explosionVector: { x: 0, y: 0 },
|
|
89
|
+
settlingProgress: 0,
|
|
90
|
+
finalColor,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
this.currentPhase = "forming";
|
|
94
|
+
this.phaseProgress = 0;
|
|
95
|
+
this.animationFrameCount = 0;
|
|
96
|
+
this._isEffectComplete = false;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Calculate gradient colors
|
|
100
|
+
*/
|
|
101
|
+
calculateGradientColors(dimensions) {
|
|
102
|
+
const gradientMap = {};
|
|
103
|
+
if (this.options.gradientDirection === "diagonal") {
|
|
104
|
+
const maxDist = Math.sqrt(dimensions.width ** 2 + dimensions.height ** 2);
|
|
105
|
+
for (let y = 0; y < dimensions.height; y++) {
|
|
106
|
+
for (let x = 0; x < dimensions.width; x++) {
|
|
107
|
+
const dist = Math.sqrt(x ** 2 + y ** 2);
|
|
108
|
+
const factor = dist / maxDist;
|
|
109
|
+
const key = `${x},${y}`;
|
|
110
|
+
gradientMap[key] = this.interpolateColor(this.options.starColors[this.options.starColors.length - 1], this.options.finalColor, factor);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const size = this.options.gradientDirection === "vertical"
|
|
116
|
+
? dimensions.height
|
|
117
|
+
: dimensions.width;
|
|
118
|
+
const startColor = this.options.starColors[this.options.starColors.length - 1];
|
|
119
|
+
for (let i = 0; i < size; i++) {
|
|
120
|
+
const factor = i / (size - 1);
|
|
121
|
+
gradientMap[i] = this.interpolateColor(startColor, this.options.finalColor, factor);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return gradientMap;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get gradient key based on direction
|
|
128
|
+
*/
|
|
129
|
+
getGradientKey(pos, _dimensions) {
|
|
130
|
+
if (this.options.gradientDirection === "diagonal") {
|
|
131
|
+
return `${pos.x},${pos.y}`;
|
|
132
|
+
}
|
|
133
|
+
else if (this.options.gradientDirection === "vertical") {
|
|
134
|
+
return pos.y;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
return pos.x;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Render the next frame
|
|
142
|
+
*/
|
|
143
|
+
async render() {
|
|
144
|
+
if (!this.isInitialized) {
|
|
145
|
+
throw new Error("Effect not initialized");
|
|
146
|
+
}
|
|
147
|
+
// Update animation state
|
|
148
|
+
this.updateAnimationState();
|
|
149
|
+
// Create the frame
|
|
150
|
+
const dimensions = this.getCanvasDimensions();
|
|
151
|
+
const frame = Array(dimensions.height)
|
|
152
|
+
.fill("")
|
|
153
|
+
.map(() => Array(dimensions.width).fill(" "));
|
|
154
|
+
// Render characters
|
|
155
|
+
for (const char of this.characters) {
|
|
156
|
+
const key = `${char.originalPosition.x},${char.originalPosition.y}`;
|
|
157
|
+
const state = this.characterStates.get(key);
|
|
158
|
+
if (state) {
|
|
159
|
+
const visual = this.createCharacterVisual(char, state);
|
|
160
|
+
char.visual = visual;
|
|
161
|
+
const x = Math.round(state.position.x);
|
|
162
|
+
const y = Math.round(state.position.y);
|
|
163
|
+
if (y >= 0 && y < dimensions.height && x >= 0 && x < dimensions.width) {
|
|
164
|
+
// Apply ANSI color codes
|
|
165
|
+
const colorCode = this.getColorCode(visual.colors.fg);
|
|
166
|
+
const resetCode = ANSI.reset;
|
|
167
|
+
frame[y][x] = colorCode + visual.symbol + resetCode;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
this.animationFrameCount++;
|
|
172
|
+
// Convert frame to strings
|
|
173
|
+
return frame.map((row) => row.join(""));
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Update animation state for all characters
|
|
177
|
+
*/
|
|
178
|
+
updateAnimationState() {
|
|
179
|
+
const progress = this.animationFrameCount / this.totalFrames;
|
|
180
|
+
// Update phase transitions
|
|
181
|
+
if (this.currentPhase === "forming" && progress > 0.15) {
|
|
182
|
+
this.currentPhase = "consuming";
|
|
183
|
+
}
|
|
184
|
+
else if (this.currentPhase === "consuming" && progress > 0.5) {
|
|
185
|
+
this.currentPhase = "collapsing";
|
|
186
|
+
}
|
|
187
|
+
else if (this.currentPhase === "collapsing" && progress > 0.6) {
|
|
188
|
+
this.currentPhase = "exploding";
|
|
189
|
+
}
|
|
190
|
+
else if (this.currentPhase === "exploding" && progress > 0.7) {
|
|
191
|
+
this.currentPhase = "settling";
|
|
192
|
+
}
|
|
193
|
+
// Update character positions based on phase
|
|
194
|
+
for (const [_key, state] of this.characterStates) {
|
|
195
|
+
this.updateCharacterPosition(state);
|
|
196
|
+
}
|
|
197
|
+
// Check completion
|
|
198
|
+
this._isEffectComplete = progress >= 1;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Update individual character position
|
|
202
|
+
*/
|
|
203
|
+
updateCharacterPosition(state) {
|
|
204
|
+
const frameProgress = this.animationFrameCount / this.totalFrames;
|
|
205
|
+
switch (this.currentPhase) {
|
|
206
|
+
case "forming":
|
|
207
|
+
if (state.isBlackholeRing) {
|
|
208
|
+
// Move to blackhole ring position
|
|
209
|
+
const ringProgress = Math.min(frameProgress / 0.15, 1);
|
|
210
|
+
const angle = (this.blackholeChars.indexOf(this.characters.find(c => this.characterStates.get(`${c.originalPosition.x},${c.originalPosition.y}`) === state)) / this.blackholeChars.length) * Math.PI * 2;
|
|
211
|
+
const targetX = this.blackholeCenter.x + Math.cos(angle) * this.blackholeRadius;
|
|
212
|
+
const targetY = this.blackholeCenter.y + Math.sin(angle) * this.blackholeRadius;
|
|
213
|
+
state.position.x = state.position.x + (targetX - state.position.x) * ringProgress * 0.1;
|
|
214
|
+
state.position.y = state.position.y + (targetY - state.position.y) * ringProgress * 0.1;
|
|
215
|
+
state.phase = "consuming";
|
|
216
|
+
}
|
|
217
|
+
break;
|
|
218
|
+
case "consuming":
|
|
219
|
+
if (state.isBlackholeRing) {
|
|
220
|
+
// Rotate blackhole ring
|
|
221
|
+
const angle = (this.blackholeChars.indexOf(this.characters.find(c => this.characterStates.get(`${c.originalPosition.x},${c.originalPosition.y}`) === state)) / this.blackholeChars.length) * Math.PI * 2 + frameProgress * Math.PI * 2;
|
|
222
|
+
state.position.x = this.blackholeCenter.x + Math.cos(angle) * this.blackholeRadius;
|
|
223
|
+
state.position.y = this.blackholeCenter.y + Math.sin(angle) * this.blackholeRadius;
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
// Spiral into blackhole
|
|
227
|
+
const consumeProgress = (frameProgress - 0.15) / 0.35;
|
|
228
|
+
if (consumeProgress > 0) {
|
|
229
|
+
state.spiralAngle += 0.2;
|
|
230
|
+
state.spiralRadius *= 0.95;
|
|
231
|
+
state.position.x = this.blackholeCenter.x + Math.cos(state.spiralAngle) * state.spiralRadius;
|
|
232
|
+
state.position.y = this.blackholeCenter.y + Math.sin(state.spiralAngle) * state.spiralRadius;
|
|
233
|
+
if (state.spiralRadius < 2) {
|
|
234
|
+
state.phase = "collapsed";
|
|
235
|
+
state.position = { ...this.blackholeCenter };
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
break;
|
|
240
|
+
case "collapsing":
|
|
241
|
+
// All characters move to center
|
|
242
|
+
const collapseProgress = (frameProgress - 0.5) / 0.1;
|
|
243
|
+
if (collapseProgress > 0) {
|
|
244
|
+
state.position.x += (this.blackholeCenter.x - state.position.x) * 0.2;
|
|
245
|
+
state.position.y += (this.blackholeCenter.y - state.position.y) * 0.2;
|
|
246
|
+
state.phase = "collapsed";
|
|
247
|
+
}
|
|
248
|
+
break;
|
|
249
|
+
case "exploding":
|
|
250
|
+
// Calculate explosion vector
|
|
251
|
+
if (state.explosionVector.x === 0 && state.explosionVector.y === 0) {
|
|
252
|
+
const angle = Math.atan2(state.targetPosition.y - this.blackholeCenter.y, state.targetPosition.x - this.blackholeCenter.x);
|
|
253
|
+
const distance = this.calculateDistance(state.targetPosition, this.blackholeCenter);
|
|
254
|
+
const speed = Math.min(distance * 0.3, 5);
|
|
255
|
+
state.explosionVector.x = Math.cos(angle) * speed;
|
|
256
|
+
state.explosionVector.y = Math.sin(angle) * speed;
|
|
257
|
+
state.phase = "exploding";
|
|
258
|
+
}
|
|
259
|
+
// Apply explosion movement
|
|
260
|
+
state.position.x += state.explosionVector.x;
|
|
261
|
+
state.position.y += state.explosionVector.y;
|
|
262
|
+
// Dampen explosion
|
|
263
|
+
state.explosionVector.x *= 0.9;
|
|
264
|
+
state.explosionVector.y *= 0.9;
|
|
265
|
+
break;
|
|
266
|
+
case "settling":
|
|
267
|
+
// Settle to final position
|
|
268
|
+
const settleProgress = (frameProgress - 0.7) / 0.3;
|
|
269
|
+
if (settleProgress > 0) {
|
|
270
|
+
state.position.x += (state.targetPosition.x - state.position.x) * 0.1;
|
|
271
|
+
state.position.y += (state.targetPosition.y - state.position.y) * 0.1;
|
|
272
|
+
state.settlingProgress = Math.min(settleProgress, 1);
|
|
273
|
+
if (Math.abs(state.position.x - state.targetPosition.x) < 0.5 &&
|
|
274
|
+
Math.abs(state.position.y - state.targetPosition.y) < 0.5) {
|
|
275
|
+
state.position = { ...state.targetPosition };
|
|
276
|
+
state.phase = "final";
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
break;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Create visual representation of a character
|
|
284
|
+
*/
|
|
285
|
+
createCharacterVisual(char, state) {
|
|
286
|
+
let symbol = state.starSymbol;
|
|
287
|
+
let color = state.starColor;
|
|
288
|
+
switch (state.phase) {
|
|
289
|
+
case "starfield":
|
|
290
|
+
// Initial starfield state
|
|
291
|
+
break;
|
|
292
|
+
case "consuming":
|
|
293
|
+
if (state.isBlackholeRing) {
|
|
294
|
+
symbol = "*";
|
|
295
|
+
color = this.options.blackholeColor;
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
// Fading as consumed
|
|
299
|
+
const fadeColors = ["808080", "606060", "404040", "202020", "000000"];
|
|
300
|
+
const fadeIndex = Math.min(Math.floor((1 - state.spiralRadius / 50) * fadeColors.length), fadeColors.length - 1);
|
|
301
|
+
color = fadeColors[Math.max(0, fadeIndex)];
|
|
302
|
+
}
|
|
303
|
+
break;
|
|
304
|
+
case "collapsed":
|
|
305
|
+
symbol = "●";
|
|
306
|
+
color = this.options.starColors[Math.floor(Math.random() * this.options.starColors.length)];
|
|
307
|
+
break;
|
|
308
|
+
case "exploding":
|
|
309
|
+
symbol = char.originalSymbol;
|
|
310
|
+
color = this.options.starColors[Math.floor(this.animationFrameCount / 2) % this.options.starColors.length];
|
|
311
|
+
break;
|
|
312
|
+
case "settling":
|
|
313
|
+
case "final":
|
|
314
|
+
symbol = char.originalSymbol;
|
|
315
|
+
// Fade from star color to final color
|
|
316
|
+
const starColor = this.options.starColors[0];
|
|
317
|
+
color = this.interpolateColor(starColor, state.finalColor, state.settlingProgress);
|
|
318
|
+
break;
|
|
319
|
+
}
|
|
320
|
+
return {
|
|
321
|
+
symbol,
|
|
322
|
+
colors: {
|
|
323
|
+
fg: color,
|
|
324
|
+
bg: null,
|
|
325
|
+
},
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Calculate distance between two coordinates
|
|
330
|
+
*/
|
|
331
|
+
calculateDistance(a, b) {
|
|
332
|
+
return Math.sqrt((a.x - b.x) ** 2 + (a.y - b.y) ** 2);
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Get ANSI color code for a color
|
|
336
|
+
*/
|
|
337
|
+
getColorCode(color) {
|
|
338
|
+
if (!color || this.config.noColor) {
|
|
339
|
+
return "";
|
|
340
|
+
}
|
|
341
|
+
// For RGB colors, convert to ANSI 24-bit color
|
|
342
|
+
if (typeof color === "string") {
|
|
343
|
+
const r = parseInt(color.substring(0, 2), 16);
|
|
344
|
+
const g = parseInt(color.substring(2, 4), 16);
|
|
345
|
+
const b = parseInt(color.substring(4, 6), 16);
|
|
346
|
+
return `\x1b[38;2;${r};${g};${b}m`;
|
|
347
|
+
}
|
|
348
|
+
// For XTerm colors
|
|
349
|
+
return `\x1b[38;5;${color}m`;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Interpolate between two colors
|
|
353
|
+
*/
|
|
354
|
+
interpolateColor(color1, color2, factor) {
|
|
355
|
+
const r1 = parseInt(color1.substring(0, 2), 16);
|
|
356
|
+
const g1 = parseInt(color1.substring(2, 4), 16);
|
|
357
|
+
const b1 = parseInt(color1.substring(4, 6), 16);
|
|
358
|
+
const r2 = parseInt(color2.substring(0, 2), 16);
|
|
359
|
+
const g2 = parseInt(color2.substring(2, 4), 16);
|
|
360
|
+
const b2 = parseInt(color2.substring(4, 6), 16);
|
|
361
|
+
const r = Math.round(r1 + (r2 - r1) * factor);
|
|
362
|
+
const g = Math.round(g1 + (g2 - g1) * factor);
|
|
363
|
+
const b = Math.round(b1 + (b2 - b1) * factor);
|
|
364
|
+
return [r, g, b]
|
|
365
|
+
.map((c) => Math.max(0, Math.min(255, c)).toString(16).padStart(2, "0"))
|
|
366
|
+
.join("");
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Render fallback for when effects are disabled
|
|
370
|
+
*/
|
|
371
|
+
renderFallback() {
|
|
372
|
+
return this.text.split("\n");
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Check if effect is complete
|
|
376
|
+
*/
|
|
377
|
+
isComplete() {
|
|
378
|
+
return this._isEffectComplete;
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Reset the effect
|
|
382
|
+
*/
|
|
383
|
+
onReset() {
|
|
384
|
+
this.characterStates.clear();
|
|
385
|
+
this.blackholeChars = [];
|
|
386
|
+
this.consumptionQueue = [];
|
|
387
|
+
this.currentPhase = "forming";
|
|
388
|
+
this.phaseProgress = 0;
|
|
389
|
+
this.animationFrameCount = 0;
|
|
390
|
+
this._isEffectComplete = false;
|
|
391
|
+
this.onInitialize();
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
//# sourceMappingURL=blackhole.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blackhole.js","sourceRoot":"","sources":["../../../src/effects/implementations/blackhole.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Burn Effect
|
|
3
|
+
* Characters are ignited and burn up the screen
|
|
4
|
+
*/
|
|
5
|
+
import { BaseEffect } from "../types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Configuration options for the Burn effect
|
|
8
|
+
*/
|
|
9
|
+
export interface BurnEffectOptions {
|
|
10
|
+
/** Duration in milliseconds */
|
|
11
|
+
duration?: number;
|
|
12
|
+
/** Starting color before burning */
|
|
13
|
+
startingColor?: string;
|
|
14
|
+
/** Colors to transition through while burning */
|
|
15
|
+
burnColors?: string[];
|
|
16
|
+
/** Speed of the burn spread (characters per frame) */
|
|
17
|
+
burnSpeed?: number;
|
|
18
|
+
/** Delay between burn waves */
|
|
19
|
+
burnDelay?: number;
|
|
20
|
+
/** Randomness factor for burn timing */
|
|
21
|
+
burnRandomness?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Burn effect implementation
|
|
25
|
+
*/
|
|
26
|
+
export declare class BurnEffect extends BaseEffect {
|
|
27
|
+
readonly name = "Burn";
|
|
28
|
+
readonly description = "Characters are ignited and burn up the screen";
|
|
29
|
+
private options;
|
|
30
|
+
private characterStates;
|
|
31
|
+
private burnFront;
|
|
32
|
+
private animationFrameCount;
|
|
33
|
+
private totalFrames;
|
|
34
|
+
private burnPhaseDuration;
|
|
35
|
+
private _isEffectComplete;
|
|
36
|
+
constructor(options?: BurnEffectOptions);
|
|
37
|
+
/**
|
|
38
|
+
* Initialize the effect
|
|
39
|
+
*/
|
|
40
|
+
protected onInitialize(): void;
|
|
41
|
+
/**
|
|
42
|
+
* Render the next frame
|
|
43
|
+
*/
|
|
44
|
+
render(): Promise<string[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Update burn state for all characters
|
|
47
|
+
*/
|
|
48
|
+
private updateBurnState;
|
|
49
|
+
/**
|
|
50
|
+
* Create visual representation of a character
|
|
51
|
+
*/
|
|
52
|
+
private createCharacterVisual;
|
|
53
|
+
/**
|
|
54
|
+
* Get ANSI color code for a color
|
|
55
|
+
*/
|
|
56
|
+
private getColorCode;
|
|
57
|
+
/**
|
|
58
|
+
* Interpolate between two colors
|
|
59
|
+
*/
|
|
60
|
+
private interpolateColor;
|
|
61
|
+
/**
|
|
62
|
+
* Render fallback for when effects are disabled
|
|
63
|
+
*/
|
|
64
|
+
renderFallback(): string[];
|
|
65
|
+
/**
|
|
66
|
+
* Check if effect is complete
|
|
67
|
+
*/
|
|
68
|
+
isComplete(): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Reset the effect
|
|
71
|
+
*/
|
|
72
|
+
protected onReset(): void;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=burn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"burn.d.ts","sourceRoot":"","sources":["../../../src/effects/implementations/burn.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,UAAU,EAIX,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAYD;;GAEG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,WAAW,mDAAmD;IAEvE,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,eAAe,CAA8C;IACrE,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,iBAAiB,CAAkB;gBAE/B,OAAO,GAAE,iBAAsB;IAa3C;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IA0B9B;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAuCjC;;OAEG;IACH,OAAO,CAAC,eAAe;IAuDvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA4D7B;;OAEG;IACH,OAAO,CAAC,YAAY;IAiBpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,cAAc,IAAI,MAAM,EAAE;IAI1B;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,SAAS,CAAC,OAAO,IAAI,IAAI;CAO1B"}
|