tscratch 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var u=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var g=(e,t)=>{for(var s in t)u(e,s,{get:t[s],enumerable:!0})},w=(e,t,s,b)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of f(t))!x.call(e,o)&&o!==s&&u(e,o,{get:()=>t[o],enumerable:!(b=d(t,o))||b.enumerable});return e};var v=e=>w(u({},"__esModule",{value:!0}),e);var R={};g(R,{Engine:()=>h,Rectangle:()=>c,Sprite:()=>n,canvas:()=>i,ctx:()=>r,default:()=>y,setAspectRatio:()=>m,setScale:()=>p});module.exports=v(R);var i=document.getElementById("game-window"),r=i.getContext("2d"),l=16/9,a;function p(e){a=e,i.width=l*a,i.height=a}function m(e){l=e,i.width=l*a,i.height=a}p(500);var n=class{x=0;y=0;dir=90;refresh(){h.init().refresh()}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.refresh()}turn(t){this.dir+=t,this.refresh()}pointInDirection(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 h=class e{static instance;loop=()=>{};sprites=[];static init(){return this.instance||(this.instance=new e),this.instance}constructor(){setInterval(()=>this.loop(),1e3/8)}addSprite(t){this.sprites.push(t)}refresh(){r.fillStyle="white",r.fillRect(0,0,i.width,i.height),this.sprites.forEach(t=>t.draw())}};var c=class extends n{width=50;height=50;color="black";draw(){r.fillStyle=this.color,r.fillRect(this.x-this.width/2+i.width/2,this.y-this.height/2+i.height/2,this.width,this.height)}constructor(){super(),this.draw()}};var S={Engine:h,Sprite:n,Rectangle:c,setScale:p,setAspectRatio:m,canvas:i,ctx:r},y=S;0&&(module.exports={Engine,Rectangle,Sprite,canvas,ctx,setAspectRatio,setScale});
1
+ "use strict";var b=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var R=(e,t)=>{for(var o in t)b(e,o,{get:t[o],enumerable:!0})},M=(e,t,o,u)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of v(t))!O.call(e,n)&&n!==o&&b(e,n,{get:()=>t[n],enumerable:!(u=y(t,n))||u.enumerable});return e};var P=e=>M(b({},"__esModule",{value:!0}),e);var B={};R(B,{Engine:()=>h,Oval:()=>a,Rectangle:()=>c,RegularShape:()=>p,Sprite:()=>s,canvas:()=>r,ctx:()=>i,default:()=>A,setAspectRatio:()=>x,setScale:()=>m});module.exports=P(B);var r=document.getElementById("game-window"),i=r.getContext("2d"),f=16/9,l;function m(e){l=e,r.width=f*l,r.height=l}function x(e){f=e,r.width=f*l,r.height=l}m(500);var s=class{x;y;dir;refresh(){h.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()}pointInDirection(t){this.dir=t,this.refresh()}setX(t){this.x=t,this.refresh()}setY(t){this.y=t,this.refresh()}goTo(t,o){this.x=t,this.y=o,this.refresh()}changeX(t){this.x+=t,this.refresh()}changeY(t){this.y-=t,this.refresh()}async wait(t){return new Promise(o=>setTimeout(o,t))}};var h=class e{static instance;loop=()=>{};sprites=[];static init(){return this.instance||(this.instance=new e),this.instance}constructor(){setInterval(()=>this.loop(),1e3/8)}addSprite(t){this.sprites.push(t)}refresh(){i.fillStyle="white",i.fillRect(0,0,r.width,r.height),this.sprites.forEach(t=>t.draw())}};var c=class extends s{width;height;color;draw(){i.fillStyle=this.color,i.fillRect(this.x-this.width/2+r.width/2,this.y-this.height/2+r.height/2,this.width,this.height)}constructor(t){super(t),this.width=t?.width??50,this.height=t?.height??50,this.color=t?.color??"black",this.draw()}};var a=class extends s{radA;radB;color;draw(){i.fillStyle=this.color,i.beginPath(),i.ellipse(this.x,this.y,this.radA,this.radB,0,0,Math.PI*2),i.fill()}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 s{sides;radius;color;draw(){let t=this.radius,o=Math.PI*2/this.sides,u=r.width/2,n=r.height/2;i.beginPath();for(let d=0;d<this.sides;d++){let g=d*o-Math.PI/2,w=u+this.x+t*Math.cos(g),S=n+this.y+t*Math.sin(g);d===0?i.moveTo(w,S):i.lineTo(w,S)}i.closePath(),i.fillStyle=this.color,i.fill()}constructor(t){super(t),this.sides=t?.sides??5,this.radius=t?.radius??5,this.color=t?.color??"black",this.draw()}};var I={Engine:h,Sprite:s,Rectangle:c,Oval:a,RegularShape:p,setScale:m,setAspectRatio:x,canvas:r,ctx:i},A=I;0&&(module.exports={Engine,Oval,Rectangle,RegularShape,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"],"sourcesContent":["import Engine from './Engine.ts';\r\nimport Sprite from './Sprite.ts';\r\nimport Rectangle from './Rectangle.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\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\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 default abstract class Sprite {\r\n\r\n public x: number = 0;\r\n public y: number = 0;\r\n public dir: number = 90;\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 // 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.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 pointInDirection(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 public loop: () => void = () => {};\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 private constructor() {\r\n setInterval(() => this.loop(), 1000 / 8);\r\n }\r\n\r\n public addSprite(sprite: Sprite) {\r\n this.sprites.push(sprite);\r\n }\r\n\r\n public refresh() {\r\n ctx.fillStyle = 'white';\r\n ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n this.sprites.forEach(sprite => sprite.draw());\r\n }\r\n\r\n}","import Sprite from './Sprite.ts';\r\nimport { ctx, canvas } from './canvas.ts';\r\n\r\nexport default class Rectangle extends Sprite {\r\n\r\n public width: number = 50;\r\n public height: number = 50;\r\n public color: string = 'black';\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 constructor() {\r\n super();\r\n this.draw();\r\n }\r\n\r\n}"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,YAAAE,EAAA,cAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,QAAAC,EAAA,YAAAC,EAAA,mBAAAC,EAAA,aAAAC,IAAA,eAAAC,EAAAV,GCAO,IAAMW,EAAS,SAAS,eAAe,aAAa,EAC9CC,EAAMD,EAAO,WAAW,IAAI,EAErCE,EAAgB,GAAK,EACrBC,EAEG,SAASC,EAASC,EAAkB,CACvCF,EAAQE,EACRL,EAAO,MAAQE,EAAQC,EACvBH,EAAO,OAASG,CACpB,CAEO,SAASG,EAAeC,EAAwB,CACnDL,EAAQK,EACRP,EAAO,MAAQE,EAAQC,EACvBH,EAAO,OAASG,CACpB,CAEAC,EAAS,GAAG,EChBZ,IAA8BI,EAA9B,KAAqC,CAE1B,EAAY,EACZ,EAAY,EACZ,IAAc,GAMX,SAAU,CAChBC,EAAO,KAAK,EAAE,QAAQ,CAC1B,CAIU,UAAUC,EAAa,CAC7B,OAAOA,EAAM,KAAK,GAAK,GAC3B,CAEU,UAAUC,EAAa,CAC7B,OAAOA,EAAM,IAAM,KAAK,EAC5B,CAKO,KAAKC,EAAe,CACvB,KAAK,GAAKA,EAAQ,KAAK,IAAI,KAAK,UAAU,KAAK,GAAG,CAAC,EACnD,KAAK,QAAQ,CACjB,CAEO,KAAKF,EAAa,CACrB,KAAK,KAAOA,EACZ,KAAK,QAAQ,CACjB,CAEO,iBAAiBG,EAAa,CACjC,KAAK,IAAMA,EACX,KAAK,QAAQ,CACjB,CAEO,KAAKC,EAAW,CACnB,KAAK,EAAIA,EACT,KAAK,QAAQ,CACjB,CAEO,KAAKC,EAAW,CACnB,KAAK,EAAIA,EACT,KAAK,QAAQ,CACjB,CAEO,KAAKD,EAAWC,EAAW,CAC9B,KAAK,EAAID,EACT,KAAK,EAAIC,EACT,KAAK,QAAQ,CACjB,CAEO,QAAQC,EAAY,CACvB,KAAK,GAAKA,EACV,KAAK,QAAQ,CACjB,CAEO,QAAQC,EAAY,CACvB,KAAK,GAAKA,EACV,KAAK,QAAQ,CACjB,CAGA,MAAa,KAAKC,EAA2B,CACzC,OAAO,IAAI,QAAQC,GAAW,WAAWA,EAASD,CAAE,CAAC,CACzD,CAEJ,ECxEA,IAAqBE,EAArB,MAAqBC,CAAO,CAExB,OAAe,SACR,KAAmB,IAAM,CAAC,EAC1B,QAAoB,CAAC,EAE5B,OAAc,MAAO,CACjB,OAAK,KAAK,WACN,KAAK,SAAW,IAAIA,GAEjB,KAAK,QAChB,CAEQ,aAAc,CAClB,YAAY,IAAM,KAAK,KAAK,EAAG,IAAO,CAAC,CAC3C,CAEO,UAAUC,EAAgB,CAC7B,KAAK,QAAQ,KAAKA,CAAM,CAC5B,CAEO,SAAU,CACbC,EAAI,UAAY,QAChBA,EAAI,SAAS,EAAG,EAAGC,EAAO,MAAOA,EAAO,MAAM,EAE9C,KAAK,QAAQ,QAAQF,GAAUA,EAAO,KAAK,CAAC,CAChD,CAEJ,EC5BA,IAAqBG,EAArB,cAAuCC,CAAO,CAEnC,MAAgB,GAChB,OAAiB,GACjB,MAAgB,QAEhB,MAAa,CAChBC,EAAI,UAAY,KAAK,MACrBA,EAAI,SACA,KAAK,EAAI,KAAK,MAAQ,EAAIC,EAAO,MAAQ,EACzC,KAAK,EAAI,KAAK,OAAS,EAAIA,EAAO,OAAS,EAC3C,KAAK,MACL,KAAK,MACT,CACJ,CAEA,aAAc,CACV,MAAM,EACN,KAAK,KAAK,CACd,CAEJ,EJnBA,IAAMC,EAAW,CAEb,OAAAC,EACA,OAAAC,EAGA,UAAAC,EAGA,SAAAC,EACA,eAAAC,EACA,OAAAC,EACA,IAAAC,CACJ,EAEOC,EAAQR","names":["index_exports","__export","Engine","Rectangle","Sprite","canvas","ctx","index_default","setAspectRatio","setScale","__toCommonJS","canvas","ctx","ratio","scale","setScale","newScale","setAspectRatio","newAspectRatio","Sprite","Engine","deg","rad","steps","dir","x","y","dX","dY","ms","resolve","Engine","_Engine","sprite","ctx","canvas","Rectangle","Sprite","ctx","canvas","TScratch","Engine","Sprite","Rectangle","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/RegularShape.ts"],"sourcesContent":["import Engine from './Engine.ts';\r\nimport Sprite from './Sprite.ts';\r\nimport Rectangle from './Rectangle.ts';\r\nimport Oval from './Oval.ts';\r\nimport RegularShape from './RegularShape.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 RegularShape,\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 RegularShape,\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 pointInDirection(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 public loop: () => void = () => {};\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 private constructor() {\r\n setInterval(() => this.loop(), 1000 / 8);\r\n }\r\n\r\n public addSprite(sprite: Sprite) {\r\n this.sprites.push(sprite);\r\n }\r\n\r\n public refresh() {\r\n ctx.fillStyle = 'white';\r\n ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n this.sprites.forEach(sprite => sprite.draw());\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 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, canvas } 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, 0, 0, Math.PI * 2);\r\n ctx.fill();\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\ninterface RegularShapeOptions extends SpriteOptions {\r\n sides?: number;\r\n radius?: number;\r\n color?: string;\r\n}\r\n\r\nexport default class RegularShape 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 constructor(options?: RegularShapeOptions) {\r\n super(options);\r\n this.sides = options?.sides ?? 5;\r\n this.radius = options?.radius ?? 5;\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","RegularShape","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","sprite","ctx","canvas","Rectangle","Sprite","ctx","canvas","options","Oval","Sprite","ctx","options","RegularShape","Sprite","r","step","cx","canvas","cy","ctx","i","theta","px","py","options","TScratch","Engine","Sprite","Rectangle","Oval","RegularShape","setScale","setAspectRatio","canvas","ctx","index_default"]}
package/dist/index.d.cts CHANGED
@@ -1,9 +1,15 @@
1
+ interface SpriteOptions {
2
+ x?: number;
3
+ y?: number;
4
+ dir?: number;
5
+ }
1
6
  declare abstract class Sprite {
2
7
  x: number;
3
8
  y: number;
4
9
  dir: number;
5
10
  abstract draw(): void;
6
11
  protected refresh(): void;
12
+ constructor(options?: SpriteOptions);
7
13
  protected toRadians(deg: number): number;
8
14
  protected toDegrees(rad: number): number;
9
15
  move(steps: number): void;
@@ -27,12 +33,43 @@ declare class Engine {
27
33
  refresh(): void;
28
34
  }
29
35
 
36
+ interface RectangleOptions extends SpriteOptions {
37
+ width?: number;
38
+ height?: number;
39
+ color?: string;
40
+ }
30
41
  declare class Rectangle extends Sprite {
31
42
  width: number;
32
43
  height: number;
33
44
  color: string;
34
45
  draw(): void;
35
- constructor();
46
+ constructor(options?: RectangleOptions);
47
+ }
48
+
49
+ interface OvalOptions extends SpriteOptions {
50
+ radA?: number;
51
+ radB?: number;
52
+ color?: string;
53
+ }
54
+ declare class Oval extends Sprite {
55
+ radA: number;
56
+ radB: number;
57
+ color: string;
58
+ draw(): void;
59
+ constructor(options?: OvalOptions);
60
+ }
61
+
62
+ interface RegularShapeOptions extends SpriteOptions {
63
+ sides?: number;
64
+ radius?: number;
65
+ color?: string;
66
+ }
67
+ declare class RegularShape extends Sprite {
68
+ sides: number;
69
+ radius: number;
70
+ color: string;
71
+ draw(): void;
72
+ constructor(options?: RegularShapeOptions);
36
73
  }
37
74
 
38
75
  declare const canvas: HTMLCanvasElement;
@@ -44,10 +81,12 @@ declare const TScratch: {
44
81
  Engine: typeof Engine;
45
82
  Sprite: typeof Sprite;
46
83
  Rectangle: typeof Rectangle;
84
+ Oval: typeof Oval;
85
+ RegularShape: typeof RegularShape;
47
86
  setScale: typeof setScale;
48
87
  setAspectRatio: typeof setAspectRatio;
49
88
  canvas: HTMLCanvasElement;
50
89
  ctx: CanvasRenderingContext2D;
51
90
  };
52
91
 
53
- export { Engine, Rectangle, Sprite, canvas, ctx, TScratch as default, setAspectRatio, setScale };
92
+ export { Engine, Oval, Rectangle, RegularShape, Sprite, canvas, ctx, TScratch as default, setAspectRatio, setScale };
package/dist/index.d.ts CHANGED
@@ -1,9 +1,15 @@
1
+ interface SpriteOptions {
2
+ x?: number;
3
+ y?: number;
4
+ dir?: number;
5
+ }
1
6
  declare abstract class Sprite {
2
7
  x: number;
3
8
  y: number;
4
9
  dir: number;
5
10
  abstract draw(): void;
6
11
  protected refresh(): void;
12
+ constructor(options?: SpriteOptions);
7
13
  protected toRadians(deg: number): number;
8
14
  protected toDegrees(rad: number): number;
9
15
  move(steps: number): void;
@@ -27,12 +33,43 @@ declare class Engine {
27
33
  refresh(): void;
28
34
  }
29
35
 
36
+ interface RectangleOptions extends SpriteOptions {
37
+ width?: number;
38
+ height?: number;
39
+ color?: string;
40
+ }
30
41
  declare class Rectangle extends Sprite {
31
42
  width: number;
32
43
  height: number;
33
44
  color: string;
34
45
  draw(): void;
35
- constructor();
46
+ constructor(options?: RectangleOptions);
47
+ }
48
+
49
+ interface OvalOptions extends SpriteOptions {
50
+ radA?: number;
51
+ radB?: number;
52
+ color?: string;
53
+ }
54
+ declare class Oval extends Sprite {
55
+ radA: number;
56
+ radB: number;
57
+ color: string;
58
+ draw(): void;
59
+ constructor(options?: OvalOptions);
60
+ }
61
+
62
+ interface RegularShapeOptions extends SpriteOptions {
63
+ sides?: number;
64
+ radius?: number;
65
+ color?: string;
66
+ }
67
+ declare class RegularShape extends Sprite {
68
+ sides: number;
69
+ radius: number;
70
+ color: string;
71
+ draw(): void;
72
+ constructor(options?: RegularShapeOptions);
36
73
  }
37
74
 
38
75
  declare const canvas: HTMLCanvasElement;
@@ -44,10 +81,12 @@ declare const TScratch: {
44
81
  Engine: typeof Engine;
45
82
  Sprite: typeof Sprite;
46
83
  Rectangle: typeof Rectangle;
84
+ Oval: typeof Oval;
85
+ RegularShape: typeof RegularShape;
47
86
  setScale: typeof setScale;
48
87
  setAspectRatio: typeof setAspectRatio;
49
88
  canvas: HTMLCanvasElement;
50
89
  ctx: CanvasRenderingContext2D;
51
90
  };
52
91
 
53
- export { Engine, Rectangle, Sprite, canvas, ctx, TScratch as default, setAspectRatio, setScale };
92
+ export { Engine, Oval, Rectangle, RegularShape, Sprite, canvas, ctx, TScratch as default, setAspectRatio, setScale };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var e=document.getElementById("game-window"),i=e.getContext("2d"),a=16/9,h;function p(r){h=r,e.width=a*h,e.height=h}function u(r){a=r,e.width=a*h,e.height=h}p(500);var s=class{x=0;y=0;dir=90;refresh(){n.init().refresh()}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.refresh()}turn(t){this.dir+=t,this.refresh()}pointInDirection(t){this.dir=t,this.refresh()}setX(t){this.x=t,this.refresh()}setY(t){this.y=t,this.refresh()}goTo(t,o){this.x=t,this.y=o,this.refresh()}changeX(t){this.x+=t,this.refresh()}changeY(t){this.y+=t,this.refresh()}async wait(t){return new Promise(o=>setTimeout(o,t))}};var n=class r{static instance;loop=()=>{};sprites=[];static init(){return this.instance||(this.instance=new r),this.instance}constructor(){setInterval(()=>this.loop(),1e3/8)}addSprite(t){this.sprites.push(t)}refresh(){i.fillStyle="white",i.fillRect(0,0,e.width,e.height),this.sprites.forEach(t=>t.draw())}};var c=class extends s{width=50;height=50;color="black";draw(){i.fillStyle=this.color,i.fillRect(this.x-this.width/2+e.width/2,this.y-this.height/2+e.height/2,this.width,this.height)}constructor(){super(),this.draw()}};var l={Engine:n,Sprite:s,Rectangle:c,setScale:p,setAspectRatio:u,canvas:e,ctx:i},M=l;export{n as Engine,c as Rectangle,s as Sprite,e as canvas,i as ctx,M as default,u as setAspectRatio,p as setScale};
1
+ var e=document.getElementById("game-window"),i=e.getContext("2d"),u=16/9,n;function d(s){n=s,e.width=u*n,e.height=n}function x(s){u=s,e.width=u*n,e.height=n}d(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()}pointInDirection(t){this.dir=t,this.refresh()}setX(t){this.x=t,this.refresh()}setY(t){this.y=t,this.refresh()}goTo(t,h){this.x=t,this.y=h,this.refresh()}changeX(t){this.x+=t,this.refresh()}changeY(t){this.y-=t,this.refresh()}async wait(t){return new Promise(h=>setTimeout(h,t))}};var o=class s{static instance;loop=()=>{};sprites=[];static init(){return this.instance||(this.instance=new s),this.instance}constructor(){setInterval(()=>this.loop(),1e3/8)}addSprite(t){this.sprites.push(t)}refresh(){i.fillStyle="white",i.fillRect(0,0,e.width,e.height),this.sprites.forEach(t=>t.draw())}};var c=class extends r{width;height;color;draw(){i.fillStyle=this.color,i.fillRect(this.x-this.width/2+e.width/2,this.y-this.height/2+e.height/2,this.width,this.height)}constructor(t){super(t),this.width=t?.width??50,this.height=t?.height??50,this.color=t?.color??"black",this.draw()}};var a=class extends r{radA;radB;color;draw(){i.fillStyle=this.color,i.beginPath(),i.ellipse(this.x,this.y,this.radA,this.radB,0,0,Math.PI*2),i.fill()}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,h=Math.PI*2/this.sides,g=e.width/2,w=e.height/2;i.beginPath();for(let l=0;l<this.sides;l++){let m=l*h-Math.PI/2,b=g+this.x+t*Math.cos(m),f=w+this.y+t*Math.sin(m);l===0?i.moveTo(b,f):i.lineTo(b,f)}i.closePath(),i.fillStyle=this.color,i.fill()}constructor(t){super(t),this.sides=t?.sides??5,this.radius=t?.radius??5,this.color=t?.color??"black",this.draw()}};var S={Engine:o,Sprite:r,Rectangle:c,Oval:a,RegularShape:p,setScale:d,setAspectRatio:x,canvas:e,ctx:i},J=S;export{o as Engine,a as Oval,c as Rectangle,p as RegularShape,r as Sprite,e as canvas,i as ctx,J as default,x as setAspectRatio,d 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/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 default abstract class Sprite {\r\n\r\n public x: number = 0;\r\n public y: number = 0;\r\n public dir: number = 90;\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 // 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.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 pointInDirection(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 public loop: () => void = () => {};\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 private constructor() {\r\n setInterval(() => this.loop(), 1000 / 8);\r\n }\r\n\r\n public addSprite(sprite: Sprite) {\r\n this.sprites.push(sprite);\r\n }\r\n\r\n public refresh() {\r\n ctx.fillStyle = 'white';\r\n ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n this.sprites.forEach(sprite => sprite.draw());\r\n }\r\n\r\n}","import Sprite from './Sprite.ts';\r\nimport { ctx, canvas } from './canvas.ts';\r\n\r\nexport default class Rectangle extends Sprite {\r\n\r\n public width: number = 50;\r\n public height: number = 50;\r\n public color: string = 'black';\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 constructor() {\r\n super();\r\n this.draw();\r\n }\r\n\r\n}","import Engine from './Engine.ts';\r\nimport Sprite from './Sprite.ts';\r\nimport Rectangle from './Rectangle.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\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\r\n // Canvas\r\n setScale,\r\n setAspectRatio,\r\n canvas,\r\n ctx\r\n};"],"mappings":"AAAO,IAAMA,EAAS,SAAS,eAAe,aAAa,EAC9CC,EAAMD,EAAO,WAAW,IAAI,EAErCE,EAAgB,GAAK,EACrBC,EAEG,SAASC,EAASC,EAAkB,CACvCF,EAAQE,EACRL,EAAO,MAAQE,EAAQC,EACvBH,EAAO,OAASG,CACpB,CAEO,SAASG,EAAeC,EAAwB,CACnDL,EAAQK,EACRP,EAAO,MAAQE,EAAQC,EACvBH,EAAO,OAASG,CACpB,CAEAC,EAAS,GAAG,EChBZ,IAA8BI,EAA9B,KAAqC,CAE1B,EAAY,EACZ,EAAY,EACZ,IAAc,GAMX,SAAU,CAChBC,EAAO,KAAK,EAAE,QAAQ,CAC1B,CAIU,UAAUC,EAAa,CAC7B,OAAOA,EAAM,KAAK,GAAK,GAC3B,CAEU,UAAUC,EAAa,CAC7B,OAAOA,EAAM,IAAM,KAAK,EAC5B,CAKO,KAAKC,EAAe,CACvB,KAAK,GAAKA,EAAQ,KAAK,IAAI,KAAK,UAAU,KAAK,GAAG,CAAC,EACnD,KAAK,QAAQ,CACjB,CAEO,KAAKF,EAAa,CACrB,KAAK,KAAOA,EACZ,KAAK,QAAQ,CACjB,CAEO,iBAAiBG,EAAa,CACjC,KAAK,IAAMA,EACX,KAAK,QAAQ,CACjB,CAEO,KAAKC,EAAW,CACnB,KAAK,EAAIA,EACT,KAAK,QAAQ,CACjB,CAEO,KAAKC,EAAW,CACnB,KAAK,EAAIA,EACT,KAAK,QAAQ,CACjB,CAEO,KAAKD,EAAWC,EAAW,CAC9B,KAAK,EAAID,EACT,KAAK,EAAIC,EACT,KAAK,QAAQ,CACjB,CAEO,QAAQC,EAAY,CACvB,KAAK,GAAKA,EACV,KAAK,QAAQ,CACjB,CAEO,QAAQC,EAAY,CACvB,KAAK,GAAKA,EACV,KAAK,QAAQ,CACjB,CAGA,MAAa,KAAKC,EAA2B,CACzC,OAAO,IAAI,QAAQC,GAAW,WAAWA,EAASD,CAAE,CAAC,CACzD,CAEJ,ECxEA,IAAqBE,EAArB,MAAqBC,CAAO,CAExB,OAAe,SACR,KAAmB,IAAM,CAAC,EAC1B,QAAoB,CAAC,EAE5B,OAAc,MAAO,CACjB,OAAK,KAAK,WACN,KAAK,SAAW,IAAIA,GAEjB,KAAK,QAChB,CAEQ,aAAc,CAClB,YAAY,IAAM,KAAK,KAAK,EAAG,IAAO,CAAC,CAC3C,CAEO,UAAUC,EAAgB,CAC7B,KAAK,QAAQ,KAAKA,CAAM,CAC5B,CAEO,SAAU,CACbC,EAAI,UAAY,QAChBA,EAAI,SAAS,EAAG,EAAGC,EAAO,MAAOA,EAAO,MAAM,EAE9C,KAAK,QAAQ,QAAQF,GAAUA,EAAO,KAAK,CAAC,CAChD,CAEJ,EC5BA,IAAqBG,EAArB,cAAuCC,CAAO,CAEnC,MAAgB,GAChB,OAAiB,GACjB,MAAgB,QAEhB,MAAa,CAChBC,EAAI,UAAY,KAAK,MACrBA,EAAI,SACA,KAAK,EAAI,KAAK,MAAQ,EAAIC,EAAO,MAAQ,EACzC,KAAK,EAAI,KAAK,OAAS,EAAIA,EAAO,OAAS,EAC3C,KAAK,MACL,KAAK,MACT,CACJ,CAEA,aAAc,CACV,MAAM,EACN,KAAK,KAAK,CACd,CAEJ,ECnBA,IAAMC,EAAW,CAEb,OAAAC,EACA,OAAAC,EAGA,UAAAC,EAGA,SAAAC,EACA,eAAAC,EACA,OAAAC,EACA,IAAAC,CACJ,EAEOC,EAAQR","names":["canvas","ctx","ratio","scale","setScale","newScale","setAspectRatio","newAspectRatio","Sprite","Engine","deg","rad","steps","dir","x","y","dX","dY","ms","resolve","Engine","_Engine","sprite","ctx","canvas","Rectangle","Sprite","ctx","canvas","TScratch","Engine","Sprite","Rectangle","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/RegularShape.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 pointInDirection(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 public loop: () => void = () => {};\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 private constructor() {\r\n setInterval(() => this.loop(), 1000 / 8);\r\n }\r\n\r\n public addSprite(sprite: Sprite) {\r\n this.sprites.push(sprite);\r\n }\r\n\r\n public refresh() {\r\n ctx.fillStyle = 'white';\r\n ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n this.sprites.forEach(sprite => sprite.draw());\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 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, canvas } 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, 0, 0, Math.PI * 2);\r\n ctx.fill();\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\ninterface RegularShapeOptions extends SpriteOptions {\r\n sides?: number;\r\n radius?: number;\r\n color?: string;\r\n}\r\n\r\nexport default class RegularShape 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 constructor(options?: RegularShapeOptions) {\r\n super(options);\r\n this.sides = options?.sides ?? 5;\r\n this.radius = options?.radius ?? 5;\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 from './Sprite.ts';\r\nimport Rectangle from './Rectangle.ts';\r\nimport Oval from './Oval.ts';\r\nimport RegularShape from './RegularShape.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 RegularShape,\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 RegularShape,\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","sprite","ctx","canvas","Rectangle","Sprite","ctx","canvas","options","Oval","Sprite","ctx","options","RegularShape","Sprite","r","step","cx","canvas","cy","ctx","i","theta","px","py","options","TScratch","Engine","Sprite","Rectangle","Oval","RegularShape","setScale","setAspectRatio","canvas","ctx","index_default"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tscratch",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "A Scratch-style game engine for TypeScript.",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",
File without changes