@sepveneto/dao 0.0.1 → 0.0.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.
@@ -0,0 +1,46 @@
1
+ import { GameObject } from './GameObject';
2
+ import { Projection } from './Projection';
3
+ import { InputSystem } from './system/InputSystem';
4
+ export declare class Camera {
5
+ viewport: {
6
+ x: number;
7
+ y: number;
8
+ width: number;
9
+ height: number;
10
+ };
11
+ x: number;
12
+ y: number;
13
+ zoom: number;
14
+ projection: Projection;
15
+ private _followTarget?;
16
+ private _followLerp;
17
+ private _offsetX;
18
+ private _offsetY;
19
+ private originX;
20
+ private originY;
21
+ get width(): number;
22
+ get height(): number;
23
+ constructor(proj: Projection);
24
+ setOrigin(x: number, y: number): void;
25
+ setViewport(x: number, y: number, width: number, height: number): void;
26
+ apply(ctx: CanvasRenderingContext2D): void;
27
+ restore(ctx: CanvasRenderingContext2D): void;
28
+ project(worldX: number, worldY: number, worldZ?: number): {
29
+ px: number;
30
+ py: number;
31
+ };
32
+ follow(target: GameObject, options?: {
33
+ lerp?: number;
34
+ offsetX?: number;
35
+ offsetY?: number;
36
+ }): void;
37
+ stopFollow(): void;
38
+ update(): void;
39
+ }
40
+ export declare class CameraController {
41
+ private camera;
42
+ private input;
43
+ speed: number;
44
+ constructor(camera: Camera, input: InputSystem);
45
+ update(delta: number): void;
46
+ }
@@ -0,0 +1,21 @@
1
+ declare abstract class DisplayObject {
2
+ x: number;
3
+ y: number;
4
+ originX: number;
5
+ originY: number;
6
+ abstract render(ctx: CanvasRenderingContext2D): void;
7
+ }
8
+ export declare class ImageObject extends DisplayObject {
9
+ texture: HTMLImageElement;
10
+ resolution: number;
11
+ width: number;
12
+ height: number;
13
+ constructor(x: number, y: number, texture: HTMLImageElement, resolution?: number);
14
+ render(ctx: CanvasRenderingContext2D): void;
15
+ }
16
+ export declare class DisplayList {
17
+ private list;
18
+ add(obj: DisplayObject): void;
19
+ render(ctx: CanvasRenderingContext2D): void;
20
+ }
21
+ export {};
@@ -0,0 +1,7 @@
1
+ import { ImageObject, DisplayList } from './Display';
2
+ export declare class AddFactory {
3
+ private rm;
4
+ private displayList;
5
+ constructor(displayList: DisplayList);
6
+ image(x: number, y: number, key: string, resolution?: number): ImageObject;
7
+ }
@@ -0,0 +1,17 @@
1
+ export declare class GameObject {
2
+ x: number;
3
+ y: number;
4
+ z: number;
5
+ width: number;
6
+ height: number;
7
+ zIndex: number;
8
+ private originX;
9
+ private originY;
10
+ texture?: HTMLImageElement;
11
+ rotation: number;
12
+ constructor(x: number, y: number, z?: number);
13
+ setOrigin(x: number, y: number): void;
14
+ draw(ctx: CanvasRenderingContext2D): void;
15
+ render(ctx: CanvasRenderingContext2D): void;
16
+ update(_delta: number): void;
17
+ }
@@ -0,0 +1,18 @@
1
+ import { Cache } from './ResourceManager';
2
+ declare abstract class File<T> {
3
+ key: string;
4
+ url: string;
5
+ constructor(key: string, url: string);
6
+ abstract load(): Promise<T>;
7
+ }
8
+ export declare class ImageFile extends File<HTMLImageElement> {
9
+ load(): Promise<HTMLImageElement>;
10
+ }
11
+ export declare class Loader {
12
+ private queue;
13
+ private textures;
14
+ constructor(textures: Cache<HTMLImageElement>);
15
+ image(key: string, url: string): this;
16
+ load(): Promise<void>;
17
+ }
18
+ export {};
@@ -0,0 +1,25 @@
1
+ export interface Projection {
2
+ project(worldX: number, worldY: number, worldZ?: number): {
3
+ px: number;
4
+ py: number;
5
+ };
6
+ }
7
+ export declare class Projection2D implements Projection {
8
+ private scaleX;
9
+ private scaleY;
10
+ constructor(scaleX?: number, scaleY?: number);
11
+ project(x: number, y: number): {
12
+ px: number;
13
+ py: number;
14
+ };
15
+ }
16
+ export declare class IsoProjection implements Projection {
17
+ tileWidth: number;
18
+ tileHeight: number;
19
+ zHeight: number;
20
+ constructor(tileWidth: number, tileHeight: number, zHeight: number);
21
+ project(x: number, y: number, z?: number): {
22
+ px: number;
23
+ py: number;
24
+ };
25
+ }
@@ -0,0 +1,6 @@
1
+ import { Scene } from './Scene';
2
+ export declare class Renderer {
3
+ private ctx;
4
+ constructor(ctx: CanvasRenderingContext2D);
5
+ render(scene: Scene): void;
6
+ }
@@ -0,0 +1,13 @@
1
+ import { Loader } from './Loader';
2
+ export declare class Cache<T> {
3
+ private map;
4
+ add(key: string, asset: T): void;
5
+ get(key: string): T;
6
+ has(key: string): boolean;
7
+ remove(key: string): void;
8
+ clear(): void;
9
+ }
10
+ export declare class ResourceManager {
11
+ static textures: Cache<HTMLImageElement>;
12
+ static loader: Loader;
13
+ }
@@ -0,0 +1,27 @@
1
+ import { Camera } from './Camera';
2
+ import { DisplayList } from './Display';
3
+ import { AddFactory } from './Factory';
4
+ import { Game, GameConfig } from './main';
5
+ import { Projection } from './Projection';
6
+ import { SortStrategy } from './SortStragety';
7
+ import { EventSystem } from './system/EventSystem';
8
+ import { InputSystem } from './system/InputSystem';
9
+ import { TweenManager } from './system/TweenManager';
10
+ import { World } from './World';
11
+ export declare class Scene {
12
+ camera: Camera;
13
+ tween: TweenManager;
14
+ world: World;
15
+ private system;
16
+ input?: InputSystem;
17
+ events?: EventSystem;
18
+ config: Required<GameConfig>;
19
+ displayList: DisplayList;
20
+ add: AddFactory;
21
+ constructor(projection: Projection, sortStrategy: SortStrategy);
22
+ _boot(ctx: Game): void;
23
+ registerSystem(system: any): void;
24
+ create(): void;
25
+ resize(width: number, height: number): void;
26
+ update(delta: number): void;
27
+ }
@@ -0,0 +1,10 @@
1
+ import { GameObject } from './GameObject';
2
+ export interface SortStrategy {
3
+ getKey(obj: GameObject): number;
4
+ }
5
+ export declare class IsoStragety implements SortStrategy {
6
+ getKey(obj: GameObject): number;
7
+ }
8
+ export declare class ZIndexStragety implements SortStrategy {
9
+ getKey(obj: GameObject): number;
10
+ }
@@ -0,0 +1,7 @@
1
+ import { GameObject } from './GameObject';
2
+ export declare class World {
3
+ objects: GameObject[];
4
+ constructor();
5
+ add(obj: GameObject): void;
6
+ update(delta: number): void;
7
+ }
package/dist/dao.cjs ADDED
@@ -0,0 +1 @@
1
+ var e=class{constructor(e){this.ctx=e}render(e){let t=this.ctx,n=e.camera;t.clearRect(0,0,t.canvas.width,t.canvas.height),n.apply(t),e.displayList.render(t);for(let r of e.world.objects){let{px:e,py:i}=n.projection.project(r.x,r.y,r.z);t.save(),t.translate(e,i),r.draw(t),t.restore()}n.restore(t)}},t=class{constructor(){this.events=new Map}on(e,t){this.events.has(e)||this.events.set(e,new Set),this.events.get(e).add(t)}off(e,t){this.events.has(e)&&this.events.get(e).delete(t)}emit(e,...t){if(this.events.has(e))for(let n of this.events.get(e))n(...t)}};function n(e){"@babel/helpers - typeof";return n=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},n(e)}function r(e,t){if(n(e)!=`object`||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var i=r.call(e,t||`default`);if(n(i)!=`object`)return i;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function i(e){var t=r(e,`string`);return n(t)==`symbol`?t:t+``}function a(e,t,n){return(t=i(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?o(Object(n),!0).forEach(function(t){a(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}const c={KEY_DOWN:Symbol(`keyDown`),KEY_UP:Symbol(`keyUp`),POINTER_DOWN:Symbol(`pointerDown`),POINTER_MOVE:Symbol(`pointerMove`),POINTER_UP:Symbol(`pointerUp`)};var l=class{constructor(e,t){this.keys=new Set,this.pointer={x:0,y:0,dx:0,dy:0,down:!1,justDown:!1,justUp:!1,id:null},this.target=e,this.events=t,window.addEventListener(`keydown`,e=>{e.preventDefault(),this.keys.add(e.code),this.events.emit(c.KEY_DOWN,e)}),window.addEventListener(`keyup`,e=>{this.keys.delete(e.code),this.events.emit(c.KEY_UP,e)}),e.addEventListener(`mousedown`,this.onDown.bind(this)),e.addEventListener(`mousemove`,this.onMove.bind(this)),e.addEventListener(`mouseup`,this.onUp.bind(this)),e.addEventListener(`touchstart`,this.onDown.bind(this),{passive:!1}),e.addEventListener(`touchmove`,this.onMove.bind(this),{passive:!1}),e.addEventListener(`touchend`,this.onUp.bind(this))}update(){this.pointer.justDown=!1,this.pointer.justUp=!1,this.pointer.dx=0,this.pointer.dy=0}isKeyboardDown(e){return this.keys.has(e)}onDown(e){e.preventDefault();let t=this._getPoint(e);if(!t){console.warn(`missing point`);return}this.pointer.down=!0,this.pointer.justDown=!0,this.pointer.x=t.x,this.pointer.y=t.y,this.pointer.id=t.id,this.events.emit(c.POINTER_DOWN,s({},this.pointer))}onMove(e){if(!this.pointer.down)return;e.preventDefault();let t=this._getPoint(e);if(!t){console.warn(`missing point`);return}this.pointer.dx+=t.x-this.pointer.x,this.pointer.dy+=t.y-this.pointer.y,this.pointer.x=t.x,this.pointer.y=t.y,this.events.emit(c.POINTER_MOVE,s({},this.pointer))}onUp(){this.pointer.down=!1,this.pointer.justUp=!0,this.pointer.id=null,this.events.emit(c.POINTER_UP,s({},this.pointer))}_getPoint(e){let t=this.target.getBoundingClientRect(),n,r,i=`mouse`;if(e instanceof TouchEvent){let t=e.touches[0]||e.changedTouches[0];if(!t)return;n=t.clientX,r=t.clientY,i=t.identifier}else n=e.clientX,r=e.clientY;return{x:n-t.left,y:r-t.top,id:i}}},u=class{get width(){return this.viewport.width}get height(){return this.viewport.height}constructor(e){this.viewport={x:0,y:0,width:0,height:0},this.x=0,this.y=0,this.zoom=1,this._followLerp=1,this._offsetX=0,this._offsetY=0,this.originX=0,this.originY=0,this.projection=e}setOrigin(e,t){this.originX=e,this.originY=t}setViewport(e,t,n,r){this.viewport={x:e,y:t,width:n,height:r}}apply(e){e.save(),e.translate(this.originX*this.viewport.width,this.originY*this.viewport.height),e.scale(this.zoom,this.zoom),e.translate(-Math.round(this.x),-Math.round(this.y))}restore(e){e.restore()}project(e,t,n=0){let{px:r,py:i}=this.projection.project(e,t,n);return{px:r-this.x,py:i-this.y}}follow(e,t){var n,r,i;this._followTarget=e,this._followLerp=(n=t==null?void 0:t.lerp)==null?1:n,this._offsetX=(r=t==null?void 0:t.offsetX)==null?0:r,this._offsetY=(i=t==null?void 0:t.offsetY)==null?0:i}stopFollow(){this._followTarget=void 0}update(){if(!this._followTarget)return;let{x:e,y:t,z:n}=this._followTarget,{px:r,py:i}=this.project(e,t,n),a=r+this._offsetX,o=i+this._offsetY;this.x+=a*this._followLerp,this.y+=o*this._followLerp}},d=class{constructor(e,t){this.speed=300,this.camera=e,this.input=t}update(e){let t=this.speed*e/1e3;this.input.isKeyboardDown(`ArrowUp`)&&(this.camera.y+=t),this.input.isKeyboardDown(`ArrowDown`)&&(this.camera.y-=t),this.input.isKeyboardDown(`ArrowLeft`)&&(this.camera.x+=t),this.input.isKeyboardDown(`ArrowRight`)&&(this.camera.x-=t)}},f=class{constructor(){this.x=0,this.y=0,this.originX=.5,this.originY=.5}},p=class extends f{constructor(e,t,n,r=1){super(),this.resolution=1,this.x=e,this.y=t,this.texture=n,this.resolution=r,this.width=n.width/r,this.height=n.height/r}render(e){e.drawImage(this.texture,this.x-this.width*this.originX,this.y-this.height*this.originY,this.width,this.height)}},m=class{constructor(){this.list=[]}add(e){this.list.push(e)}render(e){this.list.forEach(t=>t.render(e))}};function h(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function g(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var a=e.apply(t,n);function o(e){h(a,r,i,o,s,`next`,e)}function s(e){h(a,r,i,o,s,`throw`,e)}o(void 0)})}}var _=class{constructor(e,t){this.key=e,this.url=t}},v=class extends _{load(){return new Promise((e,t)=>{let n=new Image;n.onload=()=>e(n),n.onerror=()=>t(Error(`Failed to load ${this.url}`)),n.src=this.url})}},y=class{constructor(e){this.queue=[],this.textures=e}image(e,t){return this.queue.push(new v(e,t)),this}load(){var e=this;return g(function*(){let t=e.queue.map(t=>t.load().then(n=>{t instanceof v&&e.textures.add(t.key,n)}));e.queue.length=0,yield Promise.all(t)})()}},b,x=class{constructor(){this.map=new Map}add(e,t){this.map.has(e)||this.map.set(e,t)}get(e){let t=this.map.get(e);if(!t)throw Error(`Asset ${e} not found`);return t}has(e){return this.map.has(e)}remove(e){this.map.delete(e)}clear(){this.map.clear()}},S=class{};b=S,b.textures=new x,b.loader=new y(b.textures);var C=class{constructor(e){this.rm=S,this.displayList=e}image(e,t,n,r=1){let i=new p(e,t,this.rm.textures.get(n),r);return this.displayList.add(i),i}},w=class{constructor(e,t){this.world=e,this.strategy=t}update(){this.world.objects.sort((e,t)=>this.strategy.getKey(e)-this.strategy.getKey(t)),this.world.objects.sort((e,t)=>e.zIndex-t.zIndex)}},T=class{constructor(e){this.elapsed=0,this.target=e.target,this.key=e.key,this.start=e.target[e.key],this.end=e.to,this.duration=e.duration,this.delay=e.delay||0;let t=e.easing||`Linear`;typeof t==`string`?this.easing=E[t]:this.easing=t}update(e){if(this.delay>0)return this.delay-=e,!1;this.elapsed+=e;let t=Math.min(this.elapsed/this.duration,1),n=this.easing(t);return this.target[this.key]=this.start+(this.end-this.start)*n,t===1?(this.target[this.key]=this.end,!0):!1}reset(){this.elapsed=0}};const E={Linear:e=>e,EaseOutBack:e=>{let t=3.70158,n=e-1;return 1+n*n*((t+1)*n+t)}};var D=class{constructor(e){for(let t in this.datas=[],this.finished=!1,this.loop=!1,e.to)this.datas.push(new T({target:e.target,key:t,to:e.to[t],duration:e.duration,easing:e.easing,delay:e.delay}));this.loop=e.loop||!1,this.onComplete=e.onComplete}update(e){if(this.finished)return;let t=!0;for(let n of this.datas)n.update(e)||(t=!1);if(t)if(this.loop)this.datas.forEach(e=>e.reset());else{var n;this.finished=!0,(n=this.onComplete)==null||n.call(this)}}},O=class{constructor(){this.tweens=[]}add(e){let t=new D(e);return this.tweens.push(t),t}update(e){for(let t of this.tweens)t.update(e);this.tweens=this.tweens.filter(e=>!e.finished)}},k=class{constructor(){this.objects=[]}add(e){this.objects.push(e)}update(e){for(let t of this.objects)t.update(e)}},A=class{constructor(e,t){this.world=new k,this.system=[],this.displayList=new m,this.add=new C(this.displayList),this.camera=new u(e),this.tween=new O,this.system.push(new w(this.world,t)),this.system.push(this.tween)}_boot(e){this.input=e.input,this.events=e.events,this.config=e.config}registerSystem(e){this.system.push(e)}create(){}resize(e,t){this.camera.setViewport(0,0,e,t)}update(e){for(let n of this.system){var t;(t=n.update)==null||t.call(n,e)}this.camera.update(),this.world.update(e)}},j=class{constructor(e,t,n=0){this.width=0,this.height=0,this.zIndex=0,this.originX=0,this.originY=0,this.rotation=0,this.x=e,this.y=t,this.z=n}setOrigin(e,t){this.originX=e,this.originY=t}draw(e){e.save(),e.rotate(this.rotation),this.render(e),e.restore()}render(e){if(!this.texture)return;let t=this.width||this.texture.width,n=this.height||this.texture.height;e.drawImage(this.texture,-t*this.originX,-n*this.originY,t,n)}update(e){}},M=class{constructor(e=1,t=1){this.scaleX=e,this.scaleY=t}project(e,t){return{px:e*this.scaleX,py:t*this.scaleY}}},N=class{constructor(e,t,n){this.tileWidth=e,this.tileHeight=t,this.zHeight=n}project(e,t,n=0){return{px:(e-t)*this.tileWidth/2,py:(e+t)*this.tileHeight/2-n*this.zHeight}}},P=class{getKey(e){return e.x+e.y+e.z}},F=class{getKey(e){return e.zIndex}},I=class{constructor(n,r){this.lastTime=0,this.scene=null,this.config=s({width:window.innerWidth,height:window.innerHeight},r);let i=window.innerWidth/this.config.width,a=window.devicePixelRatio;n.width=this.config.width*i*a,n.height=this.config.height*i*a,n.style.width=`${this.config.width*i}px`,n.style.height=`${this.config.height*i}px`;let o=n.getContext(`2d`);if(!o)throw Error(`Canvas 2D context not found`);this.events=new t,this.input=new l(n,this.events),this.renderer=new e(o),o.scale(i*a,i*a)}start(e){this.scene=e,e._boot(this),e.registerSystem(this.input),e.registerSystem(this.events),e.create(),e.resize(this.config.width,this.config.height),window.requestAnimationFrame(this.loop.bind(this))}loop(e){let t=e-this.lastTime;this.lastTime=e,this.scene&&(this.scene.update(t),this.renderer.render(this.scene)),window.requestAnimationFrame(this.loop.bind(this))}};exports.Cache=x,exports.Camera=u,exports.CameraController=d,exports.Easings=E,exports.Game=I,exports.GameObject=j,exports.InputEventType=c,exports.InputSystem=l,exports.IsoProjection=N,exports.IsoStragety=P,exports.Projection2D=M,exports.ResourceManager=S,exports.Scene=A,exports.TweenManager=O,exports.ZIndexStragety=F;
package/dist/dao.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './main'
2
+ export {}
package/dist/main.d.ts ADDED
@@ -0,0 +1,27 @@
1
+ import { Scene } from './Scene';
2
+ import { EventSystem } from './system/EventSystem';
3
+ import { InputSystem } from './system/InputSystem';
4
+ export * from './Scene';
5
+ export * from './system/InputSystem';
6
+ export * from './GameObject';
7
+ export * from './Projection';
8
+ export * from './ResourceManager';
9
+ export * from './SortStragety';
10
+ export * from './system/TweenManager';
11
+ export * from './Camera';
12
+ export type GameConfig = {
13
+ width?: number;
14
+ height?: number;
15
+ canvas: HTMLCanvasElement;
16
+ };
17
+ export declare class Game {
18
+ private lastTime;
19
+ private scene;
20
+ private renderer;
21
+ input: InputSystem;
22
+ events: EventSystem;
23
+ config: Required<GameConfig>;
24
+ constructor(canvas: HTMLCanvasElement, config: GameConfig);
25
+ start(scene: Scene): void;
26
+ loop(timestamp: number): void;
27
+ }
@@ -0,0 +1,8 @@
1
+ type EventKey = string | Symbol;
2
+ export declare class EventSystem {
3
+ private events;
4
+ on(type: EventKey, callback: Function): void;
5
+ off(type: EventKey, callback: Function): void;
6
+ emit(type: EventKey, ...args: any[]): void;
7
+ }
8
+ export {};
@@ -0,0 +1,37 @@
1
+ import { EventSystem } from './EventSystem';
2
+ export declare const InputEventType: {
3
+ KEY_DOWN: symbol;
4
+ KEY_UP: symbol;
5
+ POINTER_DOWN: symbol;
6
+ POINTER_MOVE: symbol;
7
+ POINTER_UP: symbol;
8
+ };
9
+ type PointerEvent = MouseEvent | TouchEvent;
10
+ export type Pointer = {
11
+ x: number;
12
+ y: number;
13
+ dx: number;
14
+ dy: number;
15
+ down: boolean;
16
+ justDown: boolean;
17
+ justUp: boolean;
18
+ id: string | number | null;
19
+ };
20
+ export declare class InputSystem {
21
+ private target;
22
+ private events;
23
+ keys: Set<string>;
24
+ pointer: Pointer;
25
+ constructor(target: HTMLElement, eventSystem: EventSystem);
26
+ update(): void;
27
+ isKeyboardDown(code: string): boolean;
28
+ onDown(e: PointerEvent): void;
29
+ onMove(e: PointerEvent): void;
30
+ onUp(): void;
31
+ _getPoint(e: PointerEvent): {
32
+ x: number;
33
+ y: number;
34
+ id: string | number;
35
+ } | undefined;
36
+ }
37
+ export {};
@@ -0,0 +1,8 @@
1
+ import { SortStrategy } from '../SortStragety';
2
+ import { World } from '../World';
3
+ export declare class SortSystem {
4
+ private world;
5
+ private strategy;
6
+ constructor(world: World, strategy: SortStrategy);
7
+ update(): void;
8
+ }
@@ -0,0 +1,49 @@
1
+ interface TweenDataConfig {
2
+ target: any;
3
+ key: string;
4
+ to: number;
5
+ duration: number;
6
+ easing?: (t: number) => number;
7
+ delay?: number;
8
+ }
9
+ declare class TweenData {
10
+ target: any;
11
+ key: string;
12
+ start: number;
13
+ end: number;
14
+ duration: number;
15
+ elapsed: number;
16
+ easing: (t: number) => number;
17
+ delay: number;
18
+ constructor(cfg: TweenDataConfig);
19
+ update(delta: number): boolean;
20
+ reset(): void;
21
+ }
22
+ export declare const Easings: {
23
+ Linear: (t: number) => number;
24
+ EaseOutBack: (t: number) => number;
25
+ };
26
+ type TweenConfig = {
27
+ target: any;
28
+ to: Record<string, number>;
29
+ duration: number;
30
+ delay?: number;
31
+ loop?: boolean;
32
+ easing?: any;
33
+ onComplete?: () => void;
34
+ };
35
+ declare class Tween {
36
+ datas: TweenData[];
37
+ target: TweenConfig['target'];
38
+ finished: boolean;
39
+ loop: boolean;
40
+ private onComplete?;
41
+ constructor(config: TweenConfig);
42
+ update(delta: number): void;
43
+ }
44
+ export declare class TweenManager {
45
+ tweens: Tween[];
46
+ add(config: TweenConfig): Tween;
47
+ update(delta: number): void;
48
+ }
49
+ export {};
@@ -0,0 +1,5 @@
1
+ export declare function loadImage(url: string): Promise<{
2
+ image: HTMLImageElement;
3
+ w: number;
4
+ h: number;
5
+ }>;
package/package.json CHANGED
@@ -1,32 +1,40 @@
1
1
  {
2
2
  "name": "@sepveneto/dao",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "type": "module",
5
+ "scripts": {
6
+ "dev": "vite",
7
+ "build": "vite build",
8
+ "release": "bumpp",
9
+ "preview": "vite preview"
10
+ },
5
11
  "files": [
6
12
  "dist"
7
13
  ],
8
- "main": "./dist/dao.umd.cjs",
14
+ "main": "./dist/dao.cjs",
9
15
  "module": "./dist/dao.js",
16
+ "types": "./dist/dao.d.ts",
10
17
  "exports": {
11
18
  ".": {
12
19
  "import": "./dist/dao.js",
13
- "require": "./dist/dao.umd.cjs"
20
+ "require": "./dist/dao.cjs",
21
+ "types": "./dist/dao.d.ts"
14
22
  }
15
23
  },
16
24
  "devDependencies": {
17
- "vue": "^3.5.24",
18
25
  "@types/node": "^24.10.1",
19
26
  "@vitejs/plugin-vue": "^6.0.1",
20
27
  "@vue/tsconfig": "^0.8.1",
21
28
  "bumpp": "^10.3.2",
22
29
  "typescript": "~5.9.3",
23
30
  "vite": "npm:rolldown-vite@7.2.5",
31
+ "vite-plugin-dts": "^4.5.4",
32
+ "vue": "^3.5.24",
24
33
  "vue-tsc": "^3.1.4"
25
34
  },
26
- "scripts": {
27
- "dev": "vite",
28
- "build": "vite build",
29
- "release": "bumpp",
30
- "preview": "vite preview"
35
+ "pnpm": {
36
+ "overrides": {
37
+ "vite": "npm:rolldown-vite@7.2.5"
38
+ }
31
39
  }
32
- }
40
+ }
package/dist/dao.umd.cjs DELETED
@@ -1 +0,0 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.Dao={}))})(this,function(e){var t=class{constructor(e){this.ctx=e}render(e){let t=this.ctx,n=e.camera;t.clearRect(0,0,t.canvas.width,t.canvas.height),n.apply(t),e.displayList.render(t);for(let r of e.world.objects){let{px:e,py:i}=n.projection.project(r.x,r.y,r.z);t.save(),t.translate(e,i),r.draw(t),t.restore()}n.restore(t)}},n=class{constructor(){this.events=new Map}on(e,t){this.events.has(e)||this.events.set(e,new Set),this.events.get(e).add(t)}off(e,t){this.events.has(e)&&this.events.get(e).delete(t)}emit(e,...t){if(this.events.has(e))for(let n of this.events.get(e))n(...t)}};function r(e){"@babel/helpers - typeof";return r=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},r(e)}function i(e,t){if(r(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var i=n.call(e,t||`default`);if(r(i)!=`object`)return i;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function a(e){var t=i(e,`string`);return r(t)==`symbol`?t:t+``}function o(e,t,n){return(t=a(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?s(Object(n),!0).forEach(function(t){o(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}let l={KEY_DOWN:Symbol(`keyDown`),KEY_UP:Symbol(`keyUp`),POINTER_DOWN:Symbol(`pointerDown`),POINTER_MOVE:Symbol(`pointerMove`),POINTER_UP:Symbol(`pointerUp`)};var u=class{constructor(e,t){this.keys=new Set,this.pointer={x:0,y:0,dx:0,dy:0,down:!1,justDown:!1,justUp:!1,id:null},this.target=e,this.events=t,window.addEventListener(`keydown`,e=>{e.preventDefault(),this.keys.add(e.code),this.events.emit(l.KEY_DOWN,e)}),window.addEventListener(`keyup`,e=>{this.keys.delete(e.code),this.events.emit(l.KEY_UP,e)}),e.addEventListener(`mousedown`,this.onDown.bind(this)),e.addEventListener(`mousemove`,this.onMove.bind(this)),e.addEventListener(`mouseup`,this.onUp.bind(this)),e.addEventListener(`touchstart`,this.onDown.bind(this),{passive:!1}),e.addEventListener(`touchmove`,this.onMove.bind(this),{passive:!1}),e.addEventListener(`touchend`,this.onUp.bind(this))}update(){this.pointer.justDown=!1,this.pointer.justUp=!1,this.pointer.dx=0,this.pointer.dy=0}isKeyboardDown(e){return this.keys.has(e)}onDown(e){e.preventDefault();let t=this._getPoint(e);if(!t){console.warn(`missing point`);return}this.pointer.down=!0,this.pointer.justDown=!0,this.pointer.x=t.x,this.pointer.y=t.y,this.pointer.id=t.id,this.events.emit(l.POINTER_DOWN,c({},this.pointer))}onMove(e){if(!this.pointer.down)return;e.preventDefault();let t=this._getPoint(e);if(!t){console.warn(`missing point`);return}this.pointer.dx+=t.x-this.pointer.x,this.pointer.dy+=t.y-this.pointer.y,this.pointer.x=t.x,this.pointer.y=t.y,this.events.emit(l.POINTER_MOVE,c({},this.pointer))}onUp(){this.pointer.down=!1,this.pointer.justUp=!0,this.pointer.id=null,this.events.emit(l.POINTER_UP,c({},this.pointer))}_getPoint(e){let t=this.target.getBoundingClientRect(),n,r,i=`mouse`;if(e instanceof TouchEvent){let t=e.touches[0]||e.changedTouches[0];if(!t)return;n=t.clientX,r=t.clientY,i=t.identifier}else n=e.clientX,r=e.clientY;return{x:n-t.left,y:r-t.top,id:i}}},d=class{get width(){return this.viewport.width}get height(){return this.viewport.height}constructor(e){this.viewport={x:0,y:0,width:0,height:0},this.x=0,this.y=0,this.zoom=1,this._followLerp=1,this._offsetX=0,this._offsetY=0,this.originX=0,this.originY=0,this.projection=e}setOrigin(e,t){this.originX=e,this.originY=t}setViewport(e,t,n,r){this.viewport={x:e,y:t,width:n,height:r}}apply(e){e.save(),e.translate(this.originX*this.viewport.width,this.originY*this.viewport.height),e.scale(this.zoom,this.zoom),e.translate(-Math.round(this.x),-Math.round(this.y))}restore(e){e.restore()}project(e,t,n=0){let{px:r,py:i}=this.projection.project(e,t,n);return{px:r-this.x,py:i-this.y}}follow(e,t){var n,r,i;this._followTarget=e,this._followLerp=(n=t==null?void 0:t.lerp)==null?1:n,this._offsetX=(r=t==null?void 0:t.offsetX)==null?0:r,this._offsetY=(i=t==null?void 0:t.offsetY)==null?0:i}stopFollow(){this._followTarget=void 0}update(){if(!this._followTarget)return;let{x:e,y:t,z:n}=this._followTarget,{px:r,py:i}=this.project(e,t,n),a=r+this._offsetX,o=i+this._offsetY;this.x+=a*this._followLerp,this.y+=o*this._followLerp}},f=class{constructor(e,t){this.speed=300,this.camera=e,this.input=t}update(e){let t=this.speed*e/1e3;this.input.isKeyboardDown(`ArrowUp`)&&(this.camera.y+=t),this.input.isKeyboardDown(`ArrowDown`)&&(this.camera.y-=t),this.input.isKeyboardDown(`ArrowLeft`)&&(this.camera.x+=t),this.input.isKeyboardDown(`ArrowRight`)&&(this.camera.x-=t)}},p=class{constructor(){this.x=0,this.y=0,this.originX=.5,this.originY=.5}},m=class extends p{constructor(e,t,n,r=1){super(),this.resolution=1,this.x=e,this.y=t,this.texture=n,this.resolution=r,this.width=n.width/r,this.height=n.height/r}render(e){e.drawImage(this.texture,this.x-this.width*this.originX,this.y-this.height*this.originY,this.width,this.height)}},h=class{constructor(){this.list=[]}add(e){this.list.push(e)}render(e){this.list.forEach(t=>t.render(e))}};function g(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function _(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var a=e.apply(t,n);function o(e){g(a,r,i,o,s,`next`,e)}function s(e){g(a,r,i,o,s,`throw`,e)}o(void 0)})}}var v=class{constructor(e,t){this.key=e,this.url=t}},y=class extends v{load(){return new Promise((e,t)=>{let n=new Image;n.onload=()=>e(n),n.onerror=()=>t(Error(`Failed to load ${this.url}`)),n.src=this.url})}},b=class{constructor(e){this.queue=[],this.textures=e}image(e,t){return this.queue.push(new y(e,t)),this}load(){var e=this;return _(function*(){let t=e.queue.map(t=>t.load().then(n=>{t instanceof y&&e.textures.add(t.key,n)}));e.queue.length=0,yield Promise.all(t)})()}},x,S=class{constructor(){this.map=new Map}add(e,t){this.map.has(e)||this.map.set(e,t)}get(e){let t=this.map.get(e);if(!t)throw Error(`Asset ${e} not found`);return t}has(e){return this.map.has(e)}remove(e){this.map.delete(e)}clear(){this.map.clear()}},C=class{};x=C,x.textures=new S,x.loader=new b(x.textures);var w=class{constructor(e){this.rm=C,this.displayList=e}image(e,t,n,r=1){let i=new m(e,t,this.rm.textures.get(n),r);return this.displayList.add(i),i}},T=class{constructor(e,t){this.world=e,this.strategy=t}update(){this.world.objects.sort((e,t)=>this.strategy.getKey(e)-this.strategy.getKey(t)),this.world.objects.sort((e,t)=>e.zIndex-t.zIndex)}},E=class{constructor(e){this.elapsed=0,this.target=e.target,this.key=e.key,this.start=e.target[e.key],this.end=e.to,this.duration=e.duration,this.delay=e.delay||0;let t=e.easing||`Linear`;typeof t==`string`?this.easing=D[t]:this.easing=t}update(e){if(this.delay>0)return this.delay-=e,!1;this.elapsed+=e;let t=Math.min(this.elapsed/this.duration,1),n=this.easing(t);return this.target[this.key]=this.start+(this.end-this.start)*n,t===1?(this.target[this.key]=this.end,!0):!1}reset(){this.elapsed=0}};let D={Linear:e=>e,EaseOutBack:e=>{let t=3.70158,n=e-1;return 1+n*n*((t+1)*n+t)}};var O=class{constructor(e){for(let t in this.datas=[],this.finished=!1,this.loop=!1,e.to)this.datas.push(new E({target:e.target,key:t,to:e.to[t],duration:e.duration,easing:e.easing,delay:e.delay}));this.loop=e.loop||!1,this.onComplete=e.onComplete}update(e){if(this.finished)return;let t=!0;for(let n of this.datas)n.update(e)||(t=!1);if(t)if(this.loop)this.datas.forEach(e=>e.reset());else{var n;this.finished=!0,(n=this.onComplete)==null||n.call(this)}}},k=class{constructor(){this.tweens=[]}add(e){let t=new O(e);return this.tweens.push(t),t}update(e){for(let t of this.tweens)t.update(e);this.tweens=this.tweens.filter(e=>!e.finished)}},A=class{constructor(){this.objects=[]}add(e){this.objects.push(e)}update(e){for(let t of this.objects)t.update(e)}},j=class{constructor(e,t){this.world=new A,this.system=[],this.displayList=new h,this.add=new w(this.displayList),this.camera=new d(e),this.tween=new k,this.system.push(new T(this.world,t)),this.system.push(this.tween)}_boot(e){this.input=e.input,this.events=e.events,this.config=e.config}registerSystem(e){this.system.push(e)}create(){}resize(e,t){this.camera.setViewport(0,0,e,t)}update(e){for(let n of this.system){var t;(t=n.update)==null||t.call(n,e)}this.camera.update(),this.world.update(e)}},M=class{constructor(e,t,n=0){this.width=0,this.height=0,this.zIndex=0,this.originX=0,this.originY=0,this.rotation=0,this.x=e,this.y=t,this.z=n}setOrigin(e,t){this.originX=e,this.originY=t}draw(e){e.save(),e.rotate(this.rotation),this.render(e),e.restore()}render(e){if(!this.texture)return;let t=this.width||this.texture.width,n=this.height||this.texture.height;e.drawImage(this.texture,-t*this.originX,-n*this.originY,t,n)}update(e){}},N=class{constructor(e=1,t=1){this.scaleX=e,this.scaleY=t}project(e,t){return{px:e*this.scaleX,py:t*this.scaleY}}},P=class{constructor(e,t,n){this.tileWidth=e,this.tileHeight=t,this.zHeight=n}project(e,t,n=0){return{px:(e-t)*this.tileWidth/2,py:(e+t)*this.tileHeight/2-n*this.zHeight}}},F=class{getKey(e){return e.x+e.y+e.z}},I=class{getKey(e){return e.zIndex}},L=class{constructor(e,r){this.lastTime=0,this.scene=null,this.config=c({width:window.innerWidth,height:window.innerHeight},r);let i=window.innerWidth/this.config.width,a=window.devicePixelRatio;e.width=this.config.width*i*a,e.height=this.config.height*i*a,e.style.width=`${this.config.width*i}px`,e.style.height=`${this.config.height*i}px`;let o=e.getContext(`2d`);if(!o)throw Error(`Canvas 2D context not found`);this.events=new n,this.input=new u(e,this.events),this.renderer=new t(o),o.scale(i*a,i*a)}start(e){this.scene=e,e._boot(this),e.registerSystem(this.input),e.registerSystem(this.events),e.create(),e.resize(this.config.width,this.config.height),window.requestAnimationFrame(this.loop.bind(this))}loop(e){let t=e-this.lastTime;this.lastTime=e,this.scene&&(this.scene.update(t),this.renderer.render(this.scene)),window.requestAnimationFrame(this.loop.bind(this))}};e.Cache=S,e.Camera=d,e.CameraController=f,e.Easings=D,e.Game=L,e.GameObject=M,e.InputEventType=l,e.InputSystem=u,e.IsoProjection=P,e.IsoStragety=F,e.Projection2D=N,e.ResourceManager=C,e.Scene=j,e.TweenManager=k,e.ZIndexStragety=I});