@turbowarp/types 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,686 @@
1
+ // Type definitions for scratch-render
2
+ // Project: https://github.com/LLK/scratch-render
3
+
4
+ /// <reference path="./twgl.d.ts" />
5
+ /// <reference path="./events.d.ts" />
6
+
7
+ declare namespace RenderWebGL {
8
+ type AnyWebGLContext = WebGLRenderingContext | WebGL2RenderingContext;
9
+
10
+ type BitmapResolution = 1 | 2;
11
+
12
+ type BitmapData = ImageData | ImageBitmap | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement;
13
+
14
+ const enum LayerGroup {
15
+ // The renderer can be configured to use any strings as group names, but these are the groups
16
+ // that scratch-vm uses, listed in order.
17
+ Background = 'background',
18
+ Video = 'video',
19
+ Pen = 'pen',
20
+ Sprite = 'sprite'
21
+ }
22
+
23
+ const enum UseGpuModes {
24
+ Automatic = 'Automatic',
25
+ ForceGPU = 'ForceGPU',
26
+ ForceCPU = 'ForceCPU'
27
+ }
28
+
29
+ const enum Effect {
30
+ Color = 'color',
31
+ Fisheye = 'fisheye',
32
+ Whirl = 'whirl',
33
+ Pixelate = 'pixelate',
34
+ Brightness = 'brightness',
35
+ Ghost = 'ghost'
36
+ }
37
+
38
+ // TODO: document bit masks
39
+ type EffectMask = number;
40
+
41
+ const enum DrawMode {
42
+ Default = 'default',
43
+ StraightAlpha = 'straightAlpha',
44
+ Silhouette = 'silhouette',
45
+ ColorMask = 'colorMask',
46
+ Line = 'line',
47
+ Background = 'background'
48
+ }
49
+
50
+ interface Rectangle {
51
+ left: number;
52
+ right: number;
53
+ bottom: number;
54
+ top: number;
55
+ width: number;
56
+ height: number;
57
+ intersects(other: Rectangle): boolean;
58
+ contains(other: Rectangle): boolean;
59
+ initFromBounds(left: number, right: number, bottom: number, top: number): void;
60
+ initFromPointsAABB(points: [number, number][]): void;
61
+ initFromModelMatrix(matrix4x4: number[]): void;
62
+ clamp(left: number, right: number, bottom: number, top: number): void;
63
+ snapToInt(): void;
64
+ }
65
+
66
+ /**
67
+ * Suggested properties of a drawing region. Strictly, this can really be whatever you want it to be.
68
+ */
69
+ interface DrawingRegion {
70
+ enter?(): void;
71
+ exit?(): void;
72
+ }
73
+
74
+ interface Shader {
75
+ // TODO
76
+ }
77
+
78
+ class ShaderManager {
79
+ static EFFECT_INFO: Record<Effect, {
80
+ uniformName: string;
81
+ mask: number;
82
+ converter(rawEffect: number): number;
83
+ shapeChanges: boolean;
84
+ }>;
85
+ static EFFECTS: Effect[];
86
+ static DRAW_MODE: Record<DrawMode, DrawMode>;
87
+
88
+ _gl: AnyWebGLContext;
89
+ _shaderCache: Record<DrawMode, Record<EffectMask, twgl.ProgramInfo[]>>;
90
+ _buildShader(drawMode: DrawMode, effectMask: EffectMask): twgl.ProgramInfo;
91
+ getShader(drawMode: DrawMode, effectMask: EffectMask): twgl.ProgramInfo;
92
+ }
93
+
94
+ class Silhouette {
95
+ static _updateCanvas(): HTMLCanvasElement;
96
+
97
+ _width: number;
98
+ _height: number;
99
+ _colorData: Uint8ClampedArray | null;
100
+
101
+ _getColor(silhouette: Silhouette, x: number, y: number, destination?: Uint8ClampedArray): Uint8ClampedArray;
102
+
103
+ /**
104
+ * @param image Image data
105
+ * @param isPremultiplied Whether alpha is premultiplied. Defaults to false.
106
+ */
107
+ update(image: BitmapData, isPremultiplied?: boolean): void;
108
+
109
+ colorAtNearest(textureCoordinate: twgl.V3, destination?: Uint8ClampedArray): Uint8ClampedArray;
110
+ colorAtLinear(textureCoordinate: twgl.V3, destination?: Uint8ClampedArray): Uint8ClampedArray;
111
+
112
+ isTouchingNearest(textureCoordinate: twgl.V3): void;
113
+ isTouchingLinear(textureCoordinate: twgl.V3): void;
114
+ }
115
+
116
+ interface SkinEventMap {
117
+ WasAltered: void;
118
+ }
119
+
120
+ class Skin extends EventEmitter<SkinEventMap> {
121
+ _id: number;
122
+ get id(): number;
123
+
124
+ get size(): [number, number];
125
+
126
+ _rotationCenter: twgl.V3;
127
+ get rotationCenter(): twgl.V3;
128
+
129
+ /**
130
+ * Always returns the middle of the skin (size / 2).
131
+ * No relation to Skin._rotationCenter or Skin.rotationCenter.
132
+ */
133
+ calculateRotationCenter(): [number, number];
134
+
135
+ _texture: WebGLTexture | null;
136
+
137
+ _uniforms: {
138
+ u_skinSize: [number, number];
139
+ u_skin: WebGLTexture | null;
140
+ };
141
+ getUniforms(): Skin['_uniforms'];
142
+
143
+ _silhouette: Silhouette;
144
+ updateSilhouette(): void;
145
+
146
+ /**
147
+ * @see {Silhouette.isTouchingNearest}
148
+ */
149
+ isTouchingNearest(textureCoordinate: twgl.V3): boolean;
150
+
151
+ /**
152
+ * @see {Silhouette.isTouchingLinear}
153
+ */
154
+ isTouchingLinear(textureCoordinate: twgl.V3): boolean;
155
+
156
+ useNearest(scale: [number, number], drawable: Drawable): boolean;
157
+
158
+ getTexture(scale: [number, number]): WebGLTexture;
159
+ _setTexture(image: BitmapData): void;
160
+ setEmptyImageData(): void;
161
+
162
+ getFenceBounds(): Rectangle;
163
+
164
+ dispose(): void;
165
+ }
166
+
167
+ class BitmapSkin extends Skin {
168
+ static _getBitmapSize(image: BitmapData): [number, number];
169
+
170
+ _renderer: RenderWebGL;
171
+
172
+ _costumeResolution: BitmapResolution;
173
+ _textureSize: [number, number];
174
+
175
+ /**
176
+ * Synchronously update the content of the skin.
177
+ * @param image The new image.
178
+ * @param bitmapResolution Defaults to 2.
179
+ * @param rotationCenter Defaults to the center of the image.
180
+ */
181
+ setBitmap(image: BitmapData, bitmapResolution?: BitmapResolution, rotationCenter?: [number, number]): void;
182
+ }
183
+
184
+ class SVGSkin extends Skin {
185
+ _renderer: RenderWebGL;
186
+
187
+ _svgImage: HTMLImageElement;
188
+ _svgImageLoaded: boolean;
189
+ _size: [number, number];
190
+ _canvas: HTMLCanvasElement;
191
+ _context: CanvasRenderingContext2D;
192
+ _scaledMIPs: WebGLTexture[];
193
+ _largestMIPScale: number;
194
+ _maxTextureScale: number;
195
+
196
+ createMIP(scale: number): WebGLTexture;
197
+ resetMIPs(): void;
198
+
199
+ /**
200
+ * Asynchronously update the content of the skin. May take a couple frames for changes to appear.
201
+ * @param svgData SVG source code
202
+ * @param rotationCenter Defaults to the center of the image.
203
+ */
204
+ setSVG(svgData: string, rotationCenter?: [number, number]): void;
205
+ }
206
+
207
+ interface PenAttributes {
208
+ /**
209
+ * Pen color in RGBA from 0-1.
210
+ */
211
+ color4f: [number, number, number, number];
212
+ diameter: number;
213
+ }
214
+
215
+ class PenSkin extends Skin {
216
+ _renderer: RenderWebGL;
217
+
218
+ _size: [number, number];
219
+ _framebuffer: WebGLFramebuffer;
220
+ _silhouetteDirty: boolean;
221
+ _silhouettePixels: Uint8Array;
222
+ _silhouetteImageData: ImageData;
223
+
224
+ _lineOnBufferDrawRegionId: DrawingRegion;
225
+ _enterDrawLineOnBuffer(): void;
226
+ _exitDrawLineOnBuffer(): void;
227
+ _drawLineOnBuffer(attributes: PenAttributes, x1: number, y1: number, x2: number, y2: number): void;
228
+
229
+ _usePenBufferDrawRegionId: DrawingRegion;
230
+ _enterUsePenBuffer(): void;
231
+ _exitUsePenBuffer(): void;
232
+
233
+ _lineBufferInfo: twgl.BufferInfo;
234
+ _lineShader: Shader;
235
+
236
+ clear(): void;
237
+ drawPoint(attributes: PenAttributes, x: number, y: number): void;
238
+ drawLine(attributes: PenAttributes, x1: number, y1: number, x2: number, y2: number): void;
239
+
240
+ onNativeSizeChanged(event: ScratchRenderEventMap['NativeSizeChanged']): void;
241
+ _setCanvasSize(size: [number, number]): void;
242
+ }
243
+
244
+ const enum TextBubbleType {
245
+ Say = 'say',
246
+ Think = 'think',
247
+ }
248
+
249
+ class CanvasMeasurementProvider {
250
+ _ctx: CanvasRenderingContext2D;
251
+ _cache: Record<string, number>;
252
+ measureText(text: string): number;
253
+
254
+ /**
255
+ * Does nothing.
256
+ */
257
+ beginMeasurementSession(): void;
258
+
259
+ /**
260
+ * Does nothing.
261
+ */
262
+ endMeasurementSession(): void;
263
+ }
264
+
265
+ class TextWrapper {
266
+ _measurementProvider: CanvasMeasurementProvider;
267
+ _cache: Record<string, string[]>;
268
+ wrapText(maxWidth: number, text: string): string[];
269
+ }
270
+
271
+ class TextBubbleSkin extends Skin {
272
+ _renderer: RenderWebGL;
273
+
274
+ _canvas: HTMLCanvasElement;
275
+ _size: [number, number];
276
+ _renderedScale: number;
277
+ _lines: string[];
278
+ _textAreaSize: {
279
+ width: number;
280
+ height: number
281
+ };
282
+ _bubbleType: TextBubbleType;
283
+ _pointsLeft: boolean;
284
+ _textDirty: boolean;
285
+ _textureDirty: boolean;
286
+
287
+ measurementProvider: CanvasMeasurementProvider;
288
+ textWrapper: TextWrapper;
289
+
290
+ /**
291
+ * @param type Type of bubble.
292
+ * @param text Text to display.
293
+ * @param pointsLeft True if this bubble points left, false if this bubble points right.
294
+ */
295
+ setTextBubble(type: TextBubbleType, text: string, pointsLeft: boolean): void;
296
+
297
+ _restyleCanvas(): void;
298
+ _reflowLines(): void;
299
+
300
+ _renderTextBubble(scale: number): void;
301
+ }
302
+
303
+ class Drawable {
304
+ static color4fFromID(id: number): [number, number, number, number];
305
+ static color3bToID(r: number, g: number, b: number): number;
306
+ static sampleColor4b(coordinate: twgl.V3, drawable :Drawable, destination: Uint8ClampedArray, effectMask?: EffectMask): Uint8ClampedArray;
307
+
308
+ _id: number;
309
+ get id(): number;
310
+
311
+ _uniforms: {
312
+ u_modelMatrix: twgl.M4;
313
+
314
+ /**
315
+ * Only used in some debugging modes.
316
+ */
317
+ u_silhouetteColor: [number, number, number, number];
318
+ } & Record<Effect, number>;
319
+ getUniforms(): Drawable['_uniforms'];
320
+
321
+ _skin: Skin;
322
+ get skin(): Skin;
323
+ set skin(skin: Skin);
324
+ _skinWasAltered(): void;
325
+
326
+ _position: twgl.V3;
327
+ /**
328
+ * @param position The new position. This will be rounded.
329
+ */
330
+ updatePosition(position: [number, number]): void;
331
+
332
+ _scale: twgl.V3;
333
+ get scale(): twgl.V3;
334
+ updateScale(scale: number): void;
335
+
336
+ _direction: number;
337
+ updateDirection(direction: number): void;
338
+
339
+ _visible: boolean;
340
+ getVisible(): boolean;
341
+ updateVisible(visible: boolean): void;
342
+
343
+ enabledEffects: EffectMask;
344
+ updateEffect(effect: Effect, value: number): void;
345
+
346
+ /**
347
+ * @deprecated Use the specific update* methods instead.
348
+ */
349
+ updateProperties(properties: {
350
+ position?: [number, number];
351
+ direction?: number;
352
+ scale?: number;
353
+ visible?: boolean;
354
+ } | Record<Effect, number>): void;
355
+
356
+ _transformDirty: boolean;
357
+ _calculateTransform(): void;
358
+
359
+ _rotationMatrix: twgl.M4;
360
+ _rotationTransformDirty: boolean;
361
+
362
+ _rotationAdjusted: twgl.V3;
363
+ _rotationCenterDirty: boolean;
364
+
365
+ _skinScale: twgl.V3;
366
+ _skinScaleDirty: boolean;
367
+
368
+ _convexHullPoints: Array<[number, number]>;
369
+ _convexHullDirty: boolean;
370
+ needsConvexHullPoints(): boolean;
371
+ setConvexHullDirty(): boolean;
372
+ setConvexHullPoints(points: Array<[number, number]>): void;
373
+
374
+ _transformedHullPoints: Array<[number, number]>;
375
+ _transformedHullDirty: boolean;
376
+ _getTransformedHullPoints(): Array<[number, number]>;
377
+
378
+ setTransformDirty(): void;
379
+
380
+ _inverseMatrix: twgl.M4;
381
+ _inverseTransformDirty: boolean;
382
+ updateMatrix(): void;
383
+
384
+ getBounds(result?: Rectangle): Rectangle;
385
+ getBoundsForBubble(result?: Rectangle): Rectangle;
386
+ getAABB(result?: Rectangle): Rectangle;
387
+ getFastBounds(result?: Rectangle): Rectangle;
388
+
389
+ updateCPURenderAttributes(): void;
390
+ isTouching(textureCoordinate: twgl.V3): boolean;
391
+ _isTouchingNearest(textureCoordinate: twgl.V3): boolean;
392
+ _isTouchingLinear(textureCoordinate: twgl.V3): boolean;
393
+ _isTouchingNever(textureCoordinate: twgl.V3): false;
394
+
395
+ dispose(): void;
396
+ }
397
+
398
+ interface ScratchRenderEventMap {
399
+ NativeSizeChanged: {
400
+ newSize: [number, number];
401
+ }
402
+ }
403
+ }
404
+
405
+ declare class RenderWebGL extends EventEmitter<RenderWebGL.ScratchRenderEventMap> {
406
+ static isSupported(canvas?: HTMLCanvasElement): boolean;
407
+
408
+ /**
409
+ * If WebGL 1 is supported, returns a WebGL 1 context.
410
+ * If WebGL 1 is not supported but WebGL 2 is supported, returns a WebGL 2 context.
411
+ * Otherwise, returns null.
412
+ */
413
+ static _getContext(canvas: HTMLCanvasElement): RenderWebGL.AnyWebGLContext | null;
414
+
415
+ static sampleColor3b(vector: twgl.V3, drawableIds: number[], destination?: Uint8ClampedArray): Uint8ClampedArray;
416
+
417
+ constructor(canvas: HTMLCanvasElement, xLeft?: number, xRight?: number, yBottom?: number, yTop?: number);
418
+
419
+ get canvas(): HTMLCanvasElement;
420
+ _gl: RenderWebGL.AnyWebGLContext;
421
+ get gl(): RenderWebGL.AnyWebGLContext;
422
+
423
+ _xRight: number;
424
+ _xLeft: number;
425
+ _yTop: number;
426
+ _yBottom: number;
427
+
428
+ setStageSize(xLeft: number, xRight: number, yBottom: number, yTop: number): void;
429
+ resize(width: number, height: number): void;
430
+
431
+ _nativeSize: [number, number];
432
+ getNativeSize(): [number, number];
433
+ _setNativeSize(width: number, height: number): void;
434
+ onNativeSizeChanged(event: RenderWebGL.ScratchRenderEventMap['NativeSizeChanged']): void;
435
+
436
+ /**
437
+ * Renders the stage on the canvas.
438
+ */
439
+ draw(): void;
440
+
441
+ _drawThese(drawableIds: number[], drawMode: RenderWebGL.DrawMode, projection: twgl.M4, opts?: {
442
+ filter?: (drawableId: number) => boolean;
443
+ extraUniforms?: object;
444
+ effectMask?: RenderWebGL.EffectMask;
445
+ ignoreVisibility?: boolean;
446
+ framebufferWidth?: number;
447
+ framebufferHeight?: number;
448
+ }): void;
449
+
450
+ _drawList: number[];
451
+ _addToDrawList(drawableID: number, group: RenderWebGL.LayerGroup): void;
452
+ _updateOffsets(updateType: 'add' | 'delete', index: number): void;
453
+ get _visibleDrawList(): number[];
454
+ getDrawableOrder(drawableID: number): number | -1;
455
+ setDrawableOrder(drawableID: number, order: number, group: RenderWebGL.LayerGroup, isRelative?: boolean, min?: number): void;
456
+
457
+ _groupOrdering: RenderWebGL.LayerGroup[];
458
+ _layerGroups: Record<RenderWebGL.LayerGroup, {
459
+ groupIndex: number;
460
+ drawListOffset: number
461
+ }>;
462
+ setLayerGroupOrdering(groupOrdering: RenderWebGL.LayerGroup[]): void;
463
+ _endIndexForKnownLayerGroup(layerGroup: RenderWebGL.LayerGroup): number;
464
+
465
+ _nextDrawableId: number;
466
+ _allDrawables: RenderWebGL.Drawable[];
467
+
468
+ createDrawable(group: string): void;
469
+ destroyDrawable(drawableID: number, group: RenderWebGL.LayerGroup): void;
470
+
471
+ _allSkins: RenderWebGL.Skin[];
472
+ _nextSkinId: number;
473
+
474
+ /**
475
+ * @see {RenderWebGL.BitmapSkin.setBitmap}
476
+ */
477
+ createBitmapSkin(image: RenderWebGL.BitmapData, bitmapResolution?: RenderWebGL.BitmapResolution, rotationCenter?: [number, number]): RenderWebGL.BitmapSkin;
478
+
479
+ /**
480
+ * @see {RenderWebGL.BitmapSkin.setBitmap}
481
+ */
482
+ updateBitmapSkin(skinId: number, image: RenderWebGL.BitmapData, bitmapResolution?: RenderWebGL.BitmapResolution, rotationCenter?: [number, number]): void;
483
+
484
+ /**
485
+ * @see {RenderWebGL.SVGSkin.setSVG}
486
+ */
487
+ createSVGSkin(svgData: string, rotationCenter: [number, number]): RenderWebGL.SVGSkin;
488
+
489
+ /**
490
+ * @see {RenderWebGL.SVGSkin.setSVG}
491
+ */
492
+ updateSVGSkin(skinId: number, svgData: string, rotationCenter: [number, number]): void;
493
+
494
+ /**
495
+ * @see {RenderWebGL.TextBubbleSkin.setTextBubble}
496
+ */
497
+ createTextSkin(type: RenderWebGL.TextBubbleType, text: string, pointsLeft: boolean): RenderWebGL.TextBubbleSkin;
498
+
499
+ /**
500
+ * @see {RenderWebGL.TextBubbleSkin.setTextBubble}
501
+ */
502
+ updateTextSkin(skinId: number, type: RenderWebGL.TextBubbleType, text: string, pointsLeft: boolean): void;
503
+
504
+ createPenSkin(): RenderWebGL.PenSkin;
505
+
506
+ destroySkin(skinId: number): void;
507
+
508
+ _reskin(skinId: number, newSkin: RenderWebGL.Skin): void;
509
+
510
+ getBounds(drawableId: number): RenderWebGL.Rectangle;
511
+ getBoundsForBubble(drawableId: number): RenderWebGL.Rectangle;
512
+
513
+ _getConvexHullPointsForDrawable(drawableID: number): Array<[number, number]>;
514
+
515
+ getCurrentSkinSize(drawableId: number): [number, number];
516
+ getSkinSize(skinId: number): [number, number];
517
+ getSkinRotationCenter(skinId: number): [number, number];
518
+
519
+ /**
520
+ * Determine if a drawable is touching a color or if a certain color of the drawable is touching a color.
521
+ * @param color RGB color from 0-255
522
+ * @param mask RGB color from 0-255. Used by "is color touching color" block.
523
+ */
524
+ isTouchingColor(drawableId: number, color: [number, number, number], mask?: [number, number, number]): boolean;
525
+
526
+ _isTouchingColorGpuStart(drawableId: number, candidateIds: number[], bounds: RenderWebGL.Rectangle, color: [number, number, number], mask?: [number, number, number]): void;
527
+ _isTouchingColorGpuFin(bounds: RenderWebGL.Rectangle, color: [number, number, number], stop: number): boolean;
528
+
529
+ /**
530
+ * Determine if a drawable is intersecting a set of other drawables.
531
+ * @param drawableId ID of the target drawable
532
+ * @param candidateIds The IDs of the drawables to test for collision with the target drawable. Defaults to all drawables.
533
+ */
534
+ isTouchingDrawables(drawableId: number, candidateIds?: number[]): boolean;
535
+
536
+ /**
537
+ * @param centerX X coordinate in client space
538
+ * @param centerY Y coordinate in client space
539
+ * @param width Defaults to 1
540
+ * @param height Defaults to 1
541
+ */
542
+ clientSpaceToScratchBounds(centerX: number, centerY: number, width?: number, height?: number): RenderWebGL.Rectangle;
543
+
544
+ /**
545
+ * Determine if a drawable is touching a point.
546
+ * @param drawableId ID of the target drawable
547
+ * @param centerX X coordinate in client space
548
+ * @param centerY Y coordinate in client space
549
+ * @param width Defaults to 1
550
+ * @param height Defaults to 1
551
+ */
552
+ drawableTouching(drawableId: number, centerX: number, centerY: number, width?: number, height?: number): boolean;
553
+
554
+ /**
555
+ * Determine the top-most drawable at a point.
556
+ * @param centerX X coordinate in client space
557
+ * @param centerY Y coordinate in client space
558
+ * @param width Defaults to 1
559
+ * @param height Defaults to 1
560
+ * @param candidateIds Defaults to all drawables
561
+ * @returns The ID of the top-most drawable, or -1 or false if there is none.
562
+ */
563
+ pick(centerX: number, centerY: number, width?: number, height?: number, candidateIds?: number[]): number | -1 | false;
564
+
565
+ extractDrawableScreenSpace(drawableId: number): {
566
+ data: ImageData;
567
+ x: number;
568
+ y: number;
569
+ width: number;
570
+ height: number;
571
+ };
572
+
573
+ /**
574
+ * :3
575
+ * @see {RenderWebGL.extractDrawableScreenSpace}
576
+ */
577
+ canHazPixels(drawableID: number): ReturnType<RenderWebGL['extractDrawableScreenSpace']>;
578
+
579
+ /**
580
+ * @param x X coordinate in client space
581
+ * @param y Y coordinate in client space
582
+ * @param radius "Radius" of the square, in pixels
583
+ * @returns Data about the pixels in a square around the coordinates. Color channels are RGBA from 0-255
584
+ */
585
+ extractColor(x: number, y: number, radius: number): {
586
+ data: Uint8Array;
587
+ width: number;
588
+ height: number;
589
+ color: {
590
+ r: number;
591
+ g: number;
592
+ b: number;
593
+ a: number;
594
+ }
595
+ };
596
+
597
+ /**
598
+ * Get the "candidate bounding box" to use for "touching" queries.
599
+ * @returns The rectangle, or null if the drawable is offscreen or has no skin.
600
+ */
601
+ _touchingBounds(drawableId: number): RenderWebGL.Rectangle | null;
602
+
603
+ _candidatesTouching(drawableId: number, candidateIds: number[]): Array<{
604
+ id: number;
605
+ drawable: RenderWebGL.Drawable;
606
+ intersection: RenderWebGL.Rectangle;
607
+ }>;
608
+
609
+ _candidatesBounds(candidates: ReturnType<RenderWebGL['_candidatesTouching']>): RenderWebGL.Rectangle;
610
+
611
+ updateDrawableSkinId(drawableId: number, skinId: number): void;
612
+ updateDrawablePosition(drawableId: number, position: [number, number]): void;
613
+ updateDrawableDirection(drawableId: number, direction: number): void;
614
+ updateDrawableScale(drawableId: number, scale: number): void;
615
+ updateDrawableDirectionScale(drawableId: number, direction: number, scale: number): void;
616
+ updateDrawableVisible(drawableId: number, visible: boolean): void;
617
+ updateDrawableEffect(drawableId: number, effectName: RenderWebGL.Effect, value: number): void;
618
+ /**
619
+ * @deprecated Use the individual updateDrawable* methods instead.
620
+ */
621
+ updateDrawableProperties(drawableId: number, properties: {
622
+ skinId?: number;
623
+ position?: [number, number];
624
+ direction?: number;
625
+ scale?: number;
626
+ visible?: number;
627
+ } | Record<RenderWebGL.Effect, number>): void;
628
+
629
+ getFencedPositionOfDrawable(drawableId: number, position: [number, number]): [number, number];
630
+
631
+ penClear(penSkinId: number): void;
632
+ penPoint(penSkinId: number, penAttributes: RenderWebGL.PenAttributes, x: number, y: number): void;
633
+ penLine(penSkinId: number, penAttributes: RenderWebGL.PenAttributes, x1: number, y1: number, x2: number, y2: number): void;
634
+ penStamp(penSkinId: number, stampDrawableId: number): void;
635
+
636
+ _projection: twgl.M4;
637
+
638
+ _shaderManager: RenderWebGL.ShaderManager;
639
+
640
+ _regionId: unknown | null;
641
+ _exitRegion: Function | null;
642
+
643
+ /**
644
+ * Enter a drawing region.
645
+ * @param regionId Any arbitrary unique object.
646
+ * @param enter Called when entering the drawing region (which is what this function does). Defaults to regionId.enter.
647
+ * @param exit Called when leaving the drawing region. Defaults to regionId.exit.
648
+ */
649
+ enterDrawRegion(regionId: unknown, enter?: Function, exit?: Function): void;
650
+
651
+ _doExitDrawRegion(): void;
652
+
653
+ _backgroundDrawRegionId: RenderWebGL.DrawingRegion;
654
+ _enterDrawBackground(): void;
655
+ _exitDrawBackground(): void;
656
+
657
+ /**
658
+ * RGBA from 0-1
659
+ */
660
+ _backgroundColor4f: [number, number, number, number];
661
+
662
+ /**
663
+ * RGB from 0-255
664
+ */
665
+ _backgroundColor3b: [number, number, number];
666
+
667
+ /**
668
+ * @param red Red from 0-1
669
+ * @param green Green from 0-1
670
+ * @param blue Blue from 0-1
671
+ */
672
+ setBackgroundColor(red: number, green: number, blue: number): void;
673
+
674
+ _snapshotCallbacks: Array<(dataURL: string) => void>;
675
+ requestSnapshot(callback: (dataURL: string) => void): void;
676
+
677
+ _useGpuMode: RenderWebGL.UseGpuModes;
678
+ setUseGpuMode(useGpuMode: RenderWebGL.UseGpuModes): void;
679
+ _getMaxPixelsForCPU(): number;
680
+
681
+ _debugCanvas?: HTMLCanvasElement;
682
+ setDebugCanvas(canvas: HTMLCanvasElement): void;
683
+
684
+ _bufferInfo: twgl.BufferInfo;
685
+ _createGeometry(): void;
686
+ }
@@ -0,0 +1,20 @@
1
+ // Type definitions for scratch-storage
2
+ // Project: https://github.com/LLK/scratch-storage
3
+
4
+ declare namespace ScratchStorage {
5
+ interface Asset {
6
+ // TODO
7
+ }
8
+ }
9
+
10
+ declare class ScratchStorage {
11
+ // TODO
12
+ }
13
+
14
+ /**
15
+ * Modified version of ScratchStorage used by scratch-gui.
16
+ */
17
+ declare class GUIScratchStorage extends ScratchStorage {
18
+ projectToken?: string;
19
+ setProjectToken(token: string): void;
20
+ }
@@ -0,0 +1,6 @@
1
+ // Type definitions for scratch-svg-renderer
2
+ // Project: https://github.com/LLK/scratch-svg-renderer
3
+
4
+ declare namespace ScratchSVGRenderer {
5
+ // TODO
6
+ }