textmode.js 0.7.1 → 0.8.0-beta.2
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/dist/textmode.esm.js +2042 -2108
- package/dist/textmode.umd.js +16 -16
- package/dist/types/Textmode.d.ts +11 -11
- package/dist/types/errors/index.d.ts +1 -1
- package/dist/types/index.d.ts +11 -3
- package/dist/types/rendering/webgl/core/Framebuffer.d.ts +0 -6
- package/dist/types/rendering/webgl/core/Renderer.d.ts +7 -6
- package/dist/types/rendering/webgl/core/interfaces/IFramebuffer.d.ts +6 -6
- package/dist/types/rendering/webgl/core/interfaces/IRenderer.d.ts +3 -3
- package/dist/types/rendering/webgl/index.d.ts +2 -2
- package/dist/types/rendering/webgl/pipeline/MaterialBatchPipeline.d.ts +1 -1
- package/dist/types/textmode/Canvas.d.ts +2 -2
- package/dist/types/textmode/Grid.d.ts +32 -3
- package/dist/types/textmode/Textmodifier.d.ts +14 -72
- package/dist/types/textmode/conversion/ConversionManager.d.ts +73 -0
- package/dist/types/textmode/conversion/ConversionRegistry.d.ts +61 -18
- package/dist/types/textmode/conversion/index.d.ts +3 -1
- package/dist/types/textmode/filters/FilterManager.d.ts +0 -4
- package/dist/types/textmode/filters/index.d.ts +1 -1
- package/dist/types/textmode/interfaces/ITextmodifier.d.ts +165 -50
- package/dist/types/textmode/layers/Layer2DCompositor.d.ts +13 -20
- package/dist/types/textmode/layers/LayerManager.d.ts +31 -20
- package/dist/types/textmode/layers/TextmodeLayer.d.ts +58 -20
- package/dist/types/textmode/layers/interfaces/ILayerManager.d.ts +7 -0
- package/dist/types/textmode/layers/interfaces/ITextmodeLayer.d.ts +49 -28
- package/dist/types/textmode/layers/types.d.ts +16 -21
- package/dist/types/textmode/loadables/ITextmodeSource.d.ts +123 -0
- package/dist/types/textmode/loadables/TextmodeImage.d.ts +2 -2
- package/dist/types/textmode/loadables/TextmodeSource.d.ts +10 -118
- package/dist/types/textmode/loadables/font/CharacterExtractor.d.ts +1 -1
- package/dist/types/textmode/loadables/font/TextmodeFont.d.ts +3 -0
- package/dist/types/textmode/loadables/font/index.d.ts +2 -2
- package/dist/types/textmode/loadables/index.d.ts +0 -2
- package/dist/types/textmode/loadables/video/ITextmodeVideo.d.ts +75 -0
- package/dist/types/textmode/loadables/video/TextmodeVideo.d.ts +23 -126
- package/dist/types/textmode/loading/LoadingPhase.d.ts +26 -0
- package/dist/types/textmode/loading/LoadingScreenManager.d.ts +91 -93
- package/dist/types/textmode/loading/index.d.ts +3 -2
- package/dist/types/textmode/loading/types.d.ts +57 -57
- package/dist/types/textmode/managers/MouseManager.d.ts +24 -14
- package/dist/types/textmode/managers/TouchManager.d.ts +25 -13
- package/dist/types/textmode/mixins/index.d.ts +1 -2
- package/dist/types/textmode/mixins/interfaces/IAnimationMixin.d.ts +87 -87
- package/dist/types/textmode/mixins/interfaces/IKeyboardMixin.d.ts +128 -128
- package/dist/types/textmode/mixins/interfaces/IMouseMixin.d.ts +96 -105
- package/dist/types/textmode/mixins/interfaces/IRenderingMixin.d.ts +271 -370
- package/dist/types/textmode/mixins/interfaces/ITouchMixin.d.ts +1 -1
- package/dist/types/textmode/types.d.ts +2 -6
- package/package.json +5 -2
- package/dist/types/textmode/layers/filters/index.d.ts +0 -6
- package/dist/types/textmode/loadables/video/TextmodeVideoPreloader.d.ts +0 -29
- package/dist/types/textmode/loadables/video/types.d.ts +0 -43
- package/dist/types/textmode/mixins/FontMixin.d.ts +0 -8
- package/dist/types/textmode/mixins/interfaces/IFontMixin.d.ts +0 -46
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import type { TextmodeGrid } from '../Grid';
|
|
2
2
|
import type { TextmodeFont } from '../loadables/font';
|
|
3
3
|
import type { TextmodeImage } from '../loadables/TextmodeImage';
|
|
4
|
-
import type { TextmodeSource } from '../loadables/TextmodeSource';
|
|
5
4
|
import type { TextmodeCanvas } from '../Canvas';
|
|
6
5
|
import type { AnimationController } from '../AnimationController';
|
|
7
|
-
import type {
|
|
6
|
+
import type { GLShader } from '../../rendering';
|
|
8
7
|
import type { GLRenderer } from '../../rendering/webgl/core/Renderer';
|
|
9
8
|
import type { MouseManager } from '../managers/MouseManager';
|
|
10
9
|
import type { KeyboardManager } from '../managers/KeyboardManager';
|
|
11
10
|
import type { TouchManager } from '../managers/TouchManager';
|
|
12
11
|
import type { IRenderingMixin } from '../mixins/interfaces/IRenderingMixin';
|
|
13
|
-
import type { IFontMixin } from '../mixins/interfaces/IFontMixin';
|
|
14
12
|
import type { IKeyboardMixin } from '../mixins/interfaces/IKeyboardMixin';
|
|
15
13
|
import type { ITouchMixin } from '../mixins/interfaces/ITouchMixin';
|
|
16
14
|
import type { IMouseMixin } from '../mixins/interfaces/IMouseMixin';
|
|
17
15
|
import type { IAnimationMixin } from '../mixins/interfaces/IAnimationMixin';
|
|
18
16
|
import type { LoadingScreenManager } from '../loading/LoadingScreenManager';
|
|
19
17
|
import type { TextmodeLayerManager } from '../layers';
|
|
18
|
+
import type { BuiltInFilterName, BuiltInFilterParams, TextmodeFilterManager, FilterName } from '../filters';
|
|
19
|
+
import type { TextmodeConversionManager } from '../conversion';
|
|
20
20
|
/**
|
|
21
21
|
* Manages textmode rendering on a [`HTMLCanvasElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement) and provides methods for drawing,
|
|
22
22
|
* exporting, font management, event handling, and animation control.
|
|
@@ -25,15 +25,11 @@ import type { TextmodeLayerManager } from '../layers';
|
|
|
25
25
|
* it creates a new `HTMLCanvasElement` to draw on using the `textmode.js` drawing API.
|
|
26
26
|
* If a canvas is provided, it will use that canvas instead.
|
|
27
27
|
*/
|
|
28
|
-
export interface ITextmodifier extends IRenderingMixin,
|
|
28
|
+
export interface ITextmodifier extends IRenderingMixin, IAnimationMixin, IMouseMixin, ITouchMixin, IKeyboardMixin {
|
|
29
29
|
/** Core WebGL renderer @ignore */
|
|
30
30
|
readonly _renderer: GLRenderer;
|
|
31
|
-
/** Font management @ignore */
|
|
32
|
-
readonly _font: TextmodeFont;
|
|
33
31
|
/** Canvas management @ignore */
|
|
34
32
|
readonly _canvas: TextmodeCanvas;
|
|
35
|
-
/** Grid management @ignore */
|
|
36
|
-
readonly _grid: TextmodeGrid;
|
|
37
33
|
/** Animation controller for managing rendering loop @ignore */
|
|
38
34
|
readonly _animationController: AnimationController;
|
|
39
35
|
/** Mouse interaction manager @ignore */
|
|
@@ -42,24 +38,72 @@ export interface ITextmodifier extends IRenderingMixin, IFontMixin, IAnimationMi
|
|
|
42
38
|
readonly _touchManager: TouchManager;
|
|
43
39
|
/** Keyboard interaction manager @ignore */
|
|
44
40
|
readonly _keyboardManager: KeyboardManager;
|
|
45
|
-
/** Framebuffer used for offscreen rendering @ignore */
|
|
46
|
-
readonly _textmodeDrawFramebuffer: GLFramebuffer;
|
|
47
41
|
/** Shader used for converting pixels to textmode grid format @ignore */
|
|
48
42
|
readonly _textmodeConversionShader: GLShader;
|
|
49
|
-
/** Framebuffer used for textmode conversion @ignore */
|
|
50
|
-
readonly _textmodeFramebuffer: GLFramebuffer;
|
|
51
43
|
/** Shader used for final presentation to the screen @ignore */
|
|
52
44
|
readonly _presentShader: GLShader;
|
|
53
45
|
/** Loading screen manager for boot-time UX @ignore */
|
|
54
46
|
readonly _loading: LoadingScreenManager;
|
|
55
|
-
/**
|
|
56
|
-
readonly
|
|
47
|
+
/** Conversion manager for image-to-ASCII conversion @ignore */
|
|
48
|
+
readonly _conversionManager: TextmodeConversionManager;
|
|
49
|
+
/** Filter manager for applying post-processing effects @ignore */
|
|
50
|
+
readonly _filterManager: TextmodeFilterManager;
|
|
57
51
|
/** Layer manager for handling multiple layers @ignore */
|
|
58
52
|
readonly _layerManager: TextmodeLayerManager;
|
|
59
|
-
/** @ignore */
|
|
60
|
-
|
|
53
|
+
/** Active font based on layer, or loading screen font override @ignore */
|
|
54
|
+
_activeFont?: TextmodeFont;
|
|
55
|
+
/** Active grid based on layer currently being rendered @ignore */
|
|
56
|
+
_activeGrid?: TextmodeGrid;
|
|
61
57
|
/** Main render method @ignore */
|
|
62
58
|
$render(): void;
|
|
59
|
+
/**
|
|
60
|
+
* Load a font for the base layer and return it.
|
|
61
|
+
*
|
|
62
|
+
* The returned font can be reused on other layers via {@link TextmodeLayer.loadFont}.
|
|
63
|
+
*
|
|
64
|
+
* @param fontSource The URL of the font to load.
|
|
65
|
+
* @returns The loaded TextmodeFont instance (base layer font).
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```javascript
|
|
69
|
+
* const t = textmode.create();
|
|
70
|
+
*
|
|
71
|
+
* t.setup(async () => {
|
|
72
|
+
* // Load font for the base layer
|
|
73
|
+
* const font = await t.loadFont('./fonts/myfont.ttf');
|
|
74
|
+
*
|
|
75
|
+
* // Use the same font on another layer
|
|
76
|
+
* const layer = t.layers.add();
|
|
77
|
+
* await layer.loadFont(font);
|
|
78
|
+
*
|
|
79
|
+
* // Or load a different font for a layer
|
|
80
|
+
* await layer.loadFont('./fonts/otherfont.ttf');
|
|
81
|
+
* });
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
loadFont(fontSource: string): Promise<TextmodeFont>;
|
|
85
|
+
/**
|
|
86
|
+
* Set the font size used for rendering.
|
|
87
|
+
* @param size The font size to set.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```javascript
|
|
91
|
+
* // Create a Textmodifier instance
|
|
92
|
+
* const t = textmode.create();
|
|
93
|
+
*
|
|
94
|
+
* t.setup(() => {
|
|
95
|
+
* // Set the font size to 32
|
|
96
|
+
* t.fontSize(32);
|
|
97
|
+
* });
|
|
98
|
+
*
|
|
99
|
+
* t.draw(() => {
|
|
100
|
+
* t.background(0);
|
|
101
|
+
* t.char('A');
|
|
102
|
+
* t.rect(5, 5);
|
|
103
|
+
* });
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
fontSize(size: number): void;
|
|
63
107
|
/**
|
|
64
108
|
* Set a setup callback function that will be executed once when initialization is complete.
|
|
65
109
|
*
|
|
@@ -207,9 +251,40 @@ export interface ITextmodifier extends IRenderingMixin, IFontMixin, IAnimationMi
|
|
|
207
251
|
* ```
|
|
208
252
|
*/
|
|
209
253
|
destroy(): void;
|
|
210
|
-
/**
|
|
211
|
-
|
|
212
|
-
|
|
254
|
+
/**
|
|
255
|
+
* Apply a filter to the final composited output.
|
|
256
|
+
*
|
|
257
|
+
* Filters are applied after all layers are composited but before
|
|
258
|
+
* the result is presented to the canvas. Multiple filters can be
|
|
259
|
+
* queued per frame and will be applied in order.
|
|
260
|
+
*
|
|
261
|
+
* @param name The name of the filter to apply (built-in or custom)
|
|
262
|
+
* @param params Optional parameters for the filter
|
|
263
|
+
*
|
|
264
|
+
* @example
|
|
265
|
+
* ```typescript
|
|
266
|
+
* t.draw(() => {
|
|
267
|
+
* t.background(0);
|
|
268
|
+
* t.charColor(255);
|
|
269
|
+
* t.char('A');
|
|
270
|
+
* t.rect(10, 10);
|
|
271
|
+
*
|
|
272
|
+
* // Apply built-in filters
|
|
273
|
+
* t.filter('grayscale', 0.5);
|
|
274
|
+
* t.filter('invert');
|
|
275
|
+
*
|
|
276
|
+
* // Chain multiple filters
|
|
277
|
+
* t.filter('sepia', { amount: 0.3 });
|
|
278
|
+
* t.filter('threshold', 0.5);
|
|
279
|
+
* });
|
|
280
|
+
* ```
|
|
281
|
+
*/
|
|
282
|
+
filter<T extends BuiltInFilterName>(name: T, params?: BuiltInFilterParams[T]): void;
|
|
283
|
+
filter(name: FilterName, params?: unknown): void;
|
|
284
|
+
filter(name: FilterName, params?: unknown): void;
|
|
285
|
+
/** Get the grid object used for rendering the base layer. */
|
|
286
|
+
readonly grid: TextmodeGrid | undefined;
|
|
287
|
+
/** Get the current font object used for rendering the base layer. */
|
|
213
288
|
readonly font: TextmodeFont;
|
|
214
289
|
/** Get the width of the canvas in pixels. */
|
|
215
290
|
readonly width: number;
|
|
@@ -217,10 +292,50 @@ export interface ITextmodifier extends IRenderingMixin, IFontMixin, IAnimationMi
|
|
|
217
292
|
readonly height: number;
|
|
218
293
|
/** Get the textmodifier canvas containing the rendered output. */
|
|
219
294
|
readonly canvas: HTMLCanvasElement;
|
|
220
|
-
/** Get the WebGL framebuffer used for drawing operations in {@link Textmodifier.draw}. */
|
|
221
|
-
readonly drawFramebuffer: GLFramebuffer;
|
|
222
295
|
/** Check if the instance has been disposed/destroyed. */
|
|
223
296
|
readonly isDisposed: boolean;
|
|
297
|
+
/**
|
|
298
|
+
* Access the filter manager for this Textmodifier instance.
|
|
299
|
+
*
|
|
300
|
+
* Use this to register custom filters that can be applied both globally
|
|
301
|
+
* (via {@link filter}) and on individual layers (via {@link TextmodeLayer.filter}).
|
|
302
|
+
* Filters only need to be registered once and are available everywhere.
|
|
303
|
+
*
|
|
304
|
+
* @example
|
|
305
|
+
* ```typescript
|
|
306
|
+
* // Register a custom filter once
|
|
307
|
+
* await t.filters.register('vignette', vignetteShader, {
|
|
308
|
+
* u_intensity: ['intensity', 0.5]
|
|
309
|
+
* });
|
|
310
|
+
*
|
|
311
|
+
* t.draw(() => {
|
|
312
|
+
* t.background(0);
|
|
313
|
+
* t.char('A');
|
|
314
|
+
* t.rect(10, 10);
|
|
315
|
+
*
|
|
316
|
+
* // Apply filter globally to final output
|
|
317
|
+
* t.filter('vignette', { intensity: 0.8 });
|
|
318
|
+
*
|
|
319
|
+
* // Or apply to a specific layer
|
|
320
|
+
* t.layers.base.filter('vignette', 0.5);
|
|
321
|
+
* });
|
|
322
|
+
* ```
|
|
323
|
+
*/
|
|
324
|
+
readonly filters: TextmodeFilterManager;
|
|
325
|
+
/**
|
|
326
|
+
* Access the layer manager for this Textmodifier instance.
|
|
327
|
+
*
|
|
328
|
+
* Use this to create and manage multiple layers within the textmode rendering context.
|
|
329
|
+
* Each layer can have its own grid, font, draw callback, and filters.
|
|
330
|
+
*/
|
|
331
|
+
readonly layers: TextmodeLayerManager;
|
|
332
|
+
/**
|
|
333
|
+
* Access the conversion manager for this Textmodifier instance.
|
|
334
|
+
*
|
|
335
|
+
* Use this to register custom conversion strategies that can be used
|
|
336
|
+
* when converting images/videos/canvases into textmode representations.
|
|
337
|
+
*/
|
|
338
|
+
readonly conversions: TextmodeConversionManager;
|
|
224
339
|
/**
|
|
225
340
|
* If in overlay mode, returns the {@link TextmodeImage} instance capturing the target canvas/video content,
|
|
226
341
|
* allowing further configuration of the conversion parameters.
|
|
@@ -252,35 +367,35 @@ export interface ITextmodifier extends IRenderingMixin, IFontMixin, IAnimationMi
|
|
|
252
367
|
* Provides access to the loading screen manager to control boot-time loading UX.
|
|
253
368
|
*
|
|
254
369
|
* @example
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
370
|
+
* ```javascript
|
|
371
|
+
* const t = textmode.create({ width: 800, height: 600, loadingScreen: { message: 'loading...' } });
|
|
372
|
+
*
|
|
373
|
+
* t.setup(async () => {
|
|
374
|
+
* // Initialize two loading phases
|
|
375
|
+
* const phase1 = t.loading.addPhase('Loading assets');
|
|
376
|
+
* const phase2 = t.loading.addPhase('Initializing game');
|
|
377
|
+
*
|
|
378
|
+
* // Start the first phase and simulate asset loading
|
|
379
|
+
* await phase1.track(async () => {
|
|
380
|
+
* for (let i = 0; i <= 5; i++) {
|
|
381
|
+
* phase1.report(i / 5);
|
|
382
|
+
* // Small delay — increases visibility of the loading animation
|
|
383
|
+
* await new Promise((r) => setTimeout(r, 200));
|
|
384
|
+
* }
|
|
385
|
+
* });
|
|
386
|
+
*
|
|
387
|
+
* // Start the second phase and simulate initialization
|
|
388
|
+
* await phase2.track(async () => {
|
|
389
|
+
* for (let i = 0; i <= 5; i++) {
|
|
390
|
+
* phase2.report(i / 5);
|
|
391
|
+
* await new Promise((r) => setTimeout(r, 150));
|
|
392
|
+
* }
|
|
393
|
+
* });
|
|
394
|
+
*
|
|
395
|
+
* // Optionally set a final message before the screen transitions away
|
|
396
|
+
* t.loading.message('Ready - enjoy!');
|
|
397
|
+
* });
|
|
398
|
+
* ```
|
|
284
399
|
*/
|
|
285
400
|
readonly loading: LoadingScreenManager;
|
|
286
401
|
}
|
|
@@ -4,28 +4,26 @@ import type { TextmodeLayer } from './TextmodeLayer';
|
|
|
4
4
|
* Parameters for the composite operation.
|
|
5
5
|
*/
|
|
6
6
|
export interface CompositeParams {
|
|
7
|
-
/** The base texture
|
|
8
|
-
|
|
7
|
+
/** The base layer placement (texture + size + offset). */
|
|
8
|
+
base: CompositeLayerPlacement;
|
|
9
|
+
/** The array of user layer placements to composite on top of the base. */
|
|
10
|
+
layers: readonly CompositeLayerPlacement[];
|
|
9
11
|
/** The target framebuffer to render the final result into. */
|
|
10
12
|
targetFramebuffer: GLFramebuffer;
|
|
11
13
|
/** The background color as RGBA values (0-1 range). */
|
|
12
14
|
backgroundColor: [number, number, number, number];
|
|
13
|
-
/** The base layer configuration (visibility, opacity, offset). */
|
|
14
|
-
baseLayer: TextmodeLayer;
|
|
15
|
-
/** The array of user layers to composite on top of the base. */
|
|
16
|
-
layers: readonly TextmodeLayer[];
|
|
17
15
|
/** Canvas width in pixels. */
|
|
18
16
|
canvasWidth: number;
|
|
19
17
|
/** Canvas height in pixels. */
|
|
20
18
|
canvasHeight: number;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
19
|
+
}
|
|
20
|
+
export interface CompositeLayerPlacement {
|
|
21
|
+
layer: TextmodeLayer;
|
|
22
|
+
texture: WebGLTexture;
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
25
|
+
offsetX: number;
|
|
26
|
+
offsetY: number;
|
|
29
27
|
}
|
|
30
28
|
/**
|
|
31
29
|
* Handles the compositing of multiple layers using shader-based blending.
|
|
@@ -49,15 +47,10 @@ export declare class Layer2DCompositor {
|
|
|
49
47
|
/**
|
|
50
48
|
* Create a new LayerCompositor.
|
|
51
49
|
* @param renderer The WebGL renderer instance.
|
|
52
|
-
*/
|
|
53
|
-
constructor(renderer: GLRenderer);
|
|
54
|
-
/**
|
|
55
|
-
* Initialize the compositor's framebuffers.
|
|
56
50
|
* @param canvasWidth The canvas width in pixels.
|
|
57
51
|
* @param canvasHeight The canvas height in pixels.
|
|
58
|
-
* @ignore
|
|
59
52
|
*/
|
|
60
|
-
|
|
53
|
+
constructor(renderer: GLRenderer, canvasWidth: number, canvasHeight: number);
|
|
61
54
|
/**
|
|
62
55
|
* Composite all layers onto the target framebuffer.
|
|
63
56
|
* @param params The composite parameters.
|
|
@@ -3,9 +3,11 @@ import type { Textmodifier } from '../Textmodifier';
|
|
|
3
3
|
import { TextmodeLayer } from './TextmodeLayer';
|
|
4
4
|
import type { TextmodeLayerOptions } from './types';
|
|
5
5
|
import type { ILayerManager } from './interfaces/ILayerManager';
|
|
6
|
+
import type { TextmodeOptions } from '../types';
|
|
7
|
+
import type { TextmodeGrid } from '../Grid';
|
|
6
8
|
/**
|
|
7
|
-
* Manages all user-defined layers within a Textmodifier
|
|
8
|
-
*
|
|
9
|
+
* Manages all user-defined layers within a Textmodifier in *
|
|
10
|
+
* Th *
|
|
9
11
|
* This manager is responsible for:
|
|
10
12
|
* - Managing the collection of user layers (add, remove, move, swap)
|
|
11
13
|
* - Coordinating layer rendering and compositing
|
|
@@ -19,36 +21,34 @@ export declare class LayerManager implements ILayerManager {
|
|
|
19
21
|
private readonly _renderer;
|
|
20
22
|
private readonly _conversionShader;
|
|
21
23
|
private readonly _compositor2D;
|
|
22
|
-
private
|
|
23
|
-
private
|
|
24
|
+
private _pendingLayers;
|
|
25
|
+
private _layers;
|
|
24
26
|
private readonly _baseLayer;
|
|
25
|
-
private _baseFramebuffer;
|
|
26
|
-
private _baseRawFramebuffer;
|
|
27
|
-
private _layerPingPongBuffers;
|
|
28
27
|
private _isReady;
|
|
28
|
+
private readonly _gridDimensionChangeCallbacks;
|
|
29
29
|
/**
|
|
30
30
|
* Create a new LayerManager.
|
|
31
31
|
* @param textmodifier The Textmodifier instance this manager belongs to.
|
|
32
32
|
* @ignore
|
|
33
33
|
*/
|
|
34
|
-
constructor(textmodifier: Textmodifier);
|
|
34
|
+
constructor(textmodifier: Textmodifier, opts: TextmodeOptions);
|
|
35
|
+
/**
|
|
36
|
+
* Initialize all pending layers and the compositor.
|
|
37
|
+
* @ignore
|
|
38
|
+
*/
|
|
39
|
+
$initialize(): Promise<void>;
|
|
35
40
|
add(options?: TextmodeLayerOptions): TextmodeLayer;
|
|
36
41
|
remove(layer: TextmodeLayer): void;
|
|
37
42
|
move(layer: TextmodeLayer, newIndex: number): void;
|
|
38
43
|
swap(layerA: TextmodeLayer, layerB: TextmodeLayer): void;
|
|
39
44
|
clear(): void;
|
|
40
|
-
/**
|
|
41
|
-
* Initialize all pending layers and the compositor.
|
|
42
|
-
* @ignore
|
|
43
|
-
*/
|
|
44
|
-
$initialize(): void;
|
|
45
45
|
/**
|
|
46
46
|
* Render all layers (base and user) and composite them to the target framebuffer.
|
|
47
47
|
* @param targetFramebuffer The framebuffer to render the final composited result to.
|
|
48
48
|
* @param backgroundColor The background color as RGBA values (0-1 range).
|
|
49
49
|
* @ignore
|
|
50
50
|
*/
|
|
51
|
-
$renderAndComposite(targetFramebuffer: GLFramebuffer,
|
|
51
|
+
$renderAndComposite(targetFramebuffer: GLFramebuffer, fallbackBaseDraw: () => void): void;
|
|
52
52
|
/**
|
|
53
53
|
* Render all user layers to their respective framebuffers.
|
|
54
54
|
*/
|
|
@@ -70,15 +70,26 @@ export declare class LayerManager implements ILayerManager {
|
|
|
70
70
|
get all(): readonly TextmodeLayer[];
|
|
71
71
|
get base(): TextmodeLayer;
|
|
72
72
|
/**
|
|
73
|
-
*
|
|
73
|
+
* Get the grid of the topmost visible layer.
|
|
74
|
+
* Returns the topmost user layer's grid if any are visible, otherwise returns the base layer's grid.
|
|
75
|
+
* This is useful for input managers that need to map coordinates to the layer the user sees on top.
|
|
74
76
|
*/
|
|
75
|
-
|
|
77
|
+
getTopmostGrid(): TextmodeGrid | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Register a callback to be invoked whenever ANY layer's grid dimensions change.
|
|
80
|
+
* This includes the base layer and all user layers.
|
|
81
|
+
* @param callback The callback to invoke on dimension changes.
|
|
82
|
+
* @ignore
|
|
83
|
+
*/
|
|
84
|
+
$onAnyGridDimensionChange(callback: () => void): void;
|
|
76
85
|
/**
|
|
77
|
-
*
|
|
78
|
-
* The base layer shares the main textmode draw framebuffer and uses
|
|
79
|
-
* the manager's base framebuffer for ASCII output.
|
|
86
|
+
* Notify all registered callbacks that a grid's dimensions have changed.
|
|
80
87
|
*/
|
|
81
|
-
private
|
|
88
|
+
private _notifyGridDimensionChange;
|
|
89
|
+
/**
|
|
90
|
+
* Initialize a single layer with required dependencies.
|
|
91
|
+
*/
|
|
92
|
+
private _initializeLayer;
|
|
82
93
|
/**
|
|
83
94
|
* Remove a layer from a collection and dispose it.
|
|
84
95
|
*/
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { GLFramebuffer, GLShader } from '../../rendering';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import type { GLFramebuffer, GLRenderer, GLShader } from '../../rendering';
|
|
2
|
+
import { TextmodeGrid } from '../Grid';
|
|
3
|
+
import { TextmodeFont } from '../loadables/font';
|
|
4
|
+
import { Textmodifier } from '../Textmodifier';
|
|
4
5
|
import type { TextmodeLayerBlendMode, TextmodeLayerOptions, LayerDependencies } from './types';
|
|
5
|
-
import type { FilterName, BuiltInFilterName, BuiltInFilterParams
|
|
6
|
+
import type { FilterName, BuiltInFilterName, BuiltInFilterParams } from '../filters';
|
|
6
7
|
import type { ITextmodeLayer } from './interfaces/ITextmodeLayer';
|
|
7
8
|
/**
|
|
8
9
|
* A single layer within a multi-layered textmode rendering context.
|
|
@@ -27,31 +28,37 @@ export declare class TextmodeLayer implements ITextmodeLayer {
|
|
|
27
28
|
$offsetY: number;
|
|
28
29
|
/** @ignore */
|
|
29
30
|
$rotation: number;
|
|
31
|
+
/** @ignore */
|
|
32
|
+
$fontSize: number | undefined;
|
|
33
|
+
/** @ignore */
|
|
34
|
+
$fontSource: string | TextmodeFont | URL | undefined;
|
|
30
35
|
private _deps?;
|
|
31
|
-
private
|
|
32
|
-
private
|
|
36
|
+
private _grid?;
|
|
37
|
+
private _font;
|
|
38
|
+
private _drawFramebuffer;
|
|
39
|
+
private _asciiFramebuffer;
|
|
33
40
|
private _rawAsciiFramebuffer?;
|
|
41
|
+
private _pingPongBuffers?;
|
|
34
42
|
private _drawCallback;
|
|
35
43
|
private _hasRenderableContent;
|
|
36
|
-
private _ownsFramebuffers;
|
|
37
44
|
private _filterQueue;
|
|
38
45
|
/**
|
|
39
46
|
* Create a new TextmodeLayer with the given options.
|
|
40
47
|
* @param options Layer configuration options.
|
|
41
48
|
* @ignore
|
|
42
49
|
*/
|
|
43
|
-
constructor(options?: TextmodeLayerOptions);
|
|
50
|
+
constructor(renderer: GLRenderer, options?: TextmodeLayerOptions);
|
|
44
51
|
/**
|
|
45
|
-
*
|
|
52
|
+
* Attach necessary dependencies for this layer to function.
|
|
53
|
+
* @param deps Dependencies required by the layer.
|
|
46
54
|
* @ignore
|
|
47
55
|
*/
|
|
48
|
-
$
|
|
56
|
+
$attachDependencies(deps: LayerDependencies): Promise<void>;
|
|
49
57
|
/**
|
|
50
|
-
*
|
|
51
|
-
* @returns The current filter queue, which is then cleared.
|
|
58
|
+
* Return true when this layer has a user-provided draw callback.
|
|
52
59
|
* @ignore
|
|
53
60
|
*/
|
|
54
|
-
$
|
|
61
|
+
$hasDraw(): boolean;
|
|
55
62
|
/**
|
|
56
63
|
* Run the layer's draw callback in the calling context. This does NOT
|
|
57
64
|
* manage framebuffer binding; the caller must ensure the correct
|
|
@@ -71,31 +78,55 @@ export declare class TextmodeLayer implements ITextmodeLayer {
|
|
|
71
78
|
rotateZ(z?: number): number | void;
|
|
72
79
|
filter<T extends BuiltInFilterName>(name: T, params?: BuiltInFilterParams[T]): void;
|
|
73
80
|
filter(name: FilterName, params?: unknown): void;
|
|
81
|
+
/** Get or set the font size for this layer's font. */
|
|
82
|
+
fontSize(size?: number): number | void;
|
|
74
83
|
/**
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
84
|
+
* Load a font into this layer from a URL/path or reuse an existing {@link TextmodeFont} instance.
|
|
85
|
+
* Creates a new font instance for this layer and loads the font data when a string source is provided.
|
|
86
|
+
*
|
|
87
|
+
* @param fontSource The URL or path to the font file.
|
|
88
|
+
* @returns The loaded TextmodeFont instance.
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```javascript
|
|
92
|
+
* const layer = t.layers.add();
|
|
93
|
+
*
|
|
94
|
+
* t.setup(async () => {
|
|
95
|
+
* // Load a custom font for this layer
|
|
96
|
+
* await layer.loadFont('./fonts/custom.ttf');
|
|
97
|
+
* });
|
|
98
|
+
* ```
|
|
78
99
|
*/
|
|
79
|
-
|
|
100
|
+
loadFont(fontSource: string | TextmodeFont): Promise<TextmodeFont>;
|
|
80
101
|
/**
|
|
81
102
|
* Render the layer's content into its ASCII framebuffer.
|
|
82
103
|
* @param textmodifier The Textmodifier instance.
|
|
83
104
|
* @param conversionShader The shader used for conversion.
|
|
84
105
|
* @ignore
|
|
85
106
|
*/
|
|
86
|
-
$render(textmodifier: Textmodifier, conversionShader: GLShader
|
|
107
|
+
$render(textmodifier: Textmodifier, conversionShader: GLShader, options?: {
|
|
108
|
+
fallbackDraw?: () => void;
|
|
109
|
+
}): void;
|
|
87
110
|
/**
|
|
88
111
|
* Resize the layer's framebuffers to match the given grid dimensions.
|
|
89
112
|
* @param grid The TextmodeGrid instance.
|
|
90
113
|
* @ignore
|
|
91
114
|
*/
|
|
92
|
-
$resize(
|
|
115
|
+
$resize(): void;
|
|
93
116
|
/**
|
|
94
117
|
* Dispose of the layer's resources.
|
|
95
118
|
* @ignore
|
|
96
119
|
*/
|
|
97
120
|
$dispose(): void;
|
|
121
|
+
/**
|
|
122
|
+
* Get the texture containing the rendered textmode output for this layer.
|
|
123
|
+
*/
|
|
98
124
|
get texture(): WebGLTexture | undefined;
|
|
125
|
+
/**
|
|
126
|
+
* Get the grid associated with this layer.
|
|
127
|
+
*/
|
|
128
|
+
get grid(): TextmodeGrid | undefined;
|
|
129
|
+
get font(): TextmodeFont;
|
|
99
130
|
get width(): number;
|
|
100
131
|
get height(): number;
|
|
101
132
|
/**
|
|
@@ -103,6 +134,13 @@ export declare class TextmodeLayer implements ITextmodeLayer {
|
|
|
103
134
|
* @ignore
|
|
104
135
|
*/
|
|
105
136
|
get $hasRenderableContent(): boolean;
|
|
137
|
+
/**
|
|
138
|
+
* Get the framebuffer used for drawing operations on this layer.
|
|
139
|
+
*/
|
|
106
140
|
get drawFramebuffer(): GLFramebuffer | undefined;
|
|
107
|
-
|
|
141
|
+
/**
|
|
142
|
+
* Get the framebuffer containing the rendered textmode output for this layer.
|
|
143
|
+
*/
|
|
144
|
+
get asciiFramebuffer(): GLFramebuffer | undefined;
|
|
145
|
+
private _syncGridToFont;
|
|
108
146
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { TextmodeLayer } from '../TextmodeLayer';
|
|
2
2
|
import type { TextmodeLayerOptions } from '../types';
|
|
3
|
+
import type { TextmodeGrid } from '../../Grid';
|
|
3
4
|
export interface ILayerManager {
|
|
4
5
|
/**
|
|
5
6
|
* Get all user layers as a readonly array.
|
|
@@ -40,4 +41,10 @@ export interface ILayerManager {
|
|
|
40
41
|
* and layers need to be recreated from scratch.
|
|
41
42
|
*/
|
|
42
43
|
clear(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Get the grid of the topmost visible layer.
|
|
46
|
+
* Returns the topmost user layer's grid if any are visible, otherwise returns the base layer's grid.
|
|
47
|
+
* This is useful for input managers that need to map coordinates to the layer the user sees on top.
|
|
48
|
+
*/
|
|
49
|
+
getTopmostGrid(): TextmodeGrid | undefined;
|
|
43
50
|
}
|