kiwiengine 0.5.4 → 0.5.5
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/examples/auto-battle/objects/character.ts +1 -1
- package/examples/battle-benchmark-matterjs/objects/character.ts +1 -1
- package/examples/battle-benchmark-separation/objects/character.ts +1 -1
- package/examples/battle-benchmark-separation2/objects/character.ts +1 -1
- package/examples/simple-battle/objects/character.ts +1 -1
- package/lib/dom/dom-animated-sprite.js.map +1 -1
- package/lib/dom/dom-game-object.js.map +1 -1
- package/lib/dom/dom-sprite.js.map +1 -1
- package/lib/node/core/game-object.js.map +1 -1
- package/lib/node/core/renderable.js +2 -0
- package/lib/node/core/renderable.js.map +1 -1
- package/lib/node/ext/animated-sprite.js +16 -15
- package/lib/node/ext/animated-sprite.js.map +1 -1
- package/lib/node/ext/bitmap-text.js +29 -19
- package/lib/node/ext/bitmap-text.js.map +1 -1
- package/lib/node/ext/spine.js.map +1 -1
- package/lib/node/ext/sprite.js.map +1 -1
- package/lib/node/physics/physics-object.js +8 -1
- package/lib/node/physics/physics-object.js.map +1 -1
- package/lib/node/physics/physics-world.js.map +1 -1
- package/lib/types/dom/dom-animated-sprite.d.ts +1 -1
- package/lib/types/dom/dom-animated-sprite.d.ts.map +1 -1
- package/lib/types/dom/dom-game-object.d.ts +1 -1
- package/lib/types/dom/dom-game-object.d.ts.map +1 -1
- package/lib/types/dom/dom-sprite.d.ts +1 -1
- package/lib/types/dom/dom-sprite.d.ts.map +1 -1
- package/lib/types/node/core/game-object.d.ts +1 -1
- package/lib/types/node/core/game-object.d.ts.map +1 -1
- package/lib/types/node/core/renderable.d.ts +2 -0
- package/lib/types/node/core/renderable.d.ts.map +1 -1
- package/lib/types/node/ext/animated-sprite.d.ts +1 -1
- package/lib/types/node/ext/animated-sprite.d.ts.map +1 -1
- package/lib/types/node/ext/bitmap-text.d.ts +4 -2
- package/lib/types/node/ext/bitmap-text.d.ts.map +1 -1
- package/lib/types/node/ext/spine.d.ts +1 -1
- package/lib/types/node/ext/spine.d.ts.map +1 -1
- package/lib/types/node/ext/sprite.d.ts +1 -1
- package/lib/types/node/ext/sprite.d.ts.map +1 -1
- package/lib/types/node/physics/physics-object.d.ts +2 -1
- package/lib/types/node/physics/physics-object.d.ts.map +1 -1
- package/lib/types/node/physics/physics-world.d.ts +1 -1
- package/lib/types/node/physics/physics-world.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/dom/dom-animated-sprite.ts +1 -1
- package/src/dom/dom-game-object.ts +1 -1
- package/src/dom/dom-sprite.ts +1 -1
- package/src/node/core/game-object.ts +1 -1
- package/src/node/core/renderable.ts +3 -0
- package/src/node/ext/animated-sprite.ts +18 -17
- package/src/node/ext/bitmap-text.ts +37 -21
- package/src/node/ext/spine.ts +1 -1
- package/src/node/ext/sprite.ts +1 -1
- package/src/node/physics/physics-object.ts +9 -2
- package/src/node/physics/physics-world.ts +1 -1
|
@@ -12,7 +12,7 @@ export type CharacterOptions = {
|
|
|
12
12
|
hurtbox: RectangleCollider
|
|
13
13
|
} & PhysicsObjectOptions
|
|
14
14
|
|
|
15
|
-
export abstract class Character<E extends EventMap =
|
|
15
|
+
export abstract class Character<E extends EventMap = {}> extends PhysicsObject<E & {
|
|
16
16
|
changeHp: (damage: number) => void
|
|
17
17
|
dead: () => void
|
|
18
18
|
}> {
|
|
@@ -12,7 +12,7 @@ export type CharacterOptions = {
|
|
|
12
12
|
hurtbox: RectangleCollider
|
|
13
13
|
} & PhysicsObjectOptions
|
|
14
14
|
|
|
15
|
-
export abstract class Character<E extends EventMap =
|
|
15
|
+
export abstract class Character<E extends EventMap = {}> extends PhysicsObject<E & {
|
|
16
16
|
changeHp: (damage: number) => void
|
|
17
17
|
dead: () => void
|
|
18
18
|
}> {
|
|
@@ -21,7 +21,7 @@ export type CharacterOptions = {
|
|
|
21
21
|
hurtbox: RectangleCollider
|
|
22
22
|
} & PhysicsObjectOptions
|
|
23
23
|
|
|
24
|
-
export abstract class Character<E extends EventMap =
|
|
24
|
+
export abstract class Character<E extends EventMap = {}> extends GameObject<E & {
|
|
25
25
|
changeHp: (damage: number) => void
|
|
26
26
|
dead: () => void
|
|
27
27
|
}> {
|
|
@@ -18,7 +18,7 @@ export type CharacterOptions = {
|
|
|
18
18
|
separationStrength?: number
|
|
19
19
|
} & PhysicsObjectOptions
|
|
20
20
|
|
|
21
|
-
export abstract class Character<E extends EventMap =
|
|
21
|
+
export abstract class Character<E extends EventMap = {}> extends GameObject<E & {
|
|
22
22
|
changeHp: (damage: number) => void
|
|
23
23
|
dead: () => void
|
|
24
24
|
}> {
|
|
@@ -12,7 +12,7 @@ export type CharacterOptions = {
|
|
|
12
12
|
hurtbox: RectangleCollider
|
|
13
13
|
} & PhysicsObjectOptions
|
|
14
14
|
|
|
15
|
-
export abstract class Character<E extends EventMap =
|
|
15
|
+
export abstract class Character<E extends EventMap = {}> extends PhysicsObject<E & {
|
|
16
16
|
changeHp: (damage: number) => void
|
|
17
17
|
dead: () => void
|
|
18
18
|
}> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom-animated-sprite.js","sourceRoot":"","sources":["../../src/dom/dom-animated-sprite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAwB,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAQtC,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"dom-animated-sprite.js","sourceRoot":"","sources":["../../src/dom/dom-animated-sprite.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventMap } from '@webtaku/event-emitter'\nimport { Animation, Atlas } from '../types/atlas'\nimport { DomGameObject, DomGameObjectOptions } from './dom-game-object'\nimport { domTextureLoader } from './dom-texture-loader'\nimport { setStyle } from './dom-utils'\n\nexport type DomAnimatedSpriteNodeOptions = {\n src: string\n atlas: Atlas\n animation: string\n} & DomGameObjectOptions\n\nexport class DomAnimatedSpriteNode<E extends EventMap = {}> extends DomGameObject<E & {\n animationend: (animation: string) => void\n}> {\n #src: string\n #atlas: Atlas\n #animation: string\n\n #animationData?: Animation\n #frameDuration?: number\n #elapsedTime = 0\n #currentFrameIdx = 0\n\n constructor(options: DomAnimatedSpriteNodeOptions) {\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 let texture\n if (domTextureLoader.checkCached(this.#src)) {\n texture = domTextureLoader.getCached(this.#src)\n } else {\n console.info(`Dom texture not preloaded. Loading now: ${this.#src}`)\n texture = await domTextureLoader.load(this.#src)\n }\n\n const a = this.#atlas.animations[this.#animation]\n this.#animationData = a\n this.#frameDuration = 1 / a.fps\n\n const frameName = a.frames[this.#currentFrameIdx]\n const frame = this.#atlas.frames[frameName]\n\n setStyle(this.el, !frameName || !texture ? { backgroundImage: 'none' } : {\n backgroundImage: `url(${this.#src})`,\n width: `${frame.w}px`,\n height: `${frame.h}px`,\n backgroundSize: `${texture.width}px ${texture.height}px`,\n backgroundPosition: `-${frame.x}px -${frame.y}px`\n })\n }\n\n override render(dt: number) {\n super.render(dt)\n\n const a = this.#animationData\n if (!a || a.frames.length === 0 || this.#frameDuration === undefined) return\n\n const lastIndex = a.frames.length - 1\n if (!a.loop && this.#currentFrameIdx === lastIndex) return\n\n this.#elapsedTime += dt\n if (this.#elapsedTime < this.#frameDuration) return\n\n while (this.#elapsedTime >= this.#frameDuration) {\n this.#elapsedTime -= this.#frameDuration\n\n if (this.#currentFrameIdx === lastIndex) {\n (this as any).emit('animationend', this.#animation)\n\n if (a.loop) {\n this.#currentFrameIdx = 0\n } else {\n this.#elapsedTime = 0\n break\n }\n } else {\n this.#currentFrameIdx++\n }\n }\n\n const frameName = a.frames[this.#currentFrameIdx]\n const frame = this.#atlas.frames[frameName]\n\n setStyle(this.el, {\n width: `${frame.w}px`,\n height: `${frame.h}px`,\n backgroundPosition: `-${frame.x}px -${frame.y}px`\n })\n }\n\n set src(src) {\n if (this.#src !== src) {\n domTextureLoader.release(this.#src)\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 domTextureLoader.release(this.#src)\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.#animationData = this.#atlas.animations[animation]\n this.#currentFrameIdx = 0\n this.#elapsedTime = 0\n }\n }\n\n get animation() { return this.#animation }\n\n override remove() {\n domTextureLoader.release(this.#src)\n super.remove()\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom-game-object.js","sourceRoot":"","sources":["../../src/dom/dom-game-object.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,MAAM,UAAU,eAAe,CAAC,CAAU;IACxC,OAAQ,CAAmB,CAAC,cAAc,KAAK,SAAS,CAAA;AAC1D,CAAC;AAgBD,MAAM,WAAY,SAAQ,QAAkB;IAC1C,cAAc,GAAG,IAAI,cAAc,EAAE,CAAA;IACrC,UAAU,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAA;IAE/B;QACE,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAA;IAClC,CAAC;CACF;AAED,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"dom-game-object.js","sourceRoot":"","sources":["../../src/dom/dom-game-object.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,MAAM,UAAU,eAAe,CAAC,CAAU;IACxC,OAAQ,CAAmB,CAAC,cAAc,KAAK,SAAS,CAAA;AAC1D,CAAC;AAgBD,MAAM,WAAY,SAAQ,QAAkB;IAC1C,cAAc,GAAG,IAAI,cAAc,EAAE,CAAA;IACrC,UAAU,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAA;IAE/B;QACE,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAA;IAClC,CAAC;CACF;AAED,MAAM,OAAO,aAAuC,SAAQ,QAAW;IAC3D,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAE5C,eAAe,GAAG,IAAI,cAAc,EAAE,CAAA;IACtC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAA;IACrC,KAAK,GAAG,CAAC,CAAA;IACT,UAAU,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAA;IAC/B,SAAS,GAAG,KAAK,CAAA;IAEjB,YAAY,OAA8B;QACxC,KAAK,EAAE,CAAA;QAEP,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE;YAChB,QAAQ,EAAE,UAAU;YACpB,IAAI,EAAE,KAAK;YACX,GAAG,EAAE,KAAK;YACV,MAAM,EAAE,GAAG;YACX,SAAS,EAAE,uBAAuB;SACnC,CAAC,CAAA;QAEF,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,CAAC,KAAK,SAAS;gBAAE,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAA;YAC/C,IAAI,OAAO,CAAC,CAAC,KAAK,SAAS;gBAAE,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAA;YAC/C,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;YAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;gBAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;YAC9D,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;gBAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;YAC9D,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;gBAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;YAC9D,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;gBAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;YAC9D,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;gBAAE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;YACpE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;YAE3D,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAA;QAC5C,CAAC;IACH,CAAC;IAED,MAAM,CAAC,EAAU;QACf,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACf,IAAI,CAAC,qBAAqB,EAAE,CAAA;IAC9B,CAAC;IAED,qBAAqB;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,IAAI,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;YACvE,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAA;QACtD,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAA;YAE9B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG;;wBAER,EAAE,CAAC,CAAC,CAAC,CAAC;wBACN,EAAE,CAAC,CAAC,CAAC,CAAC;;gBAEd,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;iBAC1B,EAAE,CAAC,QAAQ,CAAC,CAAC;OACvB,CAAA;QACH,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK;YAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QAE/E,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,eAAe,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,qBAAqB,EAAE,CAAA;QAC3D,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAA;IAClC,CAAC;IAED,QAAQ,CAAC,MAAmB;QAC1B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,EAAE,CAAA;QAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAA;QAC5B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAA,CAAC,CAAC;IAEzC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAA,CAAC,CAAC;IAEzC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAA,CAAC,CAAC;IACjF,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAA,CAAC,CAAC;IAElD,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAA,CAAC,CAAC;IACjD,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAA,CAAC,CAAC;IAEnD,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAA,CAAC,CAAC;IACjD,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAA,CAAC,CAAC;IAEnD,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAA,CAAC,CAAC;IACjD,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAA,CAAC,CAAC;IAEnD,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAA,CAAC,CAAC;IACjD,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAA,CAAC,CAAC;IAEnD,IAAI,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,CAAC,CAAA,CAAC,CAAC;IACrD,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAA,CAAC,CAAC;CACxD","sourcesContent":["import { EventMap } from '@webtaku/event-emitter'\nimport { DirtyNumber } from '../node/core/dirty-number'\nimport { GameNode } from '../node/core/game-node'\nimport { LocalTransform, WorldTransform } from '../node/core/transform'\nimport { setStyle } from './dom-utils'\n\nexport function isDomGameObject(v: unknown): v is DomGameObject {\n return (v as DomGameObject).worldTransform !== undefined\n}\n\nexport type DomGameObjectOptions = {\n x?: number\n y?: number\n scale?: number\n scaleX?: number\n scaleY?: number\n pivotX?: number\n pivotY?: number\n rotation?: number\n\n alpha?: number\n useYSort?: boolean\n}\n\nclass DomRootNode extends GameNode<EventMap> {\n worldTransform = new WorldTransform()\n worldAlpha = new DirtyNumber(1)\n\n constructor() {\n super()\n this.worldTransform.x.v = 0\n this.worldTransform.y.v = 0\n this.worldTransform.resetDirty()\n }\n}\n\nexport class DomGameObject<E extends EventMap = {}> extends GameNode<E> {\n protected el = document.createElement('div')\n\n #localTransform = new LocalTransform()\n worldTransform = new WorldTransform()\n alpha = 1\n worldAlpha = new DirtyNumber(1)\n #useYSort = false\n\n constructor(options?: DomGameObjectOptions) {\n super()\n\n setStyle(this.el, {\n position: 'absolute',\n left: '50%',\n top: '50%',\n zIndex: '1',\n transform: 'translate(-50%, -50%)',\n })\n\n if (options) {\n if (options.x !== undefined) this.x = options.x\n if (options.y !== undefined) this.y = options.y\n if (options.scale !== undefined) this.scale = options.scale\n if (options.scaleX !== undefined) this.scaleX = options.scaleX\n if (options.scaleY !== undefined) this.scaleY = options.scaleY\n if (options.pivotX !== undefined) this.pivotX = options.pivotX\n if (options.pivotY !== undefined) this.pivotY = options.pivotY\n if (options.rotation !== undefined) this.rotation = options.rotation\n if (options.alpha !== undefined) this.alpha = options.alpha\n\n this.#useYSort = options.useYSort ?? false\n }\n }\n\n render(dt: number) {\n this.update(dt)\n this.#updateWorldTransform()\n }\n\n #updateWorldTransform() {\n const parent = this.parent\n if (parent && isDomGameObject(parent)) {\n this.worldTransform.update(parent.worldTransform, this.#localTransform)\n this.worldAlpha.v = parent.worldAlpha.v * this.alpha\n }\n\n if (this.worldTransform.dirty) {\n const wt = this.worldTransform\n\n this.el.style.transform = `\n translate(\n calc(-50% + ${wt.x.v}px),\n calc(-50% + ${wt.y.v}px)\n )\n scale(${wt.scaleX.v}, ${wt.scaleY.v})\n rotate(${wt.rotation.v}rad)\n `\n }\n if (this.worldAlpha.dirty) this.el.style.opacity = this.worldAlpha.v.toString()\n\n for (const child of this.children) {\n if (isDomGameObject(child)) child.#updateWorldTransform()\n }\n this.worldTransform.resetDirty()\n }\n\n attachTo(target: HTMLElement) {\n target.appendChild(this.el)\n this.parent = new DomRootNode()\n this.#updateWorldTransform()\n return this\n }\n\n set x(v) { this.#localTransform.x = v }\n get x() { return this.#localTransform.x }\n\n set y(v) { this.#localTransform.y = v }\n get y() { return this.#localTransform.y }\n\n set scale(v) { this.#localTransform.scaleX = v; this.#localTransform.scaleY = v }\n get scale() { return this.#localTransform.scaleX }\n\n set scaleX(v) { this.#localTransform.scaleX = v }\n get scaleX() { return this.#localTransform.scaleX }\n\n set scaleY(v) { this.#localTransform.scaleY = v }\n get scaleY() { return this.#localTransform.scaleY }\n\n set pivotX(v) { this.#localTransform.pivotX = v }\n get pivotX() { return this.#localTransform.pivotX }\n\n set pivotY(v) { this.#localTransform.pivotY = v }\n get pivotY() { return this.#localTransform.pivotY }\n\n set rotation(v) { this.#localTransform.rotation = v }\n get rotation() { return this.#localTransform.rotation }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom-sprite.js","sourceRoot":"","sources":["../../src/dom/dom-sprite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAwB,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAMtC,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"dom-sprite.js","sourceRoot":"","sources":["../../src/dom/dom-sprite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAwB,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAMtC,MAAM,OAAO,aAAuC,SAAQ,aAAgB;IAC1E,IAAI,CAAQ;IAEZ,YAAY,OAA6B;QACvC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAA;QACvB,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,OAAO,CAAA;QACX,IAAI,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACjD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,2CAA2C,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;YACpE,OAAO,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClD,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACzD,eAAe,EAAE,OAAO,IAAI,CAAC,IAAI,GAAG;YACpC,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI;YAC3B,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,IAAI;YAC7B,cAAc,EAAE,GAAG,OAAO,CAAC,KAAK,MAAM,OAAO,CAAC,MAAM,IAAI;SACzD,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,GAAG;QACT,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACtB,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACnC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;YACf,IAAI,CAAC,KAAK,EAAE,CAAA;QACd,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,CAAA,CAAC,CAAC;IAErB,MAAM;QACb,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnC,KAAK,CAAC,MAAM,EAAE,CAAA;IAChB,CAAC;CACF","sourcesContent":["import { EventMap } from '@webtaku/event-emitter'\nimport { DomGameObject, DomGameObjectOptions } from './dom-game-object'\nimport { domTextureLoader } from './dom-texture-loader'\nimport { setStyle } from './dom-utils'\n\nexport type DomSpriteNodeOptions = {\n src: string\n} & DomGameObjectOptions\n\nexport class DomSpriteNode<E extends EventMap = {}> extends DomGameObject<E> {\n #src: string\n\n constructor(options: DomSpriteNodeOptions) {\n super(options)\n this.#src = options.src\n this.#load()\n }\n\n async #load() {\n let texture\n if (domTextureLoader.checkCached(this.#src)) {\n texture = domTextureLoader.getCached(this.#src)\n } else {\n console.info(`Dom texture not preloaded. Loading now: ${this.#src}`)\n texture = await domTextureLoader.load(this.#src)\n }\n\n setStyle(this.el, !texture ? { backgroundImage: 'none' } : {\n backgroundImage: `url(${this.#src})`,\n width: `${texture.width}px`,\n height: `${texture.height}px`,\n backgroundSize: `${texture.width}px ${texture.height}px`,\n })\n }\n\n set src(src) {\n if (this.#src !== src) {\n domTextureLoader.release(this.#src)\n this.#src = src\n this.#load()\n }\n }\n\n get src() { return this.#src }\n\n override remove() {\n domTextureLoader.release(this.#src)\n super.remove()\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game-object.js","sourceRoot":"","sources":["../../../src/node/core/game-object.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAA4B,MAAM,iBAAiB,CAAA;AAI7E,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"game-object.js","sourceRoot":"","sources":["../../../src/node/core/game-object.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAA4B,MAAM,iBAAiB,CAAA;AAI7E,MAAM,OAAO,UAAoC,SAAQ,iBAAmC;IAC1F,YAAY,OAA2B;QACrC,KAAK,CAAC,IAAI,aAAa,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAA;IACrE,CAAC;CACF","sourcesContent":["import { EventMap } from '@webtaku/event-emitter'\nimport { Container as PixiContainer } from 'pixi.js'\nimport { TransformableNode, TransformableNodeOptions } from './transformable'\n\nexport type GameObjectOptions = {} & TransformableNodeOptions\n\nexport class GameObject<E extends EventMap = {}> extends TransformableNode<PixiContainer, E> {\n constructor(options?: GameObjectOptions) {\n super(new PixiContainer({ sortableChildren: true }), options ?? {})\n }\n}\n"]}
|
|
@@ -55,5 +55,7 @@ export class RenderableNode extends GameNode {
|
|
|
55
55
|
}
|
|
56
56
|
set tint(t) { this._pixiContainer.tint = t; }
|
|
57
57
|
get tint() { return this._pixiContainer.tint; }
|
|
58
|
+
hide() { this._pixiContainer.visible = false; }
|
|
59
|
+
show() { this._pixiContainer.visible = true; }
|
|
58
60
|
}
|
|
59
61
|
//# sourceMappingURL=renderable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderable.js","sourceRoot":"","sources":["../../../src/node/core/renderable.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,UAAU,gBAAgB,CAAC,CAAU;IACzC,OAAQ,CAA6C,CAAC,cAAc,KAAK,SAAS,CAAA;AACpF,CAAC;AAED,MAAM,OAAgB,cAA4D,SAAQ,QAAW;IACnG,SAAS,CAAW;IACpB,cAAc,CAAG;IAEjB,cAAc,GAAG,IAAI,cAAc,EAAE,CAAA;IACrC,UAAU,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAA;IAE/B,YAAY,aAAgB;QAC1B,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,cAAc,GAAG,aAAa,CAAA;IACrC,CAAC;IAED,IAAc,QAAQ,CAAC,QAA8B;QACnD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QAEzB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAc,QAAQ;QACpB,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAEQ,GAAG,CAAC,GAAG,QAA8B;QAC5C,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAA;QAEtB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;gBAElD,SAAS;gBACT,IAAI,IAAI,CAAC,SAAS;oBAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAA;YACrD,CAAC;QACH,CAAC;IACH,CAAC;IAEQ,MAAM;QACb,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/C,KAAK,CAAC,MAAM,EAAE,CAAA;IAChB,CAAC;IAED,qBAAqB;QACnB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,gBAAgB,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,qBAAqB,EAAE,CAAA;QAC5D,CAAC;IACH,CAAC;IAED,yBAAyB;QACvB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,gBAAgB,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,yBAAyB,EAAE,CAAA;QAChE,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAA;QAChC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAA;IAC9B,CAAC;IAED,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,CAAA,CAAC,CAAC;IAC5C,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAA,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"renderable.js","sourceRoot":"","sources":["../../../src/node/core/renderable.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,UAAU,gBAAgB,CAAC,CAAU;IACzC,OAAQ,CAA6C,CAAC,cAAc,KAAK,SAAS,CAAA;AACpF,CAAC;AAED,MAAM,OAAgB,cAA4D,SAAQ,QAAW;IACnG,SAAS,CAAW;IACpB,cAAc,CAAG;IAEjB,cAAc,GAAG,IAAI,cAAc,EAAE,CAAA;IACrC,UAAU,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAA;IAE/B,YAAY,aAAgB;QAC1B,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,cAAc,GAAG,aAAa,CAAA;IACrC,CAAC;IAED,IAAc,QAAQ,CAAC,QAA8B;QACnD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QAEzB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAc,QAAQ;QACpB,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAEQ,GAAG,CAAC,GAAG,QAA8B;QAC5C,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAA;QAEtB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;gBAElD,SAAS;gBACT,IAAI,IAAI,CAAC,SAAS;oBAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAA;YACrD,CAAC;QACH,CAAC;IACH,CAAC;IAEQ,MAAM;QACb,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/C,KAAK,CAAC,MAAM,EAAE,CAAA;IAChB,CAAC;IAED,qBAAqB;QACnB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,gBAAgB,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,qBAAqB,EAAE,CAAA;QAC5D,CAAC;IACH,CAAC;IAED,yBAAyB;QACvB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,gBAAgB,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,yBAAyB,EAAE,CAAA;QAChE,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAA;QAChC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAA;IAC9B,CAAC;IAED,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,CAAA,CAAC,CAAC;IAC5C,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAA,CAAC,CAAC;IAE9C,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,KAAK,CAAA,CAAC,CAAC;IAC9C,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAA,CAAC,CAAC;CAC9C","sourcesContent":["import { EventMap } from '@webtaku/event-emitter'\nimport { Container as PixiContainer } from 'pixi.js'\nimport { Renderer } from '../../renderer/renderer'\nimport { DirtyNumber } from './dirty-number'\nimport { GameNode } from './game-node'\nimport { WorldTransform } from './transform'\n\nexport function isRenderableNode(v: unknown): v is RenderableNode<PixiContainer, EventMap> {\n return (v as RenderableNode<PixiContainer, EventMap>).worldTransform !== undefined\n}\n\nexport abstract class RenderableNode<C extends PixiContainer, E extends EventMap> extends GameNode<E> {\n #renderer?: Renderer\n _pixiContainer: C\n\n worldTransform = new WorldTransform()\n worldAlpha = new DirtyNumber(1)\n\n constructor(pixiContainer: C) {\n super()\n this._pixiContainer = pixiContainer\n }\n\n protected set renderer(renderer: Renderer | undefined) {\n this.#renderer = renderer\n\n for (const child of this.children) {\n if (isRenderableNode(child)) {\n child.renderer = renderer\n }\n }\n }\n\n protected get renderer() {\n return this.#renderer\n }\n\n override add(...children: GameNode<EventMap>[]) {\n super.add(...children)\n\n for (const child of children) {\n if (isRenderableNode(child)) {\n this._pixiContainer.addChild(child._pixiContainer)\n\n // 렌더러 설정\n if (this.#renderer) child.renderer = this.#renderer\n }\n }\n }\n\n override remove() {\n this._pixiContainer.destroy({ children: true })\n super.remove()\n }\n\n _updateWorldTransform() {\n for (const child of this.children) {\n if (isRenderableNode(child)) child._updateWorldTransform()\n }\n }\n\n _resetWorldTransformDirty() {\n for (const child of this.children) {\n if (isRenderableNode(child)) child._resetWorldTransformDirty()\n }\n this.worldTransform.resetDirty()\n this.worldAlpha.resetDirty()\n }\n\n set tint(t) { this._pixiContainer.tint = t }\n get tint() { return this._pixiContainer.tint }\n\n hide() { this._pixiContainer.visible = false }\n show() { this._pixiContainer.visible = true }\n}\n"]}
|
|
@@ -29,22 +29,23 @@ export class AnimatedSpriteNode extends GameObject {
|
|
|
29
29
|
#updateAnimation() {
|
|
30
30
|
this.#sprite?.destroy();
|
|
31
31
|
this.#sprite = undefined;
|
|
32
|
-
if (this.#sheet)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const a = this.#atlas.animations[this.#animation];
|
|
38
|
-
const s = new PixiAnimatedSprite(this.#sheet.animations[this.#animation]);
|
|
39
|
-
s.anchor.set(0.5, 0.5);
|
|
40
|
-
s.loop = a.loop;
|
|
41
|
-
s.animationSpeed = a.fps / 60;
|
|
42
|
-
s.play();
|
|
43
|
-
s.onLoop = () => this.emit('animationend', this.#animation);
|
|
44
|
-
s.onComplete = () => this.emit('animationend', this.#animation);
|
|
45
|
-
this._pixiContainer.addChild(s);
|
|
46
|
-
this.#sprite = s;
|
|
32
|
+
if (!this.#sheet)
|
|
33
|
+
return;
|
|
34
|
+
if (!this.#sheet.animations[this.#animation]) {
|
|
35
|
+
console.error(`Animation not found: ${this.#animation}`);
|
|
36
|
+
return;
|
|
47
37
|
}
|
|
38
|
+
const a = this.#atlas.animations[this.#animation];
|
|
39
|
+
const s = new PixiAnimatedSprite(this.#sheet.animations[this.#animation]);
|
|
40
|
+
s.anchor.set(0.5, 0.5);
|
|
41
|
+
s.zIndex = -999999;
|
|
42
|
+
s.loop = a.loop;
|
|
43
|
+
s.animationSpeed = a.fps / 60;
|
|
44
|
+
s.play();
|
|
45
|
+
s.onLoop = () => this.emit('animationend', this.#animation);
|
|
46
|
+
s.onComplete = () => this.emit('animationend', this.#animation);
|
|
47
|
+
this._pixiContainer.addChild(s);
|
|
48
|
+
this.#sprite = s;
|
|
48
49
|
}
|
|
49
50
|
set src(src) {
|
|
50
51
|
if (this.#src !== src) {
|
|
@@ -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,
|
|
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\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 s.animationSpeed = a.fps / 60\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 remove() {\n spritesheetLoader.release(this.#atlasId)\n super.remove()\n }\n}\n"]}
|
|
@@ -5,6 +5,7 @@ export class BitmapTextNode extends GameObject {
|
|
|
5
5
|
#fnt;
|
|
6
6
|
#src;
|
|
7
7
|
#text;
|
|
8
|
+
#font;
|
|
8
9
|
#sprites = [];
|
|
9
10
|
constructor(options) {
|
|
10
11
|
super(options);
|
|
@@ -13,21 +14,13 @@ export class BitmapTextNode extends GameObject {
|
|
|
13
14
|
this.#text = options.text;
|
|
14
15
|
this.#load();
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
-
let font;
|
|
18
|
-
if (bitmapFontLoader.checkCached(this.#fnt)) {
|
|
19
|
-
font = bitmapFontLoader.getCached(this.#fnt);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
console.info(`Bitmap font not preloaded. Loading now: ${this.#fnt}`);
|
|
23
|
-
font = await bitmapFontLoader.load(this.#fnt, this.#src);
|
|
24
|
-
}
|
|
25
|
-
if (!font)
|
|
26
|
-
return;
|
|
17
|
+
#updateText() {
|
|
27
18
|
for (const sprite of this.#sprites) {
|
|
28
19
|
sprite.destroy();
|
|
29
20
|
}
|
|
30
21
|
this.#sprites = [];
|
|
22
|
+
if (!this.#font || !this.#text)
|
|
23
|
+
return;
|
|
31
24
|
let xPos = 0, yPos = 0;
|
|
32
25
|
let minX = Infinity, minY = Infinity;
|
|
33
26
|
let maxX = -Infinity, maxY = -Infinity;
|
|
@@ -35,15 +28,15 @@ export class BitmapTextNode extends GameObject {
|
|
|
35
28
|
const charCode = this.#text.charCodeAt(i);
|
|
36
29
|
if (charCode === 10) {
|
|
37
30
|
xPos = 0;
|
|
38
|
-
yPos += font.lineHeight;
|
|
31
|
+
yPos += this.#font.lineHeight;
|
|
39
32
|
continue;
|
|
40
33
|
}
|
|
41
|
-
const c = font.chars[charCode];
|
|
34
|
+
const c = this.#font.chars[charCode];
|
|
42
35
|
if (!c)
|
|
43
36
|
continue;
|
|
44
37
|
const frame = new PixiRectangle(c.x, c.y, c.width, c.height);
|
|
45
|
-
const texture = new PixiTexture({ source: font.texture.source, frame });
|
|
46
|
-
const sprite = new PixiSprite(texture);
|
|
38
|
+
const texture = new PixiTexture({ source: this.#font.texture.source, frame });
|
|
39
|
+
const sprite = new PixiSprite({ texture, zIndex: -999999 });
|
|
47
40
|
const x0 = xPos + c.xoffset;
|
|
48
41
|
const y0 = yPos + c.yoffset;
|
|
49
42
|
sprite.x = x0;
|
|
@@ -69,14 +62,24 @@ export class BitmapTextNode extends GameObject {
|
|
|
69
62
|
maxX = 0;
|
|
70
63
|
maxY = 0;
|
|
71
64
|
}
|
|
72
|
-
const
|
|
73
|
-
const
|
|
65
|
+
const cx = (minX + maxX) / 2;
|
|
66
|
+
const cy = (minY + maxY) / 2;
|
|
74
67
|
for (const s of this.#sprites) {
|
|
75
|
-
s.x -=
|
|
76
|
-
s.y -=
|
|
68
|
+
s.x -= cx;
|
|
69
|
+
s.y -= cy;
|
|
77
70
|
this._pixiContainer.addChild(s);
|
|
78
71
|
}
|
|
79
72
|
}
|
|
73
|
+
async #load() {
|
|
74
|
+
if (bitmapFontLoader.checkCached(this.#fnt)) {
|
|
75
|
+
this.#font = bitmapFontLoader.getCached(this.#fnt);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.info(`Bitmap font not preloaded. Loading now: ${this.#fnt}`);
|
|
79
|
+
this.#font = await bitmapFontLoader.load(this.#fnt, this.#src);
|
|
80
|
+
}
|
|
81
|
+
this.#updateText();
|
|
82
|
+
}
|
|
80
83
|
changeFont(fnt, src) {
|
|
81
84
|
if (this.#fnt !== fnt || this.#src !== src) {
|
|
82
85
|
bitmapFontLoader.release(this.#fnt);
|
|
@@ -85,6 +88,13 @@ export class BitmapTextNode extends GameObject {
|
|
|
85
88
|
this.#load();
|
|
86
89
|
}
|
|
87
90
|
}
|
|
91
|
+
set text(text) {
|
|
92
|
+
this.#text = text;
|
|
93
|
+
this.#updateText();
|
|
94
|
+
}
|
|
95
|
+
get text() {
|
|
96
|
+
return this.#text;
|
|
97
|
+
}
|
|
88
98
|
remove() {
|
|
89
99
|
bitmapFontLoader.release(this.#fnt);
|
|
90
100
|
super.remove();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitmap-text.js","sourceRoot":"","sources":["../../../src/node/ext/bitmap-text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,IAAI,UAAU,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,SAAS,CAAA;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"bitmap-text.js","sourceRoot":"","sources":["../../../src/node/ext/bitmap-text.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventMap } from '@webtaku/event-emitter'\nimport { Rectangle as PixiRectangle, Sprite as PixiSprite, Texture as PixiTexture } from 'pixi.js'\nimport { bitmapFontLoader } from '../../asset/loaders/bitmap-font'\nimport { BitmapFont } from '../../types/bitmap-font'\nimport { GameObject, GameObjectOptions } from '../core/game-object'\n\nexport type BitmapTextNodeOptions = {\n fnt: string\n src: string\n text?: string\n} & GameObjectOptions\n\nexport class BitmapTextNode<E extends EventMap = {}> extends GameObject<E> {\n #fnt: string\n #src: string\n #text?: string\n\n #font?: BitmapFont\n #sprites: PixiSprite[] = []\n\n constructor(options: BitmapTextNodeOptions) {\n super(options)\n this.#fnt = options.fnt\n this.#src = options.src\n this.#text = options.text\n this.#load()\n }\n\n #updateText() {\n for (const sprite of this.#sprites) {\n sprite.destroy()\n }\n this.#sprites = []\n\n if (!this.#font || !this.#text) return\n\n let xPos = 0, yPos = 0\n let minX = Infinity, minY = Infinity\n let maxX = -Infinity, maxY = -Infinity\n\n for (let i = 0; i < this.#text.length; i++) {\n const charCode = this.#text.charCodeAt(i)\n\n if (charCode === 10) {\n xPos = 0\n yPos += this.#font.lineHeight\n continue\n }\n\n const c = this.#font.chars[charCode]\n if (!c) continue\n\n const frame = new PixiRectangle(c.x, c.y, c.width, c.height)\n const texture = new PixiTexture({ source: this.#font.texture.source, frame })\n const sprite = new PixiSprite({ texture, zIndex: -999999 })\n\n const x0 = xPos + c.xoffset\n const y0 = yPos + c.yoffset\n\n sprite.x = x0\n sprite.y = y0\n\n this.#sprites.push(sprite)\n\n const x1 = x0 + c.width\n const y1 = y0 + c.height\n\n if (x0 < minX) minX = x0\n if (y0 < minY) minY = y0\n if (x1 > maxX) maxX = x1\n if (y1 > maxY) maxY = y1\n\n xPos += c.xadvance\n }\n\n if (minX === Infinity) {\n minX = 0\n minY = 0\n }\n\n if (maxX === -Infinity) {\n maxX = 0\n maxY = 0\n }\n\n const cx = (minX + maxX) / 2\n const cy = (minY + maxY) / 2\n\n for (const s of this.#sprites) {\n s.x -= cx\n s.y -= cy\n this._pixiContainer.addChild(s)\n }\n }\n\n async #load() {\n if (bitmapFontLoader.checkCached(this.#fnt)) {\n this.#font = bitmapFontLoader.getCached(this.#fnt)\n } else {\n console.info(`Bitmap font not preloaded. Loading now: ${this.#fnt}`)\n this.#font = await bitmapFontLoader.load(this.#fnt, this.#src)\n }\n\n this.#updateText()\n }\n\n changeFont(fnt: string, src: string) {\n if (this.#fnt !== fnt || this.#src !== src) {\n bitmapFontLoader.release(this.#fnt)\n this.#fnt = fnt\n this.#src = src\n this.#load()\n }\n }\n\n set text(text: string | undefined) {\n this.#text = text\n this.#updateText()\n }\n\n get text() {\n return this.#text\n }\n\n override remove() {\n bitmapFontLoader.release(this.#fnt)\n super.remove()\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spine.js","sourceRoot":"","sources":["../../../src/node/ext/spine.ts"],"names":[],"mappings":"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","sourcesContent":["import { AtlasAttachmentLoader, Spine as PixiSpine, SkeletonBinary, SkeletonJson, Skin, SpineTexture, TextureAtlas } from '@esotericsoftware/spine-pixi-v8'\nimport { EventMap } from '@webtaku/event-emitter'\nimport { Texture } from 'pixi.js'\nimport { binaryLoader } from '../../asset/loaders/binary'\nimport { textLoader } from '../../asset/loaders/text'\nimport { textureLoader } from '../../asset/loaders/texture'\nimport { GameObject, GameObjectOptions } from '../core/game-object'\n\nexport type SpineNodeOptions = {\n atlas: string\n texture: string | Record<string, string>\n\n rawSkeletonData?: any\n skel?: string\n json?: string\n\n skins?: string[]\n animation?: string\n loop?: boolean\n} & GameObjectOptions\n\nexport class SpineNode<E extends EventMap = EventMap> extends GameObject<E & {\n animationend: (animation: string) => void\n}> {\n #atlas: string\n #texture: string | Record<string, string>\n\n #rawSkeletonData?: any\n #skel?: string\n #json?: string\n\n #skins?: string[]\n #animation?: string\n #loop?: boolean\n\n #spine?: PixiSpine\n\n constructor(options: SpineNodeOptions) {\n super(options)\n this.#atlas = options.atlas\n this.#texture = options.texture\n this.#rawSkeletonData = options.rawSkeletonData\n this.#skel = options.skel\n this.#json = options.json\n this.#skins = options.skins\n this.#animation = options.animation\n this.#loop = options.loop\n this.#load()\n }\n\n #buildSkeletonData(\n atlasText: string,\n texture: Texture | undefined,\n textures: Record<string, Texture> | undefined,\n skeletonBinary: Uint8Array | undefined,\n textSkeletonData: string | undefined\n ) {\n if (!atlasText) return undefined\n if (!texture && !textures) return undefined\n if (!this.rawSkeletonData && !skeletonBinary && !textSkeletonData) return undefined\n\n // Create TextureAtlas and bind pages to provided textures\n const atlas = new TextureAtlas(atlasText)\n atlas.pages.forEach((page) => {\n if (texture) {\n page.setTexture(SpineTexture.from(texture.source))\n } else if (textures) {\n const t = textures[page.name]\n if (!t) throw new Error(`Missing texture for atlas page: ${page.name}`)\n page.setTexture(SpineTexture.from(t.source))\n }\n })\n\n const atlasLoader = new AtlasAttachmentLoader(atlas)\n\n // Parse skeleton data depending on available source\n if (this.rawSkeletonData) {\n const jsonLoader = new SkeletonJson(atlasLoader)\n return jsonLoader.readSkeletonData(this.rawSkeletonData)\n }\n if (skeletonBinary) {\n const binLoader = new SkeletonBinary(atlasLoader)\n return binLoader.readSkeletonData(skeletonBinary)\n }\n if (textSkeletonData) {\n const jsonLoader = new SkeletonJson(atlasLoader)\n return jsonLoader.readSkeletonData(textSkeletonData)\n }\n return undefined\n }\n\n #getCachedSkeletonData() {\n try {\n if (!this.#rawSkeletonData && !this.#skel && !this.#json) return undefined\n if (!textLoader.checkCached(this.#atlas)) return undefined\n\n const atlasText = textLoader.getCached(this.#atlas)!\n\n let texture: Texture | undefined\n let textures: Record<string, Texture> | undefined\n\n if (typeof this.#texture === 'string') {\n if (!textureLoader.checkCached(this.#texture)) return undefined\n texture = textureLoader.getCached(this.#texture)!\n } else if (this.#texture) {\n textures = {}\n for (const [key, path] of Object.entries(this.#texture)) {\n if (!textureLoader.checkCached(path)) return undefined\n textures[key] = textureLoader.getCached(path)!\n }\n } else {\n return undefined\n }\n\n let skeletonBinary: Uint8Array | undefined\n let textSkeletonData: string | undefined\n\n if (!this.#rawSkeletonData) {\n if (this.#skel) {\n if (!binaryLoader.checkCached(this.#skel)) return undefined\n skeletonBinary = binaryLoader.getCached(this.#skel)!\n } else if (this.#json) {\n if (!textLoader.checkCached(this.#json)) return undefined\n textSkeletonData = textLoader.getCached(this.#json)!\n }\n }\n\n return this.#buildSkeletonData(\n atlasText,\n texture,\n textures,\n skeletonBinary,\n textSkeletonData,\n )\n } catch (e) {\n console.error('Failed to build skeleton data from cache:', e)\n return undefined\n }\n }\n\n async #loadSkeletonData() {\n if (!this.#rawSkeletonData && !this.#skel && !this.#json) return undefined\n\n const promises: Promise<any>[] = []\n\n let atlasText: string | undefined\n let skeletonBinary: Uint8Array | undefined\n let textSkeletonData: string | undefined\n let texture: Texture | undefined\n let textures: Record<string, Texture> | undefined\n\n // Load atlas (text)\n if (!textLoader.checkCached(this.#atlas)) console.info(`Atlas not preloaded. Loading now: ${this.#atlas}`)\n promises.push((async () => (atlasText = await textLoader.load(this.#atlas)))())\n\n // Load skeleton (raw / binary / json)\n if (this.#rawSkeletonData) {\n // already provided\n } else if (this.#skel) {\n if (!binaryLoader.checkCached(this.#skel)) console.info(`Skeleton not preloaded. Loading now: ${this.#skel}`)\n promises.push((async () => (skeletonBinary = await binaryLoader.load(this.#skel!)))())\n } else if (this.#json) {\n if (!textLoader.checkCached(this.#json)) console.info(`Skeleton not preloaded. Loading now: ${this.#json}`)\n promises.push((async () => (textSkeletonData = await textLoader.load(this.#json!)))())\n } else {\n console.error('Either skel or json must be provided')\n return undefined\n }\n\n // Load textures (single or multiple)\n if (typeof this.#texture === 'string') {\n if (!textureLoader.checkCached(this.#texture)) console.info(`Texture not preloaded. Loading now: ${this.#texture}`)\n promises.push((async () => (texture = await textureLoader.load(this.#texture as string)))())\n } else if (this.#texture) {\n textures = {}\n for (const [key, path] of Object.entries(this.#texture)) {\n if (!textureLoader.checkCached(path)) console.info(`Texture not preloaded. Loading now: ${path}`)\n promises.push((async () => {\n const t = await textureLoader.load(path)\n if (t) textures![key] = t\n })())\n }\n }\n\n await Promise.all(promises)\n\n if (!atlasText) return undefined\n if (!texture && !(textures && Object.keys(textures).length)) return undefined\n\n return this.#buildSkeletonData(\n atlasText,\n texture,\n textures,\n skeletonBinary,\n textSkeletonData,\n )\n }\n\n async #load() {\n let skeletonData = this.#getCachedSkeletonData()\n if (!skeletonData) {\n skeletonData = await this.#loadSkeletonData()\n }\n\n this.#spine?.destroy()\n this.#spine = undefined\n\n if (skeletonData) {\n const s = new PixiSpine(skeletonData)\n s.state.addListener({\n complete: (e) => (this as any).emit('animationend', e.animation?.name ?? '')\n })\n this.#spine = s\n this.#updateAnimation()\n this.#updateSkins()\n this._pixiContainer.addChild(s)\n }\n }\n\n #updateSkins() {\n const s = this.#spine?.skeleton\n if (s && this.#skins) {\n const newSkin = new Skin('combined-skin')\n for (const skinName of this.#skins) {\n const skin = s.data.findSkin(skinName)\n if (skin) newSkin.addSkin(skin)\n }\n s.setSkin(newSkin)\n s.setSlotsToSetupPose()\n }\n }\n\n #updateAnimation() {\n const s = this.#spine\n if (s && this.#animation) {\n s.state.setAnimation(0, this.#animation, this.#loop ?? true)\n s.state.apply(s.skeleton)\n }\n }\n\n set atlas(atlas) {\n if (this.#atlas !== atlas) {\n this.#atlas = atlas\n this.#load()\n }\n }\n\n get atlas() { return this.#atlas }\n\n set texture(texture) {\n if (this.#texture !== texture) {\n this.#texture = texture\n this.#load()\n }\n }\n\n get texture() { return this.#texture }\n\n set rawSkeletonData(rawSkeletonData) {\n if (this.#rawSkeletonData !== rawSkeletonData) {\n this.#rawSkeletonData = rawSkeletonData\n this.#load()\n }\n }\n\n get rawSkeletonData() { return this.#rawSkeletonData }\n\n set skel(skel) {\n if (this.#skel !== skel) {\n this.#skel = skel\n this.#load()\n }\n }\n\n get skel() { return this.#skel }\n\n set json(json) {\n if (this.#json !== json) {\n this.#json = json\n this.#load()\n }\n }\n\n get json() { return this.#json }\n\n set skins(skins) {\n if (this.#skins !== skins) {\n this.#skins = skins\n this.#updateSkins()\n }\n }\n\n get skins() { return this.#skins }\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 set loop(loop) {\n if (this.#loop !== loop) {\n this.#loop = loop\n this.#updateAnimation()\n }\n }\n\n get loop() { return this.#loop }\n\n remove() {\n if (typeof this.#texture === 'string') {\n textureLoader.release(this.#texture)\n } else if (this.#texture) {\n for (const path of Object.values(this.#texture)) {\n textureLoader.release(path)\n }\n }\n super.remove()\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"spine.js","sourceRoot":"","sources":["../../../src/node/ext/spine.ts"],"names":[],"mappings":"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","sourcesContent":["import { AtlasAttachmentLoader, Spine as PixiSpine, SkeletonBinary, SkeletonJson, Skin, SpineTexture, TextureAtlas } from '@esotericsoftware/spine-pixi-v8'\nimport { EventMap } from '@webtaku/event-emitter'\nimport { Texture } from 'pixi.js'\nimport { binaryLoader } from '../../asset/loaders/binary'\nimport { textLoader } from '../../asset/loaders/text'\nimport { textureLoader } from '../../asset/loaders/texture'\nimport { GameObject, GameObjectOptions } from '../core/game-object'\n\nexport type SpineNodeOptions = {\n atlas: string\n texture: string | Record<string, string>\n\n rawSkeletonData?: any\n skel?: string\n json?: string\n\n skins?: string[]\n animation?: string\n loop?: boolean\n} & GameObjectOptions\n\nexport class SpineNode<E extends EventMap = {}> extends GameObject<E & {\n animationend: (animation: string) => void\n}> {\n #atlas: string\n #texture: string | Record<string, string>\n\n #rawSkeletonData?: any\n #skel?: string\n #json?: string\n\n #skins?: string[]\n #animation?: string\n #loop?: boolean\n\n #spine?: PixiSpine\n\n constructor(options: SpineNodeOptions) {\n super(options)\n this.#atlas = options.atlas\n this.#texture = options.texture\n this.#rawSkeletonData = options.rawSkeletonData\n this.#skel = options.skel\n this.#json = options.json\n this.#skins = options.skins\n this.#animation = options.animation\n this.#loop = options.loop\n this.#load()\n }\n\n #buildSkeletonData(\n atlasText: string,\n texture: Texture | undefined,\n textures: Record<string, Texture> | undefined,\n skeletonBinary: Uint8Array | undefined,\n textSkeletonData: string | undefined\n ) {\n if (!atlasText) return undefined\n if (!texture && !textures) return undefined\n if (!this.rawSkeletonData && !skeletonBinary && !textSkeletonData) return undefined\n\n // Create TextureAtlas and bind pages to provided textures\n const atlas = new TextureAtlas(atlasText)\n atlas.pages.forEach((page) => {\n if (texture) {\n page.setTexture(SpineTexture.from(texture.source))\n } else if (textures) {\n const t = textures[page.name]\n if (!t) throw new Error(`Missing texture for atlas page: ${page.name}`)\n page.setTexture(SpineTexture.from(t.source))\n }\n })\n\n const atlasLoader = new AtlasAttachmentLoader(atlas)\n\n // Parse skeleton data depending on available source\n if (this.rawSkeletonData) {\n const jsonLoader = new SkeletonJson(atlasLoader)\n return jsonLoader.readSkeletonData(this.rawSkeletonData)\n }\n if (skeletonBinary) {\n const binLoader = new SkeletonBinary(atlasLoader)\n return binLoader.readSkeletonData(skeletonBinary)\n }\n if (textSkeletonData) {\n const jsonLoader = new SkeletonJson(atlasLoader)\n return jsonLoader.readSkeletonData(textSkeletonData)\n }\n return undefined\n }\n\n #getCachedSkeletonData() {\n try {\n if (!this.#rawSkeletonData && !this.#skel && !this.#json) return undefined\n if (!textLoader.checkCached(this.#atlas)) return undefined\n\n const atlasText = textLoader.getCached(this.#atlas)!\n\n let texture: Texture | undefined\n let textures: Record<string, Texture> | undefined\n\n if (typeof this.#texture === 'string') {\n if (!textureLoader.checkCached(this.#texture)) return undefined\n texture = textureLoader.getCached(this.#texture)!\n } else if (this.#texture) {\n textures = {}\n for (const [key, path] of Object.entries(this.#texture)) {\n if (!textureLoader.checkCached(path)) return undefined\n textures[key] = textureLoader.getCached(path)!\n }\n } else {\n return undefined\n }\n\n let skeletonBinary: Uint8Array | undefined\n let textSkeletonData: string | undefined\n\n if (!this.#rawSkeletonData) {\n if (this.#skel) {\n if (!binaryLoader.checkCached(this.#skel)) return undefined\n skeletonBinary = binaryLoader.getCached(this.#skel)!\n } else if (this.#json) {\n if (!textLoader.checkCached(this.#json)) return undefined\n textSkeletonData = textLoader.getCached(this.#json)!\n }\n }\n\n return this.#buildSkeletonData(\n atlasText,\n texture,\n textures,\n skeletonBinary,\n textSkeletonData,\n )\n } catch (e) {\n console.error('Failed to build skeleton data from cache:', e)\n return undefined\n }\n }\n\n async #loadSkeletonData() {\n if (!this.#rawSkeletonData && !this.#skel && !this.#json) return undefined\n\n const promises: Promise<any>[] = []\n\n let atlasText: string | undefined\n let skeletonBinary: Uint8Array | undefined\n let textSkeletonData: string | undefined\n let texture: Texture | undefined\n let textures: Record<string, Texture> | undefined\n\n // Load atlas (text)\n if (!textLoader.checkCached(this.#atlas)) console.info(`Atlas not preloaded. Loading now: ${this.#atlas}`)\n promises.push((async () => (atlasText = await textLoader.load(this.#atlas)))())\n\n // Load skeleton (raw / binary / json)\n if (this.#rawSkeletonData) {\n // already provided\n } else if (this.#skel) {\n if (!binaryLoader.checkCached(this.#skel)) console.info(`Skeleton not preloaded. Loading now: ${this.#skel}`)\n promises.push((async () => (skeletonBinary = await binaryLoader.load(this.#skel!)))())\n } else if (this.#json) {\n if (!textLoader.checkCached(this.#json)) console.info(`Skeleton not preloaded. Loading now: ${this.#json}`)\n promises.push((async () => (textSkeletonData = await textLoader.load(this.#json!)))())\n } else {\n console.error('Either skel or json must be provided')\n return undefined\n }\n\n // Load textures (single or multiple)\n if (typeof this.#texture === 'string') {\n if (!textureLoader.checkCached(this.#texture)) console.info(`Texture not preloaded. Loading now: ${this.#texture}`)\n promises.push((async () => (texture = await textureLoader.load(this.#texture as string)))())\n } else if (this.#texture) {\n textures = {}\n for (const [key, path] of Object.entries(this.#texture)) {\n if (!textureLoader.checkCached(path)) console.info(`Texture not preloaded. Loading now: ${path}`)\n promises.push((async () => {\n const t = await textureLoader.load(path)\n if (t) textures![key] = t\n })())\n }\n }\n\n await Promise.all(promises)\n\n if (!atlasText) return undefined\n if (!texture && !(textures && Object.keys(textures).length)) return undefined\n\n return this.#buildSkeletonData(\n atlasText,\n texture,\n textures,\n skeletonBinary,\n textSkeletonData,\n )\n }\n\n async #load() {\n let skeletonData = this.#getCachedSkeletonData()\n if (!skeletonData) {\n skeletonData = await this.#loadSkeletonData()\n }\n\n this.#spine?.destroy()\n this.#spine = undefined\n\n if (skeletonData) {\n const s = new PixiSpine(skeletonData)\n s.state.addListener({\n complete: (e) => (this as any).emit('animationend', e.animation?.name ?? '')\n })\n this.#spine = s\n this.#updateAnimation()\n this.#updateSkins()\n this._pixiContainer.addChild(s)\n }\n }\n\n #updateSkins() {\n const s = this.#spine?.skeleton\n if (s && this.#skins) {\n const newSkin = new Skin('combined-skin')\n for (const skinName of this.#skins) {\n const skin = s.data.findSkin(skinName)\n if (skin) newSkin.addSkin(skin)\n }\n s.setSkin(newSkin)\n s.setSlotsToSetupPose()\n }\n }\n\n #updateAnimation() {\n const s = this.#spine\n if (s && this.#animation) {\n s.state.setAnimation(0, this.#animation, this.#loop ?? true)\n s.state.apply(s.skeleton)\n }\n }\n\n set atlas(atlas) {\n if (this.#atlas !== atlas) {\n this.#atlas = atlas\n this.#load()\n }\n }\n\n get atlas() { return this.#atlas }\n\n set texture(texture) {\n if (this.#texture !== texture) {\n this.#texture = texture\n this.#load()\n }\n }\n\n get texture() { return this.#texture }\n\n set rawSkeletonData(rawSkeletonData) {\n if (this.#rawSkeletonData !== rawSkeletonData) {\n this.#rawSkeletonData = rawSkeletonData\n this.#load()\n }\n }\n\n get rawSkeletonData() { return this.#rawSkeletonData }\n\n set skel(skel) {\n if (this.#skel !== skel) {\n this.#skel = skel\n this.#load()\n }\n }\n\n get skel() { return this.#skel }\n\n set json(json) {\n if (this.#json !== json) {\n this.#json = json\n this.#load()\n }\n }\n\n get json() { return this.#json }\n\n set skins(skins) {\n if (this.#skins !== skins) {\n this.#skins = skins\n this.#updateSkins()\n }\n }\n\n get skins() { return this.#skins }\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 set loop(loop) {\n if (this.#loop !== loop) {\n this.#loop = loop\n this.#updateAnimation()\n }\n }\n\n get loop() { return this.#loop }\n\n remove() {\n if (typeof this.#texture === 'string') {\n textureLoader.release(this.#texture)\n } else if (this.#texture) {\n for (const path of Object.values(this.#texture)) {\n textureLoader.release(path)\n }\n }\n super.remove()\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sprite.js","sourceRoot":"","sources":["../../../src/node/ext/sprite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAqB,MAAM,qBAAqB,CAAA;AAMnE,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"sprite.js","sourceRoot":"","sources":["../../../src/node/ext/sprite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAqB,MAAM,qBAAqB,CAAA;AAMnE,MAAM,OAAO,UAAoC,SAAQ,UAAa;IACpE,IAAI,CAAQ;IACZ,OAAO,CAAa;IAEpB,YAAY,OAA0B;QACpC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAA;QACvB,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,OAAO,CAAA;QACX,IAAI,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,uCAAuC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;YAChE,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/C,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAA;QACvB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QAExB,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,CAAA;YACnE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAC/B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,GAAG;QACT,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACtB,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAChC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;YACf,IAAI,CAAC,KAAK,EAAE,CAAA;QACd,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,CAAA,CAAC,CAAC;IAErB,MAAM;QACb,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChC,KAAK,CAAC,MAAM,EAAE,CAAA;IAChB,CAAC;CACF","sourcesContent":["import { EventMap } from '@webtaku/event-emitter'\nimport { Sprite as PixiSprite } from 'pixi.js'\nimport { textureLoader } from '../../asset/loaders/texture'\nimport { GameObject, GameObjectOptions } from '../core/game-object'\n\nexport type SpriteNodeOptions = {\n src: string\n} & GameObjectOptions\n\nexport class SpriteNode<E extends EventMap = {}> extends GameObject<E> {\n #src: string\n #sprite?: PixiSprite\n\n constructor(options: SpriteNodeOptions) {\n super(options)\n this.#src = options.src\n this.#load()\n }\n\n async #load() {\n let texture\n if (textureLoader.checkCached(this.#src)) {\n texture = textureLoader.getCached(this.#src)\n } else {\n console.info(`Texture not preloaded. Loading now: ${this.#src}`)\n texture = await textureLoader.load(this.#src)\n }\n\n this.#sprite?.destroy()\n this.#sprite = undefined\n\n if (texture) {\n const s = new PixiSprite({ texture, anchor: 0.5, zIndex: -999999 })\n this._pixiContainer.addChild(s)\n this.#sprite = s\n }\n }\n\n set src(src) {\n if (this.#src !== src) {\n textureLoader.release(this.#src)\n this.#src = src\n this.#load()\n }\n }\n\n get src() { return this.#src }\n\n override remove() {\n textureLoader.release(this.#src)\n super.remove()\n }\n}\n"]}
|
|
@@ -8,6 +8,7 @@ export class PhysicsObject extends RenderableNode {
|
|
|
8
8
|
#localTransform = new LocalTransform();
|
|
9
9
|
#matterBody;
|
|
10
10
|
#useYSort = false;
|
|
11
|
+
#collisionsEnabled = true;
|
|
11
12
|
constructor(options) {
|
|
12
13
|
super(new PixiContainer({ sortableChildren: true }));
|
|
13
14
|
const r = options.rigidbody;
|
|
@@ -43,7 +44,8 @@ export class PhysicsObject extends RenderableNode {
|
|
|
43
44
|
: parent.constructor?.name ?? typeof parent;
|
|
44
45
|
throw new Error(`PhysicsObject parent must be PhysicsWorld, but got ${actual}`);
|
|
45
46
|
}
|
|
46
|
-
|
|
47
|
+
if (this.#collisionsEnabled)
|
|
48
|
+
parent.addBody(this.#matterBody);
|
|
47
49
|
super.parent = parent;
|
|
48
50
|
}
|
|
49
51
|
get parent() {
|
|
@@ -86,7 +88,12 @@ export class PhysicsObject extends RenderableNode {
|
|
|
86
88
|
set isStatic(v) { Matter.Body.setStatic(this.#matterBody, v); }
|
|
87
89
|
get isStatic() { return this.#matterBody.isStatic; }
|
|
88
90
|
disableCollisions() {
|
|
91
|
+
this.#collisionsEnabled = false;
|
|
89
92
|
this.#removeFromWorld();
|
|
90
93
|
}
|
|
94
|
+
enableCollisions() {
|
|
95
|
+
this.#collisionsEnabled = true;
|
|
96
|
+
this.parent?.addBody(this.#matterBody);
|
|
97
|
+
}
|
|
91
98
|
}
|
|
92
99
|
//# sourceMappingURL=physics-object.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"physics-object.js","sourceRoot":"","sources":["../../../src/node/physics/physics-object.ts"],"names":[],"mappings":"AACA,OAAO,MAAsC,MAAM,WAAW,CAAA;AAC9D,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AAEpD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAa,aAAa,EAAE,MAAM,eAAe,CAAA;AAgBxD,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"physics-object.js","sourceRoot":"","sources":["../../../src/node/physics/physics-object.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventMap } from '@webtaku/event-emitter'\nimport Matter, { IChamferableBodyDefinition } from 'matter-js'\nimport { Container as PixiContainer } from 'pixi.js'\nimport { GameNode } from '../core/game-node'\nimport { isRenderableNode, RenderableNode } from '../core/renderable'\nimport { LocalTransform } from '../core/transform'\nimport { PhysicsWorld } from './physics-world'\nimport { Rigidbody, RigidbodyType } from './rigidbodies'\n\nexport type PhysicsObjectOptions = {\n rigidbody: Rigidbody\n\n x?: number\n y?: number\n rotation?: number\n fixedRotation?: boolean\n velocityX?: number\n velocityY?: number\n isStatic?: boolean\n\n useYSort?: boolean\n}\n\nexport class PhysicsObject<E extends EventMap = {}> extends RenderableNode<PixiContainer, E> {\n #localTransform = new LocalTransform()\n #matterBody: Matter.Body\n\n #useYSort = false\n #collisionsEnabled = true\n\n constructor(options: PhysicsObjectOptions) {\n super(new PixiContainer({ sortableChildren: true }))\n\n const r = options.rigidbody\n const x = options.x ?? 0\n const y = options.y ?? 0\n\n const bodyOptions: IChamferableBodyDefinition = {\n angle: options.rotation ?? 0,\n velocity: { x: options.velocityX ?? 0, y: options.velocityY ?? 0 },\n isStatic: options.isStatic ?? false\n }\n\n if (options.fixedRotation) {\n bodyOptions.inertia = Infinity\n bodyOptions.angularVelocity = 0\n }\n\n if (r.type === RigidbodyType.Rectangle) {\n this.#matterBody = Matter.Bodies.rectangle(x, y, r.width, r.height, bodyOptions)\n } else if (r.type === RigidbodyType.Circle) {\n this.#matterBody = Matter.Bodies.circle(x, y, r.radius, bodyOptions)\n } else if (r.type === RigidbodyType.Polygon) {\n this.#matterBody = Matter.Bodies.fromVertices(x, y, [r.vertices], bodyOptions)\n } else {\n throw new Error('Invalid rigidbody type')\n }\n\n this.#useYSort = options.useYSort ?? false\n }\n\n protected override set parent(parent: GameNode<EventMap> | undefined) {\n if (!(parent instanceof PhysicsWorld)) {\n const actual = parent === undefined\n ? 'undefined'\n : parent.constructor?.name ?? typeof parent\n throw new Error(`PhysicsObject parent must be PhysicsWorld, but got ${actual}`)\n }\n if (this.#collisionsEnabled) parent.addBody(this.#matterBody)\n super.parent = parent\n }\n\n protected override get parent() {\n return super.parent\n }\n\n override _updateWorldTransform() {\n const mb = this.#matterBody\n\n const pc = this._pixiContainer\n pc.position.set(mb.position.x, mb.position.y)\n if (this.#useYSort) pc.zIndex = mb.position.y\n pc.rotation = mb.angle\n\n const lt = this.#localTransform\n lt.x = mb.position.x\n lt.y = mb.position.y\n lt.rotation = mb.angle\n\n const parent = this.parent\n if (parent && isRenderableNode(parent)) {\n this.worldTransform.update(parent.worldTransform, this.#localTransform)\n }\n\n super._updateWorldTransform()\n }\n\n #removeFromWorld() {\n (this.parent as PhysicsWorld)?.removeBody(this.#matterBody)\n }\n\n override remove() {\n this.#removeFromWorld()\n super.remove()\n }\n\n set x(v) { Matter.Body.setPosition(this.#matterBody, { x: v, y: this.#matterBody.position.y }) }\n get x() { return this.#matterBody.position.x }\n\n set y(v) { Matter.Body.setPosition(this.#matterBody, { x: this.#matterBody.position.x, y: v }) }\n get y() { return this.#matterBody.position.y }\n\n set rotation(v) { Matter.Body.setAngle(this.#matterBody, v) }\n get rotation() { return this.#matterBody.angle }\n\n set velocityX(v) { Matter.Body.setVelocity(this.#matterBody, { x: v, y: this.#matterBody.velocity.y }) }\n get velocityX() { return this.#matterBody.velocity.x }\n\n set velocityY(v) { Matter.Body.setVelocity(this.#matterBody, { x: this.#matterBody.velocity.x, y: v }) }\n get velocityY() { return this.#matterBody.velocity.y }\n\n set isStatic(v) { Matter.Body.setStatic(this.#matterBody, v) }\n get isStatic() { return this.#matterBody.isStatic }\n\n disableCollisions() {\n this.#collisionsEnabled = false\n this.#removeFromWorld()\n }\n\n enableCollisions() {\n this.#collisionsEnabled = true;\n (this.parent as PhysicsWorld)?.addBody(this.#matterBody)\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"physics-world.js","sourceRoot":"","sources":["../../../src/node/physics/physics-world.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAMnD,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"physics-world.js","sourceRoot":"","sources":["../../../src/node/physics/physics-world.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAMnD,MAAM,OAAO,YAAsC,SAAQ,cAAgC;IACzF,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;IAEtC,YAAY,OAA6B;QACvC,KAAK,CAAC,IAAI,aAAa,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAEpD,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAA;QAEhC,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,CAAC,CAAA;IACtC,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC;IACnD,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA,CAAC,CAAC;IAErD,OAAO,CAAC,IAAiB,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA,CAAC,CAAC;IAC/E,UAAU,CAAC,IAAiB,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA,CAAC,CAAC;IAElE,MAAM,CAAC,EAAU;QAClC,IAAI,IAAI,CAAC,MAAM;YAAE,OAAM;QACvB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAEhB,MAAM,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAA;QAC1B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;IACjF,CAAC;IAEQ,MAAM;QACb,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACvC,KAAK,CAAC,MAAM,EAAE,CAAA;IAChB,CAAC;CACF","sourcesContent":["import { EventMap } from '@webtaku/event-emitter'\nimport Matter from 'matter-js'\nimport { Container as PixiContainer } from 'pixi.js'\nimport { RenderableNode } from '../core/renderable'\n\nexport type PhysicsWorldOptions = {\n gravity?: number\n}\n\nexport class PhysicsWorld<E extends EventMap = {}> extends RenderableNode<PixiContainer, E> {\n #matterEngine = Matter.Engine.create()\n\n constructor(options?: PhysicsWorldOptions) {\n super(new PixiContainer({ sortableChildren: true }))\n\n this.worldTransform.x.v = 0\n this.worldTransform.y.v = 0\n this.worldTransform.resetDirty()\n\n this.gravity = options?.gravity ?? 0\n }\n\n set gravity(v) { this.#matterEngine.gravity.y = v }\n get gravity() { return this.#matterEngine.gravity.y }\n\n addBody(body: Matter.Body) { Matter.World.add(this.#matterEngine.world, body) }\n removeBody(body: Matter.Body) { Matter.World.remove(this.#matterEngine.world, body) }\n\n protected override update(dt: number) {\n if (this.paused) return\n super.update(dt)\n\n const matterDt = dt * 1000\n Matter.Engine.update(this.#matterEngine, matterDt > 16.666 ? 16.666 : matterDt)\n }\n\n override remove() {\n Matter.Engine.clear(this.#matterEngine)\n super.remove()\n }\n}\n"]}
|
|
@@ -6,7 +6,7 @@ export type DomAnimatedSpriteNodeOptions = {
|
|
|
6
6
|
atlas: Atlas;
|
|
7
7
|
animation: string;
|
|
8
8
|
} & DomGameObjectOptions;
|
|
9
|
-
export declare class DomAnimatedSpriteNode<E extends EventMap =
|
|
9
|
+
export declare class DomAnimatedSpriteNode<E extends EventMap = {}> extends DomGameObject<E & {
|
|
10
10
|
animationend: (animation: string) => void;
|
|
11
11
|
}> {
|
|
12
12
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom-animated-sprite.d.ts","sourceRoot":"","sources":["../../../src/dom/dom-animated-sprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAa,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAIvE,MAAM,MAAM,4BAA4B,GAAG;IACzC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,oBAAoB,CAAA;AAExB,qBAAa,qBAAqB,CAAC,CAAC,SAAS,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"dom-animated-sprite.d.ts","sourceRoot":"","sources":["../../../src/dom/dom-animated-sprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAa,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAIvE,MAAM,MAAM,4BAA4B,GAAG;IACzC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,oBAAoB,CAAA;AAExB,qBAAa,qBAAqB,CAAC,CAAC,SAAS,QAAQ,GAAG,EAAE,CAAE,SAAQ,aAAa,CAAC,CAAC,GAAG;IACpF,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C,CAAC;;gBAUY,OAAO,EAAE,4BAA4B;IAiCxC,MAAM,CAAC,EAAE,EAAE,MAAM;IAuC1B,IAAI,GAAG,CAAC,GAAG,QAAA,EAMV;IAED,IAAI,GAAG,WAAuB;IAE9B,IAAI,KAAK,CAAC,KAAK,OAAA,EAMd;IAED,IAAI,KAAK,UAAyB;IAElC,IAAI,SAAS,CAAC,SAAS,QAAA,EAOtB;IAED,IAAI,SAAS,WAA6B;IAEjC,MAAM;CAIhB"}
|
|
@@ -15,7 +15,7 @@ export type DomGameObjectOptions = {
|
|
|
15
15
|
alpha?: number;
|
|
16
16
|
useYSort?: boolean;
|
|
17
17
|
};
|
|
18
|
-
export declare class DomGameObject<E extends EventMap =
|
|
18
|
+
export declare class DomGameObject<E extends EventMap = {}> extends GameNode<E> {
|
|
19
19
|
#private;
|
|
20
20
|
protected el: HTMLDivElement;
|
|
21
21
|
worldTransform: WorldTransform;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom-game-object.d.ts","sourceRoot":"","sources":["../../../src/dom/dom-game-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAkB,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGvE,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,aAAa,CAE9D;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAcD,qBAAa,aAAa,CAAC,CAAC,SAAS,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"dom-game-object.d.ts","sourceRoot":"","sources":["../../../src/dom/dom-game-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAkB,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGvE,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,aAAa,CAE9D;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAcD,qBAAa,aAAa,CAAC,CAAC,SAAS,QAAQ,GAAG,EAAE,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;;IACrE,SAAS,CAAC,EAAE,iBAAgC;IAG5C,cAAc,iBAAuB;IACrC,KAAK,SAAI;IACT,UAAU,cAAqB;gBAGnB,OAAO,CAAC,EAAE,oBAAoB;IA0B1C,MAAM,CAAC,EAAE,EAAE,MAAM;IAgCjB,QAAQ,CAAC,MAAM,EAAE,WAAW;IAO5B,IAAI,CAAC,CAAC,CAAC,QAAA,EAAgC;IACvC,IAAI,CAAC,WAAoC;IAEzC,IAAI,CAAC,CAAC,CAAC,QAAA,EAAgC;IACvC,IAAI,CAAC,WAAoC;IAEzC,IAAI,KAAK,CAAC,CAAC,QAAA,EAAsE;IACjF,IAAI,KAAK,WAAyC;IAElD,IAAI,MAAM,CAAC,CAAC,QAAA,EAAqC;IACjD,IAAI,MAAM,WAAyC;IAEnD,IAAI,MAAM,CAAC,CAAC,QAAA,EAAqC;IACjD,IAAI,MAAM,WAAyC;IAEnD,IAAI,MAAM,CAAC,CAAC,QAAA,EAAqC;IACjD,IAAI,MAAM,WAAyC;IAEnD,IAAI,MAAM,CAAC,CAAC,QAAA,EAAqC;IACjD,IAAI,MAAM,WAAyC;IAEnD,IAAI,QAAQ,CAAC,CAAC,QAAA,EAAuC;IACrD,IAAI,QAAQ,WAA2C;CACxD"}
|
|
@@ -3,7 +3,7 @@ import { DomGameObject, DomGameObjectOptions } from './dom-game-object';
|
|
|
3
3
|
export type DomSpriteNodeOptions = {
|
|
4
4
|
src: string;
|
|
5
5
|
} & DomGameObjectOptions;
|
|
6
|
-
export declare class DomSpriteNode<E extends EventMap =
|
|
6
|
+
export declare class DomSpriteNode<E extends EventMap = {}> extends DomGameObject<E> {
|
|
7
7
|
#private;
|
|
8
8
|
constructor(options: DomSpriteNodeOptions);
|
|
9
9
|
set src(src: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom-sprite.d.ts","sourceRoot":"","sources":["../../../src/dom/dom-sprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAIvE,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,oBAAoB,CAAA;AAExB,qBAAa,aAAa,CAAC,CAAC,SAAS,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"dom-sprite.d.ts","sourceRoot":"","sources":["../../../src/dom/dom-sprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAIvE,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,oBAAoB,CAAA;AAExB,qBAAa,aAAa,CAAC,CAAC,SAAS,QAAQ,GAAG,EAAE,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;;gBAG9D,OAAO,EAAE,oBAAoB;IAuBzC,IAAI,GAAG,CAAC,GAAG,QAAA,EAMV;IAED,IAAI,GAAG,WAAuB;IAErB,MAAM;CAIhB"}
|
|
@@ -2,7 +2,7 @@ import { EventMap } from '@webtaku/event-emitter';
|
|
|
2
2
|
import { Container as PixiContainer } from 'pixi.js';
|
|
3
3
|
import { TransformableNode, TransformableNodeOptions } from './transformable';
|
|
4
4
|
export type GameObjectOptions = {} & TransformableNodeOptions;
|
|
5
|
-
export declare class GameObject<E extends EventMap =
|
|
5
|
+
export declare class GameObject<E extends EventMap = {}> extends TransformableNode<PixiContainer, E> {
|
|
6
6
|
constructor(options?: GameObjectOptions);
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=game-object.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game-object.d.ts","sourceRoot":"","sources":["../../../../src/node/core/game-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAE7E,MAAM,MAAM,iBAAiB,GAAG,EAAE,GAAG,wBAAwB,CAAA;AAE7D,qBAAa,UAAU,CAAC,CAAC,SAAS,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"game-object.d.ts","sourceRoot":"","sources":["../../../../src/node/core/game-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAE7E,MAAM,MAAM,iBAAiB,GAAG,EAAE,GAAG,wBAAwB,CAAA;AAE7D,qBAAa,UAAU,CAAC,CAAC,SAAS,QAAQ,GAAG,EAAE,CAAE,SAAQ,iBAAiB,CAAC,aAAa,EAAE,CAAC,CAAC;gBAC9E,OAAO,CAAC,EAAE,iBAAiB;CAGxC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderable.d.ts","sourceRoot":"","sources":["../../../../src/node/core/renderable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,cAAc,CAAC,aAAa,EAAE,QAAQ,CAAC,CAEzF;AAED,8BAAsB,cAAc,CAAC,CAAC,SAAS,aAAa,EAAE,CAAC,SAAS,QAAQ,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;;IAEnG,cAAc,EAAE,CAAC,CAAA;IAEjB,cAAc,iBAAuB;IACrC,UAAU,cAAqB;gBAEnB,aAAa,EAAE,CAAC;IAK5B,SAAS,KAAK,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAQpD;IAED,SAAS,KAAK,QAAQ,IAVW,QAAQ,GAAG,SAAS,CAYpD;IAEQ,GAAG,CAAC,GAAG,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE;IAarC,MAAM;IAKf,qBAAqB;IAMrB,yBAAyB;IAQzB,IAAI,IAAI,CAAC,CAAC,QAAA,EAAkC;IAC5C,IAAI,IAAI,WAAsC;
|
|
1
|
+
{"version":3,"file":"renderable.d.ts","sourceRoot":"","sources":["../../../../src/node/core/renderable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,cAAc,CAAC,aAAa,EAAE,QAAQ,CAAC,CAEzF;AAED,8BAAsB,cAAc,CAAC,CAAC,SAAS,aAAa,EAAE,CAAC,SAAS,QAAQ,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;;IAEnG,cAAc,EAAE,CAAC,CAAA;IAEjB,cAAc,iBAAuB;IACrC,UAAU,cAAqB;gBAEnB,aAAa,EAAE,CAAC;IAK5B,SAAS,KAAK,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAQpD;IAED,SAAS,KAAK,QAAQ,IAVW,QAAQ,GAAG,SAAS,CAYpD;IAEQ,GAAG,CAAC,GAAG,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE;IAarC,MAAM;IAKf,qBAAqB;IAMrB,yBAAyB;IAQzB,IAAI,IAAI,CAAC,CAAC,QAAA,EAAkC;IAC5C,IAAI,IAAI,WAAsC;IAE9C,IAAI;IACJ,IAAI;CACL"}
|
|
@@ -6,7 +6,7 @@ export type AnimatedSpriteNodeOptions = {
|
|
|
6
6
|
atlas: Atlas;
|
|
7
7
|
animation: string;
|
|
8
8
|
} & GameObjectOptions;
|
|
9
|
-
export declare class AnimatedSpriteNode<E extends EventMap =
|
|
9
|
+
export declare class AnimatedSpriteNode<E extends EventMap = {}> extends GameObject<E & {
|
|
10
10
|
animationend: (animation: string) => void;
|
|
11
11
|
}> {
|
|
12
12
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animated-sprite.d.ts","sourceRoot":"","sources":["../../../../src/node/ext/animated-sprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAGjD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEnE,MAAM,MAAM,yBAAyB,GAAG;IACtC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,iBAAiB,CAAA;AAErB,qBAAa,kBAAkB,CAAC,CAAC,SAAS,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"animated-sprite.d.ts","sourceRoot":"","sources":["../../../../src/node/ext/animated-sprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAGjD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEnE,MAAM,MAAM,yBAAyB,GAAG;IACtC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,iBAAiB,CAAA;AAErB,qBAAa,kBAAkB,CAAC,CAAC,SAAS,QAAQ,GAAG,EAAE,CAAE,SAAQ,UAAU,CAAC,CAAC,GAAG;IAC9E,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C,CAAC;;gBASY,OAAO,EAAE,yBAAyB;IA+C9C,IAAI,GAAG,CAAC,GAAG,QAAA,EAMV;IAED,IAAI,GAAG,WAAuB;IAE9B,IAAI,KAAK,CAAC,KAAK,OAAA,EAMd;IAED,IAAI,KAAK,UAAyB;IAElC,IAAI,SAAS,CAAC,SAAS,QAAA,EAKtB;IAED,IAAI,SAAS,WAA6B;IAE1C,MAAM;CAIP"}
|
|
@@ -3,12 +3,14 @@ import { GameObject, GameObjectOptions } from '../core/game-object';
|
|
|
3
3
|
export type BitmapTextNodeOptions = {
|
|
4
4
|
fnt: string;
|
|
5
5
|
src: string;
|
|
6
|
-
text
|
|
6
|
+
text?: string;
|
|
7
7
|
} & GameObjectOptions;
|
|
8
|
-
export declare class BitmapTextNode<E extends EventMap =
|
|
8
|
+
export declare class BitmapTextNode<E extends EventMap = {}> extends GameObject<E> {
|
|
9
9
|
#private;
|
|
10
10
|
constructor(options: BitmapTextNodeOptions);
|
|
11
11
|
changeFont(fnt: string, src: string): void;
|
|
12
|
+
set text(text: string | undefined);
|
|
13
|
+
get text(): string | undefined;
|
|
12
14
|
remove(): void;
|
|
13
15
|
}
|
|
14
16
|
//# sourceMappingURL=bitmap-text.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitmap-text.d.ts","sourceRoot":"","sources":["../../../../src/node/ext/bitmap-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"bitmap-text.d.ts","sourceRoot":"","sources":["../../../../src/node/ext/bitmap-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAIjD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEnE,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,GAAG,iBAAiB,CAAA;AAErB,qBAAa,cAAc,CAAC,CAAC,SAAS,QAAQ,GAAG,EAAE,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;;gBAQ5D,OAAO,EAAE,qBAAqB;IAsF1C,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IASnC,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAGhC;IAED,IAAI,IAAI,IALO,MAAM,GAAG,SAAS,CAOhC;IAEQ,MAAM;CAIhB"}
|
|
@@ -10,7 +10,7 @@ export type SpineNodeOptions = {
|
|
|
10
10
|
animation?: string;
|
|
11
11
|
loop?: boolean;
|
|
12
12
|
} & GameObjectOptions;
|
|
13
|
-
export declare class SpineNode<E extends EventMap =
|
|
13
|
+
export declare class SpineNode<E extends EventMap = {}> extends GameObject<E & {
|
|
14
14
|
animationend: (animation: string) => void;
|
|
15
15
|
}> {
|
|
16
16
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spine.d.ts","sourceRoot":"","sources":["../../../../src/node/ext/spine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAKjD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEnE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAExC,eAAe,CAAC,EAAE,GAAG,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf,GAAG,iBAAiB,CAAA;AAErB,qBAAa,SAAS,CAAC,CAAC,SAAS,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"spine.d.ts","sourceRoot":"","sources":["../../../../src/node/ext/spine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAKjD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEnE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAExC,eAAe,CAAC,EAAE,GAAG,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf,GAAG,iBAAiB,CAAA;AAErB,qBAAa,SAAS,CAAC,CAAC,SAAS,QAAQ,GAAG,EAAE,CAAE,SAAQ,UAAU,CAAC,CAAC,GAAG;IACrE,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C,CAAC;;gBAcY,OAAO,EAAE,gBAAgB;IA2MrC,IAAI,KAAK,CAAC,KAAK,QAAA,EAKd;IAED,IAAI,KAAK,WAAyB;IAElC,IAAI,OAAO,CAAC,OAAO,iCAAA,EAKlB;IAED,IAAI,OAAO,oCAA2B;IAEtC,IAAI,eAAe,CAAC,eAAe,KAAA,EAKlC;IAED,IAAI,eAAe,QAAmC;IAEtD,IAAI,IAAI,CAAC,IAAI,oBAAA,EAKZ;IAED,IAAI,IAAI,uBAAwB;IAEhC,IAAI,IAAI,CAAC,IAAI,oBAAA,EAKZ;IAED,IAAI,IAAI,uBAAwB;IAEhC,IAAI,KAAK,CAAC,KAAK,sBAAA,EAKd;IAED,IAAI,KAAK,yBAAyB;IAElC,IAAI,SAAS,CAAC,SAAS,oBAAA,EAKtB;IAED,IAAI,SAAS,uBAA6B;IAE1C,IAAI,IAAI,CAAC,IAAI,qBAAA,EAKZ;IAED,IAAI,IAAI,wBAAwB;IAEhC,MAAM;CAUP"}
|
|
@@ -3,7 +3,7 @@ import { GameObject, GameObjectOptions } from '../core/game-object';
|
|
|
3
3
|
export type SpriteNodeOptions = {
|
|
4
4
|
src: string;
|
|
5
5
|
} & GameObjectOptions;
|
|
6
|
-
export declare class SpriteNode<E extends EventMap =
|
|
6
|
+
export declare class SpriteNode<E extends EventMap = {}> extends GameObject<E> {
|
|
7
7
|
#private;
|
|
8
8
|
constructor(options: SpriteNodeOptions);
|
|
9
9
|
set src(src: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sprite.d.ts","sourceRoot":"","sources":["../../../../src/node/ext/sprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAGjD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEnE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,iBAAiB,CAAA;AAErB,qBAAa,UAAU,CAAC,CAAC,SAAS,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"sprite.d.ts","sourceRoot":"","sources":["../../../../src/node/ext/sprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAGjD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEnE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,iBAAiB,CAAA;AAErB,qBAAa,UAAU,CAAC,CAAC,SAAS,QAAQ,GAAG,EAAE,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;;gBAIxD,OAAO,EAAE,iBAAiB;IAyBtC,IAAI,GAAG,CAAC,GAAG,QAAA,EAMV;IAED,IAAI,GAAG,WAAuB;IAErB,MAAM;CAIhB"}
|
|
@@ -14,7 +14,7 @@ export type PhysicsObjectOptions = {
|
|
|
14
14
|
isStatic?: boolean;
|
|
15
15
|
useYSort?: boolean;
|
|
16
16
|
};
|
|
17
|
-
export declare class PhysicsObject<E extends EventMap =
|
|
17
|
+
export declare class PhysicsObject<E extends EventMap = {}> extends RenderableNode<PixiContainer, E> {
|
|
18
18
|
#private;
|
|
19
19
|
constructor(options: PhysicsObjectOptions);
|
|
20
20
|
protected set parent(parent: GameNode<EventMap> | undefined);
|
|
@@ -34,5 +34,6 @@ export declare class PhysicsObject<E extends EventMap = EventMap> extends Render
|
|
|
34
34
|
set isStatic(v: boolean);
|
|
35
35
|
get isStatic(): boolean;
|
|
36
36
|
disableCollisions(): void;
|
|
37
|
+
enableCollisions(): void;
|
|
37
38
|
}
|
|
38
39
|
//# sourceMappingURL=physics-object.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"physics-object.d.ts","sourceRoot":"","sources":["../../../../src/node/physics/physics-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEjD,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAoB,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGrE,OAAO,EAAE,SAAS,EAAiB,MAAM,eAAe,CAAA;AAExD,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,SAAS,CAAA;IAEpB,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,qBAAa,aAAa,CAAC,CAAC,SAAS,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"physics-object.d.ts","sourceRoot":"","sources":["../../../../src/node/physics/physics-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEjD,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAoB,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGrE,OAAO,EAAE,SAAS,EAAiB,MAAM,eAAe,CAAA;AAExD,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,SAAS,CAAA;IAEpB,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,qBAAa,aAAa,CAAC,CAAC,SAAS,QAAQ,GAAG,EAAE,CAAE,SAAQ,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC;;gBAO9E,OAAO,EAAE,oBAAoB;IA+BzC,cAAuB,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,EASnE;IAED,cAAuB,MAAM,IAXS,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,CAanE;IAEQ,qBAAqB;IAyBrB,MAAM;IAKf,IAAI,CAAC,CAAC,CAAC,QAAA,EAAyF;IAChG,IAAI,CAAC,WAAyC;IAE9C,IAAI,CAAC,CAAC,CAAC,QAAA,EAAyF;IAChG,IAAI,CAAC,WAAyC;IAE9C,IAAI,QAAQ,CAAC,CAAC,QAAA,EAA+C;IAC7D,IAAI,QAAQ,WAAoC;IAEhD,IAAI,SAAS,CAAC,CAAC,QAAA,EAAyF;IACxG,IAAI,SAAS,WAAyC;IAEtD,IAAI,SAAS,CAAC,CAAC,QAAA,EAAyF;IACxG,IAAI,SAAS,WAAyC;IAEtD,IAAI,QAAQ,CAAC,CAAC,SAAA,EAAgD;IAC9D,IAAI,QAAQ,YAAuC;IAEnD,iBAAiB;IAKjB,gBAAgB;CAIjB"}
|
|
@@ -5,7 +5,7 @@ import { RenderableNode } from '../core/renderable';
|
|
|
5
5
|
export type PhysicsWorldOptions = {
|
|
6
6
|
gravity?: number;
|
|
7
7
|
};
|
|
8
|
-
export declare class PhysicsWorld<E extends EventMap =
|
|
8
|
+
export declare class PhysicsWorld<E extends EventMap = {}> extends RenderableNode<PixiContainer, E> {
|
|
9
9
|
#private;
|
|
10
10
|
constructor(options?: PhysicsWorldOptions);
|
|
11
11
|
set gravity(v: number);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"physics-world.d.ts","sourceRoot":"","sources":["../../../../src/node/physics/physics-world.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,MAAM,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,qBAAa,YAAY,CAAC,CAAC,SAAS,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"physics-world.d.ts","sourceRoot":"","sources":["../../../../src/node/physics/physics-world.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,MAAM,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,qBAAa,YAAY,CAAC,CAAC,SAAS,QAAQ,GAAG,EAAE,CAAE,SAAQ,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC;;gBAG7E,OAAO,CAAC,EAAE,mBAAmB;IAUzC,IAAI,OAAO,CAAC,CAAC,QAAA,EAAsC;IACnD,IAAI,OAAO,WAA0C;IAErD,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI;IACzB,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI;cAET,MAAM,CAAC,EAAE,EAAE,MAAM;IAQ3B,MAAM;CAIhB"}
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@ export type DomAnimatedSpriteNodeOptions = {
|
|
|
10
10
|
animation: string
|
|
11
11
|
} & DomGameObjectOptions
|
|
12
12
|
|
|
13
|
-
export class DomAnimatedSpriteNode<E extends EventMap =
|
|
13
|
+
export class DomAnimatedSpriteNode<E extends EventMap = {}> extends DomGameObject<E & {
|
|
14
14
|
animationend: (animation: string) => void
|
|
15
15
|
}> {
|
|
16
16
|
#src: string
|
|
@@ -34,7 +34,7 @@ class DomRootNode extends GameNode<EventMap> {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
export class DomGameObject<E extends EventMap =
|
|
37
|
+
export class DomGameObject<E extends EventMap = {}> extends GameNode<E> {
|
|
38
38
|
protected el = document.createElement('div')
|
|
39
39
|
|
|
40
40
|
#localTransform = new LocalTransform()
|
package/src/dom/dom-sprite.ts
CHANGED
|
@@ -7,7 +7,7 @@ export type DomSpriteNodeOptions = {
|
|
|
7
7
|
src: string
|
|
8
8
|
} & DomGameObjectOptions
|
|
9
9
|
|
|
10
|
-
export class DomSpriteNode<E extends EventMap =
|
|
10
|
+
export class DomSpriteNode<E extends EventMap = {}> extends DomGameObject<E> {
|
|
11
11
|
#src: string
|
|
12
12
|
|
|
13
13
|
constructor(options: DomSpriteNodeOptions) {
|
|
@@ -4,7 +4,7 @@ import { TransformableNode, TransformableNodeOptions } from './transformable'
|
|
|
4
4
|
|
|
5
5
|
export type GameObjectOptions = {} & TransformableNodeOptions
|
|
6
6
|
|
|
7
|
-
export class GameObject<E extends EventMap =
|
|
7
|
+
export class GameObject<E extends EventMap = {}> extends TransformableNode<PixiContainer, E> {
|
|
8
8
|
constructor(options?: GameObjectOptions) {
|
|
9
9
|
super(new PixiContainer({ sortableChildren: true }), options ?? {})
|
|
10
10
|
}
|
|
@@ -69,4 +69,7 @@ export abstract class RenderableNode<C extends PixiContainer, E extends EventMap
|
|
|
69
69
|
|
|
70
70
|
set tint(t) { this._pixiContainer.tint = t }
|
|
71
71
|
get tint() { return this._pixiContainer.tint }
|
|
72
|
+
|
|
73
|
+
hide() { this._pixiContainer.visible = false }
|
|
74
|
+
show() { this._pixiContainer.visible = true }
|
|
72
75
|
}
|
|
@@ -10,7 +10,7 @@ export type AnimatedSpriteNodeOptions = {
|
|
|
10
10
|
animation: string
|
|
11
11
|
} & GameObjectOptions
|
|
12
12
|
|
|
13
|
-
export class AnimatedSpriteNode<E extends EventMap =
|
|
13
|
+
export class AnimatedSpriteNode<E extends EventMap = {}> extends GameObject<E & {
|
|
14
14
|
animationend: (animation: string) => void
|
|
15
15
|
}> {
|
|
16
16
|
#src: string
|
|
@@ -46,25 +46,26 @@ export class AnimatedSpriteNode<E extends EventMap = EventMap> extends GameObjec
|
|
|
46
46
|
this.#sprite?.destroy()
|
|
47
47
|
this.#sprite = undefined
|
|
48
48
|
|
|
49
|
-
if (this.#sheet)
|
|
50
|
-
if (!this.#sheet.animations[this.#animation]) {
|
|
51
|
-
console.error(`Animation not found: ${this.#animation}`)
|
|
52
|
-
return
|
|
53
|
-
}
|
|
49
|
+
if (!this.#sheet) return
|
|
54
50
|
|
|
55
|
-
|
|
56
|
-
|
|
51
|
+
if (!this.#sheet.animations[this.#animation]) {
|
|
52
|
+
console.error(`Animation not found: ${this.#animation}`)
|
|
53
|
+
return
|
|
54
|
+
}
|
|
57
55
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
s.animationSpeed = a.fps / 60
|
|
61
|
-
s.play()
|
|
62
|
-
s.onLoop = () => (this as any).emit('animationend', this.#animation)
|
|
63
|
-
s.onComplete = () => (this as any).emit('animationend', this.#animation)
|
|
56
|
+
const a = this.#atlas.animations[this.#animation]
|
|
57
|
+
const s = new PixiAnimatedSprite(this.#sheet.animations[this.#animation])
|
|
64
58
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
59
|
+
s.anchor.set(0.5, 0.5)
|
|
60
|
+
s.zIndex = -999999
|
|
61
|
+
s.loop = a.loop
|
|
62
|
+
s.animationSpeed = a.fps / 60
|
|
63
|
+
s.play()
|
|
64
|
+
s.onLoop = () => (this as any).emit('animationend', this.#animation)
|
|
65
|
+
s.onComplete = () => (this as any).emit('animationend', this.#animation)
|
|
66
|
+
|
|
67
|
+
this._pixiContainer.addChild(s)
|
|
68
|
+
this.#sprite = s
|
|
68
69
|
}
|
|
69
70
|
|
|
70
71
|
set src(src) {
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import { EventMap } from '@webtaku/event-emitter'
|
|
2
2
|
import { Rectangle as PixiRectangle, Sprite as PixiSprite, Texture as PixiTexture } from 'pixi.js'
|
|
3
3
|
import { bitmapFontLoader } from '../../asset/loaders/bitmap-font'
|
|
4
|
+
import { BitmapFont } from '../../types/bitmap-font'
|
|
4
5
|
import { GameObject, GameObjectOptions } from '../core/game-object'
|
|
5
6
|
|
|
6
7
|
export type BitmapTextNodeOptions = {
|
|
7
8
|
fnt: string
|
|
8
9
|
src: string
|
|
9
|
-
text
|
|
10
|
+
text?: string
|
|
10
11
|
} & GameObjectOptions
|
|
11
12
|
|
|
12
|
-
export class BitmapTextNode<E extends EventMap =
|
|
13
|
+
export class BitmapTextNode<E extends EventMap = {}> extends GameObject<E> {
|
|
13
14
|
#fnt: string
|
|
14
15
|
#src: string
|
|
15
|
-
#text
|
|
16
|
+
#text?: string
|
|
17
|
+
|
|
18
|
+
#font?: BitmapFont
|
|
16
19
|
#sprites: PixiSprite[] = []
|
|
17
20
|
|
|
18
21
|
constructor(options: BitmapTextNodeOptions) {
|
|
@@ -23,21 +26,14 @@ export class BitmapTextNode<E extends EventMap = EventMap> extends GameObject<E>
|
|
|
23
26
|
this.#load()
|
|
24
27
|
}
|
|
25
28
|
|
|
26
|
-
|
|
27
|
-
let font
|
|
28
|
-
if (bitmapFontLoader.checkCached(this.#fnt)) {
|
|
29
|
-
font = bitmapFontLoader.getCached(this.#fnt)
|
|
30
|
-
} else {
|
|
31
|
-
console.info(`Bitmap font not preloaded. Loading now: ${this.#fnt}`)
|
|
32
|
-
font = await bitmapFontLoader.load(this.#fnt, this.#src)
|
|
33
|
-
}
|
|
34
|
-
if (!font) return
|
|
35
|
-
|
|
29
|
+
#updateText() {
|
|
36
30
|
for (const sprite of this.#sprites) {
|
|
37
31
|
sprite.destroy()
|
|
38
32
|
}
|
|
39
33
|
this.#sprites = []
|
|
40
34
|
|
|
35
|
+
if (!this.#font || !this.#text) return
|
|
36
|
+
|
|
41
37
|
let xPos = 0, yPos = 0
|
|
42
38
|
let minX = Infinity, minY = Infinity
|
|
43
39
|
let maxX = -Infinity, maxY = -Infinity
|
|
@@ -47,16 +43,16 @@ export class BitmapTextNode<E extends EventMap = EventMap> extends GameObject<E>
|
|
|
47
43
|
|
|
48
44
|
if (charCode === 10) {
|
|
49
45
|
xPos = 0
|
|
50
|
-
yPos += font.lineHeight
|
|
46
|
+
yPos += this.#font.lineHeight
|
|
51
47
|
continue
|
|
52
48
|
}
|
|
53
49
|
|
|
54
|
-
const c = font.chars[charCode]
|
|
50
|
+
const c = this.#font.chars[charCode]
|
|
55
51
|
if (!c) continue
|
|
56
52
|
|
|
57
53
|
const frame = new PixiRectangle(c.x, c.y, c.width, c.height)
|
|
58
|
-
const texture = new PixiTexture({ source: font.texture.source, frame })
|
|
59
|
-
const sprite = new PixiSprite(texture)
|
|
54
|
+
const texture = new PixiTexture({ source: this.#font.texture.source, frame })
|
|
55
|
+
const sprite = new PixiSprite({ texture, zIndex: -999999 })
|
|
60
56
|
|
|
61
57
|
const x0 = xPos + c.xoffset
|
|
62
58
|
const y0 = yPos + c.yoffset
|
|
@@ -87,16 +83,27 @@ export class BitmapTextNode<E extends EventMap = EventMap> extends GameObject<E>
|
|
|
87
83
|
maxY = 0
|
|
88
84
|
}
|
|
89
85
|
|
|
90
|
-
const
|
|
91
|
-
const
|
|
86
|
+
const cx = (minX + maxX) / 2
|
|
87
|
+
const cy = (minY + maxY) / 2
|
|
92
88
|
|
|
93
89
|
for (const s of this.#sprites) {
|
|
94
|
-
s.x -=
|
|
95
|
-
s.y -=
|
|
90
|
+
s.x -= cx
|
|
91
|
+
s.y -= cy
|
|
96
92
|
this._pixiContainer.addChild(s)
|
|
97
93
|
}
|
|
98
94
|
}
|
|
99
95
|
|
|
96
|
+
async #load() {
|
|
97
|
+
if (bitmapFontLoader.checkCached(this.#fnt)) {
|
|
98
|
+
this.#font = bitmapFontLoader.getCached(this.#fnt)
|
|
99
|
+
} else {
|
|
100
|
+
console.info(`Bitmap font not preloaded. Loading now: ${this.#fnt}`)
|
|
101
|
+
this.#font = await bitmapFontLoader.load(this.#fnt, this.#src)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
this.#updateText()
|
|
105
|
+
}
|
|
106
|
+
|
|
100
107
|
changeFont(fnt: string, src: string) {
|
|
101
108
|
if (this.#fnt !== fnt || this.#src !== src) {
|
|
102
109
|
bitmapFontLoader.release(this.#fnt)
|
|
@@ -106,6 +113,15 @@ export class BitmapTextNode<E extends EventMap = EventMap> extends GameObject<E>
|
|
|
106
113
|
}
|
|
107
114
|
}
|
|
108
115
|
|
|
116
|
+
set text(text: string | undefined) {
|
|
117
|
+
this.#text = text
|
|
118
|
+
this.#updateText()
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
get text() {
|
|
122
|
+
return this.#text
|
|
123
|
+
}
|
|
124
|
+
|
|
109
125
|
override remove() {
|
|
110
126
|
bitmapFontLoader.release(this.#fnt)
|
|
111
127
|
super.remove()
|
package/src/node/ext/spine.ts
CHANGED
|
@@ -19,7 +19,7 @@ export type SpineNodeOptions = {
|
|
|
19
19
|
loop?: boolean
|
|
20
20
|
} & GameObjectOptions
|
|
21
21
|
|
|
22
|
-
export class SpineNode<E extends EventMap =
|
|
22
|
+
export class SpineNode<E extends EventMap = {}> extends GameObject<E & {
|
|
23
23
|
animationend: (animation: string) => void
|
|
24
24
|
}> {
|
|
25
25
|
#atlas: string
|
package/src/node/ext/sprite.ts
CHANGED
|
@@ -7,7 +7,7 @@ export type SpriteNodeOptions = {
|
|
|
7
7
|
src: string
|
|
8
8
|
} & GameObjectOptions
|
|
9
9
|
|
|
10
|
-
export class SpriteNode<E extends EventMap =
|
|
10
|
+
export class SpriteNode<E extends EventMap = {}> extends GameObject<E> {
|
|
11
11
|
#src: string
|
|
12
12
|
#sprite?: PixiSprite
|
|
13
13
|
|
|
@@ -21,11 +21,12 @@ export type PhysicsObjectOptions = {
|
|
|
21
21
|
useYSort?: boolean
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
export class PhysicsObject<E extends EventMap =
|
|
24
|
+
export class PhysicsObject<E extends EventMap = {}> extends RenderableNode<PixiContainer, E> {
|
|
25
25
|
#localTransform = new LocalTransform()
|
|
26
26
|
#matterBody: Matter.Body
|
|
27
27
|
|
|
28
28
|
#useYSort = false
|
|
29
|
+
#collisionsEnabled = true
|
|
29
30
|
|
|
30
31
|
constructor(options: PhysicsObjectOptions) {
|
|
31
32
|
super(new PixiContainer({ sortableChildren: true }))
|
|
@@ -65,7 +66,7 @@ export class PhysicsObject<E extends EventMap = EventMap> extends RenderableNode
|
|
|
65
66
|
: parent.constructor?.name ?? typeof parent
|
|
66
67
|
throw new Error(`PhysicsObject parent must be PhysicsWorld, but got ${actual}`)
|
|
67
68
|
}
|
|
68
|
-
parent.addBody(this.#matterBody)
|
|
69
|
+
if (this.#collisionsEnabled) parent.addBody(this.#matterBody)
|
|
69
70
|
super.parent = parent
|
|
70
71
|
}
|
|
71
72
|
|
|
@@ -122,6 +123,12 @@ export class PhysicsObject<E extends EventMap = EventMap> extends RenderableNode
|
|
|
122
123
|
get isStatic() { return this.#matterBody.isStatic }
|
|
123
124
|
|
|
124
125
|
disableCollisions() {
|
|
126
|
+
this.#collisionsEnabled = false
|
|
125
127
|
this.#removeFromWorld()
|
|
126
128
|
}
|
|
129
|
+
|
|
130
|
+
enableCollisions() {
|
|
131
|
+
this.#collisionsEnabled = true;
|
|
132
|
+
(this.parent as PhysicsWorld)?.addBody(this.#matterBody)
|
|
133
|
+
}
|
|
127
134
|
}
|
|
@@ -7,7 +7,7 @@ export type PhysicsWorldOptions = {
|
|
|
7
7
|
gravity?: number
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
export class PhysicsWorld<E extends EventMap =
|
|
10
|
+
export class PhysicsWorld<E extends EventMap = {}> extends RenderableNode<PixiContainer, E> {
|
|
11
11
|
#matterEngine = Matter.Engine.create()
|
|
12
12
|
|
|
13
13
|
constructor(options?: PhysicsWorldOptions) {
|