kiwiengine 0.6.0 → 0.6.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/lib/node/core/game-node.js +2 -0
- package/lib/node/core/game-node.js.map +1 -1
- package/lib/node/ext/animated-sprite.js +2 -2
- package/lib/node/ext/animated-sprite.js.map +1 -1
- package/lib/types/node/core/game-node.d.ts +1 -0
- package/lib/types/node/core/game-node.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/node/core/game-node.ts +2 -0
- package/src/node/ext/animated-sprite.ts +2 -2
|
@@ -4,6 +4,7 @@ export class GameNode extends EventEmitter {
|
|
|
4
4
|
children = [];
|
|
5
5
|
paused = false;
|
|
6
6
|
timeScale = 1;
|
|
7
|
+
worldTimeScale = 1;
|
|
7
8
|
set parent(parent) {
|
|
8
9
|
this.#parent = parent;
|
|
9
10
|
}
|
|
@@ -54,6 +55,7 @@ export class GameNode extends EventEmitter {
|
|
|
54
55
|
update(dt) {
|
|
55
56
|
if (this.paused)
|
|
56
57
|
return;
|
|
58
|
+
this.worldTimeScale = (this.#parent?.worldTimeScale ?? 1) * this.timeScale;
|
|
57
59
|
const scaledDt = dt * this.timeScale;
|
|
58
60
|
for (const child of this.children) {
|
|
59
61
|
if (!child.paused)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game-node.js","sourceRoot":"","sources":["../../../src/node/core/game-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAY,MAAM,wBAAwB,CAAA;AAE/D,MAAM,OAAgB,QAAkC,SAAQ,YAE9D;IACA,OAAO,CAAqB;IAClB,QAAQ,GAAyB,EAAE,CAAC;IAC9C,MAAM,GAAG,KAAK,CAAA;IACd,SAAS,GAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"game-node.js","sourceRoot":"","sources":["../../../src/node/core/game-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAY,MAAM,wBAAwB,CAAA;AAE/D,MAAM,OAAgB,QAAkC,SAAQ,YAE9D;IACA,OAAO,CAAqB;IAClB,QAAQ,GAAyB,EAAE,CAAC;IAC9C,MAAM,GAAG,KAAK,CAAA;IACd,SAAS,GAAG,CAAC,CAAA;IACH,cAAc,GAAG,CAAC,CAAA;IAE5B,IAAc,MAAM,CAAC,MAAsC;QACzD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;IACvB,CAAC;IAED,IAAc,MAAM;QAClB,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,GAAG,CAAC,GAAG,QAA8B;QACnC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAE7B,cAAc;YACd,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBACjD,IAAI,GAAG,KAAK,CAAC,CAAC;oBAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YACvD,CAAC;YAED,YAAY;YACZ,KAAK,CAAC,MAAM,GAAG,IAAI,CAAA;YACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IAEQ,MAAM;QACb,KAAK,CAAC,MAAM,EAAE,CAAA;QAEd,WAAW;QACX,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAC/C,IAAI,GAAG,KAAK,CAAC,CAAC;gBAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YACpD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QAC1B,CAAC;QAED,WAAW;QACX,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAA;YACxB,KAAK,CAAC,MAAM,EAAE,CAAA;QAChB,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,KAAK,EAAE,CAAA;QACf,CAAC;IACH,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,MAAM,EAAE,CAAA;QAChB,CAAC;IACH,CAAC;IAES,MAAM,CAAC,EAAU;QACzB,IAAI,IAAI,CAAC,MAAM;YAAE,OAAM;QAEvB,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAA;QAC1E,MAAM,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;QAEpC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC3C,CAAC;QAEA,IAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACxC,CAAC;CACF","sourcesContent":["import { EventEmitter, EventMap } from '@webtaku/event-emitter'\n\nexport abstract class GameNode<E extends EventMap = {}> extends EventEmitter<E & {\n update: (dt: number) => void\n}> {\n #parent?: GameNode<EventMap>\n protected children: GameNode<EventMap>[] = [];\n paused = false\n timeScale = 1\n protected worldTimeScale = 1\n\n protected set parent(parent: GameNode<EventMap> | undefined) {\n this.#parent = parent\n }\n\n protected get parent() {\n return this.#parent\n }\n\n add(...children: GameNode<EventMap>[]) {\n for (const child of children) {\n\n // 기존 부모로부터 제거\n if (child.#parent) {\n const idx = child.#parent.children.indexOf(child)\n if (idx !== -1) child.#parent.children.splice(idx, 1)\n }\n\n // 새로운 부모 설정\n child.parent = this\n this.children.push(child)\n }\n }\n\n override remove() {\n super.remove()\n\n // 부모로부터 제거\n if (this.#parent) {\n const idx = this.#parent.children.indexOf(this)\n if (idx !== -1) this.#parent.children.splice(idx, 1)\n this.#parent = undefined\n }\n\n // 자식 노드 제거\n for (const child of this.children) {\n child.parent = undefined\n child.remove()\n }\n this.children.length = 0\n }\n\n pause() {\n this.paused = true\n for (const child of this.children) {\n child.pause()\n }\n }\n\n resume() {\n this.paused = false\n for (const child of this.children) {\n child.resume()\n }\n }\n\n protected update(dt: number) {\n if (this.paused) return\n\n this.worldTimeScale = (this.#parent?.worldTimeScale ?? 1) * this.timeScale\n const scaledDt = dt * this.timeScale\n\n for (const child of this.children) {\n if (!child.paused) child.update(scaledDt)\n }\n\n (this as any).emit('update', scaledDt)\n }\n}\n"]}
|
|
@@ -42,7 +42,7 @@ export class AnimatedSpriteNode extends GameObject {
|
|
|
42
42
|
s.zIndex = -999999;
|
|
43
43
|
s.loop = a.loop;
|
|
44
44
|
this.#baseFps = a.fps;
|
|
45
|
-
s.animationSpeed = (a.fps / 60) * this.
|
|
45
|
+
s.animationSpeed = (a.fps / 60) * this.worldTimeScale;
|
|
46
46
|
s.play();
|
|
47
47
|
s.onLoop = () => this.emit('animationend', this.#animation);
|
|
48
48
|
s.onComplete = () => this.emit('animationend', this.#animation);
|
|
@@ -75,7 +75,7 @@ export class AnimatedSpriteNode extends GameObject {
|
|
|
75
75
|
update(dt) {
|
|
76
76
|
super.update(dt);
|
|
77
77
|
if (this.#sprite) {
|
|
78
|
-
this.#sprite.animationSpeed = (this.#baseFps / 60) * this.
|
|
78
|
+
this.#sprite.animationSpeed = (this.#baseFps / 60) * this.worldTimeScale;
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
remove() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animated-sprite.js","sourceRoot":"","sources":["../../../src/node/ext/animated-sprite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAe,MAAM,SAAS,CAAA;AAC3E,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAErF,OAAO,EAAE,UAAU,EAAqB,MAAM,qBAAqB,CAAA;AAQnE,MAAM,OAAO,kBAA4C,SAAQ,UAE/D;IACA,IAAI,CAAQ;IACZ,MAAM,CAAO;IACb,UAAU,CAAQ;IAElB,QAAQ,CAAS;IACjB,MAAM,CAAc;IACpB,OAAO,CAAqB;IAC5B,QAAQ,GAAG,EAAE,CAAA;IAEb,YAAY,OAAkC;QAC5C,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAA;QACvB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAA;QAC3B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAA;QACnC,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAExD,IAAI,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC1D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,2CAA2C,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;YACxE,IAAI,CAAC,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACnF,CAAC;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAA;IACzB,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAA;QACvB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QAExB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAM;QAExB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,wBAAwB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;YACxD,OAAM;QACR,CAAC;QAED,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACjD,MAAM,CAAC,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;QAEzE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACtB,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAA;QAClB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAA;QACf,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAA;QACrB,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"animated-sprite.js","sourceRoot":"","sources":["../../../src/node/ext/animated-sprite.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventMap } from '@webtaku/event-emitter'\nimport { AnimatedSprite as PixiAnimatedSprite, Spritesheet } from 'pixi.js'\nimport { getCachedAtlasId, spritesheetLoader } from '../../asset/loaders/spritesheet'\nimport { Atlas } from '../../types/atlas'\nimport { GameObject, GameObjectOptions } from '../core/game-object'\n\nexport type AnimatedSpriteNodeOptions = {\n src: string\n atlas: Atlas\n animation: string\n} & GameObjectOptions\n\nexport class AnimatedSpriteNode<E extends EventMap = {}> extends GameObject<E & {\n animationend: (animation: string) => void\n}> {\n #src: string\n #atlas: Atlas\n #animation: string\n\n #atlasId!: string\n #sheet?: Spritesheet\n #sprite?: PixiAnimatedSprite\n #baseFps = 60\n\n constructor(options: AnimatedSpriteNodeOptions) {\n super(options)\n this.#src = options.src\n this.#atlas = options.atlas\n this.#animation = options.animation\n this.#load()\n }\n\n async #load() {\n this.#atlasId = getCachedAtlasId(this.#src, this.#atlas)\n\n if (spritesheetLoader.checkCached(this.#atlasId)) {\n this.#sheet = spritesheetLoader.getCached(this.#atlasId)\n } else {\n console.info(`Spritesheet not preloaded. Loading now: ${this.#atlasId}`)\n this.#sheet = await spritesheetLoader.load(this.#atlasId, this.#src, this.#atlas)\n }\n\n this.#updateAnimation()\n }\n\n #updateAnimation() {\n this.#sprite?.destroy()\n this.#sprite = undefined\n\n if (!this.#sheet) return\n\n if (!this.#sheet.animations[this.#animation]) {\n console.error(`Animation not found: ${this.#animation}`)\n return\n }\n\n const a = this.#atlas.animations[this.#animation]\n const s = new PixiAnimatedSprite(this.#sheet.animations[this.#animation])\n\n s.anchor.set(0.5, 0.5)\n s.zIndex = -999999\n s.loop = a.loop\n this.#baseFps = a.fps\n s.animationSpeed = (a.fps / 60) * this.worldTimeScale\n s.play()\n s.onLoop = () => (this as any).emit('animationend', this.#animation)\n s.onComplete = () => (this as any).emit('animationend', this.#animation)\n\n this._pixiContainer.addChild(s)\n this.#sprite = s\n }\n\n set src(src) {\n if (this.#src !== src) {\n spritesheetLoader.release(this.#atlasId)\n this.#src = src\n this.#load()\n }\n }\n\n get src() { return this.#src }\n\n set atlas(atlas) {\n if (this.#atlas !== atlas) {\n spritesheetLoader.release(this.#atlasId)\n this.#atlas = atlas\n this.#load()\n }\n }\n\n get atlas() { return this.#atlas }\n\n set animation(animation) {\n if (this.#animation !== animation) {\n this.#animation = animation\n this.#updateAnimation()\n }\n }\n\n get animation() { return this.#animation }\n\n protected override update(dt: number) {\n super.update(dt)\n if (this.#sprite) {\n this.#sprite.animationSpeed = (this.#baseFps / 60) * this.worldTimeScale\n }\n }\n\n override remove() {\n spritesheetLoader.release(this.#atlasId)\n super.remove()\n }\n}\n"]}
|
|
@@ -6,6 +6,7 @@ export declare abstract class GameNode<E extends EventMap = {}> extends EventEmi
|
|
|
6
6
|
protected children: GameNode<EventMap>[];
|
|
7
7
|
paused: boolean;
|
|
8
8
|
timeScale: number;
|
|
9
|
+
protected worldTimeScale: number;
|
|
9
10
|
protected set parent(parent: GameNode<EventMap> | undefined);
|
|
10
11
|
protected get parent(): GameNode<EventMap> | undefined;
|
|
11
12
|
add(...children: GameNode<EventMap>[]): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game-node.d.ts","sourceRoot":"","sources":["../../../../src/node/core/game-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAE/D,8BAAsB,QAAQ,CAAC,CAAC,SAAS,QAAQ,GAAG,EAAE,CAAE,SAAQ,YAAY,CAAC,CAAC,GAAG;IAC/E,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CAC7B,CAAC;;IAEA,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAM;IAC9C,MAAM,UAAQ;IACd,SAAS,SAAI;
|
|
1
|
+
{"version":3,"file":"game-node.d.ts","sourceRoot":"","sources":["../../../../src/node/core/game-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAE/D,8BAAsB,QAAQ,CAAC,CAAC,SAAS,QAAQ,GAAG,EAAE,CAAE,SAAQ,YAAY,CAAC,CAAC,GAAG;IAC/E,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CAC7B,CAAC;;IAEA,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAM;IAC9C,MAAM,UAAQ;IACd,SAAS,SAAI;IACb,SAAS,CAAC,cAAc,SAAI;IAE5B,SAAS,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,EAE1D;IAED,SAAS,KAAK,MAAM,IAJS,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,CAM1D;IAED,GAAG,CAAC,GAAG,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE;IAe5B,MAAM;IAkBf,KAAK;IAOL,MAAM;IAON,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM;CAY5B"}
|
package/package.json
CHANGED
|
@@ -7,6 +7,7 @@ export abstract class GameNode<E extends EventMap = {}> extends EventEmitter<E &
|
|
|
7
7
|
protected children: GameNode<EventMap>[] = [];
|
|
8
8
|
paused = false
|
|
9
9
|
timeScale = 1
|
|
10
|
+
protected worldTimeScale = 1
|
|
10
11
|
|
|
11
12
|
protected set parent(parent: GameNode<EventMap> | undefined) {
|
|
12
13
|
this.#parent = parent
|
|
@@ -66,6 +67,7 @@ export abstract class GameNode<E extends EventMap = {}> extends EventEmitter<E &
|
|
|
66
67
|
protected update(dt: number) {
|
|
67
68
|
if (this.paused) return
|
|
68
69
|
|
|
70
|
+
this.worldTimeScale = (this.#parent?.worldTimeScale ?? 1) * this.timeScale
|
|
69
71
|
const scaledDt = dt * this.timeScale
|
|
70
72
|
|
|
71
73
|
for (const child of this.children) {
|
|
@@ -61,7 +61,7 @@ export class AnimatedSpriteNode<E extends EventMap = {}> extends GameObject<E &
|
|
|
61
61
|
s.zIndex = -999999
|
|
62
62
|
s.loop = a.loop
|
|
63
63
|
this.#baseFps = a.fps
|
|
64
|
-
s.animationSpeed = (a.fps / 60) * this.
|
|
64
|
+
s.animationSpeed = (a.fps / 60) * this.worldTimeScale
|
|
65
65
|
s.play()
|
|
66
66
|
s.onLoop = () => (this as any).emit('animationend', this.#animation)
|
|
67
67
|
s.onComplete = () => (this as any).emit('animationend', this.#animation)
|
|
@@ -102,7 +102,7 @@ export class AnimatedSpriteNode<E extends EventMap = {}> extends GameObject<E &
|
|
|
102
102
|
protected override update(dt: number) {
|
|
103
103
|
super.update(dt)
|
|
104
104
|
if (this.#sprite) {
|
|
105
|
-
this.#sprite.animationSpeed = (this.#baseFps / 60) * this.
|
|
105
|
+
this.#sprite.animationSpeed = (this.#baseFps / 60) * this.worldTimeScale
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
|