@kya-os/cli 0.1.0-beta.1 → 0.1.0-beta.10
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 +73 -57
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/claim.js +33 -39
- package/dist/commands/claim.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 +55 -51
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +527 -102
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/rotate.d.ts.map +1 -1
- package/dist/commands/rotate.js +81 -60
- 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 +52 -51
- package/dist/index.js.map +1 -1
- package/dist/utils/env-manager.d.ts +66 -2
- package/dist/utils/env-manager.d.ts.map +1 -1
- package/dist/utils/env-manager.js +355 -65
- package/dist/utils/env-manager.js.map +1 -1
- package/dist/utils/platform-detector.js +15 -19
- package/dist/utils/platform-detector.js.map +1 -1
- package/dist/utils/prompts.js +21 -34
- package/dist/utils/prompts.js.map +1 -1
- package/package.json +10 -5
|
@@ -0,0 +1,552 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Blackhole Effect with ASCII Art Center
|
|
3
|
+
* Characters are consumed by a black hole with custom ASCII art 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 TestBlackholeEffect extends BaseEffect {
|
|
11
|
+
constructor(options = {}) {
|
|
12
|
+
super();
|
|
13
|
+
this.name = "Blackhole";
|
|
14
|
+
this.description = "Characters are consumed by a black hole with ASCII art center 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
|
+
// Blackhole properties
|
|
22
|
+
this.blackholeCenter = { x: 0, y: 0 };
|
|
23
|
+
this.blackholeRadius = 0;
|
|
24
|
+
this.blackholeChars = [];
|
|
25
|
+
// ASCII art properties
|
|
26
|
+
this.centerArtChars = [];
|
|
27
|
+
this.centerArtBounds = { width: 0, height: 0 };
|
|
28
|
+
// Star symbols
|
|
29
|
+
this.starSymbols = ["*", "'", "`", "¤", "•", "°", "·", "✦", "✧"];
|
|
30
|
+
this.starfieldColors = [
|
|
31
|
+
"4a4a4d",
|
|
32
|
+
"808080",
|
|
33
|
+
"a0a0a0",
|
|
34
|
+
"c0c0c0",
|
|
35
|
+
"e0e0e0",
|
|
36
|
+
"ffffff",
|
|
37
|
+
];
|
|
38
|
+
// Default Pi ASCII art
|
|
39
|
+
this.defaultPiArt = [
|
|
40
|
+
" πππππππππππππππππππππ ",
|
|
41
|
+
" ππππππππππππππππππππππππππ ",
|
|
42
|
+
" πππππππππππππππππππππππππππππ ",
|
|
43
|
+
" ππππππππππππππππππππππππππππππππ ",
|
|
44
|
+
" πππππππππππππππππππππππππππ ",
|
|
45
|
+
" ππππππππππππππππππππππππππ ",
|
|
46
|
+
" ππππππππ πππππππππ ππππππ ",
|
|
47
|
+
" ππππππππ ππππππππ πππππππππ ",
|
|
48
|
+
" ππππππππ πππππππ πππππππππππ ",
|
|
49
|
+
" πππππππππππ πππππππππ ππππππππππππ ",
|
|
50
|
+
" πππππππππππππππππππ πππππππππππππ ",
|
|
51
|
+
" πππππππππππππππππ πππππππππππππππ ",
|
|
52
|
+
" πππππππππππππππ πππππππππππππππ ",
|
|
53
|
+
" ππππππππππππ ππππππππππππππππ ",
|
|
54
|
+
" ππ ππππππππππ πππππππππππππππππ ",
|
|
55
|
+
" ππππππ πππππππππ πππππππππππππππππ ",
|
|
56
|
+
" ππππππππππ πππππππ πππππππππππππππππππ",
|
|
57
|
+
"ππππππππππππ πππππππ πππππππππππππππππ",
|
|
58
|
+
"ππππππππππππππ πππππππ ππππππππππππππππ",
|
|
59
|
+
"ππππππππππππππ ππππππππ ππππππππ ",
|
|
60
|
+
" ππππππππππππ ππππππππππ ππππππππ ",
|
|
61
|
+
" ππππππππππππ ππππππππππππ ππππππππ ",
|
|
62
|
+
" πππππππππππππ πππππππππππππππππππππππ ",
|
|
63
|
+
" ππππππππππππ πππππππππππππππππππππππ ",
|
|
64
|
+
" ππππππππππππ πππππππππππππππππππππ ",
|
|
65
|
+
" πππππππππππ πππππππππππππππππππππ ",
|
|
66
|
+
" ππππππππππ ππππππππππππππππππππ ",
|
|
67
|
+
" ππππππππππ πππππππππππππππππππ ",
|
|
68
|
+
" ππππππππ ππππππππππππππππ ",
|
|
69
|
+
" πππππππ πππππππππππ ",
|
|
70
|
+
];
|
|
71
|
+
this.options = {
|
|
72
|
+
duration: 6000,
|
|
73
|
+
blackholeColor: "ffffff",
|
|
74
|
+
starColors: ["ffcc0d", "ff7326", "ff194d", "bf2669", "702a8c", "049dbf"],
|
|
75
|
+
finalColor: "ffffff",
|
|
76
|
+
useGradient: true,
|
|
77
|
+
gradientDirection: "diagonal",
|
|
78
|
+
blackholeSize: 0.3,
|
|
79
|
+
centerAsciiArt: this.defaultPiArt,
|
|
80
|
+
centerArtColor: "9945ff",
|
|
81
|
+
animateCenterArt: true,
|
|
82
|
+
...options,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Parse ASCII art into character positions
|
|
87
|
+
*/
|
|
88
|
+
parseAsciiArt(art) {
|
|
89
|
+
this.centerArtChars = [];
|
|
90
|
+
let maxX = 0;
|
|
91
|
+
let maxY = art.length;
|
|
92
|
+
for (let y = 0; y < art.length; y++) {
|
|
93
|
+
const line = art[y];
|
|
94
|
+
maxX = Math.max(maxX, line.length);
|
|
95
|
+
for (let x = 0; x < line.length; x++) {
|
|
96
|
+
const char = line[x];
|
|
97
|
+
if (char && char !== " ") {
|
|
98
|
+
this.centerArtChars.push({
|
|
99
|
+
symbol: char,
|
|
100
|
+
relativePos: { x, y },
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
this.centerArtBounds = { width: maxX, height: maxY };
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Initialize the effect
|
|
109
|
+
*/
|
|
110
|
+
onInitialize() {
|
|
111
|
+
this.totalFrames = Math.floor((this.options.duration / 1000) * this.config.frameRate);
|
|
112
|
+
const dimensions = this.getCanvasDimensions();
|
|
113
|
+
this.blackholeCenter = {
|
|
114
|
+
x: Math.floor(dimensions.width / 2),
|
|
115
|
+
y: Math.floor(dimensions.height / 2),
|
|
116
|
+
};
|
|
117
|
+
// Parse ASCII art
|
|
118
|
+
this.parseAsciiArt(this.options.centerAsciiArt);
|
|
119
|
+
// Calculate radius to accommodate ASCII art
|
|
120
|
+
const artRadius = Math.max(Math.ceil(this.centerArtBounds.width / 2), Math.ceil(this.centerArtBounds.height / 2));
|
|
121
|
+
this.blackholeRadius = Math.max(artRadius + 5, // Add padding around ASCII art
|
|
122
|
+
Math.floor(Math.min(dimensions.width * this.options.blackholeSize, dimensions.height * this.options.blackholeSize)));
|
|
123
|
+
// Initialize character states
|
|
124
|
+
this.characterStates.clear();
|
|
125
|
+
this.blackholeChars = [];
|
|
126
|
+
// Calculate final colors for gradient
|
|
127
|
+
const gradientColors = this.calculateGradientColors(dimensions);
|
|
128
|
+
// Select characters for blackhole ring
|
|
129
|
+
const blackholeCharCount = Math.min(Math.floor(this.blackholeRadius * 3), Math.floor(this.characters.length * 0.3));
|
|
130
|
+
const shuffledChars = [...this.characters].sort(() => Math.random() - 0.5);
|
|
131
|
+
this.blackholeChars = shuffledChars.slice(0, blackholeCharCount);
|
|
132
|
+
// Initialize all character states
|
|
133
|
+
for (const char of this.characters) {
|
|
134
|
+
const key = `${char.originalPosition.x},${char.originalPosition.y}`;
|
|
135
|
+
const isBlackholeChar = this.blackholeChars.includes(char);
|
|
136
|
+
let finalColor = this.options.finalColor;
|
|
137
|
+
if (this.options.useGradient) {
|
|
138
|
+
const gradientKey = this.getGradientKey(char.originalPosition, dimensions);
|
|
139
|
+
finalColor = gradientColors[gradientKey] || this.options.finalColor;
|
|
140
|
+
}
|
|
141
|
+
// Random starfield position
|
|
142
|
+
const starfieldPos = {
|
|
143
|
+
x: Math.floor(Math.random() * dimensions.width),
|
|
144
|
+
y: Math.floor(Math.random() * dimensions.height),
|
|
145
|
+
};
|
|
146
|
+
this.characterStates.set(key, {
|
|
147
|
+
phase: "starfield",
|
|
148
|
+
isBlackholeRing: isBlackholeChar,
|
|
149
|
+
isCenterArt: false,
|
|
150
|
+
starSymbol: this.starSymbols[Math.floor(Math.random() * this.starSymbols.length)],
|
|
151
|
+
starColor: this.starfieldColors[Math.floor(Math.random() * this.starfieldColors.length)],
|
|
152
|
+
position: { ...starfieldPos },
|
|
153
|
+
targetPosition: { ...char.originalPosition },
|
|
154
|
+
spiralAngle: Math.random() * Math.PI * 2,
|
|
155
|
+
spiralRadius: this.calculateDistance(starfieldPos, this.blackholeCenter),
|
|
156
|
+
explosionVector: { x: 0, y: 0 },
|
|
157
|
+
settlingProgress: 0,
|
|
158
|
+
finalColor,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
this.currentPhase = "forming";
|
|
162
|
+
this.animationFrameCount = 0;
|
|
163
|
+
this._isEffectComplete = false;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Calculate gradient colors
|
|
167
|
+
*/
|
|
168
|
+
calculateGradientColors(dimensions) {
|
|
169
|
+
const gradientMap = {};
|
|
170
|
+
if (this.options.gradientDirection === "diagonal") {
|
|
171
|
+
const maxDist = Math.sqrt(dimensions.width ** 2 + dimensions.height ** 2);
|
|
172
|
+
for (let y = 0; y < dimensions.height; y++) {
|
|
173
|
+
for (let x = 0; x < dimensions.width; x++) {
|
|
174
|
+
const dist = Math.sqrt(x ** 2 + y ** 2);
|
|
175
|
+
const factor = dist / maxDist;
|
|
176
|
+
const key = `${x},${y}`;
|
|
177
|
+
gradientMap[key] = this.interpolateColor(this.options.starColors[this.options.starColors.length - 1], this.options.finalColor, factor);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
const size = this.options.gradientDirection === "vertical"
|
|
183
|
+
? dimensions.height
|
|
184
|
+
: dimensions.width;
|
|
185
|
+
const startColor = this.options.starColors[this.options.starColors.length - 1];
|
|
186
|
+
for (let i = 0; i < size; i++) {
|
|
187
|
+
const factor = i / (size - 1);
|
|
188
|
+
gradientMap[i] = this.interpolateColor(startColor, this.options.finalColor, factor);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return gradientMap;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get gradient key based on direction
|
|
195
|
+
*/
|
|
196
|
+
getGradientKey(pos, _dimensions) {
|
|
197
|
+
if (this.options.gradientDirection === "diagonal") {
|
|
198
|
+
return `${pos.x},${pos.y}`;
|
|
199
|
+
}
|
|
200
|
+
else if (this.options.gradientDirection === "vertical") {
|
|
201
|
+
return pos.y;
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
return pos.x;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Render the next frame
|
|
209
|
+
*/
|
|
210
|
+
async render() {
|
|
211
|
+
if (!this.isInitialized) {
|
|
212
|
+
throw new Error("Effect not initialized");
|
|
213
|
+
}
|
|
214
|
+
// Update animation state
|
|
215
|
+
this.updateAnimationState();
|
|
216
|
+
// Create the frame
|
|
217
|
+
const dimensions = this.getCanvasDimensions();
|
|
218
|
+
const frame = Array(dimensions.height)
|
|
219
|
+
.fill("")
|
|
220
|
+
.map(() => Array(dimensions.width).fill(" "));
|
|
221
|
+
// Render center ASCII art first (so it appears behind other elements)
|
|
222
|
+
if (this.currentPhase !== "forming") {
|
|
223
|
+
this.renderCenterArt(frame, dimensions);
|
|
224
|
+
}
|
|
225
|
+
// Render characters
|
|
226
|
+
for (const char of this.characters) {
|
|
227
|
+
const key = `${char.originalPosition.x},${char.originalPosition.y}`;
|
|
228
|
+
const state = this.characterStates.get(key);
|
|
229
|
+
if (state && !state.isCenterArt) {
|
|
230
|
+
const visual = this.createCharacterVisual(char, state);
|
|
231
|
+
char.visual = visual;
|
|
232
|
+
const x = Math.round(state.position.x);
|
|
233
|
+
const y = Math.round(state.position.y);
|
|
234
|
+
if (y >= 0 && y < dimensions.height && x >= 0 && x < dimensions.width) {
|
|
235
|
+
// Apply ANSI color codes
|
|
236
|
+
const colorCode = this.getColorCode(visual.colors.fg);
|
|
237
|
+
const resetCode = ANSI.reset;
|
|
238
|
+
frame[y][x] = colorCode + visual.symbol + resetCode;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
this.animationFrameCount++;
|
|
243
|
+
// Convert frame to strings
|
|
244
|
+
return frame.map((row) => row.join(""));
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Render center ASCII art
|
|
248
|
+
*/
|
|
249
|
+
renderCenterArt(frame, dimensions) {
|
|
250
|
+
const artOffsetX = Math.floor(this.blackholeCenter.x - this.centerArtBounds.width / 2);
|
|
251
|
+
const artOffsetY = Math.floor(this.blackholeCenter.y - this.centerArtBounds.height / 2);
|
|
252
|
+
// Calculate art properties based on phase
|
|
253
|
+
let opacity = 1;
|
|
254
|
+
let rotation = 0;
|
|
255
|
+
let scale = 1;
|
|
256
|
+
if (this.options.animateCenterArt) {
|
|
257
|
+
const frameProgress = this.animationFrameCount / this.totalFrames;
|
|
258
|
+
switch (this.currentPhase) {
|
|
259
|
+
case "forming":
|
|
260
|
+
opacity = Math.min(frameProgress / 0.15, 1);
|
|
261
|
+
scale = 0.5 + opacity * 0.5;
|
|
262
|
+
break;
|
|
263
|
+
case "consuming":
|
|
264
|
+
rotation = frameProgress * Math.PI * 2;
|
|
265
|
+
opacity = 1;
|
|
266
|
+
// Pulsate
|
|
267
|
+
scale = 1 + Math.sin(frameProgress * Math.PI * 10) * 0.1;
|
|
268
|
+
break;
|
|
269
|
+
case "collapsing":
|
|
270
|
+
const collapseProgress = (frameProgress - 0.5) / 0.1;
|
|
271
|
+
scale = 1 - collapseProgress * 0.5;
|
|
272
|
+
opacity = 1;
|
|
273
|
+
break;
|
|
274
|
+
case "exploding":
|
|
275
|
+
opacity = 0; // Hide during explosion
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
// Render each character
|
|
280
|
+
for (const artChar of this.centerArtChars) {
|
|
281
|
+
let x = artChar.relativePos.x;
|
|
282
|
+
let y = artChar.relativePos.y;
|
|
283
|
+
// Apply rotation if animating
|
|
284
|
+
if (rotation !== 0 && this.options.animateCenterArt) {
|
|
285
|
+
const centerX = this.centerArtBounds.width / 2;
|
|
286
|
+
const centerY = this.centerArtBounds.height / 2;
|
|
287
|
+
const relX = x - centerX;
|
|
288
|
+
const relY = y - centerY;
|
|
289
|
+
x = Math.round(centerX + relX * Math.cos(rotation) - relY * Math.sin(rotation));
|
|
290
|
+
y = Math.round(centerY + relX * Math.sin(rotation) + relY * Math.cos(rotation));
|
|
291
|
+
}
|
|
292
|
+
// Apply scale
|
|
293
|
+
if (scale !== 1) {
|
|
294
|
+
const centerX = this.centerArtBounds.width / 2;
|
|
295
|
+
const centerY = this.centerArtBounds.height / 2;
|
|
296
|
+
x = Math.round(centerX + (x - centerX) * scale);
|
|
297
|
+
y = Math.round(centerY + (y - centerY) * scale);
|
|
298
|
+
}
|
|
299
|
+
const finalX = artOffsetX + x;
|
|
300
|
+
const finalY = artOffsetY + y;
|
|
301
|
+
if (finalY >= 0 &&
|
|
302
|
+
finalY < dimensions.height &&
|
|
303
|
+
finalX >= 0 &&
|
|
304
|
+
finalX < dimensions.width &&
|
|
305
|
+
opacity > 0.1) {
|
|
306
|
+
const colorCode = this.getColorCode(this.options.centerArtColor);
|
|
307
|
+
const resetCode = ANSI.reset;
|
|
308
|
+
frame[finalY][finalX] = colorCode + artChar.symbol + resetCode;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Update animation state for all characters
|
|
314
|
+
*/
|
|
315
|
+
updateAnimationState() {
|
|
316
|
+
const progress = this.animationFrameCount / this.totalFrames;
|
|
317
|
+
// Update phase transitions
|
|
318
|
+
if (this.currentPhase === "forming" && progress > 0.15) {
|
|
319
|
+
this.currentPhase = "consuming";
|
|
320
|
+
}
|
|
321
|
+
else if (this.currentPhase === "consuming" && progress > 0.5) {
|
|
322
|
+
this.currentPhase = "collapsing";
|
|
323
|
+
}
|
|
324
|
+
else if (this.currentPhase === "collapsing" && progress > 0.6) {
|
|
325
|
+
this.currentPhase = "exploding";
|
|
326
|
+
}
|
|
327
|
+
else if (this.currentPhase === "exploding" && progress > 0.7) {
|
|
328
|
+
this.currentPhase = "settling";
|
|
329
|
+
}
|
|
330
|
+
// Update character positions based on phase
|
|
331
|
+
for (const [_key, state] of this.characterStates) {
|
|
332
|
+
if (!state.isCenterArt) {
|
|
333
|
+
this.updateCharacterPosition(state);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
// Check completion
|
|
337
|
+
this._isEffectComplete = progress >= 1;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Update individual character position
|
|
341
|
+
*/
|
|
342
|
+
updateCharacterPosition(state) {
|
|
343
|
+
const frameProgress = this.animationFrameCount / this.totalFrames;
|
|
344
|
+
switch (this.currentPhase) {
|
|
345
|
+
case "forming":
|
|
346
|
+
if (state.isBlackholeRing) {
|
|
347
|
+
// Move to blackhole ring position
|
|
348
|
+
const ringProgress = Math.min(frameProgress / 0.15, 1);
|
|
349
|
+
const angle = (this.blackholeChars.indexOf(this.characters.find((c) => this.characterStates.get(`${c.originalPosition.x},${c.originalPosition.y}`) === state)) /
|
|
350
|
+
this.blackholeChars.length) *
|
|
351
|
+
Math.PI *
|
|
352
|
+
2;
|
|
353
|
+
const targetX = this.blackholeCenter.x + Math.cos(angle) * this.blackholeRadius;
|
|
354
|
+
const targetY = this.blackholeCenter.y + Math.sin(angle) * this.blackholeRadius;
|
|
355
|
+
state.position.x =
|
|
356
|
+
state.position.x +
|
|
357
|
+
(targetX - state.position.x) * ringProgress * 0.1;
|
|
358
|
+
state.position.y =
|
|
359
|
+
state.position.y +
|
|
360
|
+
(targetY - state.position.y) * ringProgress * 0.1;
|
|
361
|
+
state.phase = "consuming";
|
|
362
|
+
}
|
|
363
|
+
break;
|
|
364
|
+
case "consuming":
|
|
365
|
+
if (state.isBlackholeRing) {
|
|
366
|
+
// Rotate blackhole ring
|
|
367
|
+
const angle = (this.blackholeChars.indexOf(this.characters.find((c) => this.characterStates.get(`${c.originalPosition.x},${c.originalPosition.y}`) === state)) /
|
|
368
|
+
this.blackholeChars.length) *
|
|
369
|
+
Math.PI *
|
|
370
|
+
2 +
|
|
371
|
+
frameProgress * Math.PI * 2;
|
|
372
|
+
state.position.x =
|
|
373
|
+
this.blackholeCenter.x + Math.cos(angle) * this.blackholeRadius;
|
|
374
|
+
state.position.y =
|
|
375
|
+
this.blackholeCenter.y + Math.sin(angle) * this.blackholeRadius;
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
// Spiral into blackhole
|
|
379
|
+
const consumeProgress = (frameProgress - 0.15) / 0.35;
|
|
380
|
+
if (consumeProgress > 0) {
|
|
381
|
+
state.spiralAngle += 0.2;
|
|
382
|
+
state.spiralRadius *= 0.95;
|
|
383
|
+
state.position.x =
|
|
384
|
+
this.blackholeCenter.x +
|
|
385
|
+
Math.cos(state.spiralAngle) * state.spiralRadius;
|
|
386
|
+
state.position.y =
|
|
387
|
+
this.blackholeCenter.y +
|
|
388
|
+
Math.sin(state.spiralAngle) * state.spiralRadius;
|
|
389
|
+
if (state.spiralRadius < 2) {
|
|
390
|
+
state.phase = "collapsed";
|
|
391
|
+
state.position = { ...this.blackholeCenter };
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
break;
|
|
396
|
+
case "collapsing":
|
|
397
|
+
// All characters move to center
|
|
398
|
+
const collapseProgress = (frameProgress - 0.5) / 0.1;
|
|
399
|
+
if (collapseProgress > 0) {
|
|
400
|
+
state.position.x += (this.blackholeCenter.x - state.position.x) * 0.2;
|
|
401
|
+
state.position.y += (this.blackholeCenter.y - state.position.y) * 0.2;
|
|
402
|
+
state.phase = "collapsed";
|
|
403
|
+
}
|
|
404
|
+
break;
|
|
405
|
+
case "exploding":
|
|
406
|
+
// Calculate explosion vector
|
|
407
|
+
if (state.explosionVector.x === 0 && state.explosionVector.y === 0) {
|
|
408
|
+
const angle = Math.atan2(state.targetPosition.y - this.blackholeCenter.y, state.targetPosition.x - this.blackholeCenter.x);
|
|
409
|
+
const distance = this.calculateDistance(state.targetPosition, this.blackholeCenter);
|
|
410
|
+
const speed = Math.min(distance * 0.3, 5);
|
|
411
|
+
state.explosionVector.x = Math.cos(angle) * speed;
|
|
412
|
+
state.explosionVector.y = Math.sin(angle) * speed;
|
|
413
|
+
state.phase = "exploding";
|
|
414
|
+
}
|
|
415
|
+
// Apply explosion movement
|
|
416
|
+
state.position.x += state.explosionVector.x;
|
|
417
|
+
state.position.y += state.explosionVector.y;
|
|
418
|
+
// Dampen explosion
|
|
419
|
+
state.explosionVector.x *= 0.9;
|
|
420
|
+
state.explosionVector.y *= 0.9;
|
|
421
|
+
break;
|
|
422
|
+
case "settling":
|
|
423
|
+
// Settle to final position
|
|
424
|
+
const settleProgress = (frameProgress - 0.7) / 0.3;
|
|
425
|
+
if (settleProgress > 0) {
|
|
426
|
+
state.position.x += (state.targetPosition.x - state.position.x) * 0.1;
|
|
427
|
+
state.position.y += (state.targetPosition.y - state.position.y) * 0.1;
|
|
428
|
+
state.settlingProgress = Math.min(settleProgress, 1);
|
|
429
|
+
if (Math.abs(state.position.x - state.targetPosition.x) < 0.5 &&
|
|
430
|
+
Math.abs(state.position.y - state.targetPosition.y) < 0.5) {
|
|
431
|
+
state.position = { ...state.targetPosition };
|
|
432
|
+
state.phase = "final";
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
break;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Create visual representation of a character
|
|
440
|
+
*/
|
|
441
|
+
createCharacterVisual(char, state) {
|
|
442
|
+
let symbol = state.starSymbol;
|
|
443
|
+
let color = state.starColor;
|
|
444
|
+
switch (state.phase) {
|
|
445
|
+
case "starfield":
|
|
446
|
+
// Initial starfield state
|
|
447
|
+
break;
|
|
448
|
+
case "consuming":
|
|
449
|
+
if (state.isBlackholeRing) {
|
|
450
|
+
symbol = "*";
|
|
451
|
+
color = this.options.blackholeColor;
|
|
452
|
+
}
|
|
453
|
+
else {
|
|
454
|
+
// Fading as consumed
|
|
455
|
+
const fadeColors = ["808080", "606060", "404040", "202020", "000000"];
|
|
456
|
+
const fadeIndex = Math.min(Math.floor((1 - state.spiralRadius / 50) * fadeColors.length), fadeColors.length - 1);
|
|
457
|
+
color = fadeColors[Math.max(0, fadeIndex)];
|
|
458
|
+
}
|
|
459
|
+
break;
|
|
460
|
+
case "collapsed":
|
|
461
|
+
symbol = "●";
|
|
462
|
+
color =
|
|
463
|
+
this.options.starColors[Math.floor(Math.random() * this.options.starColors.length)];
|
|
464
|
+
break;
|
|
465
|
+
case "exploding":
|
|
466
|
+
symbol = char.originalSymbol;
|
|
467
|
+
color =
|
|
468
|
+
this.options.starColors[Math.floor(this.animationFrameCount / 2) %
|
|
469
|
+
this.options.starColors.length];
|
|
470
|
+
break;
|
|
471
|
+
case "settling":
|
|
472
|
+
case "final":
|
|
473
|
+
symbol = char.originalSymbol;
|
|
474
|
+
// Fade from star color to final color
|
|
475
|
+
const starColor = this.options.starColors[0];
|
|
476
|
+
color = this.interpolateColor(starColor, state.finalColor, state.settlingProgress);
|
|
477
|
+
break;
|
|
478
|
+
}
|
|
479
|
+
return {
|
|
480
|
+
symbol,
|
|
481
|
+
colors: {
|
|
482
|
+
fg: color,
|
|
483
|
+
bg: null,
|
|
484
|
+
},
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Calculate distance between two coordinates
|
|
489
|
+
*/
|
|
490
|
+
calculateDistance(a, b) {
|
|
491
|
+
return Math.sqrt((a.x - b.x) ** 2 + (a.y - b.y) ** 2);
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Get ANSI color code for a color
|
|
495
|
+
*/
|
|
496
|
+
getColorCode(color) {
|
|
497
|
+
if (!color || this.config.noColor) {
|
|
498
|
+
return "";
|
|
499
|
+
}
|
|
500
|
+
// For RGB colors, convert to ANSI 24-bit color
|
|
501
|
+
if (typeof color === "string") {
|
|
502
|
+
const r = parseInt(color.substring(0, 2), 16);
|
|
503
|
+
const g = parseInt(color.substring(2, 4), 16);
|
|
504
|
+
const b = parseInt(color.substring(4, 6), 16);
|
|
505
|
+
return `\x1b[38;2;${r};${g};${b}m`;
|
|
506
|
+
}
|
|
507
|
+
// For XTerm colors
|
|
508
|
+
return `\x1b[38;5;${color}m`;
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Interpolate between two colors
|
|
512
|
+
*/
|
|
513
|
+
interpolateColor(color1, color2, factor) {
|
|
514
|
+
const r1 = parseInt(color1.substring(0, 2), 16);
|
|
515
|
+
const g1 = parseInt(color1.substring(2, 4), 16);
|
|
516
|
+
const b1 = parseInt(color1.substring(4, 6), 16);
|
|
517
|
+
const r2 = parseInt(color2.substring(0, 2), 16);
|
|
518
|
+
const g2 = parseInt(color2.substring(2, 4), 16);
|
|
519
|
+
const b2 = parseInt(color2.substring(4, 6), 16);
|
|
520
|
+
const r = Math.round(r1 + (r2 - r1) * factor);
|
|
521
|
+
const g = Math.round(g1 + (g2 - g1) * factor);
|
|
522
|
+
const b = Math.round(b1 + (b2 - b1) * factor);
|
|
523
|
+
return [r, g, b]
|
|
524
|
+
.map((c) => Math.max(0, Math.min(255, c)).toString(16).padStart(2, "0"))
|
|
525
|
+
.join("");
|
|
526
|
+
}
|
|
527
|
+
/**
|
|
528
|
+
* Render fallback for when effects are disabled
|
|
529
|
+
*/
|
|
530
|
+
renderFallback() {
|
|
531
|
+
return this.text.split("\n");
|
|
532
|
+
}
|
|
533
|
+
/**
|
|
534
|
+
* Check if effect is complete
|
|
535
|
+
*/
|
|
536
|
+
isComplete() {
|
|
537
|
+
return this._isEffectComplete;
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Reset the effect
|
|
541
|
+
*/
|
|
542
|
+
onReset() {
|
|
543
|
+
this.characterStates.clear();
|
|
544
|
+
this.blackholeChars = [];
|
|
545
|
+
this.centerArtChars = [];
|
|
546
|
+
this.currentPhase = "forming";
|
|
547
|
+
this.animationFrameCount = 0;
|
|
548
|
+
this._isEffectComplete = false;
|
|
549
|
+
this.onInitialize();
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/effects/implementations/test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Waves Effect
|
|
3
|
+
* Creates wave patterns that travel across the text
|
|
4
|
+
*/
|
|
5
|
+
import { BaseEffect } from "../types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Configuration options for the Waves effect
|
|
8
|
+
*/
|
|
9
|
+
export interface WavesEffectOptions {
|
|
10
|
+
/** Duration in milliseconds */
|
|
11
|
+
duration?: number;
|
|
12
|
+
/** Wave colors */
|
|
13
|
+
waveColors?: string[];
|
|
14
|
+
/** Final text color */
|
|
15
|
+
finalColor?: string;
|
|
16
|
+
/** Wave speed (higher = faster) */
|
|
17
|
+
waveSpeed?: number;
|
|
18
|
+
/** Wave frequency (waves per screen width) */
|
|
19
|
+
waveFrequency?: number;
|
|
20
|
+
/** Wave amplitude (height in characters) */
|
|
21
|
+
waveAmplitude?: number;
|
|
22
|
+
/** Wave direction */
|
|
23
|
+
direction?: "horizontal" | "vertical" | "diagonal";
|
|
24
|
+
/** Use gradient for wave colors */
|
|
25
|
+
useGradient?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Waves effect implementation
|
|
29
|
+
*/
|
|
30
|
+
export declare class WavesEffect extends BaseEffect {
|
|
31
|
+
readonly name = "Waves";
|
|
32
|
+
readonly description = "Creates wave patterns that travel across the text";
|
|
33
|
+
private options;
|
|
34
|
+
private characterStates;
|
|
35
|
+
private animationFrameCount;
|
|
36
|
+
private totalFrames;
|
|
37
|
+
private wavePosition;
|
|
38
|
+
private _isEffectComplete;
|
|
39
|
+
private gradient?;
|
|
40
|
+
constructor(options?: WavesEffectOptions);
|
|
41
|
+
/**
|
|
42
|
+
* Initialize the effect
|
|
43
|
+
*/
|
|
44
|
+
protected onInitialize(): void;
|
|
45
|
+
/**
|
|
46
|
+
* Render the next frame
|
|
47
|
+
*/
|
|
48
|
+
render(): Promise<string[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Update animation state for all characters
|
|
51
|
+
*/
|
|
52
|
+
private updateAnimationState;
|
|
53
|
+
/**
|
|
54
|
+
* Create visual representation of a character
|
|
55
|
+
*/
|
|
56
|
+
private createCharacterVisual;
|
|
57
|
+
/**
|
|
58
|
+
* Get ANSI color code for a color
|
|
59
|
+
*/
|
|
60
|
+
private getColorCode;
|
|
61
|
+
/**
|
|
62
|
+
* Interpolate between two colors
|
|
63
|
+
*/
|
|
64
|
+
private interpolateColor;
|
|
65
|
+
/**
|
|
66
|
+
* Render fallback for when effects are disabled
|
|
67
|
+
*/
|
|
68
|
+
renderFallback(): string[];
|
|
69
|
+
/**
|
|
70
|
+
* Check if effect is complete
|
|
71
|
+
*/
|
|
72
|
+
isComplete(): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Reset the effect
|
|
75
|
+
*/
|
|
76
|
+
protected onReset(): void;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=waves.d.ts.map
|