tscratch 0.1.6 → 0.1.7
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 +0 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +27 -3
- package/dist/index.d.ts +27 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -72,7 +72,6 @@ engine.loop = () => {
|
|
|
72
72
|
### Engine
|
|
73
73
|
|
|
74
74
|
- `Engine.init()` → get the singleton instance
|
|
75
|
-
- `engine.addSprites(...sprites)` → add sprites to the stage
|
|
76
75
|
- `engine.removeSprites(...sprites)` → removes sprites from the stage
|
|
77
76
|
- `engine.setFramesPerSecond(FPS)`→ sets the update time
|
|
78
77
|
- `engine.loop = () => { ... }` → game loop logic
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var f=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var P=Object.prototype.hasOwnProperty;var R=(s,t)=>{for(var i in t)f(s,i,{get:t[i],enumerable:!0})},M=(s,t,i,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of O(t))!P.call(s,o)&&o!==i&&f(s,o,{get:()=>t[o],enumerable:!(n=S(t,o))||n.enumerable});return s};var I=s=>M(f({},"__esModule",{value:!0}),s);var Y={};R(Y,{Engine:()=>a,Oval:()=>l,Pen:()=>u,Rectangle:()=>c,RegularPolygon:()=>p,Sprite:()=>h,canvas:()=>r,ctx:()=>e,default:()=>X,setAspectRatio:()=>x,setScale:()=>m});module.exports=I(Y);var r=document.getElementById("game-window"),e=r.getContext("2d"),g=16/9,d;function m(s){d=s,r.width=g*d,r.height=d}function x(s){g=s,r.width=g*d,r.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,i){this.x=t,this.y=i,this.refresh()}changeX(t){this.x+=t,this.refresh()}changeY(t){this.y-=t,this.refresh()}async wait(t){return new Promise(i=>setTimeout(i,t))}};var a=class s{static instance;updateInterval;loop=()=>{};maxFPS=24;lastFrame=performance.now();deltaTime=1/this.maxFPS;sprites=[];static init(){return this.instance||(this.instance=new s),this.instance}addSprites(...t){this.sprites.push(...t)}removeSprites(...t){this.sprites=this.sprites.filter(i=>!t.includes(i))}setMaxFramesPerSecond(t){this.maxFPS=t,clearInterval(this.updateInterval),this.updateInterval=setInterval(()=>{let i=performance.now(),n=(i-this.lastFrame)/1e3;this.lastFrame=i,this.deltaTime=n,this.loop()},1e3/this.maxFPS)}refresh(){e.clearRect(0,0,r.width,r.height),this.sprites.forEach(t=>t.draw())}static toRadians(t){return t*Math.PI/180}static toDegrees(t){return t*180/Math.PI}constructor(){this.setMaxFramesPerSecond(24)}};var c=class extends h{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 l=class extends h{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 h{sides;radius;color;draw(){let t=this.radius,i=Math.PI*2/this.sides,n=r.width/2,o=r.height/2;e.beginPath();for(let b=0;b<this.sides;b++){let w=b*i-Math.PI/2,y=n+this.x+t*Math.cos(w),v=o+this.y+t*Math.sin(w);b===0?e.moveTo(y,v):e.lineTo(y,v)}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 u=class extends h{drawing;size;color;draw(){}up(){this.drawing=!1}down(){this.drawing=!0}dot(){e.fillStyle=this.color,e.fillRect(this.x-this.size/2,this.y-this.size/2,this.size,this.size)}drawLine(t,i){e.beginPath(),e.moveTo(t,i),e.lineTo(this.x+r.width/2,this.y+r.height/2),e.lineWidth=this.size,e.strokeStyle=this.color,e.stroke()}move(t){let i=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(i,n),this.refresh()}setX(t){let i=this.x,n=this.y;this.x=t,this.drawing&&this.drawLine(i,n),this.refresh()}setY(t){let i=this.x,n=this.y;this.y=t,this.drawing&&this.drawLine(i,n),this.refresh()}goTo(t,i){let n=this.x,o=this.y;this.x=t,this.y=i,this.drawing&&this.drawLine(n,o),this.refresh()}changeX(t){let i=this.x,n=this.y;this.x+=t,this.drawing&&this.drawLine(i,n),this.refresh()}changeY(t){let i=this.x,n=this.y;this.y-=t,this.drawing&&this.drawLine(i,n),this.refresh()}constructor(t){super(t),this.drawing=t?.drawing??!1,this.size=t?.size??5,this.color=t?.color??"black"}};var T={Engine:a,Sprite:h,Rectangle:c,Oval:l,RegularPolygon:p,Pen:u,setScale:m,setAspectRatio:x,canvas:r,ctx:e},X=T;0&&(module.exports={Engine,Oval,Pen,Rectangle,RegularPolygon,Sprite,canvas,ctx,setAspectRatio,setScale});
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -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\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 static toRadians(deg: number) {\r\n return deg * Math.PI / 180;\r\n }\r\n\r\n public static 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 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 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 { 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,\r\n this.y - this.size / 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","ms","resolve","Engine","_Engine","sprites","s","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","Pen","Sprite","ctx","lastX","lastY","canvas","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
|
@@ -36,8 +36,8 @@ declare class Engine {
|
|
|
36
36
|
removeSprites(...sprites: Sprite[]): void;
|
|
37
37
|
setMaxFramesPerSecond(maxFPS: number): void;
|
|
38
38
|
refresh(): void;
|
|
39
|
-
toRadians(deg: number): number;
|
|
40
|
-
toDegrees(rad: number): number;
|
|
39
|
+
static toRadians(deg: number): number;
|
|
40
|
+
static toDegrees(rad: number): number;
|
|
41
41
|
private constructor();
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -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
|
@@ -36,8 +36,8 @@ declare class Engine {
|
|
|
36
36
|
removeSprites(...sprites: Sprite[]): void;
|
|
37
37
|
setMaxFramesPerSecond(maxFPS: number): void;
|
|
38
38
|
refresh(): void;
|
|
39
|
-
toRadians(deg: number): number;
|
|
40
|
-
toDegrees(rad: number): number;
|
|
39
|
+
static toRadians(deg: number): number;
|
|
40
|
+
static toDegrees(rad: number): number;
|
|
41
41
|
private constructor();
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -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
|
|
1
|
+
var r=document.getElementById("game-window"),i=r.getContext("2d"),m=16/9,a;function f(h){a=h,r.width=m*a,r.height=a}function y(h){m=h,r.width=m*a,r.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()}async wait(t){return new Promise(e=>setTimeout(e,t))}};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(),s=(e-this.lastFrame)/1e3;this.lastFrame=e,this.deltaTime=s,this.loop()},1e3/this.maxFPS)}refresh(){i.clearRect(0,0,r.width,r.height),this.sprites.forEach(t=>t.draw())}static toRadians(t){return t*Math.PI/180}static toDegrees(t){return t*180/Math.PI}constructor(){this.setMaxFramesPerSecond(24)}};var c=class extends n{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)}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(){i.fillStyle=this.color,i.beginPath(),i.ellipse(this.x,this.y,this.radA,this.radB,this.toRadians(this.dir),0,Math.PI*2),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,s=r.width/2,b=r.height/2;i.beginPath();for(let d=0;d<this.sides;d++){let g=d*e-Math.PI/2,x=s+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,this.y-this.size/2,this.size,this.size)}drawLine(t,e){i.beginPath(),i.moveTo(t,e),i.lineTo(this.x+r.width/2,this.y+r.height/2),i.lineWidth=this.size,i.strokeStyle=this.color,i.stroke()}move(t){let e=this.x,s=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,s),this.refresh()}setX(t){let e=this.x,s=this.y;this.x=t,this.drawing&&this.drawLine(e,s),this.refresh()}setY(t){let e=this.x,s=this.y;this.y=t,this.drawing&&this.drawLine(e,s),this.refresh()}goTo(t,e){let s=this.x,b=this.y;this.x=t,this.y=e,this.drawing&&this.drawLine(s,b),this.refresh()}changeX(t){let e=this.x,s=this.y;this.x+=t,this.drawing&&this.drawLine(e,s),this.refresh()}changeY(t){let e=this.x,s=this.y;this.y-=t,this.drawing&&this.drawLine(e,s),this.refresh()}constructor(t){super(t),this.drawing=t?.drawing??!1,this.size=t?.size??5,this.color=t?.color??"black"}};var v={Engine:o,Sprite:n,Rectangle:c,Oval:l,RegularPolygon:p,Pen:u,setScale:f,setAspectRatio:y,canvas:r,ctx:i},V=v;export{o as Engine,l as Oval,u as Pen,c as Rectangle,p as RegularPolygon,n as Sprite,r as canvas,i as ctx,V 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\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 static toRadians(deg: number) {\r\n return deg * Math.PI / 180;\r\n }\r\n\r\n public static 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 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 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 { 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,\r\n this.y - this.size / 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","ms","resolve","Engine","_Engine","sprites","s","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","Pen","Sprite","ctx","lastX","lastY","canvas","steps","x","y","dX","dY","options","TScratch","Engine","Sprite","Rectangle","Oval","RegularPolygon","Pen","setScale","setAspectRatio","canvas","ctx","index_default"]}
|