@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.
- package/dist/Camera.d.ts +46 -0
- package/dist/Display.d.ts +21 -0
- package/dist/Factory.d.ts +7 -0
- package/dist/GameObject.d.ts +17 -0
- package/dist/Loader.d.ts +18 -0
- package/dist/Projection.d.ts +25 -0
- package/dist/Renderer.d.ts +6 -0
- package/dist/ResourceManager.d.ts +13 -0
- package/dist/Scene.d.ts +27 -0
- package/dist/SortStragety.d.ts +10 -0
- package/dist/World.d.ts +7 -0
- package/dist/dao.cjs +1 -0
- package/dist/dao.d.ts +2 -0
- package/dist/main.d.ts +27 -0
- package/dist/system/EventSystem.d.ts +8 -0
- package/dist/system/InputSystem.d.ts +37 -0
- package/dist/system/SortSystem.d.ts +8 -0
- package/dist/system/TweenManager.d.ts +49 -0
- package/dist/utils.d.ts +5 -0
- package/package.json +18 -10
- package/dist/dao.umd.cjs +0 -1
package/dist/Camera.d.ts
ADDED
|
@@ -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,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
|
+
}
|
package/dist/Loader.d.ts
ADDED
|
@@ -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,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
|
+
}
|
package/dist/Scene.d.ts
ADDED
|
@@ -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
|
+
}
|
package/dist/World.d.ts
ADDED
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
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,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,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 {};
|
package/dist/utils.d.ts
ADDED
package/package.json
CHANGED
|
@@ -1,32 +1,40 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sepveneto/dao",
|
|
3
|
-
"version": "0.0.
|
|
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.
|
|
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.
|
|
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
|
-
"
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
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});
|