tscratch 0.6.3 → 0.6.4
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
|
@@ -29,12 +29,13 @@ declare abstract class Sprite {
|
|
|
29
29
|
protected abstract create(options?: SpriteOptions): this;
|
|
30
30
|
protected refresh(): void;
|
|
31
31
|
protected invalidatePath(): void;
|
|
32
|
-
|
|
32
|
+
getCachedPath(): Path2D;
|
|
33
33
|
constructor(options?: SpriteOptions);
|
|
34
34
|
clone(options?: SpriteOptions): this;
|
|
35
35
|
touching(sprite: Sprite): boolean;
|
|
36
36
|
protected toRadians(deg: number): number;
|
|
37
37
|
protected toDegrees(rad: number): number;
|
|
38
|
+
distanceTo(x: number, y: number): number;
|
|
38
39
|
move(steps: number): void;
|
|
39
40
|
turn(deg: number): void;
|
|
40
41
|
point(dir: number): void;
|
|
@@ -50,9 +51,9 @@ declare abstract class Sprite {
|
|
|
50
51
|
changeLayer(dL: number): void;
|
|
51
52
|
}
|
|
52
53
|
|
|
53
|
-
type Vec2 = [
|
|
54
|
-
type Vec3 = [
|
|
55
|
-
type Vec4 = [
|
|
54
|
+
type Vec2<T = number> = [T, T];
|
|
55
|
+
type Vec3<T = number> = [T, T, T];
|
|
56
|
+
type Vec4<T = number> = [T, T, T, T];
|
|
56
57
|
|
|
57
58
|
type GameLoop = (() => void) | (() => Promise<void>);
|
|
58
59
|
type SceneMap = Map<string, {
|
|
@@ -76,6 +77,7 @@ declare class Engine {
|
|
|
76
77
|
private keysPressed;
|
|
77
78
|
currentScene: string;
|
|
78
79
|
sceneMap: SceneMap;
|
|
80
|
+
variableMap: Map<string, unknown>;
|
|
79
81
|
static init(): Engine;
|
|
80
82
|
changeScene(scene: string): void;
|
|
81
83
|
setLoop(scene: string, loop: GameLoop): void;
|
|
@@ -87,6 +89,8 @@ declare class Engine {
|
|
|
87
89
|
refresh(): void;
|
|
88
90
|
wait(ms: number): Promise<void>;
|
|
89
91
|
waitUntil(conditionGetter: () => boolean): Promise<void>;
|
|
92
|
+
setVariable<T = any>(key: string, value: T): void;
|
|
93
|
+
getVariable<T = unknown>(key: string): T;
|
|
90
94
|
hovering(sprite: Sprite): boolean;
|
|
91
95
|
keyPressed(key: string): boolean;
|
|
92
96
|
playSound(src: string): HTMLAudioElement;
|
|
@@ -314,8 +318,6 @@ declare class Pen extends Sprite {
|
|
|
314
318
|
constructor(options?: PenOptions);
|
|
315
319
|
}
|
|
316
320
|
|
|
317
|
-
type CanvasTextAlign = 'left' | 'right' | 'center' | 'start' | 'end';
|
|
318
|
-
type CanvasTextBaseline = 'top' | 'hanging' | 'middle' | 'alphabetic' | 'ideographic' | 'bottom';
|
|
319
321
|
interface TextOptions extends SpriteOptions {
|
|
320
322
|
content?: string;
|
|
321
323
|
color?: string;
|
|
@@ -346,6 +348,41 @@ declare class Text extends Sprite {
|
|
|
346
348
|
constructor(options?: TextOptions);
|
|
347
349
|
}
|
|
348
350
|
|
|
351
|
+
interface ButtonOptions extends SpriteOptions {
|
|
352
|
+
content?: string;
|
|
353
|
+
fontColor?: string;
|
|
354
|
+
fontFamily?: string;
|
|
355
|
+
fontSize?: number;
|
|
356
|
+
width?: number;
|
|
357
|
+
height?: number;
|
|
358
|
+
backgroundColor?: string;
|
|
359
|
+
outlineColor?: string;
|
|
360
|
+
outlineWidth?: number;
|
|
361
|
+
}
|
|
362
|
+
declare class Button extends Sprite {
|
|
363
|
+
discriminant: string;
|
|
364
|
+
content: string;
|
|
365
|
+
fontColor: string;
|
|
366
|
+
fontFamily: string;
|
|
367
|
+
fontSize: number;
|
|
368
|
+
private font;
|
|
369
|
+
width: number;
|
|
370
|
+
height: number;
|
|
371
|
+
backgroundColor: string;
|
|
372
|
+
outlineColor: string;
|
|
373
|
+
outlineWidth: number;
|
|
374
|
+
getBoundingBox(): BoundingBox;
|
|
375
|
+
getPath(): Path2D;
|
|
376
|
+
draw(stamping?: boolean): void;
|
|
377
|
+
create(options?: ButtonOptions): this;
|
|
378
|
+
setContent(content: string): void;
|
|
379
|
+
setBackgroundColor(color: string): void;
|
|
380
|
+
setFontColor(color: string): void;
|
|
381
|
+
setFontSize(fontSize: number): void;
|
|
382
|
+
setFontFamily(fontFamily: string): void;
|
|
383
|
+
constructor(options?: ButtonOptions);
|
|
384
|
+
}
|
|
385
|
+
|
|
349
386
|
interface ImageSpriteOptions extends SpriteOptions {
|
|
350
387
|
src?: string;
|
|
351
388
|
width: number;
|
|
@@ -371,6 +408,60 @@ declare class ImageSprite extends Sprite {
|
|
|
371
408
|
constructor(options?: ImageSpriteOptions);
|
|
372
409
|
}
|
|
373
410
|
|
|
411
|
+
type Mat2<T = number> = [
|
|
412
|
+
[
|
|
413
|
+
T,
|
|
414
|
+
T
|
|
415
|
+
],
|
|
416
|
+
[
|
|
417
|
+
T,
|
|
418
|
+
T
|
|
419
|
+
]
|
|
420
|
+
];
|
|
421
|
+
type Mat3<T = number> = [
|
|
422
|
+
[
|
|
423
|
+
T,
|
|
424
|
+
T,
|
|
425
|
+
T
|
|
426
|
+
],
|
|
427
|
+
[
|
|
428
|
+
T,
|
|
429
|
+
T,
|
|
430
|
+
T
|
|
431
|
+
],
|
|
432
|
+
[
|
|
433
|
+
T,
|
|
434
|
+
T,
|
|
435
|
+
T
|
|
436
|
+
]
|
|
437
|
+
];
|
|
438
|
+
type Mat4<T = number> = [
|
|
439
|
+
[
|
|
440
|
+
T,
|
|
441
|
+
T,
|
|
442
|
+
T,
|
|
443
|
+
T
|
|
444
|
+
],
|
|
445
|
+
[
|
|
446
|
+
T,
|
|
447
|
+
T,
|
|
448
|
+
T,
|
|
449
|
+
T
|
|
450
|
+
],
|
|
451
|
+
[
|
|
452
|
+
T,
|
|
453
|
+
T,
|
|
454
|
+
T,
|
|
455
|
+
T
|
|
456
|
+
],
|
|
457
|
+
[
|
|
458
|
+
T,
|
|
459
|
+
T,
|
|
460
|
+
T,
|
|
461
|
+
T
|
|
462
|
+
]
|
|
463
|
+
];
|
|
464
|
+
|
|
374
465
|
declare const TScratch: {
|
|
375
466
|
Engine: typeof Engine;
|
|
376
467
|
Sprite: typeof Sprite;
|
|
@@ -384,6 +475,7 @@ declare const TScratch: {
|
|
|
384
475
|
CustomPolygon: typeof CustomPolygon;
|
|
385
476
|
Pen: typeof Pen;
|
|
386
477
|
Text: typeof Text;
|
|
478
|
+
Button: typeof Button;
|
|
387
479
|
ImageSprite: typeof ImageSprite;
|
|
388
480
|
scale: number;
|
|
389
481
|
aspectRatio: number;
|
|
@@ -393,4 +485,4 @@ declare const TScratch: {
|
|
|
393
485
|
ctx: CanvasRenderingContext2D;
|
|
394
486
|
};
|
|
395
487
|
|
|
396
|
-
export { Arc, type ArcOptions,
|
|
488
|
+
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, Sprite, type SpriteOptions, Square, type SquareOptions, Text, type TextOptions, type Vec2, type Vec3, type Vec4, aspectRatio, canvas, ctx, TScratch as default, scale, setAspectRatio, setScale };
|
package/dist/client/index.d.ts
CHANGED
|
@@ -29,12 +29,13 @@ declare abstract class Sprite {
|
|
|
29
29
|
protected abstract create(options?: SpriteOptions): this;
|
|
30
30
|
protected refresh(): void;
|
|
31
31
|
protected invalidatePath(): void;
|
|
32
|
-
|
|
32
|
+
getCachedPath(): Path2D;
|
|
33
33
|
constructor(options?: SpriteOptions);
|
|
34
34
|
clone(options?: SpriteOptions): this;
|
|
35
35
|
touching(sprite: Sprite): boolean;
|
|
36
36
|
protected toRadians(deg: number): number;
|
|
37
37
|
protected toDegrees(rad: number): number;
|
|
38
|
+
distanceTo(x: number, y: number): number;
|
|
38
39
|
move(steps: number): void;
|
|
39
40
|
turn(deg: number): void;
|
|
40
41
|
point(dir: number): void;
|
|
@@ -50,9 +51,9 @@ declare abstract class Sprite {
|
|
|
50
51
|
changeLayer(dL: number): void;
|
|
51
52
|
}
|
|
52
53
|
|
|
53
|
-
type Vec2 = [
|
|
54
|
-
type Vec3 = [
|
|
55
|
-
type Vec4 = [
|
|
54
|
+
type Vec2<T = number> = [T, T];
|
|
55
|
+
type Vec3<T = number> = [T, T, T];
|
|
56
|
+
type Vec4<T = number> = [T, T, T, T];
|
|
56
57
|
|
|
57
58
|
type GameLoop = (() => void) | (() => Promise<void>);
|
|
58
59
|
type SceneMap = Map<string, {
|
|
@@ -76,6 +77,7 @@ declare class Engine {
|
|
|
76
77
|
private keysPressed;
|
|
77
78
|
currentScene: string;
|
|
78
79
|
sceneMap: SceneMap;
|
|
80
|
+
variableMap: Map<string, unknown>;
|
|
79
81
|
static init(): Engine;
|
|
80
82
|
changeScene(scene: string): void;
|
|
81
83
|
setLoop(scene: string, loop: GameLoop): void;
|
|
@@ -87,6 +89,8 @@ declare class Engine {
|
|
|
87
89
|
refresh(): void;
|
|
88
90
|
wait(ms: number): Promise<void>;
|
|
89
91
|
waitUntil(conditionGetter: () => boolean): Promise<void>;
|
|
92
|
+
setVariable<T = any>(key: string, value: T): void;
|
|
93
|
+
getVariable<T = unknown>(key: string): T;
|
|
90
94
|
hovering(sprite: Sprite): boolean;
|
|
91
95
|
keyPressed(key: string): boolean;
|
|
92
96
|
playSound(src: string): HTMLAudioElement;
|
|
@@ -314,8 +318,6 @@ declare class Pen extends Sprite {
|
|
|
314
318
|
constructor(options?: PenOptions);
|
|
315
319
|
}
|
|
316
320
|
|
|
317
|
-
type CanvasTextAlign = 'left' | 'right' | 'center' | 'start' | 'end';
|
|
318
|
-
type CanvasTextBaseline = 'top' | 'hanging' | 'middle' | 'alphabetic' | 'ideographic' | 'bottom';
|
|
319
321
|
interface TextOptions extends SpriteOptions {
|
|
320
322
|
content?: string;
|
|
321
323
|
color?: string;
|
|
@@ -346,6 +348,41 @@ declare class Text extends Sprite {
|
|
|
346
348
|
constructor(options?: TextOptions);
|
|
347
349
|
}
|
|
348
350
|
|
|
351
|
+
interface ButtonOptions extends SpriteOptions {
|
|
352
|
+
content?: string;
|
|
353
|
+
fontColor?: string;
|
|
354
|
+
fontFamily?: string;
|
|
355
|
+
fontSize?: number;
|
|
356
|
+
width?: number;
|
|
357
|
+
height?: number;
|
|
358
|
+
backgroundColor?: string;
|
|
359
|
+
outlineColor?: string;
|
|
360
|
+
outlineWidth?: number;
|
|
361
|
+
}
|
|
362
|
+
declare class Button extends Sprite {
|
|
363
|
+
discriminant: string;
|
|
364
|
+
content: string;
|
|
365
|
+
fontColor: string;
|
|
366
|
+
fontFamily: string;
|
|
367
|
+
fontSize: number;
|
|
368
|
+
private font;
|
|
369
|
+
width: number;
|
|
370
|
+
height: number;
|
|
371
|
+
backgroundColor: string;
|
|
372
|
+
outlineColor: string;
|
|
373
|
+
outlineWidth: number;
|
|
374
|
+
getBoundingBox(): BoundingBox;
|
|
375
|
+
getPath(): Path2D;
|
|
376
|
+
draw(stamping?: boolean): void;
|
|
377
|
+
create(options?: ButtonOptions): this;
|
|
378
|
+
setContent(content: string): void;
|
|
379
|
+
setBackgroundColor(color: string): void;
|
|
380
|
+
setFontColor(color: string): void;
|
|
381
|
+
setFontSize(fontSize: number): void;
|
|
382
|
+
setFontFamily(fontFamily: string): void;
|
|
383
|
+
constructor(options?: ButtonOptions);
|
|
384
|
+
}
|
|
385
|
+
|
|
349
386
|
interface ImageSpriteOptions extends SpriteOptions {
|
|
350
387
|
src?: string;
|
|
351
388
|
width: number;
|
|
@@ -371,6 +408,60 @@ declare class ImageSprite extends Sprite {
|
|
|
371
408
|
constructor(options?: ImageSpriteOptions);
|
|
372
409
|
}
|
|
373
410
|
|
|
411
|
+
type Mat2<T = number> = [
|
|
412
|
+
[
|
|
413
|
+
T,
|
|
414
|
+
T
|
|
415
|
+
],
|
|
416
|
+
[
|
|
417
|
+
T,
|
|
418
|
+
T
|
|
419
|
+
]
|
|
420
|
+
];
|
|
421
|
+
type Mat3<T = number> = [
|
|
422
|
+
[
|
|
423
|
+
T,
|
|
424
|
+
T,
|
|
425
|
+
T
|
|
426
|
+
],
|
|
427
|
+
[
|
|
428
|
+
T,
|
|
429
|
+
T,
|
|
430
|
+
T
|
|
431
|
+
],
|
|
432
|
+
[
|
|
433
|
+
T,
|
|
434
|
+
T,
|
|
435
|
+
T
|
|
436
|
+
]
|
|
437
|
+
];
|
|
438
|
+
type Mat4<T = number> = [
|
|
439
|
+
[
|
|
440
|
+
T,
|
|
441
|
+
T,
|
|
442
|
+
T,
|
|
443
|
+
T
|
|
444
|
+
],
|
|
445
|
+
[
|
|
446
|
+
T,
|
|
447
|
+
T,
|
|
448
|
+
T,
|
|
449
|
+
T
|
|
450
|
+
],
|
|
451
|
+
[
|
|
452
|
+
T,
|
|
453
|
+
T,
|
|
454
|
+
T,
|
|
455
|
+
T
|
|
456
|
+
],
|
|
457
|
+
[
|
|
458
|
+
T,
|
|
459
|
+
T,
|
|
460
|
+
T,
|
|
461
|
+
T
|
|
462
|
+
]
|
|
463
|
+
];
|
|
464
|
+
|
|
374
465
|
declare const TScratch: {
|
|
375
466
|
Engine: typeof Engine;
|
|
376
467
|
Sprite: typeof Sprite;
|
|
@@ -384,6 +475,7 @@ declare const TScratch: {
|
|
|
384
475
|
CustomPolygon: typeof CustomPolygon;
|
|
385
476
|
Pen: typeof Pen;
|
|
386
477
|
Text: typeof Text;
|
|
478
|
+
Button: typeof Button;
|
|
387
479
|
ImageSprite: typeof ImageSprite;
|
|
388
480
|
scale: number;
|
|
389
481
|
aspectRatio: number;
|
|
@@ -393,4 +485,4 @@ declare const TScratch: {
|
|
|
393
485
|
ctx: CanvasRenderingContext2D;
|
|
394
486
|
};
|
|
395
487
|
|
|
396
|
-
export { Arc, type ArcOptions,
|
|
488
|
+
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, Sprite, type SpriteOptions, Square, type SquareOptions, Text, type TextOptions, type Vec2, type Vec3, type Vec4, aspectRatio, canvas, ctx, TScratch as default, scale, setAspectRatio, setScale };
|
package/dist/client/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var s=document.getElementById("game-window")||document.createElement("canvas"),h=s.getContext("2d"),u=document.createElement("canvas"),a=u.getContext("2d");u.id="pen-canvas";var y=16/9,m;function A(){s.width=y*m,s.height=m,u.width=y*m,u.height=m}function Y(n){m=n,A()}function V(n){y=n,A()}s.parentElement?.insertBefore(u,s);Y(500);var l=class n{x=0;y=0;dir=0;scene="main";hidden=!1;layer=0;cachedPath=null;pathDirty=!0;static collisionCanvas=null;static collisionCtx=null;refresh(){d.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),d.init().addSprite(this)}clone(t){return this.create({x:this.x,y:this.y,dir:this.dir,scene:this.scene,layer:this.layer,hidden:this.hidden,...t})}touching(t){if(this.hidden||t.hidden)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 o=i.x-i.width/2,b=i.y+i.height/2,f=i.x+i.width/2,x=i.y-i.height/2,L=e.x-e.width/2,D=e.y+e.height/2,z=e.x+e.width/2,E=e.y-e.height/2,F=Math.max(o,L),X=Math.min(x,E),q=Math.min(f,z),H=Math.max(b,D),g=q-F,p=H-X;if(g<=1||p<=1)return!1;n.collisionCanvas||(n.collisionCanvas=document.createElement("canvas"),n.collisionCtx=n.collisionCanvas.getContext("2d",{willReadFrequently:!0})),(n.collisionCanvas.width<g||n.collisionCanvas.height<p)&&(n.collisionCanvas.width=Math.max(g,n.collisionCanvas.width),n.collisionCanvas.height=Math.max(p,n.collisionCanvas.height));let c=n.collisionCtx;c.clearRect(0,0,g,p),c.save(),c.translate(this.x-F,p-this.y+X),c.rotate(this.toRadians(this.dir)),c.fillStyle="red",c.fill(this.getCachedPath()),c.restore();let I=c.getImageData(0,0,g,p).data;c.clearRect(0,0,g,p),c.save(),c.translate(t.x-F,p-t.y+X),c.rotate(this.toRadians(t.dir)),c.fillStyle="blue",c.fill(t.getCachedPath()),c.restore();let $=c.getImageData(0,0,g,p).data;for(let T=3;T<I.length;T+=4)if(I[T]>0&&$[T]>0)return!0;return!1}toRadians(t){return t*Math.PI/180}toDegrees(t){return t*180/Math.PI}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()}goToLayer(t){this.layer=t,this.refresh()}changeLayer(t){this.layer+=t,this.refresh()}};var d=class n{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;static init(){return this.instance||(this.instance=new n),this.instance}changeScene(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.setMaxFramesPerSecond(this.maxFPS)}setLoop(t,i){if(!this.sceneMap.get(t)){this.sceneMap.set(t,{sprites:[],loop:i}),t===this.currentScene&&this.changeScene(t);return}this.sceneMap.get(t).loop=i,t===this.currentScene&&this.changeScene(t)}pauseLoop(){this.loopRunning=!1,this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null)}resumeLoop(){this.loopRunning=!0,this.setMaxFramesPerSecond(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(o=>o.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 setMaxFramesPerSecond(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,o=async b=>{if(!this.loopRunning)return;let f=b-this.lastFrame;this.lastFrame=b,r+=f,r>=e&&(this.deltaTime=r/1e3,r=r%e,i&&await i()),this.animationFrameId=requestAnimationFrame(o)};this.lastFrame=performance.now(),this.animationFrameId=requestAnimationFrame(o)}refresh(){this.refreshScheduled||(this.refreshScheduled=!0,requestAnimationFrame(()=>{this.refreshScheduled=!1,h.clearRect(0,0,s.width,s.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()})}hovering(t){let{mouseX:i,mouseY:e}=this,r=i+s.width/2,o=s.height/2-e,b=r-(t.x+s.width/2),f=o-(s.height/2-t.y),x=-this.toRadians(t.dir),L=b*Math.cos(x)-f*Math.sin(x),D=b*Math.sin(x)+f*Math.cos(x);return h.isPointInPath(t.getPath(),L,D)}keyPressed(t){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.setMaxFramesPerSecond(24),this.sceneMap.set("main",{loop:null,sprites:[]}),this.sceneMap.set("*",{loop:null,sprites:[]}),u.addEventListener("mousemove",t=>{this.mouseX=t.clientX-u.offsetLeft-u.width/2,this.mouseY=-(t.clientY-u.offsetTop-u.height/2)}),u.addEventListener("mousedown",t=>{this.mouseDown=!0}),u.addEventListener("mouseup",t=>{this.mouseDown=!1}),u.addEventListener("click",t=>{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 G}from"socket.io-client";var w=class n{static instance;socket;static connect(t="http://localhost:3000"){return this.instance||(this.instance=new n(t)),this.instance}disconnect(){this.socket.disconnect()}constructor(t){this.socket=G(t)}broadcast(t,i){this.socket.emit(t,i)}on(t,i){this.socket.on(t,i)}};var v=class n extends l{discriminant="rectangle";width;height;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:Math.hypot(this.width,this.height),height:Math.hypot(this.width,this.height)}}getPath(){let t=new Path2D;return t.rect(-this.width/2,-this.height/2,this.width,this.height),t}draw(t){let i=t?a:h;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir));let o=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(o),this.outlineWidth&&i.stroke(o),i.restore()}create(t){return new n(t)}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 S=class n extends l{discriminant="square";sideLength;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:Math.hypot(this.sideLength,this.sideLength),height:Math.hypot(this.sideLength,this.sideLength)}}getPath(){let t=new Path2D;return t.rect(-this.sideLength/2,-this.sideLength/2,this.sideLength,this.sideLength),t}draw(t){let i=t?a:h;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir));let o=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(o),this.outlineWidth&&i.stroke(o),i.restore()}create(t){return new n(t)}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 C=class n extends l{discriminant="oval";radX;radY;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:Math.hypot(this.radX*2,this.radY*2),height:Math.hypot(this.radX*2,this.radY*2)}}getPath(){let t=new Path2D;return t.ellipse(0,0,this.radX,this.radY,0,0,Math.PI*2),t}draw(t){let i=t?a:h;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir));let o=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(o),this.outlineWidth&&i.stroke(o),i.restore()}create(t){return new n(t)}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 P=class n extends l{discriminant="circle";radius;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:this.radius*2,height:this.radius*2}}getPath(){let t=new Path2D;return t.ellipse(0,0,this.radius,this.radius,0,0,Math.PI*2),t}draw(t){let i=t?a:h;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir));let o=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(o),this.outlineWidth&&i.stroke(o),i.restore()}create(t){return new n(t)}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 B=class n extends l{discriminant="arc";radius;angle;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:this.radius*2,height:this.radius*2}}getPath(){let t=new Path2D;return t.arc(0,0,this.radius,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+s.width/2,r=-this.y+s.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir));let o=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(o),this.outlineWidth&&i.stroke(o),i.restore()}create(t){return new n(t)}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 M=class n extends l{discriminant="regularpolygon";sides;radius;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:this.radius*2,height:this.radius*2}}getPath(){let t=new Path2D,i=2*Math.PI/this.sides;t.moveTo(this.radius,0);for(let e=1;e<this.sides;e++)t.lineTo(this.radius*Math.cos(i*e),this.radius*Math.sin(i*e));return t.closePath(),t}draw(t){let i=t?a:h;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir));let o=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(o),this.outlineWidth&&i.stroke(o),i.restore()}create(t){return new n(t)}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 O=class n extends l{discriminant="custompolygon";vertices;color;outlineColor;outlineWidth;getBoundingBox(){let t=0;for(let i of this.vertices){let e=Math.hypot(i[0],i[1]);e>t&&(t=e)}return{x:this.x,y:this.y,width:t,height:t}}getPath(){let t=new Path2D,i=this.vertices;if(i.length<2)return t;t.moveTo(i[0][0],i[0][1]);for(let e=1;e<i.length;e++)t.lineTo(i[e][0],i[e][1]);return t.closePath(),t}draw(t){let i=t?a:h;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir));let o=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(o),this.outlineWidth&&i.stroke(o),i.restore()}create(t){return new n(t)}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 R=class n extends l{discriminant="pen";drawing;size;color;getBoundingBox(){return{x:this.x,y:this.y,width:this.size,height:this.size}}getPath(){return new Path2D}draw(){}create(t){return new n(t)}up(){this.drawing=!1}down(){this.drawing=!0}stamp(t){t.draw(!0)}eraseAll(){a.clearRect(0,0,s.width,s.height)}dot(){a.fillStyle=this.color,a.fillRect(this.x-this.size/2+s.width/2,-this.y-this.size/2+s.height/2,this.size,this.size)}drawLine(t,i){a.beginPath(),a.moveTo(t+s.width/2,-i+s.height/2),a.lineTo(this.x+s.width/2,-this.y+s.height/2),a.lineWidth=this.size,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,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.size=t?.size??5,this.color=t?.color??"black"}};var k=class n extends l{discriminant="text";content;color;fontFamily;fontSize;align;baseline;font;getBoundingBox(){let t=h.measureText(this.content),i=t.width,e=t.actualBoundingBoxAscent+t.actualBoundingBoxDescent;return{x:this.x,y:this.y,width:i,height:e}}getPath(){let t=new Path2D;h.save(),h.font=this.font;let i=h.measureText(this.content),e=i.width,r=i.actualBoundingBoxAscent+i.actualBoundingBoxDescent;return h.restore(),t.rect(-e/2,-r/2,e,r),t}draw(t){let i=t?a:h;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir)),i.font=this.font,i.fillStyle=this.color,i.textAlign=this.align,i.textBaseline=this.baseline,i.fillText(this.content,0,0),i.restore()}create(t){return new n(t)}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.invalidatePath(),this.refresh()}setBaseline(t){this.baseline=t,this.invalidatePath(),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 W=class n extends l{discriminant="imagesprite";src;width;height;outlineColor;outlineWidth;img;getBoundingBox(){return{x:this.x,y:this.y,width:this.width,height:this.height}}getPath(){let t=new Path2D;return t.rect(-this.width/2,-this.height/2,this.width,this.height),t}draw(t){let i=t?a:h;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),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 n(t)}setSrc(t){this.src=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.src=t?.src??"",this.img=new Image,this.img.src=this.src,this.width=t?.width??this.img.width,this.height=t?.height??this.img.height,this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var j={Engine:d,Sprite:l,Multiplayer:w,Rectangle:v,Square:S,Oval:C,Circle:P,Arc:B,RegularPolygon:M,CustomPolygon:O,Pen:R,Text:k,ImageSprite:W,scale:m,aspectRatio:y,setScale:Y,setAspectRatio:V,canvas:s,ctx:h},Ut=j;export{B as Arc,P as Circle,O as CustomPolygon,d as Engine,W as ImageSprite,w as Multiplayer,C as Oval,R as Pen,v as Rectangle,M as RegularPolygon,l as Sprite,S as Square,k as Text,y as aspectRatio,s as canvas,h as ctx,Ut as default,m as scale,V as setAspectRatio,Y as setScale};
|
|
1
|
+
var s=document.getElementById("game-window")||document.createElement("canvas"),o=s.getContext("2d"),u=document.createElement("canvas"),a=u.getContext("2d");u.id="pen-canvas";var y=16/9,m;function I(){s.width=y*m,s.height=m,u.width=y*m,u.height=m}function z(n){m=n,I()}function V(n){y=n,I()}s.parentElement?.insertBefore(u,s);z(500);var l=class n{x=0;y=0;dir=0;scene="main";hidden=!1;layer=0;cachedPath=null;pathDirty=!0;static collisionCanvas=null;static collisionCtx=null;refresh(){d.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),d.init().addSprite(this)}clone(t){return this.create({x:this.x,y:this.y,dir:this.dir,scene:this.scene,layer:this.layer,hidden:this.hidden,...t})}touching(t){if(this.hidden||t.hidden)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 h=i.x-i.width/2,b=i.y+i.height/2,f=i.x+i.width/2,x=i.y-i.height/2,L=e.x-e.width/2,D=e.y+e.height/2,E=e.x+e.width/2,$=e.y-e.height/2,X=Math.max(h,L),Y=Math.min(x,$),q=Math.min(f,E),H=Math.max(b,D),g=q-X,p=H-Y;if(g<=1||p<=1)return!1;n.collisionCanvas||(n.collisionCanvas=document.createElement("canvas"),n.collisionCtx=n.collisionCanvas.getContext("2d",{willReadFrequently:!0})),(n.collisionCanvas.width<g||n.collisionCanvas.height<p)&&(n.collisionCanvas.width=Math.max(g,n.collisionCanvas.width),n.collisionCanvas.height=Math.max(p,n.collisionCanvas.height));let c=n.collisionCtx;c.clearRect(0,0,g,p),c.save(),c.translate(this.x-X,p-this.y+Y),c.rotate(this.toRadians(this.dir)),c.fillStyle="red",c.fill(this.getCachedPath()),c.restore();let A=c.getImageData(0,0,g,p).data;c.clearRect(0,0,g,p),c.save(),c.translate(t.x-X,p-t.y+Y),c.rotate(this.toRadians(t.dir)),c.fillStyle="blue",c.fill(t.getCachedPath()),c.restore();let G=c.getImageData(0,0,g,p).data;for(let T=3;T<A.length;T+=4)if(A[T]>0&&G[T]>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()}goToLayer(t){this.layer=t,this.refresh()}changeLayer(t){this.layer+=t,this.refresh()}};var d=class n{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 n),this.instance}changeScene(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.setMaxFramesPerSecond(this.maxFPS)}setLoop(t,i){if(!this.sceneMap.get(t)){this.sceneMap.set(t,{sprites:[],loop:i}),t===this.currentScene&&this.changeScene(t);return}this.sceneMap.get(t).loop=i,t===this.currentScene&&this.changeScene(t)}pauseLoop(){this.loopRunning=!1,this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null)}resumeLoop(){this.loopRunning=!0,this.setMaxFramesPerSecond(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(h=>h.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 setMaxFramesPerSecond(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,h=async b=>{if(!this.loopRunning)return;let f=b-this.lastFrame;this.lastFrame=b,r+=f,r>=e&&(this.deltaTime=r/1e3,r=r%e,i&&await i()),this.animationFrameId=requestAnimationFrame(h)};this.lastFrame=performance.now(),this.animationFrameId=requestAnimationFrame(h)}refresh(){this.refreshScheduled||(this.refreshScheduled=!0,requestAnimationFrame(()=>{this.refreshScheduled=!1,o.clearRect(0,0,s.width,s.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+s.width/2,h=s.height/2-e,b=r-(t.x+s.width/2),f=h-(s.height/2-t.y),x=-this.toRadians(t.dir),L=b*Math.cos(x)-f*Math.sin(x),D=b*Math.sin(x)+f*Math.cos(x);return o.isPointInPath(t.getCachedPath(),L,D)}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.setMaxFramesPerSecond(24),this.sceneMap.set("main",{loop:null,sprites:[]}),this.sceneMap.set("*",{loop:null,sprites:[]}),u.addEventListener("mousemove",t=>{this.mouseX=t.clientX-u.offsetLeft-u.width/2,this.mouseY=-(t.clientY-u.offsetTop-u.height/2)}),u.addEventListener("mousedown",()=>{this.mouseDown=!0}),u.addEventListener("mouseup",()=>{this.mouseDown=!1}),u.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 U}from"socket.io-client";var w=class n{static instance;socket;static connect(t="http://localhost:3000"){return this.instance||(this.instance=new n(t)),this.instance}disconnect(){this.socket.disconnect()}constructor(t){this.socket=U(t)}broadcast(t,i){this.socket.emit(t,i)}on(t,i){this.socket.on(t,i)}};var v=class n extends l{discriminant="rectangle";width;height;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:Math.hypot(this.width,this.height),height:Math.hypot(this.width,this.height)}}getPath(){let t=new Path2D;return t.rect(-this.width/2,-this.height/2,this.width,this.height),t}draw(t){let i=t?a:o;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir));let h=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(h),this.outlineWidth&&i.stroke(h),i.restore()}create(t){return new n(t)}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 S=class n extends l{discriminant="square";sideLength;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:Math.hypot(this.sideLength,this.sideLength),height:Math.hypot(this.sideLength,this.sideLength)}}getPath(){let t=new Path2D;return t.rect(-this.sideLength/2,-this.sideLength/2,this.sideLength,this.sideLength),t}draw(t){let i=t?a:o;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir));let h=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(h),this.outlineWidth&&i.stroke(h),i.restore()}create(t){return new n(t)}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 C=class n extends l{discriminant="oval";radX;radY;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:Math.hypot(this.radX*2,this.radY*2),height:Math.hypot(this.radX*2,this.radY*2)}}getPath(){let t=new Path2D;return t.ellipse(0,0,this.radX,this.radY,0,0,Math.PI*2),t}draw(t){let i=t?a:o;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir));let h=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(h),this.outlineWidth&&i.stroke(h),i.restore()}create(t){return new n(t)}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 P=class n extends l{discriminant="circle";radius;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:this.radius*2,height:this.radius*2}}getPath(){let t=new Path2D;return t.ellipse(0,0,this.radius,this.radius,0,0,Math.PI*2),t}draw(t){let i=t?a:o;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir));let h=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(h),this.outlineWidth&&i.stroke(h),i.restore()}create(t){return new n(t)}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 B=class n extends l{discriminant="arc";radius;angle;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:this.radius*2,height:this.radius*2}}getPath(){let t=new Path2D;return t.arc(0,0,this.radius,this.toRadians(this.angle/2-90),this.toRadians(-this.angle/2-90)),t}draw(t){let i=t?a:o;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir));let h=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(h),this.outlineWidth&&i.stroke(h),i.restore()}create(t){return new n(t)}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 M=class n extends l{discriminant="regularpolygon";sides;radius;color;outlineColor;outlineWidth;getBoundingBox(){return{x:this.x,y:this.y,width:this.radius*2,height:this.radius*2}}getPath(){let t=new Path2D,i=2*Math.PI/this.sides;t.moveTo(this.radius,0);for(let e=1;e<this.sides;e++)t.lineTo(this.radius*Math.cos(i*e),this.radius*Math.sin(i*e));return t.closePath(),t}draw(t){let i=t?a:o;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir));let h=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(h),this.outlineWidth&&i.stroke(h),i.restore()}create(t){return new n(t)}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 O=class n extends l{discriminant="custompolygon";vertices;color;outlineColor;outlineWidth;getBoundingBox(){let t=0;for(let i of this.vertices){let e=Math.hypot(i[0],i[1]);e>t&&(t=e)}return{x:this.x,y:this.y,width:t,height:t}}getPath(){let t=new Path2D,i=this.vertices;if(i.length<2)return t;t.moveTo(i[0][0],i[0][1]);for(let e=1;e<i.length;e++)t.lineTo(i[e][0],i[e][1]);return t.closePath(),t}draw(t){let i=t?a:o;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir));let h=this.getCachedPath();i.fillStyle=this.color,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth,i.fill(h),this.outlineWidth&&i.stroke(h),i.restore()}create(t){return new n(t)}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 n extends l{discriminant="pen";drawing;size;color;getBoundingBox(){return{x:this.x,y:this.y,width:this.size,height:this.size}}getPath(){return new Path2D}draw(){}create(t){return new n(t)}up(){this.drawing=!1}down(){this.drawing=!0}stamp(t){t.draw(!0)}eraseAll(){a.clearRect(0,0,s.width,s.height)}dot(){a.fillStyle=this.color,a.fillRect(this.x-this.size/2+s.width/2,-this.y-this.size/2+s.height/2,this.size,this.size)}drawLine(t,i){a.beginPath(),a.moveTo(t+s.width/2,-i+s.height/2),a.lineTo(this.x+s.width/2,-this.y+s.height/2),a.lineWidth=this.size,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,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.size=t?.size??5,this.color=t?.color??"black"}};var W=class n extends l{discriminant="text";content;color;fontFamily;fontSize;align;baseline;font;getBoundingBox(){let t=o.measureText(this.content),i=t.width,e=t.actualBoundingBoxAscent+t.actualBoundingBoxDescent;return{x:this.x,y:this.y,width:i,height:e}}getPath(){let t=new Path2D;o.save(),o.font=this.font;let i=o.measureText(this.content),e=i.width,r=i.actualBoundingBoxAscent+i.actualBoundingBoxDescent;return o.restore(),t.rect(-e/2,-r/2,e,r),t}draw(t){let i=t?a:o;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir)),i.font=this.font,i.fillStyle=this.color,i.textAlign=this.align,i.textBaseline=this.baseline,i.fillText(this.content,0,0),i.restore()}create(t){return new n(t)}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.invalidatePath(),this.refresh()}setBaseline(t){this.baseline=t,this.invalidatePath(),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 R=class n extends l{discriminant="button";content;fontColor;fontFamily;fontSize;font;width;height;backgroundColor;outlineColor;outlineWidth;getBoundingBox(){o.save(),o.font=this.font;let t=o.measureText(this.content),i=Math.max(t.width,this.width),e=Math.max(t.actualBoundingBoxAscent+t.actualBoundingBoxDescent,this.width);return o.restore(),{x:this.x,y:this.y,width:Math.hypot(i,e),height:Math.hypot(i,e)}}getPath(){let t=new Path2D;return t.rect(-this.width/2,-this.height/2,this.width,this.height),t}draw(t){let i=t?a:o;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),i.rotate(this.toRadians(this.dir)),i.fillStyle=this.backgroundColor,i.strokeStyle=this.outlineColor,i.lineWidth=this.outlineWidth;let h=this.getCachedPath();i.fill(h),this.outlineWidth&&i.stroke(h),i.font=this.font,i.fillStyle=this.fontColor,i.textAlign="center",i.textBaseline="middle",i.fillText(this.content,0,0),i.restore()}create(t){return new n(t)}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??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 F=class n extends l{discriminant="imagesprite";src;width;height;outlineColor;outlineWidth;img;getBoundingBox(){return{x:this.x,y:this.y,width:this.width,height:this.height}}getPath(){let t=new Path2D;return t.rect(-this.width/2,-this.height/2,this.width,this.height),t}draw(t){let i=t?a:o;i.save();let e=this.x+s.width/2,r=-this.y+s.height/2;i.translate(e,r),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 n(t)}setSrc(t){this.src=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.src=t?.src??"",this.img=new Image,this.img.src=this.src,this.width=t?.width??this.img.width,this.height=t?.height??this.img.height,this.outlineColor=t?.outlineColor??"black",this.outlineWidth=t?.outlineWidth??0,this.draw()}};var j={Engine:d,Sprite:l,Multiplayer:w,Rectangle:v,Square:S,Oval:C,Circle:P,Arc:B,RegularPolygon:M,CustomPolygon:O,Pen:k,Text:W,Button:R,ImageSprite:F,scale:m,aspectRatio:y,setScale:z,setAspectRatio:V,canvas:s,ctx:o},Zt=j;export{B as Arc,R as Button,P as Circle,O as CustomPolygon,d as Engine,F as ImageSprite,w as Multiplayer,C as Oval,k as Pen,v as Rectangle,M as RegularPolygon,l as Sprite,S as Square,W as Text,y as aspectRatio,s as canvas,o as ctx,Zt as default,m as scale,V as setAspectRatio,z as setScale};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|