tscratch 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -31,8 +31,6 @@ const engine = Engine.init();
31
31
 
32
32
  // Create a rectangle sprite
33
33
  const rect = new Rectangle();
34
- // Add it to the engine
35
- engine.addSprites(rect);
36
34
 
37
35
  // Move it to the center
38
36
  rect.goTo(0, 0);
@@ -50,13 +48,11 @@ import { Engine, Rectangle } from 'tscratch';
50
48
  const engine = Engine.init();
51
49
 
52
50
  const redBox = new Rectangle();
53
- engine.addSprite(redBox);
54
51
 
55
52
  redBox.setColor('red');
56
53
  redBox.goTo(-100, 0);
57
54
 
58
55
  const blueBox = new Rectangle();
59
- engine.addSprite(blueBox);
60
56
 
61
57
  blueBox.setColor('blue');
62
58
  blueBox.goTo(100, 0);
@@ -72,13 +68,13 @@ engine.loop = () => {
72
68
  ### Engine
73
69
 
74
70
  - `Engine.init()` → get the singleton instance
75
- - `engine.addSprites(...sprites)` → add sprites to the stage
76
71
  - `engine.removeSprites(...sprites)` → removes sprites from the stage
77
- - `engine.setFramesPerSecond(FPS)`→ sets the update time
72
+ - `engine.setMaxFramesPerSecond(FPS)`→ sets the maximum FPS
78
73
  - `engine.loop = () => { ... }` → game loop logic
79
74
  - `engine.refresh()` → redraw all sprites
80
- - `engine.toRadians` → converts degrees to radians
81
- - `engine.toDegrees` → converts radians to degrees
75
+ - `await engine.wait(ms)` → Wait some time (miliseconds)
76
+ - `engine.toRadians(rad)` → converts degrees to radians
77
+ - `engine.toDegrees(deg)` → converts radians to degrees
82
78
 
83
79
  ### Sprite (abstract)
84
80
 
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var b=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var P=(i,t)=>{for(var s in t)b(i,s,{get:t[s],enumerable:!0})},R=(i,t,s,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let h of w(t))!O.call(i,h)&&h!==s&&b(i,h,{get:()=>t[h],enumerable:!(a=v(t,h))||a.enumerable});return i};var M=i=>R(b({},"__esModule",{value:!0}),i);var F={};P(F,{Engine:()=>o,Oval:()=>p,Rectangle:()=>c,RegularPolygon:()=>l,Sprite:()=>n,canvas:()=>r,ctx:()=>e,default:()=>A,setAspectRatio:()=>x,setScale:()=>m});module.exports=M(F);var r=document.getElementById("game-window"),e=r.getContext("2d"),f=16/9,u;function m(i){u=i,r.width=f*u,r.height=u}function x(i){f=i,r.width=f*u,r.height=u}m(500);var n=class{x;y;dir;refresh(){o.init().refresh()}constructor(t){this.x=t?.x??0,this.y=t?.y??0,this.dir=t?.dir??90}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()}setX(t){this.x=t,this.refresh()}setY(t){this.y=t,this.refresh()}goTo(t,s){this.x=t,this.y=s,this.refresh()}changeX(t){this.x+=t,this.refresh()}changeY(t){this.y-=t,this.refresh()}async wait(t){return new Promise(s=>setTimeout(s,t))}};var o=class i{static instance;updateInterval;loop=()=>{};maxFPS=24;lastFrame=performance.now();deltaTime=1/this.maxFPS;sprites=[];static init(){return this.instance||(this.instance=new i),this.instance}addSprites(...t){this.sprites.push(...t)}removeSprites(...t){this.sprites=this.sprites.filter(s=>!t.includes(s))}setMaxFramesPerSecond(t){this.maxFPS=t,clearInterval(this.updateInterval),this.updateInterval=setInterval(()=>{let s=performance.now(),a=(s-this.lastFrame)/1e3;this.lastFrame=s,this.deltaTime=a,this.loop()},1e3/this.maxFPS)}refresh(){e.clearRect(0,0,r.width,r.height),this.sprites.forEach(t=>t.draw())}toRadians(t){return t*Math.PI/180}toDegrees(t){return t*180/Math.PI}constructor(){this.setMaxFramesPerSecond(24)}};var c=class extends n{width;height;color;draw(){e.fillStyle=this.color,e.fillRect(this.x-this.width/2+r.width/2,this.y-this.height/2+r.height/2,this.width,this.height)}setWidth(t){this.width=t,this.refresh()}setHeight(t){this.height=t,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.draw()}};var p=class extends n{radA;radB;color;draw(){e.fillStyle=this.color,e.beginPath(),e.ellipse(this.x,this.y,this.radA,this.radB,this.toRadians(this.dir),0,Math.PI*2),e.fill()}setRadA(t){this.radA=t,this.refresh()}setRadB(t){this.radB=t,this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.radA=t?.radA??25,this.radB=t?.radB??25,this.color=t?.color??"black",this.draw()}};var l=class extends n{sides;radius;color;draw(){let t=this.radius,s=Math.PI*2/this.sides,a=r.width/2,h=r.height/2;e.beginPath();for(let d=0;d<this.sides;d++){let g=d*s-Math.PI/2,y=a+this.x+t*Math.cos(g),S=h+this.y+t*Math.sin(g);d===0?e.moveTo(y,S):e.lineTo(y,S)}e.closePath(),e.fillStyle=this.color,e.fill()}setRadius(t){this.radius=t,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.draw()}};var I={Engine:o,Sprite:n,Rectangle:c,Oval:p,RegularPolygon:l,setScale:m,setAspectRatio:x,canvas:r,ctx:e},A=I;0&&(module.exports={Engine,Oval,Rectangle,RegularPolygon,Sprite,canvas,ctx,setAspectRatio,setScale});
1
+ "use strict";var f=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var R=Object.prototype.hasOwnProperty;var M=(r,t)=>{for(var e in t)f(r,e,{get:t[e],enumerable:!0})},I=(r,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of P(t))!R.call(r,o)&&o!==e&&f(r,o,{get:()=>t[o],enumerable:!(n=O(t,o))||n.enumerable});return r};var T=r=>I(f({},"__esModule",{value:!0}),r);var z={};M(z,{Engine:()=>a,Oval:()=>l,Pen:()=>u,Rectangle:()=>c,RegularPolygon:()=>p,Sprite:()=>h,canvas:()=>s,ctx:()=>i,default:()=>Y,setAspectRatio:()=>x,setScale:()=>m});module.exports=T(z);var s=document.getElementById("game-window"),i=s.getContext("2d"),g=16/9,d;function m(r){d=r,s.width=g*d,s.height=d}function x(r){g=r,s.width=g*d,s.height=d}m(500);var h=class{x;y;dir;refresh(){a.init().refresh()}constructor(t){this.x=t?.x??0,this.y=t?.y??0,this.dir=t?.dir??90,a.init().addSprites(this)}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()}setX(t){this.x=t,this.refresh()}setY(t){this.y=t,this.refresh()}goTo(t,e){this.x=t,this.y=e,this.refresh()}changeX(t){this.x+=t,this.refresh()}changeY(t){this.y-=t,this.refresh()}};var a=class r{static instance;updateInterval;loop=()=>{};maxFPS=24;lastFrame=performance.now();deltaTime=1/this.maxFPS;sprites=[];static init(){return this.instance||(this.instance=new r),this.instance}addSprites(...t){this.sprites.push(...t)}removeSprites(...t){this.sprites=this.sprites.filter(e=>!t.includes(e))}setMaxFramesPerSecond(t){this.maxFPS=t,clearInterval(this.updateInterval),this.updateInterval=setInterval(()=>{let e=performance.now(),n=(e-this.lastFrame)/1e3;this.lastFrame=e,this.deltaTime=n,this.loop()},1e3/this.maxFPS)}refresh(){i.clearRect(0,0,s.width,s.height),this.sprites.forEach(t=>t.draw())}async wait(t){return new Promise(e=>setTimeout(e,t))}toRadians(t){return t*Math.PI/180}toDegrees(t){return t*180/Math.PI}constructor(){this.setMaxFramesPerSecond(24)}};var c=class extends h{width;height;color;draw(){i.save();let t=this.x+s.width/2,e=this.y+s.height/2;i.translate(t,e),i.rotate(this.toRadians(this.dir)),i.fillStyle=this.color,i.fillRect(-this.width/2,-this.height/2,this.width,this.height),i.restore()}setWidth(t){this.width=t,this.refresh()}setHeight(t){this.height=t,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.draw()}};var l=class extends h{radA;radB;color;draw(){let t=this.toRadians(this.dir);i.beginPath(),i.ellipse(this.x,this.y,this.radA,this.radB,t,0,Math.PI*2),i.fillStyle=this.color,i.fill()}setRadA(t){this.radA=t,this.refresh()}setRadB(t){this.radB=t,this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.radA=t?.radA??25,this.radB=t?.radB??25,this.color=t?.color??"black",this.draw()}};var p=class extends h{sides;radius;color;draw(){let t=this.radius,e=Math.PI*2/this.sides,n=s.width/2,o=s.height/2,S=this.toRadians(this.dir);i.beginPath();for(let b=0;b<this.sides;b++){let w=b*e-Math.PI/2+S,y=n+this.x+t*Math.cos(w),v=o+this.y+t*Math.sin(w);b===0?i.moveTo(y,v):i.lineTo(y,v)}i.closePath(),i.fillStyle=this.color,i.fill()}setRadius(t){this.radius=t,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.draw()}};var u=class extends h{drawing;size;color;draw(){}up(){this.drawing=!1}down(){this.drawing=!0}dot(){i.fillStyle=this.color,i.fillRect(this.x-this.size/2+s.width/2,this.y-this.size/2+s.height/2,this.size,this.size)}drawLine(t,e){i.beginPath(),i.moveTo(t,e),i.lineTo(this.x+s.width/2,this.y+s.height/2),i.lineWidth=this.size,i.strokeStyle=this.color,i.stroke()}move(t){let e=this.x,n=this.y;this.x+=t*Math.sin(this.toRadians(this.dir)),this.y-=t*Math.cos(this.toRadians(this.dir)),this.drawing&&this.drawLine(e,n),this.refresh()}setX(t){let e=this.x,n=this.y;this.x=t,this.drawing&&this.drawLine(e,n),this.refresh()}setY(t){let e=this.x,n=this.y;this.y=t,this.drawing&&this.drawLine(e,n),this.refresh()}goTo(t,e){let n=this.x,o=this.y;this.x=t,this.y=e,this.drawing&&this.drawLine(n,o),this.refresh()}changeX(t){let e=this.x,n=this.y;this.x+=t,this.drawing&&this.drawLine(e,n),this.refresh()}changeY(t){let e=this.x,n=this.y;this.y-=t,this.drawing&&this.drawLine(e,n),this.refresh()}constructor(t){super(t),this.drawing=t?.drawing??!1,this.size=t?.size??5,this.color=t?.color??"black"}};var X={Engine:a,Sprite:h,Rectangle:c,Oval:l,RegularPolygon:p,Pen:u,setScale:m,setAspectRatio:x,canvas:s,ctx:i},Y=X;0&&(module.exports={Engine,Oval,Pen,Rectangle,RegularPolygon,Sprite,canvas,ctx,setAspectRatio,setScale});
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/canvas.ts","../src/Sprite.ts","../src/Engine.ts","../src/Rectangle.ts","../src/Oval.ts","../src/RegularPolygon.ts"],"sourcesContent":["import Engine from './Engine.ts';\r\nimport Sprite, { type SpriteOptions } from './Sprite.ts';\r\nimport Rectangle, { type RectangleOptions } from './Rectangle.ts';\r\nimport Oval, { type OvalOptions } from './Oval.ts';\r\nimport RegularPolygon, { type RegularPolygonOptions } from './RegularPolygon.ts';\r\nimport { setScale, setAspectRatio, canvas, ctx } from './canvas.ts';\r\n\r\nconst TScratch = {\r\n // Main\r\n Engine,\r\n Sprite,\r\n\r\n // Sprites\r\n Rectangle,\r\n Oval,\r\n RegularPolygon,\r\n\r\n // Canvas\r\n setScale,\r\n setAspectRatio,\r\n canvas,\r\n ctx\r\n};\r\n\r\nexport default TScratch;\r\nexport {\r\n // Main\r\n Engine,\r\n Sprite,\r\n\r\n // Sprites\r\n Rectangle,\r\n Oval,\r\n RegularPolygon,\r\n\r\n // Options\r\n type SpriteOptions,\r\n type RectangleOptions,\r\n type OvalOptions,\r\n type RegularPolygonOptions,\r\n \r\n // Canvas\r\n setScale,\r\n setAspectRatio,\r\n canvas,\r\n ctx\r\n};","export const canvas = document.getElementById('game-window') as HTMLCanvasElement;\r\nexport const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\r\n\r\nlet ratio: number = 16 / 9;\r\nlet scale: number;\r\n\r\nexport function setScale(newScale: number) {\r\n scale = newScale;\r\n canvas.width = ratio * scale;\r\n canvas.height = scale;\r\n}\r\n\r\nexport function setAspectRatio(newAspectRatio: number) {\r\n ratio = newAspectRatio;\r\n canvas.width = ratio * scale;\r\n canvas.height = scale;\r\n}\r\n\r\nsetScale(500);","import Engine from './Engine.ts';\r\n\r\nexport interface SpriteOptions {\r\n x?: number;\r\n y?: number;\r\n dir?: number;\r\n};\r\n\r\nexport default abstract class Sprite {\r\n\r\n public x: number;\r\n public y: number;\r\n public dir: number;\r\n\r\n // Rendering\r\n\r\n public abstract draw(): void;\r\n\r\n protected refresh() {\r\n Engine.init().refresh();\r\n }\r\n\r\n constructor(options?: SpriteOptions) {\r\n this.x = options?.x ?? 0;\r\n this.y = options?.y ?? 0;\r\n this.dir = options?.dir ?? 90;\r\n }\r\n\r\n // Helpers\r\n\r\n protected toRadians(deg: number) {\r\n return deg * Math.PI / 180;\r\n }\r\n\r\n protected toDegrees(rad: number) {\r\n return rad * 180 / Math.PI;\r\n }\r\n\r\n // Methods\r\n\r\n // Motion\r\n public move(steps: number) {\r\n this.x += steps * Math.sin(this.toRadians(this.dir));\r\n this.y -= steps * Math.cos(this.toRadians(this.dir));\r\n this.refresh();\r\n }\r\n\r\n public turn(deg: number) {\r\n this.dir += deg;\r\n this.refresh();\r\n }\r\n\r\n public point(dir: number) {\r\n this.dir = dir;\r\n this.refresh();\r\n }\r\n\r\n public setX(x: number) {\r\n this.x = x;\r\n this.refresh();\r\n }\r\n\r\n public setY(y: number) {\r\n this.y = y;\r\n this.refresh();\r\n }\r\n\r\n public goTo(x: number, y: number) {\r\n this.x = x;\r\n this.y = y;\r\n this.refresh();\r\n }\r\n\r\n public changeX(dX: number) {\r\n this.x += dX;\r\n this.refresh();\r\n }\r\n\r\n public changeY(dY: number) {\r\n this.y -= dY;\r\n this.refresh();\r\n }\r\n\r\n // Control\r\n public async wait(ms: number): Promise<void> {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n}","import { canvas, ctx } from './canvas.ts';\r\nimport Sprite from './Sprite.ts';\r\n\r\nexport default class Engine {\r\n\r\n private static instance: Engine;\r\n\r\n private updateInterval: number | undefined;\r\n public loop: () => void = () => {};\r\n public maxFPS: number = 24;\r\n\r\n private lastFrame: number = performance.now();\r\n public deltaTime: number = 1 / this.maxFPS;\r\n\r\n public sprites: Sprite[] = [];\r\n\r\n public static init() {\r\n if (!this.instance) {\r\n this.instance = new Engine();\r\n }\r\n return this.instance;\r\n }\r\n\r\n public addSprites(...sprites: Sprite[]) {\r\n this.sprites.push(...sprites);\r\n }\r\n\r\n public removeSprites(...sprites: Sprite[]) {\r\n this.sprites = this.sprites.filter(s => !sprites.includes(s));\r\n }\r\n\r\n public setMaxFramesPerSecond(maxFPS: number) {\r\n this.maxFPS = maxFPS;\r\n clearInterval(this.updateInterval);\r\n this.updateInterval = setInterval(() => {\r\n \r\n const now = performance.now();\r\n const deltaTime = (now - this.lastFrame) / 1000;\r\n this.lastFrame = now;\r\n this.deltaTime = deltaTime;\r\n\r\n this.loop();\r\n }, 1000 / this.maxFPS);\r\n }\r\n\r\n public refresh() {\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n this.sprites.forEach(sprite => sprite.draw());\r\n }\r\n\r\n // Helpers\r\n\r\n public toRadians(deg: number) {\r\n return deg * Math.PI / 180;\r\n }\r\n\r\n public toDegrees(rad: number) {\r\n return rad * 180 / Math.PI;\r\n }\r\n\r\n // Private constructor\r\n\r\n private constructor() {\r\n this.setMaxFramesPerSecond(24);\r\n }\r\n\r\n}","import Sprite, { type SpriteOptions } from './Sprite.ts';\r\nimport { ctx, canvas } from './canvas.ts';\r\n\r\nexport interface RectangleOptions extends SpriteOptions {\r\n width?: number;\r\n height?: number;\r\n color?: string;\r\n};\r\n\r\nexport default class Rectangle extends Sprite {\r\n\r\n public width: number;\r\n public height: number;\r\n public color: string;\r\n\r\n public draw(): void {\r\n ctx.fillStyle = this.color;\r\n ctx.fillRect(\r\n this.x - this.width / 2 + canvas.width / 2,\r\n this.y - this.height / 2 + canvas.height / 2,\r\n this.width,\r\n this.height\r\n );\r\n }\r\n\r\n public setWidth(width: number) {\r\n this.width = width;\r\n this.refresh();\r\n }\r\n\r\n public setHeight(height: number) {\r\n this.height = height;\r\n this.refresh();\r\n }\r\n\r\n public setColor(color: string) {\r\n this.color = color;\r\n this.refresh();\r\n }\r\n\r\n constructor(options?: RectangleOptions) {\r\n super(options);\r\n this.width = options?.width ?? 50;\r\n this.height = options?.height ?? 50;\r\n this.color = options?.color ?? 'black';\r\n this.draw();\r\n }\r\n\r\n}","import Sprite, { type SpriteOptions } from './Sprite.ts';\r\nimport { ctx } from './canvas.ts';\r\n\r\nexport interface OvalOptions extends SpriteOptions {\r\n radA?: number;\r\n radB?: number;\r\n color?: string;\r\n};\r\n\r\nexport default class Oval extends Sprite {\r\n\r\n public radA: number;\r\n public radB: number;\r\n public color: string;\r\n\r\n public draw(): void {\r\n ctx.fillStyle = this.color;\r\n ctx.beginPath()\r\n ctx.ellipse(this.x, this.y, this.radA, this.radB, this.toRadians(this.dir), 0, Math.PI * 2);\r\n ctx.fill();\r\n }\r\n\r\n public setRadA(radA: number) {\r\n this.radA = radA;\r\n this.refresh();\r\n }\r\n\r\n public setRadB(radB: number) {\r\n this.radB = radB;\r\n this.refresh();\r\n }\r\n\r\n public setColor(color: string) {\r\n this.color = color;\r\n this.refresh();\r\n }\r\n\r\n constructor(options?: OvalOptions) {\r\n super(options);\r\n this.radA = options?.radA ?? 25;\r\n this.radB = options?.radB ?? 25;\r\n this.color = options?.color ?? 'black';\r\n this.draw();\r\n }\r\n\r\n}","import { canvas, ctx } from './canvas.ts';\r\nimport Sprite, { type SpriteOptions } from './Sprite.ts';\r\n\r\nexport interface RegularPolygonOptions extends SpriteOptions {\r\n sides?: number;\r\n radius?: number;\r\n color?: string;\r\n}\r\n\r\nexport default class RegularPolygon extends Sprite {\r\n\r\n public sides: number;\r\n public radius: number;\r\n public color: string;\r\n\r\n public draw() {\r\n const r = this.radius;\r\n const step = (Math.PI * 2) / this.sides;\r\n const cx = canvas.width / 2;\r\n const cy = canvas.height / 2;\r\n\r\n ctx.beginPath();\r\n for (let i = 0; i < this.sides; i++) {\r\n const theta = i * step - Math.PI / 2;\r\n const px = cx + this.x + r * Math.cos(theta);\r\n const py = cy + this.y + r * Math.sin(theta);\r\n\r\n if (i === 0) ctx.moveTo(px, py);\r\n else ctx.lineTo(px, py);\r\n }\r\n ctx.closePath();\r\n\r\n ctx.fillStyle = this.color;\r\n ctx.fill();\r\n }\r\n\r\n public setRadius(radius: number) {\r\n this.radius = radius;\r\n this.refresh();\r\n }\r\n\r\n public setColor(color: string) {\r\n this.color = color;\r\n this.refresh();\r\n }\r\n\r\n constructor(options?: RegularPolygonOptions) {\r\n super(options);\r\n this.sides = options?.sides ?? 5;\r\n this.radius = options?.radius ?? 50;\r\n this.color = options?.color ?? 'black';\r\n this.draw();\r\n }\r\n\r\n}"],"mappings":"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","names":["index_exports","__export","Engine","Oval","Rectangle","RegularPolygon","Sprite","canvas","ctx","index_default","setAspectRatio","setScale","__toCommonJS","canvas","ctx","ratio","scale","setScale","newScale","setAspectRatio","newAspectRatio","Sprite","Engine","options","deg","rad","steps","dir","x","y","dX","dY","ms","resolve","Engine","_Engine","sprites","maxFPS","now","deltaTime","ctx","canvas","sprite","deg","rad","Rectangle","Sprite","ctx","canvas","width","height","color","options","Oval","Sprite","ctx","radA","radB","color","options","RegularPolygon","Sprite","r","step","cx","canvas","cy","ctx","i","theta","px","py","radius","color","options","TScratch","Engine","Sprite","Rectangle","Oval","RegularPolygon","setScale","setAspectRatio","canvas","ctx","index_default"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/canvas.ts","../src/Sprite.ts","../src/Engine.ts","../src/Rectangle.ts","../src/Oval.ts","../src/RegularPolygon.ts","../src/Pen.ts"],"sourcesContent":["import Engine from './Engine.ts';\r\n\r\nimport Sprite, { type SpriteOptions } from './Sprite.ts';\r\nimport Rectangle, { type RectangleOptions } from './Rectangle.ts';\r\nimport Oval, { type OvalOptions } from './Oval.ts';\r\nimport RegularPolygon, { type RegularPolygonOptions } from './RegularPolygon.ts';\r\nimport Pen, { type PenOptions } from './Pen.ts';\r\n\r\nimport { setScale, setAspectRatio, canvas, ctx } from './canvas.ts';\r\n\r\nconst TScratch = {\r\n // Main\r\n Engine,\r\n Sprite,\r\n\r\n // Sprites\r\n Rectangle,\r\n Oval,\r\n RegularPolygon,\r\n Pen,\r\n\r\n // Canvas\r\n setScale,\r\n setAspectRatio,\r\n canvas,\r\n ctx\r\n};\r\n\r\nexport default TScratch;\r\nexport {\r\n // Main\r\n Engine,\r\n Sprite,\r\n\r\n // Sprites\r\n Rectangle,\r\n Oval,\r\n RegularPolygon,\r\n Pen,\r\n\r\n // Options\r\n type SpriteOptions,\r\n type RectangleOptions,\r\n type OvalOptions,\r\n type RegularPolygonOptions,\r\n type PenOptions,\r\n \r\n // Canvas\r\n setScale,\r\n setAspectRatio,\r\n canvas,\r\n ctx\r\n};","export const canvas = document.getElementById('game-window') as HTMLCanvasElement;\r\nexport const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\r\n\r\nlet ratio: number = 16 / 9;\r\nlet scale: number;\r\n\r\nexport function setScale(newScale: number) {\r\n scale = newScale;\r\n canvas.width = ratio * scale;\r\n canvas.height = scale;\r\n}\r\n\r\nexport function setAspectRatio(newAspectRatio: number) {\r\n ratio = newAspectRatio;\r\n canvas.width = ratio * scale;\r\n canvas.height = scale;\r\n}\r\n\r\nsetScale(500);","import Engine from './Engine.ts';\r\n\r\nexport interface SpriteOptions {\r\n x?: number;\r\n y?: number;\r\n dir?: number;\r\n};\r\n\r\nexport default abstract class Sprite {\r\n\r\n public x: number;\r\n public y: number;\r\n public dir: number;\r\n\r\n // Rendering\r\n\r\n public abstract draw(): void;\r\n\r\n protected refresh() {\r\n Engine.init().refresh();\r\n }\r\n\r\n constructor(options?: SpriteOptions) {\r\n this.x = options?.x ?? 0;\r\n this.y = options?.y ?? 0;\r\n this.dir = options?.dir ?? 90;\r\n Engine.init().addSprites(this);\r\n }\r\n\r\n // Helpers\r\n\r\n protected toRadians(deg: number) {\r\n return deg * Math.PI / 180;\r\n }\r\n\r\n protected toDegrees(rad: number) {\r\n return rad * 180 / Math.PI;\r\n }\r\n\r\n // Methods\r\n\r\n // Motion\r\n public move(steps: number) {\r\n this.x += steps * Math.sin(this.toRadians(this.dir));\r\n this.y -= steps * Math.cos(this.toRadians(this.dir));\r\n this.refresh();\r\n }\r\n\r\n public turn(deg: number) {\r\n this.dir += deg;\r\n this.refresh();\r\n }\r\n\r\n public point(dir: number) {\r\n this.dir = dir;\r\n this.refresh();\r\n }\r\n\r\n public setX(x: number) {\r\n this.x = x;\r\n this.refresh();\r\n }\r\n\r\n public setY(y: number) {\r\n this.y = y;\r\n this.refresh();\r\n }\r\n\r\n public goTo(x: number, y: number) {\r\n this.x = x;\r\n this.y = y;\r\n this.refresh();\r\n }\r\n\r\n public changeX(dX: number) {\r\n this.x += dX;\r\n this.refresh();\r\n }\r\n\r\n public changeY(dY: number) {\r\n this.y -= dY;\r\n this.refresh();\r\n }\r\n}","import { canvas, ctx } from './canvas.ts';\r\nimport Sprite from './Sprite.ts';\r\n\r\nexport default class Engine {\r\n\r\n private static instance: Engine;\r\n\r\n private updateInterval: number | undefined;\r\n public loop: () => (void | Promise<void>) = () => {};\r\n public maxFPS: number = 24;\r\n\r\n private lastFrame: number = performance.now();\r\n public deltaTime: number = 1 / this.maxFPS;\r\n\r\n public sprites: Sprite[] = [];\r\n\r\n public static init() {\r\n if (!this.instance) {\r\n this.instance = new Engine();\r\n }\r\n return this.instance;\r\n }\r\n\r\n public addSprites(...sprites: Sprite[]) {\r\n this.sprites.push(...sprites);\r\n }\r\n\r\n public removeSprites(...sprites: Sprite[]) {\r\n this.sprites = this.sprites.filter(s => !sprites.includes(s));\r\n }\r\n\r\n public setMaxFramesPerSecond(maxFPS: number) {\r\n this.maxFPS = maxFPS;\r\n clearInterval(this.updateInterval);\r\n this.updateInterval = setInterval(() => {\r\n \r\n const now = performance.now();\r\n const deltaTime = (now - this.lastFrame) / 1000;\r\n this.lastFrame = now;\r\n this.deltaTime = deltaTime;\r\n\r\n this.loop();\r\n }, 1000 / this.maxFPS);\r\n }\r\n\r\n public refresh() {\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n this.sprites.forEach(sprite => sprite.draw());\r\n }\r\n\r\n public async wait(ms: number): Promise<void> {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n // Helpers\r\n\r\n public toRadians(deg: number) {\r\n return deg * Math.PI / 180;\r\n }\r\n\r\n public toDegrees(rad: number) {\r\n return rad * 180 / Math.PI;\r\n }\r\n\r\n // Private constructor\r\n\r\n private constructor() {\r\n this.setMaxFramesPerSecond(24);\r\n }\r\n\r\n}","import Sprite, { type SpriteOptions } from './Sprite.ts';\r\nimport { ctx, canvas } from './canvas.ts';\r\n\r\nexport interface RectangleOptions extends SpriteOptions {\r\n width?: number;\r\n height?: number;\r\n color?: string;\r\n};\r\n\r\nexport default class Rectangle extends Sprite {\r\n\r\n public width: number;\r\n public height: number;\r\n public color: string;\r\n\r\n public draw(): void {\r\n ctx.save()\r\n\r\n const cX = this.x + canvas.width / 2;\r\n const cY = this.y + canvas.height / 2;\r\n ctx.translate(cX, cY);\r\n\r\n ctx.rotate(this.toRadians(this.dir));\r\n\r\n ctx.fillStyle = this.color;\r\n ctx.fillRect(-this.width / 2, -this.height / 2, this.width, this.height);\r\n\r\n ctx.restore();\r\n }\r\n\r\n public setWidth(width: number) {\r\n this.width = width;\r\n this.refresh();\r\n }\r\n\r\n public setHeight(height: number) {\r\n this.height = height;\r\n this.refresh();\r\n }\r\n\r\n public setColor(color: string) {\r\n this.color = color;\r\n this.refresh();\r\n }\r\n\r\n constructor(options?: RectangleOptions) {\r\n super(options);\r\n this.width = options?.width ?? 50;\r\n this.height = options?.height ?? 50;\r\n this.color = options?.color ?? 'black';\r\n this.draw();\r\n }\r\n\r\n}","import Engine from './Engine.ts';\r\nimport Sprite, { type SpriteOptions } from './Sprite.ts';\r\nimport { ctx } from './canvas.ts';\r\n\r\nexport interface OvalOptions extends SpriteOptions {\r\n radA?: number;\r\n radB?: number;\r\n color?: string;\r\n};\r\n\r\nexport default class Oval extends Sprite {\r\n\r\n public radA: number;\r\n public radB: number;\r\n public color: string;\r\n\r\n public draw(): void {\r\n const rotation = this.toRadians(this.dir);\r\n \r\n ctx.beginPath();\r\n ctx.ellipse(this.x, this.y, this.radA, this.radB, rotation, 0, Math.PI * 2);\r\n\r\n ctx.fillStyle = this.color;\r\n ctx.fill();\r\n }\r\n\r\n public setRadA(radA: number) {\r\n this.radA = radA;\r\n this.refresh();\r\n }\r\n\r\n public setRadB(radB: number) {\r\n this.radB = radB;\r\n this.refresh();\r\n }\r\n\r\n public setColor(color: string) {\r\n this.color = color;\r\n this.refresh();\r\n }\r\n\r\n constructor(options?: OvalOptions) {\r\n super(options);\r\n this.radA = options?.radA ?? 25;\r\n this.radB = options?.radB ?? 25;\r\n this.color = options?.color ?? 'black';\r\n this.draw();\r\n }\r\n\r\n}","import { canvas, ctx } from './canvas.ts';\r\nimport Sprite, { type SpriteOptions } from './Sprite.ts';\r\n\r\nexport interface RegularPolygonOptions extends SpriteOptions {\r\n sides?: number;\r\n radius?: number;\r\n color?: string;\r\n}\r\n\r\nexport default class RegularPolygon extends Sprite {\r\n\r\n public sides: number;\r\n public radius: number;\r\n public color: string;\r\n\r\n public draw() {\r\n const r = this.radius;\r\n const step = (Math.PI * 2) / this.sides;\r\n const cx = canvas.width / 2;\r\n const cy = canvas.height / 2;\r\n\r\n const rotation = this.toRadians(this.dir);\r\n\r\n ctx.beginPath();\r\n for (let i = 0; i < this.sides; i++) {\r\n const theta = i * step - Math.PI / 2 + rotation;\r\n const px = cx + this.x + r * Math.cos(theta);\r\n const py = cy + this.y + r * Math.sin(theta);\r\n\r\n if (i === 0) ctx.moveTo(px, py);\r\n else ctx.lineTo(px, py);\r\n }\r\n ctx.closePath();\r\n\r\n ctx.fillStyle = this.color;\r\n ctx.fill();\r\n }\r\n\r\n public setRadius(radius: number) {\r\n this.radius = radius;\r\n this.refresh();\r\n }\r\n\r\n public setColor(color: string) {\r\n this.color = color;\r\n this.refresh();\r\n }\r\n\r\n constructor(options?: RegularPolygonOptions) {\r\n super(options);\r\n this.sides = options?.sides ?? 5;\r\n this.radius = options?.radius ?? 50;\r\n this.color = options?.color ?? 'black';\r\n this.draw();\r\n }\r\n\r\n}","import { canvas, ctx } from './canvas.ts';\r\nimport Sprite, { type SpriteOptions } from './Sprite.ts';\r\n\r\nexport interface PenOptions extends SpriteOptions {\r\n drawing: boolean;\r\n size: number;\r\n color: string;\r\n}\r\n\r\nexport default class Pen extends Sprite {\r\n\r\n public drawing: boolean;\r\n public size: number;\r\n public color: string;\r\n\r\n draw() {}\r\n\r\n public up() {\r\n this.drawing = false;\r\n }\r\n\r\n public down() {\r\n this.drawing = true;\r\n }\r\n\r\n public dot() {\r\n ctx.fillStyle = this.color;\r\n ctx.fillRect(\r\n this.x - this.size / 2 + canvas.width / 2,\r\n this.y - this.size / 2 + canvas.height / 2,\r\n this.size,\r\n this.size\r\n );\r\n }\r\n\r\n private drawLine(lastX: number, lastY: number) {\r\n ctx.beginPath();\r\n ctx.moveTo(lastX, lastY);\r\n ctx.lineTo(\r\n this.x + canvas.width / 2,\r\n this.y + canvas.height / 2\r\n );\r\n ctx.lineWidth = this.size;\r\n ctx.strokeStyle = this.color;\r\n ctx.stroke()\r\n }\r\n\r\n // Overriding methods to include drawing\r\n\r\n public override move(steps: number) {\r\n const lastX = this.x;\r\n const lastY = this.y;\r\n\r\n this.x += steps * Math.sin(this.toRadians(this.dir));\r\n this.y -= steps * Math.cos(this.toRadians(this.dir));\r\n if (this.drawing)\r\n this.drawLine(lastX, lastY);\r\n this.refresh();\r\n }\r\n\r\n public override setX(x: number) {\r\n const lastX = this.x;\r\n const lastY = this.y;\r\n\r\n this.x = x;\r\n if (this.drawing)\r\n this.drawLine(lastX, lastY);\r\n this.refresh();\r\n }\r\n\r\n public override setY(y: number) {\r\n const lastX = this.x;\r\n const lastY = this.y;\r\n\r\n this.y = y;\r\n if (this.drawing)\r\n this.drawLine(lastX, lastY);\r\n this.refresh();\r\n }\r\n\r\n public override goTo(x: number, y: number) {\r\n const lastX = this.x;\r\n const lastY = this.y;\r\n\r\n this.x = x;\r\n this.y = y;\r\n if (this.drawing)\r\n this.drawLine(lastX, lastY);\r\n this.refresh();\r\n }\r\n\r\n public override changeX(dX: number) {\r\n const lastX = this.x;\r\n const lastY = this.y;\r\n\r\n this.x += dX;\r\n if (this.drawing)\r\n this.drawLine(lastX, lastY);\r\n this.refresh();\r\n }\r\n\r\n public override changeY(dY: number) {\r\n const lastX = this.x;\r\n const lastY = this.y;\r\n\r\n this.y -= dY;\r\n if (this.drawing)\r\n this.drawLine(lastX, lastY);\r\n this.refresh();\r\n }\r\n\r\n // Constructor\r\n\r\n constructor(options?: PenOptions) {\r\n super(options);\r\n this.drawing = options?.drawing ?? false;\r\n this.size = options?.size ?? 5;\r\n this.color = options?.color ?? 'black';\r\n }\r\n\r\n}"],"mappings":"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","names":["index_exports","__export","Engine","Oval","Pen","Rectangle","RegularPolygon","Sprite","canvas","ctx","index_default","setAspectRatio","setScale","__toCommonJS","canvas","ctx","ratio","scale","setScale","newScale","setAspectRatio","newAspectRatio","Sprite","Engine","options","deg","rad","steps","dir","x","y","dX","dY","Engine","_Engine","sprites","s","maxFPS","now","deltaTime","ctx","canvas","sprite","ms","resolve","deg","rad","Rectangle","Sprite","ctx","cX","canvas","cY","width","height","color","options","Oval","Sprite","rotation","ctx","radA","radB","color","options","RegularPolygon","Sprite","r","step","cx","canvas","cy","rotation","ctx","i","theta","px","py","radius","color","options","Pen","Sprite","ctx","canvas","lastX","lastY","steps","x","y","dX","dY","options","TScratch","Engine","Sprite","Rectangle","Oval","RegularPolygon","Pen","setScale","setAspectRatio","canvas","ctx","index_default"]}
package/dist/index.d.cts CHANGED
@@ -20,13 +20,12 @@ declare abstract class Sprite {
20
20
  goTo(x: number, y: number): void;
21
21
  changeX(dX: number): void;
22
22
  changeY(dY: number): void;
23
- wait(ms: number): Promise<void>;
24
23
  }
25
24
 
26
25
  declare class Engine {
27
26
  private static instance;
28
27
  private updateInterval;
29
- loop: () => void;
28
+ loop: () => (void | Promise<void>);
30
29
  maxFPS: number;
31
30
  private lastFrame;
32
31
  deltaTime: number;
@@ -36,6 +35,7 @@ declare class Engine {
36
35
  removeSprites(...sprites: Sprite[]): void;
37
36
  setMaxFramesPerSecond(maxFPS: number): void;
38
37
  refresh(): void;
38
+ wait(ms: number): Promise<void>;
39
39
  toRadians(deg: number): number;
40
40
  toDegrees(rad: number): number;
41
41
  private constructor();
@@ -88,6 +88,29 @@ declare class RegularPolygon extends Sprite {
88
88
  constructor(options?: RegularPolygonOptions);
89
89
  }
90
90
 
91
+ interface PenOptions extends SpriteOptions {
92
+ drawing: boolean;
93
+ size: number;
94
+ color: string;
95
+ }
96
+ declare class Pen extends Sprite {
97
+ drawing: boolean;
98
+ size: number;
99
+ color: string;
100
+ draw(): void;
101
+ up(): void;
102
+ down(): void;
103
+ dot(): void;
104
+ private drawLine;
105
+ move(steps: number): void;
106
+ setX(x: number): void;
107
+ setY(y: number): void;
108
+ goTo(x: number, y: number): void;
109
+ changeX(dX: number): void;
110
+ changeY(dY: number): void;
111
+ constructor(options?: PenOptions);
112
+ }
113
+
91
114
  declare const canvas: HTMLCanvasElement;
92
115
  declare const ctx: CanvasRenderingContext2D;
93
116
  declare function setScale(newScale: number): void;
@@ -99,10 +122,11 @@ declare const TScratch: {
99
122
  Rectangle: typeof Rectangle;
100
123
  Oval: typeof Oval;
101
124
  RegularPolygon: typeof RegularPolygon;
125
+ Pen: typeof Pen;
102
126
  setScale: typeof setScale;
103
127
  setAspectRatio: typeof setAspectRatio;
104
128
  canvas: HTMLCanvasElement;
105
129
  ctx: CanvasRenderingContext2D;
106
130
  };
107
131
 
108
- export { Engine, Oval, type OvalOptions, Rectangle, type RectangleOptions, RegularPolygon, type RegularPolygonOptions, Sprite, type SpriteOptions, canvas, ctx, TScratch as default, setAspectRatio, setScale };
132
+ export { Engine, Oval, type OvalOptions, Pen, type PenOptions, Rectangle, type RectangleOptions, RegularPolygon, type RegularPolygonOptions, Sprite, type SpriteOptions, canvas, ctx, TScratch as default, setAspectRatio, setScale };
package/dist/index.d.ts CHANGED
@@ -20,13 +20,12 @@ declare abstract class Sprite {
20
20
  goTo(x: number, y: number): void;
21
21
  changeX(dX: number): void;
22
22
  changeY(dY: number): void;
23
- wait(ms: number): Promise<void>;
24
23
  }
25
24
 
26
25
  declare class Engine {
27
26
  private static instance;
28
27
  private updateInterval;
29
- loop: () => void;
28
+ loop: () => (void | Promise<void>);
30
29
  maxFPS: number;
31
30
  private lastFrame;
32
31
  deltaTime: number;
@@ -36,6 +35,7 @@ declare class Engine {
36
35
  removeSprites(...sprites: Sprite[]): void;
37
36
  setMaxFramesPerSecond(maxFPS: number): void;
38
37
  refresh(): void;
38
+ wait(ms: number): Promise<void>;
39
39
  toRadians(deg: number): number;
40
40
  toDegrees(rad: number): number;
41
41
  private constructor();
@@ -88,6 +88,29 @@ declare class RegularPolygon extends Sprite {
88
88
  constructor(options?: RegularPolygonOptions);
89
89
  }
90
90
 
91
+ interface PenOptions extends SpriteOptions {
92
+ drawing: boolean;
93
+ size: number;
94
+ color: string;
95
+ }
96
+ declare class Pen extends Sprite {
97
+ drawing: boolean;
98
+ size: number;
99
+ color: string;
100
+ draw(): void;
101
+ up(): void;
102
+ down(): void;
103
+ dot(): void;
104
+ private drawLine;
105
+ move(steps: number): void;
106
+ setX(x: number): void;
107
+ setY(y: number): void;
108
+ goTo(x: number, y: number): void;
109
+ changeX(dX: number): void;
110
+ changeY(dY: number): void;
111
+ constructor(options?: PenOptions);
112
+ }
113
+
91
114
  declare const canvas: HTMLCanvasElement;
92
115
  declare const ctx: CanvasRenderingContext2D;
93
116
  declare function setScale(newScale: number): void;
@@ -99,10 +122,11 @@ declare const TScratch: {
99
122
  Rectangle: typeof Rectangle;
100
123
  Oval: typeof Oval;
101
124
  RegularPolygon: typeof RegularPolygon;
125
+ Pen: typeof Pen;
102
126
  setScale: typeof setScale;
103
127
  setAspectRatio: typeof setAspectRatio;
104
128
  canvas: HTMLCanvasElement;
105
129
  ctx: CanvasRenderingContext2D;
106
130
  };
107
131
 
108
- export { Engine, Oval, type OvalOptions, Rectangle, type RectangleOptions, RegularPolygon, type RegularPolygonOptions, Sprite, type SpriteOptions, canvas, ctx, TScratch as default, setAspectRatio, setScale };
132
+ export { Engine, Oval, type OvalOptions, Pen, type PenOptions, Rectangle, type RectangleOptions, RegularPolygon, type RegularPolygonOptions, Sprite, type SpriteOptions, canvas, ctx, TScratch as default, setAspectRatio, setScale };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var i=document.getElementById("game-window"),e=i.getContext("2d"),d=16/9,h;function m(n){h=n,i.width=d*h,i.height=h}function g(n){d=n,i.width=d*h,i.height=h}m(500);var r=class{x;y;dir;refresh(){o.init().refresh()}constructor(t){this.x=t?.x??0,this.y=t?.y??0,this.dir=t?.dir??90}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()}setX(t){this.x=t,this.refresh()}setY(t){this.y=t,this.refresh()}goTo(t,s){this.x=t,this.y=s,this.refresh()}changeX(t){this.x+=t,this.refresh()}changeY(t){this.y-=t,this.refresh()}async wait(t){return new Promise(s=>setTimeout(s,t))}};var o=class n{static instance;updateInterval;loop=()=>{};maxFPS=24;lastFrame=performance.now();deltaTime=1/this.maxFPS;sprites=[];static init(){return this.instance||(this.instance=new n),this.instance}addSprites(...t){this.sprites.push(...t)}removeSprites(...t){this.sprites=this.sprites.filter(s=>!t.includes(s))}setMaxFramesPerSecond(t){this.maxFPS=t,clearInterval(this.updateInterval),this.updateInterval=setInterval(()=>{let s=performance.now(),u=(s-this.lastFrame)/1e3;this.lastFrame=s,this.deltaTime=u,this.loop()},1e3/this.maxFPS)}refresh(){e.clearRect(0,0,i.width,i.height),this.sprites.forEach(t=>t.draw())}toRadians(t){return t*Math.PI/180}toDegrees(t){return t*180/Math.PI}constructor(){this.setMaxFramesPerSecond(24)}};var a=class extends r{width;height;color;draw(){e.fillStyle=this.color,e.fillRect(this.x-this.width/2+i.width/2,this.y-this.height/2+i.height/2,this.width,this.height)}setWidth(t){this.width=t,this.refresh()}setHeight(t){this.height=t,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.draw()}};var c=class extends r{radA;radB;color;draw(){e.fillStyle=this.color,e.beginPath(),e.ellipse(this.x,this.y,this.radA,this.radB,this.toRadians(this.dir),0,Math.PI*2),e.fill()}setRadA(t){this.radA=t,this.refresh()}setRadB(t){this.radB=t,this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.radA=t?.radA??25,this.radB=t?.radB??25,this.color=t?.color??"black",this.draw()}};var p=class extends r{sides;radius;color;draw(){let t=this.radius,s=Math.PI*2/this.sides,u=i.width/2,y=i.height/2;e.beginPath();for(let l=0;l<this.sides;l++){let b=l*s-Math.PI/2,f=u+this.x+t*Math.cos(b),x=y+this.y+t*Math.sin(b);l===0?e.moveTo(f,x):e.lineTo(f,x)}e.closePath(),e.fillStyle=this.color,e.fill()}setRadius(t){this.radius=t,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.draw()}};var S={Engine:o,Sprite:r,Rectangle:a,Oval:c,RegularPolygon:p,setScale:m,setAspectRatio:g,canvas:i,ctx:e},z=S;export{o as Engine,c as Oval,a as Rectangle,p as RegularPolygon,r as Sprite,i as canvas,e as ctx,z as default,g as setAspectRatio,m as setScale};
1
+ var s=document.getElementById("game-window"),i=s.getContext("2d"),m=16/9,a;function f(h){a=h,s.width=m*a,s.height=a}function y(h){m=h,s.width=m*a,s.height=a}f(500);var n=class{x;y;dir;refresh(){o.init().refresh()}constructor(t){this.x=t?.x??0,this.y=t?.y??0,this.dir=t?.dir??90,o.init().addSprites(this)}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()}setX(t){this.x=t,this.refresh()}setY(t){this.y=t,this.refresh()}goTo(t,e){this.x=t,this.y=e,this.refresh()}changeX(t){this.x+=t,this.refresh()}changeY(t){this.y-=t,this.refresh()}};var o=class h{static instance;updateInterval;loop=()=>{};maxFPS=24;lastFrame=performance.now();deltaTime=1/this.maxFPS;sprites=[];static init(){return this.instance||(this.instance=new h),this.instance}addSprites(...t){this.sprites.push(...t)}removeSprites(...t){this.sprites=this.sprites.filter(e=>!t.includes(e))}setMaxFramesPerSecond(t){this.maxFPS=t,clearInterval(this.updateInterval),this.updateInterval=setInterval(()=>{let e=performance.now(),r=(e-this.lastFrame)/1e3;this.lastFrame=e,this.deltaTime=r,this.loop()},1e3/this.maxFPS)}refresh(){i.clearRect(0,0,s.width,s.height),this.sprites.forEach(t=>t.draw())}async wait(t){return new Promise(e=>setTimeout(e,t))}toRadians(t){return t*Math.PI/180}toDegrees(t){return t*180/Math.PI}constructor(){this.setMaxFramesPerSecond(24)}};var c=class extends n{width;height;color;draw(){i.save();let t=this.x+s.width/2,e=this.y+s.height/2;i.translate(t,e),i.rotate(this.toRadians(this.dir)),i.fillStyle=this.color,i.fillRect(-this.width/2,-this.height/2,this.width,this.height),i.restore()}setWidth(t){this.width=t,this.refresh()}setHeight(t){this.height=t,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.draw()}};var l=class extends n{radA;radB;color;draw(){let t=this.toRadians(this.dir);i.beginPath(),i.ellipse(this.x,this.y,this.radA,this.radB,t,0,Math.PI*2),i.fillStyle=this.color,i.fill()}setRadA(t){this.radA=t,this.refresh()}setRadB(t){this.radB=t,this.refresh()}setColor(t){this.color=t,this.refresh()}constructor(t){super(t),this.radA=t?.radA??25,this.radB=t?.radB??25,this.color=t?.color??"black",this.draw()}};var p=class extends n{sides;radius;color;draw(){let t=this.radius,e=Math.PI*2/this.sides,r=s.width/2,b=s.height/2,v=this.toRadians(this.dir);i.beginPath();for(let d=0;d<this.sides;d++){let g=d*e-Math.PI/2+v,x=r+this.x+t*Math.cos(g),w=b+this.y+t*Math.sin(g);d===0?i.moveTo(x,w):i.lineTo(x,w)}i.closePath(),i.fillStyle=this.color,i.fill()}setRadius(t){this.radius=t,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.draw()}};var u=class extends n{drawing;size;color;draw(){}up(){this.drawing=!1}down(){this.drawing=!0}dot(){i.fillStyle=this.color,i.fillRect(this.x-this.size/2+s.width/2,this.y-this.size/2+s.height/2,this.size,this.size)}drawLine(t,e){i.beginPath(),i.moveTo(t,e),i.lineTo(this.x+s.width/2,this.y+s.height/2),i.lineWidth=this.size,i.strokeStyle=this.color,i.stroke()}move(t){let e=this.x,r=this.y;this.x+=t*Math.sin(this.toRadians(this.dir)),this.y-=t*Math.cos(this.toRadians(this.dir)),this.drawing&&this.drawLine(e,r),this.refresh()}setX(t){let e=this.x,r=this.y;this.x=t,this.drawing&&this.drawLine(e,r),this.refresh()}setY(t){let e=this.x,r=this.y;this.y=t,this.drawing&&this.drawLine(e,r),this.refresh()}goTo(t,e){let r=this.x,b=this.y;this.x=t,this.y=e,this.drawing&&this.drawLine(r,b),this.refresh()}changeX(t){let e=this.x,r=this.y;this.x+=t,this.drawing&&this.drawLine(e,r),this.refresh()}changeY(t){let e=this.x,r=this.y;this.y-=t,this.drawing&&this.drawLine(e,r),this.refresh()}constructor(t){super(t),this.drawing=t?.drawing??!1,this.size=t?.size??5,this.color=t?.color??"black"}};var S={Engine:o,Sprite:n,Rectangle:c,Oval:l,RegularPolygon:p,Pen:u,setScale:f,setAspectRatio:y,canvas:s,ctx:i},Z=S;export{o as Engine,l as Oval,u as Pen,c as Rectangle,p as RegularPolygon,n as Sprite,s as canvas,i as ctx,Z as default,y as setAspectRatio,f as setScale};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/canvas.ts","../src/Sprite.ts","../src/Engine.ts","../src/Rectangle.ts","../src/Oval.ts","../src/RegularPolygon.ts","../src/index.ts"],"sourcesContent":["export const canvas = document.getElementById('game-window') as HTMLCanvasElement;\r\nexport const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\r\n\r\nlet ratio: number = 16 / 9;\r\nlet scale: number;\r\n\r\nexport function setScale(newScale: number) {\r\n scale = newScale;\r\n canvas.width = ratio * scale;\r\n canvas.height = scale;\r\n}\r\n\r\nexport function setAspectRatio(newAspectRatio: number) {\r\n ratio = newAspectRatio;\r\n canvas.width = ratio * scale;\r\n canvas.height = scale;\r\n}\r\n\r\nsetScale(500);","import Engine from './Engine.ts';\r\n\r\nexport interface SpriteOptions {\r\n x?: number;\r\n y?: number;\r\n dir?: number;\r\n};\r\n\r\nexport default abstract class Sprite {\r\n\r\n public x: number;\r\n public y: number;\r\n public dir: number;\r\n\r\n // Rendering\r\n\r\n public abstract draw(): void;\r\n\r\n protected refresh() {\r\n Engine.init().refresh();\r\n }\r\n\r\n constructor(options?: SpriteOptions) {\r\n this.x = options?.x ?? 0;\r\n this.y = options?.y ?? 0;\r\n this.dir = options?.dir ?? 90;\r\n }\r\n\r\n // Helpers\r\n\r\n protected toRadians(deg: number) {\r\n return deg * Math.PI / 180;\r\n }\r\n\r\n protected toDegrees(rad: number) {\r\n return rad * 180 / Math.PI;\r\n }\r\n\r\n // Methods\r\n\r\n // Motion\r\n public move(steps: number) {\r\n this.x += steps * Math.sin(this.toRadians(this.dir));\r\n this.y -= steps * Math.cos(this.toRadians(this.dir));\r\n this.refresh();\r\n }\r\n\r\n public turn(deg: number) {\r\n this.dir += deg;\r\n this.refresh();\r\n }\r\n\r\n public point(dir: number) {\r\n this.dir = dir;\r\n this.refresh();\r\n }\r\n\r\n public setX(x: number) {\r\n this.x = x;\r\n this.refresh();\r\n }\r\n\r\n public setY(y: number) {\r\n this.y = y;\r\n this.refresh();\r\n }\r\n\r\n public goTo(x: number, y: number) {\r\n this.x = x;\r\n this.y = y;\r\n this.refresh();\r\n }\r\n\r\n public changeX(dX: number) {\r\n this.x += dX;\r\n this.refresh();\r\n }\r\n\r\n public changeY(dY: number) {\r\n this.y -= dY;\r\n this.refresh();\r\n }\r\n\r\n // Control\r\n public async wait(ms: number): Promise<void> {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n}","import { canvas, ctx } from './canvas.ts';\r\nimport Sprite from './Sprite.ts';\r\n\r\nexport default class Engine {\r\n\r\n private static instance: Engine;\r\n\r\n private updateInterval: number | undefined;\r\n public loop: () => void = () => {};\r\n public maxFPS: number = 24;\r\n\r\n private lastFrame: number = performance.now();\r\n public deltaTime: number = 1 / this.maxFPS;\r\n\r\n public sprites: Sprite[] = [];\r\n\r\n public static init() {\r\n if (!this.instance) {\r\n this.instance = new Engine();\r\n }\r\n return this.instance;\r\n }\r\n\r\n public addSprites(...sprites: Sprite[]) {\r\n this.sprites.push(...sprites);\r\n }\r\n\r\n public removeSprites(...sprites: Sprite[]) {\r\n this.sprites = this.sprites.filter(s => !sprites.includes(s));\r\n }\r\n\r\n public setMaxFramesPerSecond(maxFPS: number) {\r\n this.maxFPS = maxFPS;\r\n clearInterval(this.updateInterval);\r\n this.updateInterval = setInterval(() => {\r\n \r\n const now = performance.now();\r\n const deltaTime = (now - this.lastFrame) / 1000;\r\n this.lastFrame = now;\r\n this.deltaTime = deltaTime;\r\n\r\n this.loop();\r\n }, 1000 / this.maxFPS);\r\n }\r\n\r\n public refresh() {\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n this.sprites.forEach(sprite => sprite.draw());\r\n }\r\n\r\n // Helpers\r\n\r\n public toRadians(deg: number) {\r\n return deg * Math.PI / 180;\r\n }\r\n\r\n public toDegrees(rad: number) {\r\n return rad * 180 / Math.PI;\r\n }\r\n\r\n // Private constructor\r\n\r\n private constructor() {\r\n this.setMaxFramesPerSecond(24);\r\n }\r\n\r\n}","import Sprite, { type SpriteOptions } from './Sprite.ts';\r\nimport { ctx, canvas } from './canvas.ts';\r\n\r\nexport interface RectangleOptions extends SpriteOptions {\r\n width?: number;\r\n height?: number;\r\n color?: string;\r\n};\r\n\r\nexport default class Rectangle extends Sprite {\r\n\r\n public width: number;\r\n public height: number;\r\n public color: string;\r\n\r\n public draw(): void {\r\n ctx.fillStyle = this.color;\r\n ctx.fillRect(\r\n this.x - this.width / 2 + canvas.width / 2,\r\n this.y - this.height / 2 + canvas.height / 2,\r\n this.width,\r\n this.height\r\n );\r\n }\r\n\r\n public setWidth(width: number) {\r\n this.width = width;\r\n this.refresh();\r\n }\r\n\r\n public setHeight(height: number) {\r\n this.height = height;\r\n this.refresh();\r\n }\r\n\r\n public setColor(color: string) {\r\n this.color = color;\r\n this.refresh();\r\n }\r\n\r\n constructor(options?: RectangleOptions) {\r\n super(options);\r\n this.width = options?.width ?? 50;\r\n this.height = options?.height ?? 50;\r\n this.color = options?.color ?? 'black';\r\n this.draw();\r\n }\r\n\r\n}","import Sprite, { type SpriteOptions } from './Sprite.ts';\r\nimport { ctx } from './canvas.ts';\r\n\r\nexport interface OvalOptions extends SpriteOptions {\r\n radA?: number;\r\n radB?: number;\r\n color?: string;\r\n};\r\n\r\nexport default class Oval extends Sprite {\r\n\r\n public radA: number;\r\n public radB: number;\r\n public color: string;\r\n\r\n public draw(): void {\r\n ctx.fillStyle = this.color;\r\n ctx.beginPath()\r\n ctx.ellipse(this.x, this.y, this.radA, this.radB, this.toRadians(this.dir), 0, Math.PI * 2);\r\n ctx.fill();\r\n }\r\n\r\n public setRadA(radA: number) {\r\n this.radA = radA;\r\n this.refresh();\r\n }\r\n\r\n public setRadB(radB: number) {\r\n this.radB = radB;\r\n this.refresh();\r\n }\r\n\r\n public setColor(color: string) {\r\n this.color = color;\r\n this.refresh();\r\n }\r\n\r\n constructor(options?: OvalOptions) {\r\n super(options);\r\n this.radA = options?.radA ?? 25;\r\n this.radB = options?.radB ?? 25;\r\n this.color = options?.color ?? 'black';\r\n this.draw();\r\n }\r\n\r\n}","import { canvas, ctx } from './canvas.ts';\r\nimport Sprite, { type SpriteOptions } from './Sprite.ts';\r\n\r\nexport interface RegularPolygonOptions extends SpriteOptions {\r\n sides?: number;\r\n radius?: number;\r\n color?: string;\r\n}\r\n\r\nexport default class RegularPolygon extends Sprite {\r\n\r\n public sides: number;\r\n public radius: number;\r\n public color: string;\r\n\r\n public draw() {\r\n const r = this.radius;\r\n const step = (Math.PI * 2) / this.sides;\r\n const cx = canvas.width / 2;\r\n const cy = canvas.height / 2;\r\n\r\n ctx.beginPath();\r\n for (let i = 0; i < this.sides; i++) {\r\n const theta = i * step - Math.PI / 2;\r\n const px = cx + this.x + r * Math.cos(theta);\r\n const py = cy + this.y + r * Math.sin(theta);\r\n\r\n if (i === 0) ctx.moveTo(px, py);\r\n else ctx.lineTo(px, py);\r\n }\r\n ctx.closePath();\r\n\r\n ctx.fillStyle = this.color;\r\n ctx.fill();\r\n }\r\n\r\n public setRadius(radius: number) {\r\n this.radius = radius;\r\n this.refresh();\r\n }\r\n\r\n public setColor(color: string) {\r\n this.color = color;\r\n this.refresh();\r\n }\r\n\r\n constructor(options?: RegularPolygonOptions) {\r\n super(options);\r\n this.sides = options?.sides ?? 5;\r\n this.radius = options?.radius ?? 50;\r\n this.color = options?.color ?? 'black';\r\n this.draw();\r\n }\r\n\r\n}","import Engine from './Engine.ts';\r\nimport Sprite, { type SpriteOptions } from './Sprite.ts';\r\nimport Rectangle, { type RectangleOptions } from './Rectangle.ts';\r\nimport Oval, { type OvalOptions } from './Oval.ts';\r\nimport RegularPolygon, { type RegularPolygonOptions } from './RegularPolygon.ts';\r\nimport { setScale, setAspectRatio, canvas, ctx } from './canvas.ts';\r\n\r\nconst TScratch = {\r\n // Main\r\n Engine,\r\n Sprite,\r\n\r\n // Sprites\r\n Rectangle,\r\n Oval,\r\n RegularPolygon,\r\n\r\n // Canvas\r\n setScale,\r\n setAspectRatio,\r\n canvas,\r\n ctx\r\n};\r\n\r\nexport default TScratch;\r\nexport {\r\n // Main\r\n Engine,\r\n Sprite,\r\n\r\n // Sprites\r\n Rectangle,\r\n Oval,\r\n RegularPolygon,\r\n\r\n // Options\r\n type SpriteOptions,\r\n type RectangleOptions,\r\n type OvalOptions,\r\n type RegularPolygonOptions,\r\n \r\n // Canvas\r\n setScale,\r\n setAspectRatio,\r\n canvas,\r\n ctx\r\n};"],"mappings":"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","names":["canvas","ctx","ratio","scale","setScale","newScale","setAspectRatio","newAspectRatio","Sprite","Engine","options","deg","rad","steps","dir","x","y","dX","dY","ms","resolve","Engine","_Engine","sprites","maxFPS","now","deltaTime","ctx","canvas","sprite","deg","rad","Rectangle","Sprite","ctx","canvas","width","height","color","options","Oval","Sprite","ctx","radA","radB","color","options","RegularPolygon","Sprite","r","step","cx","canvas","cy","ctx","i","theta","px","py","radius","color","options","TScratch","Engine","Sprite","Rectangle","Oval","RegularPolygon","setScale","setAspectRatio","canvas","ctx","index_default"]}
1
+ {"version":3,"sources":["../src/canvas.ts","../src/Sprite.ts","../src/Engine.ts","../src/Rectangle.ts","../src/Oval.ts","../src/RegularPolygon.ts","../src/Pen.ts","../src/index.ts"],"sourcesContent":["export const canvas = document.getElementById('game-window') as HTMLCanvasElement;\r\nexport const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\r\n\r\nlet ratio: number = 16 / 9;\r\nlet scale: number;\r\n\r\nexport function setScale(newScale: number) {\r\n scale = newScale;\r\n canvas.width = ratio * scale;\r\n canvas.height = scale;\r\n}\r\n\r\nexport function setAspectRatio(newAspectRatio: number) {\r\n ratio = newAspectRatio;\r\n canvas.width = ratio * scale;\r\n canvas.height = scale;\r\n}\r\n\r\nsetScale(500);","import Engine from './Engine.ts';\r\n\r\nexport interface SpriteOptions {\r\n x?: number;\r\n y?: number;\r\n dir?: number;\r\n};\r\n\r\nexport default abstract class Sprite {\r\n\r\n public x: number;\r\n public y: number;\r\n public dir: number;\r\n\r\n // Rendering\r\n\r\n public abstract draw(): void;\r\n\r\n protected refresh() {\r\n Engine.init().refresh();\r\n }\r\n\r\n constructor(options?: SpriteOptions) {\r\n this.x = options?.x ?? 0;\r\n this.y = options?.y ?? 0;\r\n this.dir = options?.dir ?? 90;\r\n Engine.init().addSprites(this);\r\n }\r\n\r\n // Helpers\r\n\r\n protected toRadians(deg: number) {\r\n return deg * Math.PI / 180;\r\n }\r\n\r\n protected toDegrees(rad: number) {\r\n return rad * 180 / Math.PI;\r\n }\r\n\r\n // Methods\r\n\r\n // Motion\r\n public move(steps: number) {\r\n this.x += steps * Math.sin(this.toRadians(this.dir));\r\n this.y -= steps * Math.cos(this.toRadians(this.dir));\r\n this.refresh();\r\n }\r\n\r\n public turn(deg: number) {\r\n this.dir += deg;\r\n this.refresh();\r\n }\r\n\r\n public point(dir: number) {\r\n this.dir = dir;\r\n this.refresh();\r\n }\r\n\r\n public setX(x: number) {\r\n this.x = x;\r\n this.refresh();\r\n }\r\n\r\n public setY(y: number) {\r\n this.y = y;\r\n this.refresh();\r\n }\r\n\r\n public goTo(x: number, y: number) {\r\n this.x = x;\r\n this.y = y;\r\n this.refresh();\r\n }\r\n\r\n public changeX(dX: number) {\r\n this.x += dX;\r\n this.refresh();\r\n }\r\n\r\n public changeY(dY: number) {\r\n this.y -= dY;\r\n this.refresh();\r\n }\r\n}","import { canvas, ctx } from './canvas.ts';\r\nimport Sprite from './Sprite.ts';\r\n\r\nexport default class Engine {\r\n\r\n private static instance: Engine;\r\n\r\n private updateInterval: number | undefined;\r\n public loop: () => (void | Promise<void>) = () => {};\r\n public maxFPS: number = 24;\r\n\r\n private lastFrame: number = performance.now();\r\n public deltaTime: number = 1 / this.maxFPS;\r\n\r\n public sprites: Sprite[] = [];\r\n\r\n public static init() {\r\n if (!this.instance) {\r\n this.instance = new Engine();\r\n }\r\n return this.instance;\r\n }\r\n\r\n public addSprites(...sprites: Sprite[]) {\r\n this.sprites.push(...sprites);\r\n }\r\n\r\n public removeSprites(...sprites: Sprite[]) {\r\n this.sprites = this.sprites.filter(s => !sprites.includes(s));\r\n }\r\n\r\n public setMaxFramesPerSecond(maxFPS: number) {\r\n this.maxFPS = maxFPS;\r\n clearInterval(this.updateInterval);\r\n this.updateInterval = setInterval(() => {\r\n \r\n const now = performance.now();\r\n const deltaTime = (now - this.lastFrame) / 1000;\r\n this.lastFrame = now;\r\n this.deltaTime = deltaTime;\r\n\r\n this.loop();\r\n }, 1000 / this.maxFPS);\r\n }\r\n\r\n public refresh() {\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n this.sprites.forEach(sprite => sprite.draw());\r\n }\r\n\r\n public async wait(ms: number): Promise<void> {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n // Helpers\r\n\r\n public toRadians(deg: number) {\r\n return deg * Math.PI / 180;\r\n }\r\n\r\n public toDegrees(rad: number) {\r\n return rad * 180 / Math.PI;\r\n }\r\n\r\n // Private constructor\r\n\r\n private constructor() {\r\n this.setMaxFramesPerSecond(24);\r\n }\r\n\r\n}","import Sprite, { type SpriteOptions } from './Sprite.ts';\r\nimport { ctx, canvas } from './canvas.ts';\r\n\r\nexport interface RectangleOptions extends SpriteOptions {\r\n width?: number;\r\n height?: number;\r\n color?: string;\r\n};\r\n\r\nexport default class Rectangle extends Sprite {\r\n\r\n public width: number;\r\n public height: number;\r\n public color: string;\r\n\r\n public draw(): void {\r\n ctx.save()\r\n\r\n const cX = this.x + canvas.width / 2;\r\n const cY = this.y + canvas.height / 2;\r\n ctx.translate(cX, cY);\r\n\r\n ctx.rotate(this.toRadians(this.dir));\r\n\r\n ctx.fillStyle = this.color;\r\n ctx.fillRect(-this.width / 2, -this.height / 2, this.width, this.height);\r\n\r\n ctx.restore();\r\n }\r\n\r\n public setWidth(width: number) {\r\n this.width = width;\r\n this.refresh();\r\n }\r\n\r\n public setHeight(height: number) {\r\n this.height = height;\r\n this.refresh();\r\n }\r\n\r\n public setColor(color: string) {\r\n this.color = color;\r\n this.refresh();\r\n }\r\n\r\n constructor(options?: RectangleOptions) {\r\n super(options);\r\n this.width = options?.width ?? 50;\r\n this.height = options?.height ?? 50;\r\n this.color = options?.color ?? 'black';\r\n this.draw();\r\n }\r\n\r\n}","import Engine from './Engine.ts';\r\nimport Sprite, { type SpriteOptions } from './Sprite.ts';\r\nimport { ctx } from './canvas.ts';\r\n\r\nexport interface OvalOptions extends SpriteOptions {\r\n radA?: number;\r\n radB?: number;\r\n color?: string;\r\n};\r\n\r\nexport default class Oval extends Sprite {\r\n\r\n public radA: number;\r\n public radB: number;\r\n public color: string;\r\n\r\n public draw(): void {\r\n const rotation = this.toRadians(this.dir);\r\n \r\n ctx.beginPath();\r\n ctx.ellipse(this.x, this.y, this.radA, this.radB, rotation, 0, Math.PI * 2);\r\n\r\n ctx.fillStyle = this.color;\r\n ctx.fill();\r\n }\r\n\r\n public setRadA(radA: number) {\r\n this.radA = radA;\r\n this.refresh();\r\n }\r\n\r\n public setRadB(radB: number) {\r\n this.radB = radB;\r\n this.refresh();\r\n }\r\n\r\n public setColor(color: string) {\r\n this.color = color;\r\n this.refresh();\r\n }\r\n\r\n constructor(options?: OvalOptions) {\r\n super(options);\r\n this.radA = options?.radA ?? 25;\r\n this.radB = options?.radB ?? 25;\r\n this.color = options?.color ?? 'black';\r\n this.draw();\r\n }\r\n\r\n}","import { canvas, ctx } from './canvas.ts';\r\nimport Sprite, { type SpriteOptions } from './Sprite.ts';\r\n\r\nexport interface RegularPolygonOptions extends SpriteOptions {\r\n sides?: number;\r\n radius?: number;\r\n color?: string;\r\n}\r\n\r\nexport default class RegularPolygon extends Sprite {\r\n\r\n public sides: number;\r\n public radius: number;\r\n public color: string;\r\n\r\n public draw() {\r\n const r = this.radius;\r\n const step = (Math.PI * 2) / this.sides;\r\n const cx = canvas.width / 2;\r\n const cy = canvas.height / 2;\r\n\r\n const rotation = this.toRadians(this.dir);\r\n\r\n ctx.beginPath();\r\n for (let i = 0; i < this.sides; i++) {\r\n const theta = i * step - Math.PI / 2 + rotation;\r\n const px = cx + this.x + r * Math.cos(theta);\r\n const py = cy + this.y + r * Math.sin(theta);\r\n\r\n if (i === 0) ctx.moveTo(px, py);\r\n else ctx.lineTo(px, py);\r\n }\r\n ctx.closePath();\r\n\r\n ctx.fillStyle = this.color;\r\n ctx.fill();\r\n }\r\n\r\n public setRadius(radius: number) {\r\n this.radius = radius;\r\n this.refresh();\r\n }\r\n\r\n public setColor(color: string) {\r\n this.color = color;\r\n this.refresh();\r\n }\r\n\r\n constructor(options?: RegularPolygonOptions) {\r\n super(options);\r\n this.sides = options?.sides ?? 5;\r\n this.radius = options?.radius ?? 50;\r\n this.color = options?.color ?? 'black';\r\n this.draw();\r\n }\r\n\r\n}","import { canvas, ctx } from './canvas.ts';\r\nimport Sprite, { type SpriteOptions } from './Sprite.ts';\r\n\r\nexport interface PenOptions extends SpriteOptions {\r\n drawing: boolean;\r\n size: number;\r\n color: string;\r\n}\r\n\r\nexport default class Pen extends Sprite {\r\n\r\n public drawing: boolean;\r\n public size: number;\r\n public color: string;\r\n\r\n draw() {}\r\n\r\n public up() {\r\n this.drawing = false;\r\n }\r\n\r\n public down() {\r\n this.drawing = true;\r\n }\r\n\r\n public dot() {\r\n ctx.fillStyle = this.color;\r\n ctx.fillRect(\r\n this.x - this.size / 2 + canvas.width / 2,\r\n this.y - this.size / 2 + canvas.height / 2,\r\n this.size,\r\n this.size\r\n );\r\n }\r\n\r\n private drawLine(lastX: number, lastY: number) {\r\n ctx.beginPath();\r\n ctx.moveTo(lastX, lastY);\r\n ctx.lineTo(\r\n this.x + canvas.width / 2,\r\n this.y + canvas.height / 2\r\n );\r\n ctx.lineWidth = this.size;\r\n ctx.strokeStyle = this.color;\r\n ctx.stroke()\r\n }\r\n\r\n // Overriding methods to include drawing\r\n\r\n public override move(steps: number) {\r\n const lastX = this.x;\r\n const lastY = this.y;\r\n\r\n this.x += steps * Math.sin(this.toRadians(this.dir));\r\n this.y -= steps * Math.cos(this.toRadians(this.dir));\r\n if (this.drawing)\r\n this.drawLine(lastX, lastY);\r\n this.refresh();\r\n }\r\n\r\n public override setX(x: number) {\r\n const lastX = this.x;\r\n const lastY = this.y;\r\n\r\n this.x = x;\r\n if (this.drawing)\r\n this.drawLine(lastX, lastY);\r\n this.refresh();\r\n }\r\n\r\n public override setY(y: number) {\r\n const lastX = this.x;\r\n const lastY = this.y;\r\n\r\n this.y = y;\r\n if (this.drawing)\r\n this.drawLine(lastX, lastY);\r\n this.refresh();\r\n }\r\n\r\n public override goTo(x: number, y: number) {\r\n const lastX = this.x;\r\n const lastY = this.y;\r\n\r\n this.x = x;\r\n this.y = y;\r\n if (this.drawing)\r\n this.drawLine(lastX, lastY);\r\n this.refresh();\r\n }\r\n\r\n public override changeX(dX: number) {\r\n const lastX = this.x;\r\n const lastY = this.y;\r\n\r\n this.x += dX;\r\n if (this.drawing)\r\n this.drawLine(lastX, lastY);\r\n this.refresh();\r\n }\r\n\r\n public override changeY(dY: number) {\r\n const lastX = this.x;\r\n const lastY = this.y;\r\n\r\n this.y -= dY;\r\n if (this.drawing)\r\n this.drawLine(lastX, lastY);\r\n this.refresh();\r\n }\r\n\r\n // Constructor\r\n\r\n constructor(options?: PenOptions) {\r\n super(options);\r\n this.drawing = options?.drawing ?? false;\r\n this.size = options?.size ?? 5;\r\n this.color = options?.color ?? 'black';\r\n }\r\n\r\n}","import Engine from './Engine.ts';\r\n\r\nimport Sprite, { type SpriteOptions } from './Sprite.ts';\r\nimport Rectangle, { type RectangleOptions } from './Rectangle.ts';\r\nimport Oval, { type OvalOptions } from './Oval.ts';\r\nimport RegularPolygon, { type RegularPolygonOptions } from './RegularPolygon.ts';\r\nimport Pen, { type PenOptions } from './Pen.ts';\r\n\r\nimport { setScale, setAspectRatio, canvas, ctx } from './canvas.ts';\r\n\r\nconst TScratch = {\r\n // Main\r\n Engine,\r\n Sprite,\r\n\r\n // Sprites\r\n Rectangle,\r\n Oval,\r\n RegularPolygon,\r\n Pen,\r\n\r\n // Canvas\r\n setScale,\r\n setAspectRatio,\r\n canvas,\r\n ctx\r\n};\r\n\r\nexport default TScratch;\r\nexport {\r\n // Main\r\n Engine,\r\n Sprite,\r\n\r\n // Sprites\r\n Rectangle,\r\n Oval,\r\n RegularPolygon,\r\n Pen,\r\n\r\n // Options\r\n type SpriteOptions,\r\n type RectangleOptions,\r\n type OvalOptions,\r\n type RegularPolygonOptions,\r\n type PenOptions,\r\n \r\n // Canvas\r\n setScale,\r\n setAspectRatio,\r\n canvas,\r\n ctx\r\n};"],"mappings":"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","names":["canvas","ctx","ratio","scale","setScale","newScale","setAspectRatio","newAspectRatio","Sprite","Engine","options","deg","rad","steps","dir","x","y","dX","dY","Engine","_Engine","sprites","s","maxFPS","now","deltaTime","ctx","canvas","sprite","ms","resolve","deg","rad","Rectangle","Sprite","ctx","cX","canvas","cY","width","height","color","options","Oval","Sprite","rotation","ctx","radA","radB","color","options","RegularPolygon","Sprite","r","step","cx","canvas","cy","rotation","ctx","i","theta","px","py","radius","color","options","Pen","Sprite","ctx","canvas","lastX","lastY","steps","x","y","dX","dY","options","TScratch","Engine","Sprite","Rectangle","Oval","RegularPolygon","Pen","setScale","setAspectRatio","canvas","ctx","index_default"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tscratch",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "description": "A Scratch-style game engine for TypeScript.",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",