tscratch 0.7.1 → 0.7.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/client/index.d.cts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
type Vec2<T = number> = [T, T];
|
|
2
|
+
type Vec3<T = number> = [T, T, T];
|
|
3
|
+
type Vec4<T = number> = [T, T, T, T];
|
|
4
|
+
|
|
1
5
|
interface BoundingBox {
|
|
2
6
|
x: number;
|
|
3
7
|
y: number;
|
|
@@ -9,6 +13,7 @@ interface SpriteOptions {
|
|
|
9
13
|
y?: number;
|
|
10
14
|
dir?: number;
|
|
11
15
|
size?: number;
|
|
16
|
+
pivot?: Vec2;
|
|
12
17
|
scene?: string;
|
|
13
18
|
hidden?: boolean;
|
|
14
19
|
layer?: number;
|
|
@@ -18,6 +23,7 @@ declare abstract class Sprite {
|
|
|
18
23
|
y: number;
|
|
19
24
|
dir: number;
|
|
20
25
|
size: number;
|
|
26
|
+
pivot: Vec2;
|
|
21
27
|
scene: string;
|
|
22
28
|
hidden: boolean;
|
|
23
29
|
layer: number;
|
|
@@ -50,6 +56,7 @@ declare abstract class Sprite {
|
|
|
50
56
|
goTo(x: number, y: number): void;
|
|
51
57
|
changeX(dX: number): void;
|
|
52
58
|
changeY(dY: number): void;
|
|
59
|
+
setPivot(x: number, y: number): void;
|
|
53
60
|
show(): void;
|
|
54
61
|
hide(): void;
|
|
55
62
|
setSize(size: number): void;
|
|
@@ -58,10 +65,6 @@ declare abstract class Sprite {
|
|
|
58
65
|
changeLayer(dL: number): void;
|
|
59
66
|
}
|
|
60
67
|
|
|
61
|
-
type Vec2<T = number> = [T, T];
|
|
62
|
-
type Vec3<T = number> = [T, T, T];
|
|
63
|
-
type Vec4<T = number> = [T, T, T, T];
|
|
64
|
-
|
|
65
68
|
type GameLoop = (() => void) | (() => Promise<void>);
|
|
66
69
|
type SceneMap = Map<string, {
|
|
67
70
|
sprites: Sprite[];
|
|
@@ -166,6 +169,7 @@ declare class Rectangle extends Sprite {
|
|
|
166
169
|
y?: number;
|
|
167
170
|
dir?: number;
|
|
168
171
|
size?: number;
|
|
172
|
+
pivot?: Vec2;
|
|
169
173
|
scene?: string;
|
|
170
174
|
hidden?: boolean;
|
|
171
175
|
layer?: number;
|
|
@@ -202,6 +206,7 @@ declare class Square extends Sprite {
|
|
|
202
206
|
y?: number;
|
|
203
207
|
dir?: number;
|
|
204
208
|
size?: number;
|
|
209
|
+
pivot?: Vec2;
|
|
205
210
|
scene?: string;
|
|
206
211
|
hidden?: boolean;
|
|
207
212
|
layer?: number;
|
|
@@ -240,6 +245,7 @@ declare class Oval extends Sprite {
|
|
|
240
245
|
y?: number;
|
|
241
246
|
dir?: number;
|
|
242
247
|
size?: number;
|
|
248
|
+
pivot?: Vec2;
|
|
243
249
|
scene?: string;
|
|
244
250
|
hidden?: boolean;
|
|
245
251
|
layer?: number;
|
|
@@ -276,6 +282,7 @@ declare class Circle extends Sprite {
|
|
|
276
282
|
y?: number;
|
|
277
283
|
dir?: number;
|
|
278
284
|
size?: number;
|
|
285
|
+
pivot?: Vec2;
|
|
279
286
|
scene?: string;
|
|
280
287
|
hidden?: boolean;
|
|
281
288
|
layer?: number;
|
|
@@ -314,6 +321,7 @@ declare class Arc extends Sprite {
|
|
|
314
321
|
y?: number;
|
|
315
322
|
dir?: number;
|
|
316
323
|
size?: number;
|
|
324
|
+
pivot?: Vec2;
|
|
317
325
|
scene?: string;
|
|
318
326
|
hidden?: boolean;
|
|
319
327
|
layer?: number;
|
|
@@ -353,6 +361,7 @@ declare class RegularPolygon extends Sprite {
|
|
|
353
361
|
y?: number;
|
|
354
362
|
dir?: number;
|
|
355
363
|
size?: number;
|
|
364
|
+
pivot?: Vec2;
|
|
356
365
|
scene?: string;
|
|
357
366
|
hidden?: boolean;
|
|
358
367
|
layer?: number;
|
|
@@ -389,6 +398,7 @@ declare class CustomPolygon extends Sprite {
|
|
|
389
398
|
y?: number;
|
|
390
399
|
dir?: number;
|
|
391
400
|
size?: number;
|
|
401
|
+
pivot?: Vec2;
|
|
392
402
|
scene?: string;
|
|
393
403
|
hidden?: boolean;
|
|
394
404
|
layer?: number;
|
|
@@ -421,6 +431,7 @@ declare class Pen extends Sprite {
|
|
|
421
431
|
y?: number;
|
|
422
432
|
dir?: number;
|
|
423
433
|
size?: number;
|
|
434
|
+
pivot?: Vec2;
|
|
424
435
|
scene?: string;
|
|
425
436
|
hidden?: boolean;
|
|
426
437
|
layer?: number;
|
|
@@ -522,6 +533,7 @@ declare class Button extends Sprite {
|
|
|
522
533
|
y?: number;
|
|
523
534
|
dir?: number;
|
|
524
535
|
size?: number;
|
|
536
|
+
pivot?: Vec2;
|
|
525
537
|
scene?: string;
|
|
526
538
|
hidden?: boolean;
|
|
527
539
|
layer?: number;
|
|
@@ -557,6 +569,7 @@ declare class ImageSprite extends Sprite {
|
|
|
557
569
|
height: number;
|
|
558
570
|
outlineColor: string;
|
|
559
571
|
outlineWidth: number;
|
|
572
|
+
private imgBitmap;
|
|
560
573
|
protected img: HTMLImageElement;
|
|
561
574
|
getBoundingBox(): BoundingBox;
|
|
562
575
|
getPath(): Path2D;
|
|
@@ -573,6 +586,7 @@ declare class ImageSprite extends Sprite {
|
|
|
573
586
|
y?: number;
|
|
574
587
|
dir?: number;
|
|
575
588
|
size?: number;
|
|
589
|
+
pivot?: Vec2;
|
|
576
590
|
scene?: string;
|
|
577
591
|
hidden?: boolean;
|
|
578
592
|
layer?: number;
|
|
@@ -607,6 +621,65 @@ declare class RigidCircle extends Circle implements RigidBodyOptions {
|
|
|
607
621
|
constructor(options?: RigidCircleOptions);
|
|
608
622
|
}
|
|
609
623
|
|
|
624
|
+
interface Object3DOptions {
|
|
625
|
+
vertices: Vec3[];
|
|
626
|
+
faces: [number, number, ...number[]][];
|
|
627
|
+
x?: number;
|
|
628
|
+
y?: number;
|
|
629
|
+
z?: number;
|
|
630
|
+
}
|
|
631
|
+
declare class Object3D {
|
|
632
|
+
x: number;
|
|
633
|
+
y: number;
|
|
634
|
+
z: number;
|
|
635
|
+
rotX: number;
|
|
636
|
+
rotY: number;
|
|
637
|
+
rotZ: number;
|
|
638
|
+
vertices: Vec3[];
|
|
639
|
+
faces: [number, number, ...number[]][];
|
|
640
|
+
constructor(options: Object3DOptions);
|
|
641
|
+
rotateX(deg: number): void;
|
|
642
|
+
rotateY(deg: number): void;
|
|
643
|
+
rotateZ(deg: number): void;
|
|
644
|
+
pointX(deg: number): void;
|
|
645
|
+
pointY(deg: number): void;
|
|
646
|
+
pointZ(deg: number): void;
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
interface WireframeRenderer3DOptions extends PenOptions {
|
|
650
|
+
objects: Object3D[];
|
|
651
|
+
}
|
|
652
|
+
declare class WireframeRenderer3D extends Pen {
|
|
653
|
+
FOV: number;
|
|
654
|
+
ASPECT: number;
|
|
655
|
+
Z_NEAR: number;
|
|
656
|
+
SPEED: number;
|
|
657
|
+
SENSITIVITY: number;
|
|
658
|
+
camX: number;
|
|
659
|
+
camY: number;
|
|
660
|
+
camZ: number;
|
|
661
|
+
camDirX: number;
|
|
662
|
+
camDirY: number;
|
|
663
|
+
camDirZ: number;
|
|
664
|
+
objects: Object3D[];
|
|
665
|
+
constructor(options: WireframeRenderer3DOptions);
|
|
666
|
+
registerControls(): void;
|
|
667
|
+
private project;
|
|
668
|
+
update(): void;
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
declare const cubeVertices: Vec3[];
|
|
672
|
+
|
|
673
|
+
declare const cubeFaces: [number, number, ...number[]][];
|
|
674
|
+
|
|
675
|
+
declare const tetrahedronVertices: Vec3[];
|
|
676
|
+
|
|
677
|
+
declare const tetrahedronFaces: [number, number, ...number[]][];
|
|
678
|
+
|
|
679
|
+
declare const octahedronVerticesVertices: Vec3[];
|
|
680
|
+
|
|
681
|
+
declare const octahedronFaces: [number, number, ...number[]][];
|
|
682
|
+
|
|
610
683
|
type Mat2<T = number> = [
|
|
611
684
|
[
|
|
612
685
|
T,
|
|
@@ -678,6 +751,14 @@ declare const TScratch: {
|
|
|
678
751
|
Watermark: typeof Watermark;
|
|
679
752
|
ImageSprite: typeof ImageSprite;
|
|
680
753
|
RigidCircle: typeof RigidCircle;
|
|
754
|
+
WireframeRenderer3D: typeof WireframeRenderer3D;
|
|
755
|
+
Object3D: typeof Object3D;
|
|
756
|
+
cubeVertices: Vec3[];
|
|
757
|
+
cubeFaces: [number, number, ...number[]][];
|
|
758
|
+
tetrahedronVertices: Vec3[];
|
|
759
|
+
tetrahedronFaces: [number, number, ...number[]][];
|
|
760
|
+
octahedronVertices: Vec3[];
|
|
761
|
+
octahedronFaces: [number, number, ...number[]][];
|
|
681
762
|
scale: number;
|
|
682
763
|
aspectRatio: number;
|
|
683
764
|
setScale: typeof setScale;
|
|
@@ -686,4 +767,4 @@ declare const TScratch: {
|
|
|
686
767
|
ctx: CanvasRenderingContext2D;
|
|
687
768
|
};
|
|
688
769
|
|
|
689
|
-
export { Arc, type ArcOptions, Button, type ButtonOptions, Circle, type CircleOptions, CustomPolygon, type CustomPolygonOptions, Engine, ImageSprite, type ImageSpriteOptions, type Mat2, type Mat3, type Mat4, Multiplayer, Oval, type OvalOptions, Pen, type PenOptions, Rectangle, type RectangleOptions, RegularPolygon, type RegularPolygonOptions, type RigidBodyOptions, RigidCircle, type RigidCircleOptions, Sprite, type SpriteOptions, Square, type SquareOptions, Text, type TextOptions, type Vec2, type Vec3, type Vec4, Watermark, type TextOptions as WatermarkOptions, aspectRatio, canvas, ctx, TScratch as default, scale, setAspectRatio, setScale };
|
|
770
|
+
export { Arc, type ArcOptions, Button, type ButtonOptions, Circle, type CircleOptions, CustomPolygon, type CustomPolygonOptions, Engine, ImageSprite, type ImageSpriteOptions, type Mat2, type Mat3, type Mat4, Multiplayer, Object3D, type Object3DOptions, Oval, type OvalOptions, Pen, type PenOptions, Rectangle, type RectangleOptions, RegularPolygon, type RegularPolygonOptions, type RigidBodyOptions, RigidCircle, type RigidCircleOptions, Sprite, type SpriteOptions, Square, type SquareOptions, Text, type TextOptions, type Vec2, type Vec3, type Vec4, Watermark, type TextOptions as WatermarkOptions, WireframeRenderer3D, type WireframeRenderer3DOptions, aspectRatio, canvas, ctx, cubeFaces, cubeVertices, TScratch as default, octahedronFaces, octahedronVerticesVertices as octahedronVertices, scale, setAspectRatio, setScale, tetrahedronFaces, tetrahedronVertices };
|
package/dist/client/index.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
type Vec2<T = number> = [T, T];
|
|
2
|
+
type Vec3<T = number> = [T, T, T];
|
|
3
|
+
type Vec4<T = number> = [T, T, T, T];
|
|
4
|
+
|
|
1
5
|
interface BoundingBox {
|
|
2
6
|
x: number;
|
|
3
7
|
y: number;
|
|
@@ -9,6 +13,7 @@ interface SpriteOptions {
|
|
|
9
13
|
y?: number;
|
|
10
14
|
dir?: number;
|
|
11
15
|
size?: number;
|
|
16
|
+
pivot?: Vec2;
|
|
12
17
|
scene?: string;
|
|
13
18
|
hidden?: boolean;
|
|
14
19
|
layer?: number;
|
|
@@ -18,6 +23,7 @@ declare abstract class Sprite {
|
|
|
18
23
|
y: number;
|
|
19
24
|
dir: number;
|
|
20
25
|
size: number;
|
|
26
|
+
pivot: Vec2;
|
|
21
27
|
scene: string;
|
|
22
28
|
hidden: boolean;
|
|
23
29
|
layer: number;
|
|
@@ -50,6 +56,7 @@ declare abstract class Sprite {
|
|
|
50
56
|
goTo(x: number, y: number): void;
|
|
51
57
|
changeX(dX: number): void;
|
|
52
58
|
changeY(dY: number): void;
|
|
59
|
+
setPivot(x: number, y: number): void;
|
|
53
60
|
show(): void;
|
|
54
61
|
hide(): void;
|
|
55
62
|
setSize(size: number): void;
|
|
@@ -58,10 +65,6 @@ declare abstract class Sprite {
|
|
|
58
65
|
changeLayer(dL: number): void;
|
|
59
66
|
}
|
|
60
67
|
|
|
61
|
-
type Vec2<T = number> = [T, T];
|
|
62
|
-
type Vec3<T = number> = [T, T, T];
|
|
63
|
-
type Vec4<T = number> = [T, T, T, T];
|
|
64
|
-
|
|
65
68
|
type GameLoop = (() => void) | (() => Promise<void>);
|
|
66
69
|
type SceneMap = Map<string, {
|
|
67
70
|
sprites: Sprite[];
|
|
@@ -166,6 +169,7 @@ declare class Rectangle extends Sprite {
|
|
|
166
169
|
y?: number;
|
|
167
170
|
dir?: number;
|
|
168
171
|
size?: number;
|
|
172
|
+
pivot?: Vec2;
|
|
169
173
|
scene?: string;
|
|
170
174
|
hidden?: boolean;
|
|
171
175
|
layer?: number;
|
|
@@ -202,6 +206,7 @@ declare class Square extends Sprite {
|
|
|
202
206
|
y?: number;
|
|
203
207
|
dir?: number;
|
|
204
208
|
size?: number;
|
|
209
|
+
pivot?: Vec2;
|
|
205
210
|
scene?: string;
|
|
206
211
|
hidden?: boolean;
|
|
207
212
|
layer?: number;
|
|
@@ -240,6 +245,7 @@ declare class Oval extends Sprite {
|
|
|
240
245
|
y?: number;
|
|
241
246
|
dir?: number;
|
|
242
247
|
size?: number;
|
|
248
|
+
pivot?: Vec2;
|
|
243
249
|
scene?: string;
|
|
244
250
|
hidden?: boolean;
|
|
245
251
|
layer?: number;
|
|
@@ -276,6 +282,7 @@ declare class Circle extends Sprite {
|
|
|
276
282
|
y?: number;
|
|
277
283
|
dir?: number;
|
|
278
284
|
size?: number;
|
|
285
|
+
pivot?: Vec2;
|
|
279
286
|
scene?: string;
|
|
280
287
|
hidden?: boolean;
|
|
281
288
|
layer?: number;
|
|
@@ -314,6 +321,7 @@ declare class Arc extends Sprite {
|
|
|
314
321
|
y?: number;
|
|
315
322
|
dir?: number;
|
|
316
323
|
size?: number;
|
|
324
|
+
pivot?: Vec2;
|
|
317
325
|
scene?: string;
|
|
318
326
|
hidden?: boolean;
|
|
319
327
|
layer?: number;
|
|
@@ -353,6 +361,7 @@ declare class RegularPolygon extends Sprite {
|
|
|
353
361
|
y?: number;
|
|
354
362
|
dir?: number;
|
|
355
363
|
size?: number;
|
|
364
|
+
pivot?: Vec2;
|
|
356
365
|
scene?: string;
|
|
357
366
|
hidden?: boolean;
|
|
358
367
|
layer?: number;
|
|
@@ -389,6 +398,7 @@ declare class CustomPolygon extends Sprite {
|
|
|
389
398
|
y?: number;
|
|
390
399
|
dir?: number;
|
|
391
400
|
size?: number;
|
|
401
|
+
pivot?: Vec2;
|
|
392
402
|
scene?: string;
|
|
393
403
|
hidden?: boolean;
|
|
394
404
|
layer?: number;
|
|
@@ -421,6 +431,7 @@ declare class Pen extends Sprite {
|
|
|
421
431
|
y?: number;
|
|
422
432
|
dir?: number;
|
|
423
433
|
size?: number;
|
|
434
|
+
pivot?: Vec2;
|
|
424
435
|
scene?: string;
|
|
425
436
|
hidden?: boolean;
|
|
426
437
|
layer?: number;
|
|
@@ -522,6 +533,7 @@ declare class Button extends Sprite {
|
|
|
522
533
|
y?: number;
|
|
523
534
|
dir?: number;
|
|
524
535
|
size?: number;
|
|
536
|
+
pivot?: Vec2;
|
|
525
537
|
scene?: string;
|
|
526
538
|
hidden?: boolean;
|
|
527
539
|
layer?: number;
|
|
@@ -557,6 +569,7 @@ declare class ImageSprite extends Sprite {
|
|
|
557
569
|
height: number;
|
|
558
570
|
outlineColor: string;
|
|
559
571
|
outlineWidth: number;
|
|
572
|
+
private imgBitmap;
|
|
560
573
|
protected img: HTMLImageElement;
|
|
561
574
|
getBoundingBox(): BoundingBox;
|
|
562
575
|
getPath(): Path2D;
|
|
@@ -573,6 +586,7 @@ declare class ImageSprite extends Sprite {
|
|
|
573
586
|
y?: number;
|
|
574
587
|
dir?: number;
|
|
575
588
|
size?: number;
|
|
589
|
+
pivot?: Vec2;
|
|
576
590
|
scene?: string;
|
|
577
591
|
hidden?: boolean;
|
|
578
592
|
layer?: number;
|
|
@@ -607,6 +621,65 @@ declare class RigidCircle extends Circle implements RigidBodyOptions {
|
|
|
607
621
|
constructor(options?: RigidCircleOptions);
|
|
608
622
|
}
|
|
609
623
|
|
|
624
|
+
interface Object3DOptions {
|
|
625
|
+
vertices: Vec3[];
|
|
626
|
+
faces: [number, number, ...number[]][];
|
|
627
|
+
x?: number;
|
|
628
|
+
y?: number;
|
|
629
|
+
z?: number;
|
|
630
|
+
}
|
|
631
|
+
declare class Object3D {
|
|
632
|
+
x: number;
|
|
633
|
+
y: number;
|
|
634
|
+
z: number;
|
|
635
|
+
rotX: number;
|
|
636
|
+
rotY: number;
|
|
637
|
+
rotZ: number;
|
|
638
|
+
vertices: Vec3[];
|
|
639
|
+
faces: [number, number, ...number[]][];
|
|
640
|
+
constructor(options: Object3DOptions);
|
|
641
|
+
rotateX(deg: number): void;
|
|
642
|
+
rotateY(deg: number): void;
|
|
643
|
+
rotateZ(deg: number): void;
|
|
644
|
+
pointX(deg: number): void;
|
|
645
|
+
pointY(deg: number): void;
|
|
646
|
+
pointZ(deg: number): void;
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
interface WireframeRenderer3DOptions extends PenOptions {
|
|
650
|
+
objects: Object3D[];
|
|
651
|
+
}
|
|
652
|
+
declare class WireframeRenderer3D extends Pen {
|
|
653
|
+
FOV: number;
|
|
654
|
+
ASPECT: number;
|
|
655
|
+
Z_NEAR: number;
|
|
656
|
+
SPEED: number;
|
|
657
|
+
SENSITIVITY: number;
|
|
658
|
+
camX: number;
|
|
659
|
+
camY: number;
|
|
660
|
+
camZ: number;
|
|
661
|
+
camDirX: number;
|
|
662
|
+
camDirY: number;
|
|
663
|
+
camDirZ: number;
|
|
664
|
+
objects: Object3D[];
|
|
665
|
+
constructor(options: WireframeRenderer3DOptions);
|
|
666
|
+
registerControls(): void;
|
|
667
|
+
private project;
|
|
668
|
+
update(): void;
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
declare const cubeVertices: Vec3[];
|
|
672
|
+
|
|
673
|
+
declare const cubeFaces: [number, number, ...number[]][];
|
|
674
|
+
|
|
675
|
+
declare const tetrahedronVertices: Vec3[];
|
|
676
|
+
|
|
677
|
+
declare const tetrahedronFaces: [number, number, ...number[]][];
|
|
678
|
+
|
|
679
|
+
declare const octahedronVerticesVertices: Vec3[];
|
|
680
|
+
|
|
681
|
+
declare const octahedronFaces: [number, number, ...number[]][];
|
|
682
|
+
|
|
610
683
|
type Mat2<T = number> = [
|
|
611
684
|
[
|
|
612
685
|
T,
|
|
@@ -678,6 +751,14 @@ declare const TScratch: {
|
|
|
678
751
|
Watermark: typeof Watermark;
|
|
679
752
|
ImageSprite: typeof ImageSprite;
|
|
680
753
|
RigidCircle: typeof RigidCircle;
|
|
754
|
+
WireframeRenderer3D: typeof WireframeRenderer3D;
|
|
755
|
+
Object3D: typeof Object3D;
|
|
756
|
+
cubeVertices: Vec3[];
|
|
757
|
+
cubeFaces: [number, number, ...number[]][];
|
|
758
|
+
tetrahedronVertices: Vec3[];
|
|
759
|
+
tetrahedronFaces: [number, number, ...number[]][];
|
|
760
|
+
octahedronVertices: Vec3[];
|
|
761
|
+
octahedronFaces: [number, number, ...number[]][];
|
|
681
762
|
scale: number;
|
|
682
763
|
aspectRatio: number;
|
|
683
764
|
setScale: typeof setScale;
|
|
@@ -686,4 +767,4 @@ declare const TScratch: {
|
|
|
686
767
|
ctx: CanvasRenderingContext2D;
|
|
687
768
|
};
|
|
688
769
|
|
|
689
|
-
export { Arc, type ArcOptions, Button, type ButtonOptions, Circle, type CircleOptions, CustomPolygon, type CustomPolygonOptions, Engine, ImageSprite, type ImageSpriteOptions, type Mat2, type Mat3, type Mat4, Multiplayer, Oval, type OvalOptions, Pen, type PenOptions, Rectangle, type RectangleOptions, RegularPolygon, type RegularPolygonOptions, type RigidBodyOptions, RigidCircle, type RigidCircleOptions, Sprite, type SpriteOptions, Square, type SquareOptions, Text, type TextOptions, type Vec2, type Vec3, type Vec4, Watermark, type TextOptions as WatermarkOptions, aspectRatio, canvas, ctx, TScratch as default, scale, setAspectRatio, setScale };
|
|
770
|
+
export { Arc, type ArcOptions, Button, type ButtonOptions, Circle, type CircleOptions, CustomPolygon, type CustomPolygonOptions, Engine, ImageSprite, type ImageSpriteOptions, type Mat2, type Mat3, type Mat4, Multiplayer, Object3D, type Object3DOptions, Oval, type OvalOptions, Pen, type PenOptions, Rectangle, type RectangleOptions, RegularPolygon, type RegularPolygonOptions, type RigidBodyOptions, RigidCircle, type RigidCircleOptions, Sprite, type SpriteOptions, Square, type SquareOptions, Text, type TextOptions, type Vec2, type Vec3, type Vec4, Watermark, type TextOptions as WatermarkOptions, WireframeRenderer3D, type WireframeRenderer3DOptions, aspectRatio, canvas, ctx, cubeFaces, cubeVertices, TScratch as default, octahedronFaces, octahedronVerticesVertices as octahedronVertices, scale, setAspectRatio, setScale, tetrahedronFaces, tetrahedronVertices };
|
package/dist/client/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var r=document.getElementById("game-window")||document.createElement("canvas"),h=r.getContext("2d"),b=document.createElement("canvas"),a=b.getContext("2d");b.id="pen-canvas";var k=16/9,B;function G(){r.width=k*B,r.height=B,b.width=k*B,b.height=B}function q(o){B=o,G()}function U(o){k=o,G()}r.parentElement?.insertBefore(b,r);q(500);var c=class o{x=0;y=0;dir=0;size=1;scene="main";hidden=!1;layer=0;cachedPath=null;pathDirty=!0;static collisionCanvas=null;static collisionCtx=null;refresh(){u.init().refresh()}invalidatePath(){this.pathDirty=!0,this.cachedPath=null}getCachedPath(){return(this.pathDirty||!this.cachedPath)&&(this.cachedPath=this.getPath(),this.pathDirty=!1),this.cachedPath}constructor(t){Object.assign(this,t),u.init().addSprite(this)}getCreateOptions(){return{x:this.x,y:this.y,dir:this.dir,size:this.size,scene:this.scene,layer:this.layer,hidden:this.hidden}}clone(t){return this.create({...this.getCreateOptions(),...t})}touching(t){if(this.hidden||t.hidden||this.scene!=="*"&&t.scene!=="*"&&this.scene!==t.scene)return!1;let i=this.getBoundingBox(),e=t.getBoundingBox();if(!(Math.abs(i.x-e.x)<(i.width+e.width)/2&&Math.abs(i.y-e.y)<(i.height+e.height)/2))return!1;let n=i.x-i.width/2,l=i.y+i.height/2,p=i.x+i.width/2,d=i.y-i.height/2,m=e.x-e.width/2,g=e.y+e.height/2,C=e.x+e.width/2,f=e.y-e.height/2,O=Math.max(n,m),P=Math.min(d,f),S=Math.min(p,C),x=Math.max(l,g),y=S-O,M=x-P;if(y<=1||M<=1)return!1;o.collisionCanvas||(o.collisionCanvas=document.createElement("canvas"),o.collisionCtx=o.collisionCanvas.getContext("2d",{willReadFrequently:!0}));let w=o.collisionCtx;o.collisionCanvas.width<y&&(o.collisionCanvas.width=y),o.collisionCanvas.height<M&&(o.collisionCanvas.height=M),w.clearRect(0,0,y,M);let $=(v,J)=>{w.save();let K=v.x-O,Q=x-v.y;w.translate(K,Q),w.rotate(v.toRadians(v.dir)),w.fillStyle=J,w.fill(v.getCachedPath()),w.restore()};$(this,"red");let H=w.getImageData(0,0,y,M).data;w.clearRect(0,0,y,M),$(t,"blue");let j=w.getImageData(0,0,y,M).data;for(let v=3;v<H.length;v+=4)if(H[v]>0&&j[v]>0)return!0;return!1}toRadians(t){return t*Math.PI/180}toDegrees(t){return t*180/Math.PI}distanceTo(t,i){return Math.hypot(t-this.x,i-this.y)}move(t){this.x+=t*Math.sin(this.toRadians(this.dir)),this.y+=t*Math.cos(this.toRadians(this.dir)),this.refresh()}turn(t){this.dir+=t,this.refresh()}point(t){this.dir=t,this.refresh()}pointTowards(t,i){this.dir=90-this.toDegrees(Math.atan2(i-this.y,t-this.x)),this.refresh()}setX(t){this.x=t,this.refresh()}setY(t){this.y=t,this.refresh()}goTo(t,i){this.x=t,this.y=i,this.refresh()}changeX(t){this.x+=t,this.refresh()}changeY(t){this.y+=t,this.refresh()}show(){this.hidden=!1,this.refresh()}hide(){this.hidden=!0,this.refresh()}setSize(t){this.size=t>0?t:0,this.invalidatePath(),this.refresh()}changeSize(t){this.size=this.size+t>0?this.size+t:0,this.invalidatePath(),this.refresh()}goToLayer(t){this.layer=t,this.refresh()}changeLayer(t){this.layer+=t,this.refresh()}};var u=class o{static instance;loopRunning=!1;gameLoop=null;maxFPS=24;deltaTime=1/this.maxFPS;lastFrame=performance.now();refreshScheduled=!1;animationFrameId=null;sounds=[];mouseX=0;mouseY=0;mouseDown=!1;mouseClicked=!1;keysPressed=new Set;currentScene="main";sceneMap=new Map;variableMap=new Map;static init(){return this.instance||(this.instance=new o),this.instance}setScene(t){this.sceneMap.get(t)||this.sceneMap.set(t,{sprites:[],loop:null}),this.loopRunning=!1,this.currentScene=t,this.gameLoop=this.sceneMap.get(t).loop,this.setMaxFPS(this.maxFPS)}setLoop(t,i){if(!this.sceneMap.get(t)){this.sceneMap.set(t,{sprites:[],loop:i}),t===this.currentScene&&this.setScene(t);return}this.sceneMap.get(t).loop=i,t===this.currentScene&&this.setScene(t)}pauseLoop(){this.loopRunning=!1,this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null)}resumeLoop(){this.loopRunning=!0,this.setMaxFPS(this.maxFPS)}addSprite(t){let{scene:i,layer:e}=t;if(!this.sceneMap.get(i)){this.sceneMap.set(i,{sprites:[t],loop:null});return}let s=this.sceneMap.get(i).sprites.findIndex(n=>n.layer>e);if(s===-1){this.sceneMap.get(i).sprites.push(t);return}this.sceneMap.get(i).sprites.splice(s,0,t),this.refresh()}removeSprite(t){let{scene:i}=t;this.sceneMap.get(i)&&(this.sceneMap.get(i).sprites=this.sceneMap.get(i).sprites.filter(e=>e!==t),this.refresh())}async setMaxFPS(t){this.maxFPS=t;let i=this.gameLoop;if(!i)return;this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.loopRunning=!0;let e=1e3/t,s=0,n=async l=>{if(!this.loopRunning)return;let p=l-this.lastFrame;this.lastFrame=l,s+=p,s>=e&&(this.deltaTime=s/1e3,s=s%e,i&&await i()),this.animationFrameId=requestAnimationFrame(n)};this.lastFrame=performance.now(),this.animationFrameId=requestAnimationFrame(n)}refresh(){this.refreshScheduled||(this.refreshScheduled=!0,requestAnimationFrame(()=>{this.refreshScheduled=!1,h.clearRect(0,0,r.width,r.height),[...this.sceneMap.get(this.currentScene).sprites,...this.sceneMap.get("*").sprites].forEach(i=>{i.hidden||i.draw()})}))}async wait(t){return new Promise(i=>setTimeout(i,t))}async waitUntil(t){return new Promise(i=>{let e=()=>{t()?i():setTimeout(e,1e3/this.maxFPS)};e()})}setVariable(t,i){this.variableMap.set(t,i)}getVariable(t){return this.variableMap.get(t)}hovering(t){let{mouseX:i,mouseY:e}=this,s=i+r.width/2,n=r.height/2-e,l=s-(t.x+r.width/2),p=n-(r.height/2-t.y),d=-this.toRadians(t.dir),m=l*Math.cos(d)-p*Math.sin(d),g=l*Math.sin(d)+p*Math.cos(d);return h.isPointInPath(t.getCachedPath(),m,g)}keyPressed(t){switch(t){case"any":return this.keysPressed.size>0;case"up":return this.keysPressed.has("ArrowUp");case"down":return this.keysPressed.has("ArrowDown");case"left":return this.keysPressed.has("ArrowLeft");case"right":return this.keysPressed.has("ArrowRight");case"space":return this.keysPressed.has(" ");default:return this.keysPressed.has(t)}}playSound(t){let i=new Audio(t);return this.sounds.push(i),i.play(),i}stopSound(t){t.pause(),t.currentTime=0,this.sounds=this.sounds.filter(i=>i!==t)}stopAllSounds(){this.sounds.forEach(t=>{t.pause(),t.currentTime=0}),this.sounds=[]}pickRandom(t,i){return t>i&&([t,i]=[i,t]),Math.floor(Math.random()*(i-t+1)+t)}dotProduct(...t){let[i,e]=t;switch(i.length){case 2:return i[0]*e[0]+i[1]*e[1];case 3:return i[0]*e[0]+i[1]*e[1]+i[2]*e[2];case 4:return i[0]*e[0]+i[1]*e[1]+i[2]*e[2]+i[3]*e[3]}}sin(t){return Math.sin(this.toRadians(t))}cos(t){return Math.cos(this.toRadians(t))}tan(t){return Math.tan(this.toRadians(t))}csc(t){return 1/Math.sin(this.toRadians(t))}sec(t){return 1/Math.cos(this.toRadians(t))}cot(t){return 1/Math.tan(this.toRadians(t))}asin(t){return this.toDegrees(Math.asin(t))}acos(t){return this.toDegrees(Math.acos(t))}acsc(t){return this.toDegrees(Math.asin(1/t))}asec(t){return this.toDegrees(Math.acos(1/t))}toRadians(t){return t*Math.PI/180}toDegrees(t){return t*180/Math.PI}constructor(){this.setMaxFPS(24),this.sceneMap.set("main",{loop:null,sprites:[]}),this.sceneMap.set("*",{loop:null,sprites:[]}),b.addEventListener("mousemove",t=>{this.mouseX=t.clientX-b.offsetLeft-b.width/2,this.mouseY=-(t.clientY-b.offsetTop-b.height/2)}),b.addEventListener("mousedown",()=>{this.mouseDown=!0}),b.addEventListener("mouseup",()=>{this.mouseDown=!1}),b.addEventListener("click",()=>{this.mouseClicked=!0,setTimeout(()=>this.mouseClicked=!1,0)}),addEventListener("keydown",t=>{t.repeat||this.keysPressed.add(t.key)}),addEventListener("keyup",t=>{this.keysPressed.delete(t.key)})}};import{io as Z}from"socket.io-client";var R=class o{static instance;socket;static connect(t="http://localhost:3000"){return this.instance||(this.instance=new o(t)),this.instance}disconnect(){this.socket.disconnect()}constructor(t){this.socket=Z(t)}broadcast(t,i){this.socket.emit(t,i)}on(t,i){this.socket.on(t,i)}};var T=class o extends c{discriminant="rectangle";tags=new Set(["rectangle"]);width;height;color;outlineColor;outlineWidth;getBoundingBox(){let t=u.init(),i=this.width/2,e=this.height/2,s=t.cos(this.dir),n=t.sin(this.dir),l=2*(Math.abs(i*s)+Math.abs(e*n))*this.size,p=2*(Math.abs(i*n)+Math.abs(e*s))*this.size;return{x:this.x,y:this.y,width:l,height:p}}getPath(){let t=new Path2D;return t.rect(-this.width/2*this.size,-this.height/2*this.size,this.width*this.size,this.height*this.size),t}draw(t){let i=t?a:h;i.save();let e=this.x+r.width/2,s=-this.y+r.height/2;i.translate(e,s),i.rotate(this.toRadians(this.dir));let n=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(n),this.outlineWidth&&i.stroke(n),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),width:this.width,height:this.height,color:this.color,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setWidth(t){this.width=t,this.invalidatePath(),this.refresh()}setHeight(t){this.height=t,this.invalidatePath(),this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.width=t?.width??50,this.height=t?.height??50,this.color=t?.color??"black",this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var Y=class o extends c{discriminant="square";tags=new Set(["square"]);sideLength;color;outlineColor;outlineWidth;getBoundingBox(){let t=u.init(),i=this.sideLength/2,e=t.cos(this.dir),s=t.sin(this.dir),n=2*(Math.abs(i*e)+Math.abs(i*s))*this.size;return{x:this.x,y:this.y,width:n,height:n}}getPath(){let t=new Path2D;return t.rect(-this.sideLength/2*this.size,-this.sideLength/2*this.size,this.sideLength*this.size,this.sideLength*this.size),t}draw(t){let i=t?a:h;i.save();let e=this.x+r.width/2,s=-this.y+r.height/2;i.translate(e,s),i.rotate(this.toRadians(this.dir));let n=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(n),this.outlineWidth&&i.stroke(n),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),sideLength:this.sideLength,color:this.color,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setSideLength(t){this.sideLength=t,this.invalidatePath(),this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.sideLength=t?.sideLength??50,this.color=t?.color??"black",this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var X=class o extends c{discriminant="oval";tags=new Set(["oval"]);radX;radY;color;outlineColor;outlineWidth;getBoundingBox(){let t=u.init(),i=this.radX,e=this.radY,s=t.cos(this.dir),n=t.sin(this.dir),l=2*(Math.abs(i*s)+Math.abs(e*n))*this.size,p=2*(Math.abs(i*n)+Math.abs(e*s))*this.size;return{x:this.x,y:this.y,width:l,height:p}}getPath(){let t=new Path2D;return t.ellipse(0,0,this.radX*this.size,this.radY*this.size,0,0,Math.PI*2),t}draw(t){let i=t?a:h;i.save();let e=this.x+r.width/2,s=-this.y+r.height/2;i.translate(e,s),i.rotate(this.toRadians(this.dir));let n=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(n),this.outlineWidth&&i.stroke(n),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),radX:this.radX,radY:this.radY,color:this.color,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setRadX(t){this.radX=t,this.invalidatePath(),this.refresh()}setRadY(t){this.radY=t,this.invalidatePath(),this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.radX=t?.radX??25,this.radY=t?.radY??25,this.color=t?.color??"black",this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var z=class o extends c{discriminant="circle";tags=new Set(["circle"]);radius;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:this.radius*2*this.size,height:this.radius*2*this.size}}getPath(){let t=new Path2D;return t.ellipse(0,0,this.radius*this.size,this.radius*this.size,0,0,Math.PI*2),t}draw(t){let i=t?a:h;i.save();let e=this.x+r.width/2,s=-this.y+r.height/2;i.translate(e,s),i.rotate(this.toRadians(this.dir));let n=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(n),this.outlineWidth&&i.stroke(n),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),radius:this.radius,color:this.color,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setRadius(t){this.radius=t,this.invalidatePath(),this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.radius=t?.radius??25,this.color=t?.color??"black",this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var L=class o extends c{discriminant="arc";tags=new Set(["arc"]);radius;angle;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:this.radius*2*this.size,height:this.radius*2*this.size}}getPath(){let t=new Path2D;return t.arc(0,0,this.radius*this.size,this.toRadians(this.angle/2-90),this.toRadians(-this.angle/2-90)),t}draw(t){let i=t?a:h;i.save();let e=this.x+r.width/2,s=-this.y+r.height/2;i.translate(e,s),i.rotate(this.toRadians(this.dir));let n=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(n),this.outlineWidth&&i.stroke(n),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),radius:this.radius,angle:this.angle,color:this.color,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setRadius(t){this.radius=t,this.invalidatePath(),this.refresh()}setAngle(t){this.angle=t,this.invalidatePath(),this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.radius=t?.radius??25,this.angle=t?.angle??270,this.color=t?.color??"black",this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var F=class o extends c{discriminant="regularpolygon";tags=new Set(["regularpolygon"]);sides;radius;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:this.radius*2*this.size,height:this.radius*2*this.size}}getPath(){let t=new Path2D,i=2*Math.PI/this.sides;t.moveTo(this.radius*this.size,0);for(let e=1;e<this.sides;e++)t.lineTo(this.radius*Math.cos(i*e)*this.size,this.radius*Math.sin(i*e)*this.size);return t.closePath(),t}draw(t){let i=t?a:h;i.save();let e=this.x+r.width/2,s=-this.y+r.height/2;i.translate(e,s),i.rotate(this.toRadians(this.dir));let n=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(n),this.outlineWidth&&i.stroke(n),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),sides:this.sides,radius:this.radius,color:this.color,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setSides(t){this.sides=t,this.invalidatePath(),this.refresh()}setRadius(t){this.radius=t,this.invalidatePath(),this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.sides=t?.sides??5,this.radius=t?.radius??50,this.color=t?.color??"black",this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var D=class o extends c{discriminant="custompolygon";tags=new Set(["custompolygon"]);vertices;color;outlineColor;outlineWidth;getBoundingBox(){let t=u.init(),i=t.cos(this.dir),e=t.sin(this.dir),s=1/0,n=-1/0,l=1/0,p=-1/0;if(this.vertices.length===0)return{x:this.x,y:this.y,width:0,height:0};for(let f of this.vertices){let O=f[0]*i-f[1]*e,P=f[0]*e+f[1]*i,S=this.x+O,x=this.y+P;S<s&&(s=S),S>n&&(n=S),x<l&&(l=x),x>p&&(p=x)}let d=n-s,m=p-l,g=s+d/2,C=l+m/2;return{x:g*this.size,y:C*this.size,width:d*this.size,height:m*this.size}}getPath(){let t=new Path2D;if(this.vertices.length<2)return t;let i=this.vertices,[e,...s]=i;t.moveTo(e[0]*this.size,-e[1]*this.size);for(let n of s)t.lineTo(n[0]*this.size,-n[1]*this.size);return t.closePath(),t}draw(t){let i=t?a:h;i.save();let e=this.x+r.width/2,s=-this.y+r.height/2;i.translate(e,s),i.rotate(this.toRadians(this.dir));let n=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(n),this.outlineWidth&&i.stroke(n),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),vertices:this.vertices,color:this.color,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setVertices(t){this.vertices=t,this.invalidatePath(),this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.vertices=t?.vertices??[],this.color=t?.color??"black",this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var I=class o extends c{discriminant="pen";tags=new Set(["pen"]);drawing;penSize;color;getBoundingBox(){return{x:this.x,y:this.y,width:this.penSize*this.size*2,height:this.penSize*this.size*2}}getPath(){return new Path2D}draw(){}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),drawing:this.drawing,penSize:this.penSize,color:this.color}}up(){this.drawing=!1}down(){this.drawing=!0}stamp(t){t.draw(!0)}eraseAll(){a.clearRect(0,0,r.width,r.height)}dot(){a.fillStyle=this.color,a.fillRect(this.x-this.penSize/2+r.width/2,-this.y-this.penSize/2+r.height/2,this.penSize,this.penSize)}drawSprite(t){t.draw(!0),u.init().removeSprite(t)}drawLine(t,i){a.beginPath(),a.moveTo(t+r.width/2,-i+r.height/2),a.lineTo(this.x+r.width/2,-this.y+r.height/2),a.lineWidth=this.penSize,a.strokeStyle=this.color,a.stroke()}move(t){let i=this.x,e=this.y;this.x+=t*Math.sin(this.toRadians(this.dir)),this.y+=t*Math.cos(this.toRadians(this.dir)),this.drawing&&this.drawLine(i,e),this.refresh()}setX(t){let i=this.x,e=this.y;this.x=t,this.drawing&&this.drawLine(i,e),this.refresh()}setY(t){let i=this.x,e=this.y;this.y=t,this.drawing&&this.drawLine(i,e),this.refresh()}goTo(t,i){let e=this.x,s=this.y;this.x=t,this.y=i,this.drawing&&this.drawLine(e,s),this.refresh()}changeX(t){let i=this.x,e=this.y;this.x+=t,this.drawing&&this.drawLine(i,e),this.refresh()}changeY(t){let i=this.x,e=this.y;this.y+=t,this.drawing&&this.drawLine(i,e),this.refresh()}constructor(t){super(t),this.drawing=t?.drawing??!1,this.penSize=t?.penSize??5,this.color=t?.color??"black"}};var W=class o extends c{discriminant="text";tags=new Set(["text"]);content;color;fontFamily;fontSize;align;baseline;font;getBoundingBox(){let t=u.init(),i=h.measureText(String(this.content)),e=i.width/2,s=i.actualBoundingBoxAscent+i.actualBoundingBoxDescent/2,n=t.cos(this.dir),l=t.sin(this.dir),p=2*(Math.abs(e*n)+Math.abs(s*l))*this.size,d=2*(Math.abs(e*l)+Math.abs(s*n))*this.size;return{x:this.x,y:this.y,width:p,height:d}}getPath(){let t=new Path2D;h.save(),h.font=this.font;let i=h.measureText(String(this.content)),e=i.width*this.size,s=(i.actualBoundingBoxAscent+i.actualBoundingBoxDescent)*this.size;return h.restore(),t.rect(-e/2,-s/2,e,s),t}draw(t){let i=t?a:h;i.save();let e=this.x+r.width/2,s=-this.y+r.height/2;i.translate(e,s),i.rotate(this.toRadians(this.dir)),i.font=this.font,i.fillStyle=this.color,i.textAlign=this.align,i.textBaseline=this.baseline,i.fillText(String(this.content),0,0),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions,content:this.content,color:this.color,fontFamily:this.fontFamily,fontSize:this.fontSize,align:this.align,baseline:this.baseline}}setContent(t){this.content=t,this.invalidatePath(),this.refresh()}setColor(t){this.color=t,this.refresh()}setFontSize(t){this.fontSize=t,this.font=`${this.fontSize}px ${this.fontFamily}`,this.invalidatePath(),this.refresh()}setFontFamily(t){this.fontFamily=t,this.font=`${this.fontSize}px ${this.fontFamily}`,this.invalidatePath(),this.refresh()}setAlign(t){this.align=t,this.refresh()}setBaseline(t){this.baseline=t,this.refresh()}constructor(t){super(t),this.content=t?.content??"",this.color=t?.color??"black",this.fontFamily=t?.fontFamily??"Arial",this.fontSize=t?.fontSize??16,this.align=t?.align??"center",this.baseline=t?.baseline??"middle",this.font=`${this.fontSize}px ${this.fontFamily}`,this.draw()}};var A=class o extends c{discriminant="button";tags=new Set(["button"]);content;fontColor;fontFamily;fontSize;font;width;height;backgroundColor;outlineColor;outlineWidth;getBoundingBox(){let t=u.init();h.save(),h.font=this.font;let i=h.measureText(String(this.content)),e=Math.max(i.width,this.width)/2,s=Math.max(i.actualBoundingBoxAscent+i.actualBoundingBoxDescent,this.height)/2;h.restore();let n=t.cos(this.dir),l=t.sin(this.dir),p=2*(Math.abs(e*n)+Math.abs(s*l))*this.size,d=2*(Math.abs(e*l)+Math.abs(s*n))*this.size;return{x:this.x,y:this.y,width:p,height:d}}getPath(){let t=new Path2D;return t.rect(-this.width/2*this.size,-this.height/2*this.size,this.width*this.size,this.height*this.size),t}draw(t){let i=t?a:h;i.save();let e=this.x+r.width/2,s=-this.y+r.height/2;i.translate(e,s),i.rotate(this.toRadians(this.dir)),i.fillStyle=this.backgroundColor,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth;let n=this.getCachedPath();i.fill(n),this.outlineWidth&&i.stroke(n),i.font=this.font,i.fillStyle=this.fontColor,i.textAlign="center",i.textBaseline="middle",i.fillText(String(this.content),0,0),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),content:this.content,fontColor:this.fontColor,fontFamily:this.fontFamily,fontSize:this.fontSize,width:this.width,height:this.height,backgroundColor:this.backgroundColor,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setContent(t){this.content=t,this.invalidatePath(),this.refresh()}setBackgroundColor(t){this.backgroundColor=t,this.refresh()}setFontColor(t){this.fontColor=t,this.refresh()}setFontSize(t){this.fontSize=t,this.font=`${this.fontSize}px ${this.fontFamily}`,this.invalidatePath(),this.refresh()}setFontFamily(t){this.fontFamily=t,this.font=`${this.fontSize}px ${this.fontFamily}`,this.invalidatePath(),this.refresh()}constructor(t){super(t),this.content=t?.content??"",this.fontColor=t?.fontColor??"black",this.fontFamily=t?.fontFamily??"Arial",this.fontSize=t?.fontSize??16,this.font=`${this.fontSize}px ${this.fontFamily}`,this.width=t?.width??String(this.content).length*this.fontSize+10,this.height=t?.height??this.fontSize+10,this.backgroundColor=t?.backgroundColor??"rgb(204, 204, 204)",this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var E=class o extends W{tags=new Set(["text","watermark"]);create(t){return new o(t)}constructor(t){super(t),this.content=t?.content??"Made with TScratch",this.x=t?.x??-r.width/2+5,this.y=t?.y??r.height/2-5,this.align=t?.align??"left",this.baseline=t?.baseline??"top",this.draw()}};var V=class o extends c{discriminant="imagesprite";tags=new Set(["imagesprite"]);costumes;costumeNumber;width;height;outlineColor;outlineWidth;img;getBoundingBox(){let t=u.init(),i=this.width/2,e=this.height/2,s=t.cos(this.dir),n=t.sin(this.dir),l=2*Math.sqrt((i*s)**2+(e*n)**2)*this.size,p=2*Math.sqrt((i*n)**2+(e*s)**2)*this.size;return{x:this.x,y:this.y,width:l,height:p}}getPath(){let t=new Path2D;return t.rect(-this.width/2*this.size,-this.height/2*this.size,this.width*this.size,this.height*this.size),t}draw(t){let i=t?a:h;i.save();let e=this.x+r.width/2,s=-this.y+r.height/2;i.translate(e,s),i.rotate(this.toRadians(this.dir)),i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.drawImage(this.img,0,0,this.img.width,this.img.height,-this.width/2,-this.height/2,this.width,this.height),this.outlineWidth&&i.stroke(this.getCachedPath()),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),costumes:this.costumes,costumeNumber:this.costumeNumber,width:this.width,height:this.height,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setCostume(t){this.costumeNumber=t<this.costumes.length&&t>=0?t:0,this.img.src=this.costumes[this.costumeNumber],this.img.onload=this.refresh}nextCostume(){this.costumeNumber=(this.costumeNumber+1)%this.costumes.length,this.img.src=this.costumes[this.costumeNumber],this.img.onload=this.refresh}previousCostume(){this.costumeNumber--,this.costumeNumber<0&&(this.costumeNumber=this.costumes.length-1),this.img.src=this.costumes[this.costumeNumber],this.img.onload=this.refresh}setWidth(t){this.width=t,this.invalidatePath(),this.refresh()}setHeight(t){this.height=t,this.invalidatePath(),this.refresh()}constructor(t){super(t),this.costumes=t?.costumes??[],this.costumeNumber=t?.costumeNumber&&t.costumeNumber<this.costumes.length&&t.costumeNumber>=0?t.costumeNumber:0,this.img=new Image,this.img.src=this.costumes[this.costumeNumber]??"",this.width=t?.width??0,this.height=t?.height??0,this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.img.onload=()=>{t?.width||(this.width=this.img.width),t?.height||(this.height=this.img.height),this.draw()}}};var N=class extends z{tags=new Set(["circle","rigidbody"]);gravity;vX;vY;drag;bounceLoss;update(){let t=u.init();this.vY+=this.gravity,this.vY*=this.drag,this.vX*=this.drag;let i=this.x+this.vX,e=this.y+this.vY,s=t.sceneMap.get(this.scene).sprites.filter(g=>g.discriminant==="circle"),n=t.sceneMap.get("*").sprites.filter(g=>g.discriminant==="circle"),l=[...s,...n],p=Math.ceil(this.distanceTo(i,e)/(2*this.radius));for(let g=0;g<p;g++)for(let C of l)if(this.distanceTo(C.x,C.y)<this.radius+C.radius){let f=this.x-C.x,O=this.y-C.y,P=Math.sqrt(f*f+O*O);if(P===0)continue;let S=f/P,x=O/P,y=this.vX*S+this.vY*x;this.vX=(this.vX-2*y*S)*this.bounceLoss,this.vY=(this.vY-2*y*x)*this.bounceLoss,this.changeX(this.vX),this.changeY(this.vY);return}this.goTo(i,e);let d=r.width/2,m=r.height/2;this.x-this.radius<-d?(this.setX(-d+this.radius),this.vX=Math.abs(this.vX)*this.bounceLoss):this.x+this.radius>d&&(this.setX(d-this.radius),this.vX=-Math.abs(this.vX)*this.bounceLoss),this.y-this.radius<-m?(this.setY(-m+this.radius),this.vY=Math.abs(this.vY)*this.bounceLoss):this.y+this.radius>m&&(this.setY(m-this.radius),this.vY=-Math.abs(this.vY)*this.bounceLoss)}constructor(t){super(t),this.gravity=t?.gravity??-1.8,this.drag=t?.drag??.96,this.bounceLoss=t?.bounceLoss??.9,this.vX=t?.vX??0,this.vY=t?.vY??0}};var _={Engine:u,Sprite:c,Multiplayer:R,Rectangle:T,Square:Y,Oval:X,Circle:z,Arc:L,RegularPolygon:F,CustomPolygon:D,Pen:I,Text:W,Button:A,Watermark:E,ImageSprite:V,RigidCircle:N,scale:B,aspectRatio:k,setScale:q,setAspectRatio:U,canvas:r,ctx:h},Si=_;export{L as Arc,A as Button,z as Circle,D as CustomPolygon,u as Engine,V as ImageSprite,R as Multiplayer,X as Oval,I as Pen,T as Rectangle,F as RegularPolygon,N as RigidCircle,c as Sprite,Y as Square,W as Text,E as Watermark,k as aspectRatio,r as canvas,h as ctx,Si as default,B as scale,U as setAspectRatio,q as setScale};
|
|
1
|
+
var n=document.getElementById("game-window")||document.createElement("canvas"),a=n.getContext("2d"),w=document.createElement("canvas"),p=w.getContext("2d"),D=16/9,M;function G(){n.width=D*M,n.height=M,w.width=D*M,w.height=M}function q(o){M=o,G()}function U(o){D=o,G()}n.parentElement?.insertBefore(w,n);q(500);var d=class o{x=0;y=0;dir=0;size=1;pivot=[0,0];scene="main";hidden=!1;layer=0;cachedPath=null;pathDirty=!0;static collisionCanvas=null;static collisionCtx=null;refresh(){l.init().refresh()}invalidatePath(){this.pathDirty=!0,this.cachedPath=null}getCachedPath(){return(this.pathDirty||!this.cachedPath)&&(this.cachedPath=this.getPath(),this.pathDirty=!1),this.cachedPath}constructor(t){Object.assign(this,t),l.init().addSprite(this)}getCreateOptions(){return{x:this.x,y:this.y,dir:this.dir,size:this.size,scene:this.scene,layer:this.layer,hidden:this.hidden}}clone(t){return this.create({...this.getCreateOptions(),...t})}touching(t){if(this.hidden||t.hidden||this.scene!=="*"&&t.scene!=="*"&&this.scene!==t.scene)return!1;let i=this.getBoundingBox(),e=t.getBoundingBox();if(!(Math.abs(i.x-e.x)<(i.width+e.width)/2&&Math.abs(i.y-e.y)<(i.height+e.height)/2))return!1;let s=i.x-i.width/2,h=i.y+i.height/2,c=i.x+i.width/2,u=i.y-i.height/2,f=e.x-e.width/2,m=e.y+e.height/2,g=e.x+e.width/2,b=e.y-e.height/2,y=Math.max(s,f),S=Math.min(u,b),x=Math.min(c,g),v=Math.max(h,m),C=x-y,B=v-S;if(C<1||B<1)return!1;o.collisionCanvas||(o.collisionCanvas=new OffscreenCanvas(1,1),o.collisionCtx=o.collisionCanvas.getContext("2d",{willReadFrequently:!0}));let P=o.collisionCtx;o.collisionCanvas.width<C&&(o.collisionCanvas.width=C),o.collisionCanvas.height<B&&(o.collisionCanvas.height=B),P.clearRect(0,0,C,B);let $=(O,st)=>{P.save();let rt=O.x-y,nt=v-O.y;P.translate(rt,nt),P.rotate(O.toRadians(O.dir)),P.fillStyle=st,P.fill(O.getCachedPath()),P.restore()};$(this,"red");let H=P.getImageData(0,0,C,B).data;P.clearRect(0,0,C,B),$(t,"blue");let et=P.getImageData(0,0,C,B).data;for(let O=3;O<H.length;O+=4)if(H[O]>0&&et[O]>0)return!0;return!1}toRadians(t){return t*Math.PI/180}toDegrees(t){return t*180/Math.PI}distanceTo(t,i){return Math.hypot(t-this.x,i-this.y)}move(t){this.x+=t*Math.sin(this.toRadians(this.dir)),this.y+=t*Math.cos(this.toRadians(this.dir)),this.refresh()}turn(t){this.dir+=t,this.refresh()}point(t){this.dir=t,this.refresh()}pointTowards(t,i){this.dir=90-this.toDegrees(Math.atan2(i-this.y,t-this.x)),this.refresh()}setX(t){this.x=t,this.refresh()}setY(t){this.y=t,this.refresh()}goTo(t,i){this.x=t,this.y=i,this.refresh()}changeX(t){this.x+=t,this.refresh()}changeY(t){this.y+=t,this.refresh()}setPivot(t,i){this.pivot=[t,i],this.refresh()}show(){this.hidden=!1,this.refresh()}hide(){this.hidden=!0,this.refresh()}setSize(t){this.size=t>0?t:0,this.invalidatePath(),this.refresh()}changeSize(t){this.size=this.size+t>0?this.size+t:0,this.invalidatePath(),this.refresh()}goToLayer(t){this.layer=t,this.refresh()}changeLayer(t){this.layer+=t,this.refresh()}};var l=class o{static instance;loopRunning=!1;gameLoop=null;maxFPS=24;deltaTime=1/this.maxFPS;lastFrame=performance.now();refreshScheduled=!1;animationFrameId=null;sounds=[];mouseX=0;mouseY=0;mouseDown=!1;mouseClicked=!1;keysPressed=new Set;currentScene="main";sceneMap=new Map;variableMap=new Map;static init(){return this.instance||(this.instance=new o),this.instance}setScene(t){this.sceneMap.get(t)||this.sceneMap.set(t,{sprites:[],loop:null}),this.loopRunning=!1,this.currentScene=t,this.gameLoop=this.sceneMap.get(t).loop,this.setMaxFPS(this.maxFPS)}setLoop(t,i){if(!this.sceneMap.get(t)){this.sceneMap.set(t,{sprites:[],loop:i}),t===this.currentScene&&this.setScene(t);return}this.sceneMap.get(t).loop=i,t===this.currentScene&&this.setScene(t)}pauseLoop(){this.loopRunning=!1,this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null)}resumeLoop(){this.loopRunning=!0,this.setMaxFPS(this.maxFPS)}addSprite(t){let{scene:i,layer:e}=t;if(!this.sceneMap.get(i)){this.sceneMap.set(i,{sprites:[t],loop:null});return}let r=this.sceneMap.get(i).sprites.findIndex(s=>s.layer>e);if(r===-1){this.sceneMap.get(i).sprites.push(t);return}this.sceneMap.get(i).sprites.splice(r,0,t),this.refresh()}removeSprite(t){let{scene:i}=t;this.sceneMap.get(i)&&(this.sceneMap.get(i).sprites=this.sceneMap.get(i).sprites.filter(e=>e!==t),this.refresh())}async setMaxFPS(t){this.maxFPS=t;let i=this.gameLoop;if(!i)return;this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.loopRunning=!0;let e=1e3/t,r=0,s=async h=>{if(!this.loopRunning)return;let c=h-this.lastFrame;this.lastFrame=h,r+=c,r>=e&&(this.deltaTime=r/1e3,r=r%e,i&&await i()),this.animationFrameId=requestAnimationFrame(s)};this.lastFrame=performance.now(),this.animationFrameId=requestAnimationFrame(s)}refresh(){this.refreshScheduled||(this.refreshScheduled=!0,requestAnimationFrame(()=>{this.refreshScheduled=!1,a.clearRect(0,0,n.width,n.height),[...this.sceneMap.get(this.currentScene).sprites,...this.sceneMap.get("*").sprites].forEach(i=>{i.hidden||i.draw()})}))}async wait(t){return new Promise(i=>setTimeout(i,t))}async waitUntil(t){return new Promise(i=>{let e=()=>{t()?i():setTimeout(e,1e3/this.maxFPS)};e()})}setVariable(t,i){this.variableMap.set(t,i)}getVariable(t){return this.variableMap.get(t)}hovering(t){let{mouseX:i,mouseY:e}=this,r=i+n.width/2,s=n.height/2-e,h=r-(t.x+n.width/2),c=s-(n.height/2-t.y),u=-this.toRadians(t.dir),f=h*Math.cos(u)-c*Math.sin(u),m=h*Math.sin(u)+c*Math.cos(u);return a.isPointInPath(t.getCachedPath(),f,m)}keyPressed(t){switch(t){case"any":return this.keysPressed.size>0;case"up":return this.keysPressed.has("ArrowUp");case"down":return this.keysPressed.has("ArrowDown");case"left":return this.keysPressed.has("ArrowLeft");case"right":return this.keysPressed.has("ArrowRight");case"space":return this.keysPressed.has(" ");default:return this.keysPressed.has(t)}}playSound(t){let i=new Audio(t);return this.sounds.push(i),i.play(),i}stopSound(t){t.pause(),t.currentTime=0,this.sounds=this.sounds.filter(i=>i!==t)}stopAllSounds(){this.sounds.forEach(t=>{t.pause(),t.currentTime=0}),this.sounds=[]}pickRandom(t,i){return t>i&&([t,i]=[i,t]),Math.floor(Math.random()*(i-t+1)+t)}dotProduct(...t){let[i,e]=t;switch(i.length){case 2:return i[0]*e[0]+i[1]*e[1];case 3:return i[0]*e[0]+i[1]*e[1]+i[2]*e[2];case 4:return i[0]*e[0]+i[1]*e[1]+i[2]*e[2]+i[3]*e[3]}}sin(t){return Math.sin(this.toRadians(t))}cos(t){return Math.cos(this.toRadians(t))}tan(t){return Math.tan(this.toRadians(t))}csc(t){return 1/Math.sin(this.toRadians(t))}sec(t){return 1/Math.cos(this.toRadians(t))}cot(t){return 1/Math.tan(this.toRadians(t))}asin(t){return this.toDegrees(Math.asin(t))}acos(t){return this.toDegrees(Math.acos(t))}acsc(t){return this.toDegrees(Math.asin(1/t))}asec(t){return this.toDegrees(Math.acos(1/t))}toRadians(t){return t*Math.PI/180}toDegrees(t){return t*180/Math.PI}constructor(){this.setMaxFPS(24),this.sceneMap.set("main",{loop:null,sprites:[]}),this.sceneMap.set("*",{loop:null,sprites:[]}),w.addEventListener("mousemove",t=>{this.mouseX=t.clientX-w.offsetLeft-w.width/2,this.mouseY=-(t.clientY-w.offsetTop-w.height/2)}),w.addEventListener("mousedown",()=>{this.mouseDown=!0}),w.addEventListener("mouseup",()=>{this.mouseDown=!1}),w.addEventListener("click",()=>{this.mouseClicked=!0,setTimeout(()=>this.mouseClicked=!1,0)}),addEventListener("keydown",t=>{t.repeat||this.keysPressed.add(t.key)}),addEventListener("keyup",t=>{this.keysPressed.delete(t.key)})}};import{io as ot}from"socket.io-client";var Y=class o{static instance;socket;static connect(t="http://localhost:3000"){return this.instance||(this.instance=new o(t)),this.instance}disconnect(){this.socket.disconnect()}constructor(t){this.socket=ot(t)}broadcast(t,i){this.socket.emit(t,i)}on(t,i){this.socket.on(t,i)}};var R=class o extends d{discriminant="rectangle";tags=new Set(["rectangle"]);width;height;color;outlineColor;outlineWidth;getBoundingBox(){let t=l.init(),i=this.width/2,e=this.height/2,r=t.cos(this.dir),s=t.sin(this.dir),h=2*(Math.abs(i*r)+Math.abs(e*s))*this.size,c=2*(Math.abs(i*s)+Math.abs(e*r))*this.size;return{x:this.x,y:this.y,width:h,height:c}}getPath(){let t=new Path2D;return t.rect(-this.width/2*this.size,-this.height/2*this.size,this.width*this.size,this.height*this.size),t}draw(t){let i=t?p:a;i.save();let e=this.x+n.width/2,r=-this.y+n.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir)),i.translate(-this.pivot[0],this.pivot[1]);let s=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(s),this.outlineWidth&&i.stroke(s),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),width:this.width,height:this.height,color:this.color,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setWidth(t){this.width=t,this.invalidatePath(),this.refresh()}setHeight(t){this.height=t,this.invalidatePath(),this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.width=t?.width??50,this.height=t?.height??50,this.color=t?.color??"black",this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var X=class o extends d{discriminant="square";tags=new Set(["square"]);sideLength;color;outlineColor;outlineWidth;getBoundingBox(){let t=l.init(),i=this.sideLength/2,e=t.cos(this.dir),r=t.sin(this.dir),s=2*(Math.abs(i*e)+Math.abs(i*r))*this.size;return{x:this.x,y:this.y,width:s,height:s}}getPath(){let t=new Path2D;return t.rect(-this.sideLength/2*this.size,-this.sideLength/2*this.size,this.sideLength*this.size,this.sideLength*this.size),t}draw(t){let i=t?p:a;i.save();let e=this.x+n.width/2,r=-this.y+n.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir)),i.translate(-this.pivot[0],this.pivot[1]);let s=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(s),this.outlineWidth&&i.stroke(s),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),sideLength:this.sideLength,color:this.color,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setSideLength(t){this.sideLength=t,this.invalidatePath(),this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.sideLength=t?.sideLength??50,this.color=t?.color??"black",this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var T=class o extends d{discriminant="oval";tags=new Set(["oval"]);radX;radY;color;outlineColor;outlineWidth;getBoundingBox(){let t=l.init(),i=this.radX,e=this.radY,r=t.cos(this.dir),s=t.sin(this.dir),h=2*(Math.abs(i*r)+Math.abs(e*s))*this.size,c=2*(Math.abs(i*s)+Math.abs(e*r))*this.size;return{x:this.x,y:this.y,width:h,height:c}}getPath(){let t=new Path2D;return t.ellipse(0,0,this.radX*this.size,this.radY*this.size,0,0,Math.PI*2),t}draw(t){let i=t?p:a;i.save();let e=this.x+n.width/2,r=-this.y+n.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir)),i.translate(-this.pivot[0],this.pivot[1]);let s=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(s),this.outlineWidth&&i.stroke(s),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),radX:this.radX,radY:this.radY,color:this.color,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setRadX(t){this.radX=t,this.invalidatePath(),this.refresh()}setRadY(t){this.radY=t,this.invalidatePath(),this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.radX=t?.radX??25,this.radY=t?.radY??25,this.color=t?.color??"black",this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var z=class o extends d{discriminant="circle";tags=new Set(["circle"]);radius;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:this.radius*2*this.size,height:this.radius*2*this.size}}getPath(){let t=new Path2D;return t.ellipse(0,0,this.radius*this.size,this.radius*this.size,0,0,Math.PI*2),t}draw(t){let i=t?p:a;i.save();let e=this.x+n.width/2,r=-this.y+n.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir)),i.translate(-this.pivot[0],this.pivot[1]);let s=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(s),this.outlineWidth&&i.stroke(s),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),radius:this.radius,color:this.color,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setRadius(t){this.radius=t,this.invalidatePath(),this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.radius=t?.radius??25,this.color=t?.color??"black",this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var V=class o extends d{discriminant="arc";tags=new Set(["arc"]);radius;angle;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:this.radius*2*this.size,height:this.radius*2*this.size}}getPath(){let t=new Path2D;return t.arc(0,0,this.radius*this.size,this.toRadians(this.angle/2-90),this.toRadians(-this.angle/2-90)),t}draw(t){let i=t?p:a;i.save();let e=this.x+n.width/2,r=-this.y+n.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir)),i.translate(-this.pivot[0],this.pivot[1]);let s=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(s),this.outlineWidth&&i.stroke(s),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),radius:this.radius,angle:this.angle,color:this.color,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setRadius(t){this.radius=t,this.invalidatePath(),this.refresh()}setAngle(t){this.angle=t,this.invalidatePath(),this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.radius=t?.radius??25,this.angle=t?.angle??270,this.color=t?.color??"black",this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var F=class o extends d{discriminant="regularpolygon";tags=new Set(["regularpolygon"]);sides;radius;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:this.radius*2*this.size,height:this.radius*2*this.size}}getPath(){let t=new Path2D,i=2*Math.PI/this.sides;t.moveTo(this.radius*this.size,0);for(let e=1;e<this.sides;e++)t.lineTo(this.radius*Math.cos(i*e)*this.size,this.radius*Math.sin(i*e)*this.size);return t.closePath(),t}draw(t){let i=t?p:a;i.save();let e=this.x+n.width/2,r=-this.y+n.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir)),i.translate(-this.pivot[0],this.pivot[1]);let s=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(s),this.outlineWidth&&i.stroke(s),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),sides:this.sides,radius:this.radius,color:this.color,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setSides(t){this.sides=t,this.invalidatePath(),this.refresh()}setRadius(t){this.radius=t,this.invalidatePath(),this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.sides=t?.sides??5,this.radius=t?.radius??50,this.color=t?.color??"black",this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var E=class o extends d{discriminant="custompolygon";tags=new Set(["custompolygon"]);vertices;color;outlineColor;outlineWidth;getBoundingBox(){let t=l.init(),i=t.cos(this.dir),e=t.sin(this.dir),r=1/0,s=-1/0,h=1/0,c=-1/0;if(this.vertices.length===0)return{x:this.x,y:this.y,width:0,height:0};for(let b of this.vertices){let y=b[0]*i-b[1]*e,S=b[0]*e+b[1]*i,x=this.x+y,v=this.y+S;x<r&&(r=x),x>s&&(s=x),v<h&&(h=v),v>c&&(c=v)}let u=s-r,f=c-h,m=r+u/2,g=h+f/2;return{x:m*this.size,y:g*this.size,width:u*this.size,height:f*this.size}}getPath(){let t=new Path2D;if(this.vertices.length<2)return t;let i=this.vertices,[e,...r]=i;t.moveTo(e[0]*this.size,-e[1]*this.size);for(let s of r)t.lineTo(s[0]*this.size,-s[1]*this.size);return t.closePath(),t}draw(t){let i=t?p:a;i.save();let e=this.x+n.width/2,r=-this.y+n.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir)),i.translate(-this.pivot[0],this.pivot[1]);let s=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(s),this.outlineWidth&&i.stroke(s),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),vertices:this.vertices,color:this.color,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setVertices(t){this.vertices=t,this.invalidatePath(),this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.vertices=t?.vertices??[],this.color=t?.color??"black",this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var k=class o extends d{discriminant="pen";tags=new Set(["pen"]);drawing;penSize;color;getBoundingBox(){return{x:this.x,y:this.y,width:this.penSize*this.size*2,height:this.penSize*this.size*2}}getPath(){return new Path2D}draw(){}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),drawing:this.drawing,penSize:this.penSize,color:this.color}}up(){this.drawing=!1}down(){this.drawing=!0}stamp(t){t.draw(!0)}eraseAll(){p.clearRect(0,0,n.width,n.height)}dot(){p.fillStyle=this.color,p.fillRect(this.x-this.penSize/2+n.width/2,-this.y-this.penSize/2+n.height/2,this.penSize,this.penSize)}drawSprite(t){t.draw(!0),l.init().removeSprite(t)}drawLine(t,i){p.beginPath(),p.moveTo(t+n.width/2,-i+n.height/2),p.lineTo(this.x+n.width/2,-this.y+n.height/2),p.lineWidth=this.penSize,p.strokeStyle=this.color,p.stroke()}move(t){let i=this.x,e=this.y;this.x+=t*Math.sin(this.toRadians(this.dir)),this.y+=t*Math.cos(this.toRadians(this.dir)),this.drawing&&this.drawLine(i,e),this.refresh()}setX(t){let i=this.x,e=this.y;this.x=t,this.drawing&&this.drawLine(i,e),this.refresh()}setY(t){let i=this.x,e=this.y;this.y=t,this.drawing&&this.drawLine(i,e),this.refresh()}goTo(t,i){let e=this.x,r=this.y;this.x=t,this.y=i,this.drawing&&this.drawLine(e,r),this.refresh()}changeX(t){let i=this.x,e=this.y;this.x+=t,this.drawing&&this.drawLine(i,e),this.refresh()}changeY(t){let i=this.x,e=this.y;this.y+=t,this.drawing&&this.drawLine(i,e),this.refresh()}constructor(t){super(t),this.drawing=t?.drawing??!1,this.penSize=t?.penSize??5,this.color=t?.color??"black"}};var W=class o extends d{discriminant="text";tags=new Set(["text"]);content;color;fontFamily;fontSize;align;baseline;font;getBoundingBox(){let t=l.init(),i=a.measureText(String(this.content)),e=i.width/2,r=i.actualBoundingBoxAscent+i.actualBoundingBoxDescent/2,s=t.cos(this.dir),h=t.sin(this.dir),c=2*(Math.abs(e*s)+Math.abs(r*h))*this.size,u=2*(Math.abs(e*h)+Math.abs(r*s))*this.size;return{x:this.x,y:this.y,width:c,height:u}}getPath(){let t=new Path2D;a.save(),a.font=this.font;let i=a.measureText(String(this.content)),e=i.width*this.size,r=(i.actualBoundingBoxAscent+i.actualBoundingBoxDescent)*this.size;return a.restore(),t.rect(-e/2,-r/2,e,r),t}draw(t){let i=t?p:a;i.save();let e=this.x+n.width/2,r=-this.y+n.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir)),i.translate(-this.pivot[0],this.pivot[1]),i.font=this.font,i.fillStyle=this.color,i.textAlign=this.align,i.textBaseline=this.baseline,i.fillText(String(this.content),0,0),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions,content:this.content,color:this.color,fontFamily:this.fontFamily,fontSize:this.fontSize,align:this.align,baseline:this.baseline}}setContent(t){this.content=t,this.invalidatePath(),this.refresh()}setColor(t){this.color=t,this.refresh()}setFontSize(t){this.fontSize=t,this.font=`${this.fontSize}px ${this.fontFamily}`,this.invalidatePath(),this.refresh()}setFontFamily(t){this.fontFamily=t,this.font=`${this.fontSize}px ${this.fontFamily}`,this.invalidatePath(),this.refresh()}setAlign(t){this.align=t,this.refresh()}setBaseline(t){this.baseline=t,this.refresh()}constructor(t){super(t),this.content=t?.content??"",this.color=t?.color??"black",this.fontFamily=t?.fontFamily??"Arial",this.fontSize=t?.fontSize??16,this.align=t?.align??"center",this.baseline=t?.baseline??"middle",this.font=`${this.fontSize}px ${this.fontFamily}`,this.draw()}};var I=class o extends d{discriminant="button";tags=new Set(["button"]);content;fontColor;fontFamily;fontSize;font;width;height;backgroundColor;outlineColor;outlineWidth;getBoundingBox(){let t=l.init();a.save(),a.font=this.font;let i=a.measureText(String(this.content)),e=Math.max(i.width,this.width)/2,r=Math.max(i.actualBoundingBoxAscent+i.actualBoundingBoxDescent,this.height)/2;a.restore();let s=t.cos(this.dir),h=t.sin(this.dir),c=2*(Math.abs(e*s)+Math.abs(r*h))*this.size,u=2*(Math.abs(e*h)+Math.abs(r*s))*this.size;return{x:this.x,y:this.y,width:c,height:u}}getPath(){let t=new Path2D;return t.rect(-this.width/2*this.size,-this.height/2*this.size,this.width*this.size,this.height*this.size),t}draw(t){let i=t?p:a;i.save();let e=this.x+n.width/2,r=-this.y+n.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir)),i.translate(-this.pivot[0],this.pivot[1]),i.fillStyle=this.backgroundColor,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth;let s=this.getCachedPath();i.fill(s),this.outlineWidth&&i.stroke(s),i.font=this.font,i.fillStyle=this.fontColor,i.textAlign="center",i.textBaseline="middle",i.fillText(String(this.content),0,0),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),content:this.content,fontColor:this.fontColor,fontFamily:this.fontFamily,fontSize:this.fontSize,width:this.width,height:this.height,backgroundColor:this.backgroundColor,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setContent(t){this.content=t,this.invalidatePath(),this.refresh()}setBackgroundColor(t){this.backgroundColor=t,this.refresh()}setFontColor(t){this.fontColor=t,this.refresh()}setFontSize(t){this.fontSize=t,this.font=`${this.fontSize}px ${this.fontFamily}`,this.invalidatePath(),this.refresh()}setFontFamily(t){this.fontFamily=t,this.font=`${this.fontSize}px ${this.fontFamily}`,this.invalidatePath(),this.refresh()}constructor(t){super(t),this.content=t?.content??"",this.fontColor=t?.fontColor??"black",this.fontFamily=t?.fontFamily??"Arial",this.fontSize=t?.fontSize??16,this.font=`${this.fontSize}px ${this.fontFamily}`,this.width=t?.width??String(this.content).length*this.fontSize+10,this.height=t?.height??this.fontSize+10,this.backgroundColor=t?.backgroundColor??"rgb(204, 204, 204)",this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var L=class o extends W{tags=new Set(["text","watermark"]);create(t){return new o(t)}constructor(t){super(t),this.content=t?.content??"Made with TScratch",this.x=t?.x??-n.width/2+5,this.y=t?.y??n.height/2-5,this.align=t?.align??"left",this.baseline=t?.baseline??"top",this.draw()}};var A=class o extends d{discriminant="imagesprite";tags=new Set(["imagesprite"]);costumes;costumeNumber;width;height;outlineColor;outlineWidth;imgBitmap=null;img;getBoundingBox(){let t=l.init(),i=this.width/2,e=this.height/2,r=t.cos(this.dir),s=t.sin(this.dir),h=2*Math.sqrt((i*r)**2+(e*s)**2)*this.size,c=2*Math.sqrt((i*s)**2+(e*r)**2)*this.size;return{x:this.x,y:this.y,width:h,height:c}}getPath(){let t=new Path2D;return t.rect(-this.width/2*this.size,-this.height/2*this.size,this.width*this.size,this.height*this.size),t}draw(t){let i=t?p:a;i.save();let e=this.x+n.width/2,r=-this.y+n.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir)),i.translate(-this.pivot[0],this.pivot[1]),i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.drawImage(this.imgBitmap??this.img,0,0,this.img.width,this.img.height,-this.width/2,-this.height/2,this.width,this.height),this.outlineWidth&&i.stroke(this.getCachedPath()),i.restore()}create(t){return new o(t)}getCreateOptions(){return{...super.getCreateOptions(),costumes:this.costumes,costumeNumber:this.costumeNumber,width:this.width,height:this.height,outlineColor:this.outlineColor,outlineWidth:this.outlineWidth}}setCostume(t){this.costumeNumber=t<this.costumes.length&&t>=0?t:0,this.img.src=this.costumes[this.costumeNumber],this.img.onload=()=>{createImageBitmap(this.img).then(i=>{this.imgBitmap=i}),this.refresh()}}nextCostume(){this.costumeNumber=(this.costumeNumber+1)%this.costumes.length,this.img.src=this.costumes[this.costumeNumber],this.img.onload=()=>{this.imgBitmap=null,createImageBitmap(this.img).then(t=>{this.imgBitmap=t}),this.refresh()}}previousCostume(){this.costumeNumber--,this.costumeNumber<0&&(this.costumeNumber=this.costumes.length-1),this.img.src=this.costumes[this.costumeNumber],this.img.onload=()=>{this.imgBitmap=null,createImageBitmap(this.img).then(t=>{this.imgBitmap=t}),this.refresh()}}setWidth(t){this.width=t,this.invalidatePath(),this.refresh()}setHeight(t){this.height=t,this.invalidatePath(),this.refresh()}constructor(t){super(t),this.costumes=t?.costumes??[],this.costumeNumber=t?.costumeNumber&&t.costumeNumber<this.costumes.length&&t.costumeNumber>=0?t.costumeNumber:0,this.img=new Image,this.img.src=this.costumes[this.costumeNumber]??"",this.width=t?.width??0,this.height=t?.height??0,this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.img.onload=()=>{t?.width||(this.width=this.img.width),t?.height||(this.height=this.img.height),createImageBitmap(this.img).then(i=>{this.imgBitmap=i}),this.draw()}}};var N=class extends z{tags=new Set(["circle","rigidbody"]);gravity;vX;vY;drag;bounceLoss;update(){let t=l.init();this.vY+=this.gravity,this.vY*=this.drag,this.vX*=this.drag;let i=this.x+this.vX,e=this.y+this.vY,r=t.sceneMap.get(this.scene).sprites.filter(m=>m.discriminant==="circle"),s=t.sceneMap.get("*").sprites.filter(m=>m.discriminant==="circle"),h=[...r,...s],c=Math.ceil(this.distanceTo(i,e)/(2*this.radius));for(let m=0;m<c;m++)for(let g of h)if(this.distanceTo(g.x,g.y)<this.radius+g.radius){let b=this.x-g.x,y=this.y-g.y,S=Math.sqrt(b*b+y*y);if(S===0)continue;let x=b/S,v=y/S,C=this.vX*x+this.vY*v;this.vX=(this.vX-2*C*x)*this.bounceLoss,this.vY=(this.vY-2*C*v)*this.bounceLoss,this.changeX(this.vX),this.changeY(this.vY);return}this.goTo(i,e);let u=n.width/2,f=n.height/2;this.x-this.radius<-u?(this.setX(-u+this.radius),this.vX=Math.abs(this.vX)*this.bounceLoss):this.x+this.radius>u&&(this.setX(u-this.radius),this.vX=-Math.abs(this.vX)*this.bounceLoss),this.y-this.radius<-f?(this.setY(-f+this.radius),this.vY=Math.abs(this.vY)*this.bounceLoss):this.y+this.radius>f&&(this.setY(f-this.radius),this.vY=-Math.abs(this.vY)*this.bounceLoss)}constructor(t){super(t),this.gravity=t?.gravity??-1.8,this.drag=t?.drag??.96,this.bounceLoss=t?.bounceLoss??.9,this.vX=t?.vX??0,this.vY=t?.vY??0}};var Z=class extends k{FOV=60;ASPECT=n.width/n.height;Z_NEAR=.01;SPEED=2;SENSITIVITY=300;camX=0;camY=0;camZ=0;camDirX=0;camDirY=0;camDirZ=0;objects;constructor(t){super(t),this.objects=t.objects}registerControls(){let t=l.init(),i=t.deltaTime,e=t.sin(this.camDirY),r=t.cos(this.camDirY);t.keyPressed("w")&&(this.camX+=this.SPEED*e*i,this.camZ+=this.SPEED*r*i),t.keyPressed("a")&&(this.camX-=this.SPEED*r*i,this.camZ+=this.SPEED*e*i),t.keyPressed("s")&&(this.camX-=this.SPEED*e*i,this.camZ-=this.SPEED*r*i),t.keyPressed("d")&&(this.camX+=this.SPEED*r*i,this.camZ-=this.SPEED*e*i),t.keyPressed("e")&&(this.camY+=this.SPEED*i),t.keyPressed("q")&&(this.camY-=this.SPEED*i),t.keyPressed("up")&&(this.camDirX+=this.SENSITIVITY*i),t.keyPressed("down")&&(this.camDirX-=this.SENSITIVITY*i),t.keyPressed("left")&&(this.camDirY-=this.SENSITIVITY*i),t.keyPressed("right")&&(this.camDirY+=this.SENSITIVITY*i)}project(t){let i=1/l.init().tan(this.FOV/2);return t.map(e=>{let r=e[0],s=e[1],h=e[2]<this.Z_NEAR?this.Z_NEAR:e[2],c=n.width/2*(r*i)/(h*this.ASPECT),u=n.height/2*(s*i)/h;return[c,u]})}update(){let t=l.init(),i=t.sin(this.camDirX),e=t.cos(this.camDirX),r=t.sin(this.camDirY),s=t.cos(this.camDirY),h=t.sin(this.camDirZ),c=t.cos(this.camDirZ);for(let u of this.objects){let f=this.project(u.vertices.map(m=>{let g=m[0]+u.x-this.camX,b=m[1]+u.y-this.camY,y=m[2]+u.z-this.camZ,S=g*s-y*r,x=g*r+y*s,v=b*e-x*i,C=b*i+x*e,B=S*c-v*h,P=S*h+v*c;return[B,P,C]}));for(let m of u.faces){let[g,b]=f[m[0]];this.goTo(g,b),this.down();for(let y of m){let[S,x]=f[y];this.goTo(S,x)}this.goTo(g,b),this.up()}}}};var j=class{x=0;y=0;z=0;rotX=0;rotY=0;rotZ=0;vertices;faces;constructor(t){this.vertices=t.vertices,this.faces=t.faces,this.x=t.x??0,this.y=t.y??0,this.z=t.z??2}rotateX(t){let i=l.init(),e=i.cos(t),r=i.sin(t);for(let s=0;s<this.vertices.length;s++){let[h,c,u]=this.vertices[s];this.vertices[s][1]=c*e-u*r,this.vertices[s][2]=c*r+u*e}}rotateY(t){let i=l.init(),e=i.cos(t),r=i.sin(t);for(let s=0;s<this.vertices.length;s++){let[h,c,u]=this.vertices[s];this.vertices[s][0]=h*e+u*r,this.vertices[s][2]=-h*r+u*e}}rotateZ(t){let i=l.init(),e=i.cos(t),r=i.sin(t);for(let s=0;s<this.vertices.length;s++){let[h,c,u]=this.vertices[s];this.vertices[s][0]=h*e-c*r,this.vertices[s][1]=h*r+c*e}}pointX(t){let i=t-this.rotX;this.rotX=t,this.rotateX(i)}pointY(t){let i=t-this.rotY;this.rotY=t,this.rotateY(i)}pointZ(t){let i=t-this.rotZ;this.rotZ=t,this.rotateZ(i)}};var ht=[[-.5,-.5,-.5],[.5,-.5,-.5],[.5,-.5,.5],[-.5,-.5,.5],[-.5,.5,-.5],[.5,.5,-.5],[.5,.5,.5],[-.5,.5,.5]],J=ht;var ct=[[0,1,2,3],[4,5,6,7],[0,4],[1,5],[2,6],[3,7]],K=ct;var at=[[1,1,1],[-1,-1,1],[-1,1,-1],[1,-1,-1]],Q=at;var lt=[[0,1,2],[0,3,1],[0,2,3],[1,3,2]],_=lt;var ut=[[1,0,0],[-1,0,0],[0,1,0],[0,-1,0],[0,0,1],[0,0,-1]],tt=ut;var pt=[[0,2,4],[2,1,4],[1,3,4],[3,0,4],[2,0,5],[1,2,5],[3,1,5],[0,3,5]],it=pt;var dt={Engine:l,Sprite:d,Multiplayer:Y,Rectangle:R,Square:X,Oval:T,Circle:z,Arc:V,RegularPolygon:F,CustomPolygon:E,Pen:k,Text:W,Button:I,Watermark:L,ImageSprite:A,RigidCircle:N,WireframeRenderer3D:Z,Object3D:j,cubeVertices:J,cubeFaces:K,tetrahedronVertices:Q,tetrahedronFaces:_,octahedronVertices:tt,octahedronFaces:it,scale:M,aspectRatio:D,setScale:q,setAspectRatio:U,canvas:n,ctx:a},se=dt;export{V as Arc,I as Button,z as Circle,E as CustomPolygon,l as Engine,A as ImageSprite,Y as Multiplayer,j as Object3D,T as Oval,k as Pen,R as Rectangle,F as RegularPolygon,N as RigidCircle,d as Sprite,X as Square,W as Text,L as Watermark,Z as WireframeRenderer3D,D as aspectRatio,n as canvas,a as ctx,K as cubeFaces,J as cubeVertices,se as default,it as octahedronFaces,tt as octahedronVertices,M as scale,U as setAspectRatio,q as setScale,_ as tetrahedronFaces,Q as tetrahedronVertices};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|