kiwiengine 0.5.2 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +2 -2
- package/README.md +2 -2
- package/examples/auto-battle/assets/bgm/battle.mp3 +0 -0
- package/examples/auto-battle/assets/bitmap-fonts/white-peaberry.fnt +107 -0
- package/examples/auto-battle/assets/bitmap-fonts/white-peaberry.png +0 -0
- package/examples/auto-battle/assets/joystick/joystick.png +0 -0
- package/examples/auto-battle/assets/joystick/knob.png +0 -0
- package/examples/auto-battle/assets/sfx/hero/die/die.wav +0 -0
- package/examples/auto-battle/assets/sfx/hero/heal/heal.wav +0 -0
- package/examples/auto-battle/assets/sfx/hero/hit/hit1.wav +0 -0
- package/examples/auto-battle/assets/sfx/hero/hit/hit2.wav +0 -0
- package/examples/auto-battle/assets/sfx/hero/hit/hit3.wav +0 -0
- package/examples/auto-battle/assets/sfx/hero/miss/miss1.wav +0 -0
- package/examples/auto-battle/assets/sfx/hero/miss/miss2.wav +0 -0
- package/examples/auto-battle/assets/sfx/hero/miss/miss3.wav +0 -0
- package/examples/auto-battle/assets/sfx/orc/die/die.wav +0 -0
- package/examples/auto-battle/assets/sfx/orc/hit/hit1.wav +0 -0
- package/examples/auto-battle/assets/sfx/orc/hit/hit2.wav +0 -0
- package/examples/auto-battle/assets/sfx/orc/hit/hit3.wav +0 -0
- package/examples/auto-battle/assets/sfx/orc/miss/miss1.wav +0 -0
- package/examples/auto-battle/assets/sfx/orc/miss/miss2.wav +0 -0
- package/examples/auto-battle/assets/sfx/orc/miss/miss3.wav +0 -0
- package/examples/auto-battle/assets/spritesheets/hero-atlas.json +246 -0
- package/examples/auto-battle/assets/spritesheets/hero.png +0 -0
- package/examples/auto-battle/assets/spritesheets/orc-atlas.json +246 -0
- package/examples/auto-battle/assets/spritesheets/orc.png +0 -0
- package/examples/auto-battle/assets/spritesheets/potion-atlas.json +68 -0
- package/examples/auto-battle/assets/spritesheets/potion.png +0 -0
- package/examples/auto-battle/dist/game.js +2 -0
- package/examples/auto-battle/dist/game.js.LICENSE.txt +35 -0
- package/examples/auto-battle/hud/damage-text.ts +46 -0
- package/examples/auto-battle/hud/heal-text.ts +46 -0
- package/examples/auto-battle/hud/hp-bar.ts +38 -0
- package/examples/auto-battle/index.ts +41 -0
- package/examples/auto-battle/objects/character.ts +95 -0
- package/examples/auto-battle/objects/hero.ts +119 -0
- package/examples/auto-battle/objects/orc.ts +107 -0
- package/examples/auto-battle/objects/potion.ts +27 -0
- package/examples/auto-battle/stage.ts +366 -0
- package/examples/battle-benchmark-matterjs/assets/bgm/battle.mp3 +0 -0
- package/examples/battle-benchmark-matterjs/assets/bitmap-fonts/white-peaberry.fnt +107 -0
- package/examples/battle-benchmark-matterjs/assets/bitmap-fonts/white-peaberry.png +0 -0
- package/examples/battle-benchmark-matterjs/assets/joystick/joystick.png +0 -0
- package/examples/battle-benchmark-matterjs/assets/joystick/knob.png +0 -0
- package/examples/battle-benchmark-matterjs/assets/sfx/hero/die/die.wav +0 -0
- package/examples/battle-benchmark-matterjs/assets/sfx/hero/heal/heal.wav +0 -0
- package/examples/battle-benchmark-matterjs/assets/sfx/hero/hit/hit1.wav +0 -0
- package/examples/battle-benchmark-matterjs/assets/sfx/hero/hit/hit2.wav +0 -0
- package/examples/battle-benchmark-matterjs/assets/sfx/hero/hit/hit3.wav +0 -0
- package/examples/battle-benchmark-matterjs/assets/sfx/hero/miss/miss1.wav +0 -0
- package/examples/battle-benchmark-matterjs/assets/sfx/hero/miss/miss2.wav +0 -0
- package/examples/battle-benchmark-matterjs/assets/sfx/hero/miss/miss3.wav +0 -0
- package/examples/battle-benchmark-matterjs/assets/sfx/orc/die/die.wav +0 -0
- package/examples/battle-benchmark-matterjs/assets/sfx/orc/hit/hit1.wav +0 -0
- package/examples/battle-benchmark-matterjs/assets/sfx/orc/hit/hit2.wav +0 -0
- package/examples/battle-benchmark-matterjs/assets/sfx/orc/hit/hit3.wav +0 -0
- package/examples/battle-benchmark-matterjs/assets/sfx/orc/miss/miss1.wav +0 -0
- package/examples/battle-benchmark-matterjs/assets/sfx/orc/miss/miss2.wav +0 -0
- package/examples/battle-benchmark-matterjs/assets/sfx/orc/miss/miss3.wav +0 -0
- package/examples/battle-benchmark-matterjs/assets/spritesheets/hero-atlas.json +246 -0
- package/examples/battle-benchmark-matterjs/assets/spritesheets/hero.png +0 -0
- package/examples/battle-benchmark-matterjs/assets/spritesheets/orc-atlas.json +246 -0
- package/examples/battle-benchmark-matterjs/assets/spritesheets/orc.png +0 -0
- package/examples/battle-benchmark-matterjs/assets/spritesheets/potion-atlas.json +68 -0
- package/examples/battle-benchmark-matterjs/assets/spritesheets/potion.png +0 -0
- package/examples/battle-benchmark-matterjs/dist/game.js +2 -0
- package/examples/battle-benchmark-matterjs/dist/game.js.LICENSE.txt +35 -0
- package/examples/battle-benchmark-matterjs/hud/damage-text.ts +46 -0
- package/examples/battle-benchmark-matterjs/hud/heal-text.ts +46 -0
- package/examples/battle-benchmark-matterjs/hud/hp-bar.ts +38 -0
- package/examples/battle-benchmark-matterjs/index.html +24 -0
- package/examples/battle-benchmark-matterjs/index.ts +41 -0
- package/examples/battle-benchmark-matterjs/objects/character.ts +95 -0
- package/examples/battle-benchmark-matterjs/objects/hero.ts +111 -0
- package/examples/battle-benchmark-matterjs/objects/orc.ts +107 -0
- package/examples/battle-benchmark-matterjs/objects/potion.ts +27 -0
- package/examples/battle-benchmark-matterjs/stage.ts +177 -0
- package/examples/battle-benchmark-separation/assets/bgm/battle.mp3 +0 -0
- package/examples/battle-benchmark-separation/assets/bitmap-fonts/white-peaberry.fnt +107 -0
- package/examples/battle-benchmark-separation/assets/bitmap-fonts/white-peaberry.png +0 -0
- package/examples/battle-benchmark-separation/assets/joystick/joystick.png +0 -0
- package/examples/battle-benchmark-separation/assets/joystick/knob.png +0 -0
- package/examples/battle-benchmark-separation/assets/sfx/hero/die/die.wav +0 -0
- package/examples/battle-benchmark-separation/assets/sfx/hero/heal/heal.wav +0 -0
- package/examples/battle-benchmark-separation/assets/sfx/hero/hit/hit1.wav +0 -0
- package/examples/battle-benchmark-separation/assets/sfx/hero/hit/hit2.wav +0 -0
- package/examples/battle-benchmark-separation/assets/sfx/hero/hit/hit3.wav +0 -0
- package/examples/battle-benchmark-separation/assets/sfx/hero/miss/miss1.wav +0 -0
- package/examples/battle-benchmark-separation/assets/sfx/hero/miss/miss2.wav +0 -0
- package/examples/battle-benchmark-separation/assets/sfx/hero/miss/miss3.wav +0 -0
- package/examples/battle-benchmark-separation/assets/sfx/orc/die/die.wav +0 -0
- package/examples/battle-benchmark-separation/assets/sfx/orc/hit/hit1.wav +0 -0
- package/examples/battle-benchmark-separation/assets/sfx/orc/hit/hit2.wav +0 -0
- package/examples/battle-benchmark-separation/assets/sfx/orc/hit/hit3.wav +0 -0
- package/examples/battle-benchmark-separation/assets/sfx/orc/miss/miss1.wav +0 -0
- package/examples/battle-benchmark-separation/assets/sfx/orc/miss/miss2.wav +0 -0
- package/examples/battle-benchmark-separation/assets/sfx/orc/miss/miss3.wav +0 -0
- package/examples/battle-benchmark-separation/assets/spritesheets/hero-atlas.json +246 -0
- package/examples/battle-benchmark-separation/assets/spritesheets/hero.png +0 -0
- package/examples/battle-benchmark-separation/assets/spritesheets/orc-atlas.json +246 -0
- package/examples/battle-benchmark-separation/assets/spritesheets/orc.png +0 -0
- package/examples/battle-benchmark-separation/assets/spritesheets/potion-atlas.json +68 -0
- package/examples/battle-benchmark-separation/assets/spritesheets/potion.png +0 -0
- package/examples/battle-benchmark-separation/dist/game.js +2 -0
- package/examples/battle-benchmark-separation/dist/game.js.LICENSE.txt +35 -0
- package/examples/battle-benchmark-separation/hud/damage-text.ts +46 -0
- package/examples/battle-benchmark-separation/hud/heal-text.ts +46 -0
- package/examples/battle-benchmark-separation/hud/hp-bar.ts +38 -0
- package/examples/battle-benchmark-separation/index.html +24 -0
- package/examples/battle-benchmark-separation/index.ts +41 -0
- package/examples/battle-benchmark-separation/objects/character.ts +225 -0
- package/examples/battle-benchmark-separation/objects/hero.ts +110 -0
- package/examples/battle-benchmark-separation/objects/orc.ts +213 -0
- package/examples/battle-benchmark-separation/objects/potion.ts +27 -0
- package/examples/battle-benchmark-separation/stage.ts +178 -0
- package/examples/battle-benchmark-separation2/assets/bgm/battle.mp3 +0 -0
- package/examples/battle-benchmark-separation2/assets/bitmap-fonts/white-peaberry.fnt +107 -0
- package/examples/battle-benchmark-separation2/assets/bitmap-fonts/white-peaberry.png +0 -0
- package/examples/battle-benchmark-separation2/assets/joystick/joystick.png +0 -0
- package/examples/battle-benchmark-separation2/assets/joystick/knob.png +0 -0
- package/examples/battle-benchmark-separation2/assets/sfx/hero/die/die.wav +0 -0
- package/examples/battle-benchmark-separation2/assets/sfx/hero/heal/heal.wav +0 -0
- package/examples/battle-benchmark-separation2/assets/sfx/hero/hit/hit1.wav +0 -0
- package/examples/battle-benchmark-separation2/assets/sfx/hero/hit/hit2.wav +0 -0
- package/examples/battle-benchmark-separation2/assets/sfx/hero/hit/hit3.wav +0 -0
- package/examples/battle-benchmark-separation2/assets/sfx/hero/miss/miss1.wav +0 -0
- package/examples/battle-benchmark-separation2/assets/sfx/hero/miss/miss2.wav +0 -0
- package/examples/battle-benchmark-separation2/assets/sfx/hero/miss/miss3.wav +0 -0
- package/examples/battle-benchmark-separation2/assets/sfx/orc/die/die.wav +0 -0
- package/examples/battle-benchmark-separation2/assets/sfx/orc/hit/hit1.wav +0 -0
- package/examples/battle-benchmark-separation2/assets/sfx/orc/hit/hit2.wav +0 -0
- package/examples/battle-benchmark-separation2/assets/sfx/orc/hit/hit3.wav +0 -0
- package/examples/battle-benchmark-separation2/assets/sfx/orc/miss/miss1.wav +0 -0
- package/examples/battle-benchmark-separation2/assets/sfx/orc/miss/miss2.wav +0 -0
- package/examples/battle-benchmark-separation2/assets/sfx/orc/miss/miss3.wav +0 -0
- package/examples/battle-benchmark-separation2/assets/spritesheets/hero-atlas.json +246 -0
- package/examples/battle-benchmark-separation2/assets/spritesheets/hero.png +0 -0
- package/examples/battle-benchmark-separation2/assets/spritesheets/orc-atlas.json +246 -0
- package/examples/battle-benchmark-separation2/assets/spritesheets/orc.png +0 -0
- package/examples/battle-benchmark-separation2/assets/spritesheets/potion-atlas.json +68 -0
- package/examples/battle-benchmark-separation2/assets/spritesheets/potion.png +0 -0
- package/examples/battle-benchmark-separation2/dist/game.js +2 -0
- package/examples/battle-benchmark-separation2/dist/game.js.LICENSE.txt +35 -0
- package/examples/battle-benchmark-separation2/hud/damage-text.ts +46 -0
- package/examples/battle-benchmark-separation2/hud/heal-text.ts +46 -0
- package/examples/battle-benchmark-separation2/hud/hp-bar.ts +38 -0
- package/examples/battle-benchmark-separation2/index.html +24 -0
- package/examples/battle-benchmark-separation2/index.ts +41 -0
- package/examples/battle-benchmark-separation2/objects/character.ts +195 -0
- package/examples/battle-benchmark-separation2/objects/hero.ts +110 -0
- package/examples/battle-benchmark-separation2/objects/orc.ts +213 -0
- package/examples/battle-benchmark-separation2/objects/potion.ts +27 -0
- package/examples/battle-benchmark-separation2/stage.ts +178 -0
- package/examples/dom-sprite-test/index.ts +6 -9
- package/examples/simple-battle/assets/spritesheets/hero-atlas.json +180 -223
- package/examples/simple-battle/assets/spritesheets/orc-atlas.json +180 -223
- package/examples/simple-battle/assets/spritesheets/potion-atlas.json +46 -61
- package/examples/simple-battle/hud/damage-text.ts +1 -0
- package/examples/simple-battle/hud/heal-text.ts +1 -0
- package/examples/simple-battle/objects/character.ts +3 -3
- package/examples/simple-battle/objects/hero.ts +3 -5
- package/examples/simple-battle/objects/orc.ts +3 -5
- package/examples/simple-battle/objects/potion.ts +0 -2
- package/examples/simple-battle/stage.ts +2 -4
- package/examples/sprite-test/index.ts +6 -9
- package/examples/webpack.config.js +4 -1
- package/lib/asset/loaders/audio.js +4 -1
- package/lib/asset/loaders/audio.js.map +1 -1
- package/lib/asset/loaders/binary.js +4 -1
- package/lib/asset/loaders/binary.js.map +1 -1
- package/lib/asset/loaders/bitmap-font.js +24 -21
- package/lib/asset/loaders/bitmap-font.js.map +1 -1
- package/lib/asset/loaders/font.js +3 -0
- package/lib/asset/loaders/font.js.map +1 -1
- package/lib/asset/loaders/spritesheet.js +12 -1
- package/lib/asset/loaders/spritesheet.js.map +1 -1
- package/lib/asset/loaders/text.js +3 -0
- package/lib/asset/loaders/text.js.map +1 -1
- package/lib/asset/loaders/texture.js +21 -26
- package/lib/asset/loaders/texture.js.map +1 -1
- package/lib/asset/preload.js.map +1 -1
- package/lib/collision/check-collision.js +16 -16
- package/lib/collision/check-collision.js.map +1 -1
- package/lib/dom/dom-animated-sprite.js +21 -36
- package/lib/dom/dom-animated-sprite.js.map +1 -1
- package/lib/dom/dom-game-object.js +9 -7
- package/lib/dom/dom-game-object.js.map +1 -1
- package/lib/dom/dom-particle.js.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/node/core/dirty-number.js +0 -19
- package/lib/node/core/dirty-number.js.map +1 -1
- package/lib/node/core/renderable.js +7 -0
- package/lib/node/core/renderable.js.map +1 -1
- package/lib/node/core/transform.js +22 -11
- package/lib/node/core/transform.js.map +1 -1
- package/lib/node/ext/animated-sprite.js +3 -22
- package/lib/node/ext/animated-sprite.js.map +1 -1
- package/lib/node/ext/bitmap-text.js +7 -3
- package/lib/node/ext/bitmap-text.js.map +1 -1
- package/lib/node/ext/circle.js +18 -3
- package/lib/node/ext/circle.js.map +1 -1
- package/lib/node/ext/deplay.js +2 -0
- package/lib/node/ext/deplay.js.map +1 -1
- package/lib/node/ext/dom-container.js +2 -2
- package/lib/node/ext/dom-container.js.map +1 -1
- package/lib/node/ext/interval.js +2 -0
- package/lib/node/ext/interval.js.map +1 -1
- package/lib/node/ext/particle.js.map +1 -1
- package/lib/node/ext/rectangle.js +24 -4
- package/lib/node/ext/rectangle.js.map +1 -1
- package/lib/node/physics/physics-object.js +9 -29
- package/lib/node/physics/physics-object.js.map +1 -1
- package/lib/node/physics/physics-world.js +2 -0
- package/lib/node/physics/physics-world.js.map +1 -1
- package/lib/node/physics/rigidbodies.js +7 -0
- package/lib/node/physics/rigidbodies.js.map +1 -0
- package/lib/renderer/renderer.js +3 -2
- package/lib/renderer/renderer.js.map +1 -1
- package/lib/types/animation-atlas.js +2 -0
- package/lib/types/animation-atlas.js.map +1 -0
- package/lib/types/asset/loaders/audio.d.ts +1 -0
- package/lib/types/asset/loaders/audio.d.ts.map +1 -1
- package/lib/types/asset/loaders/binary.d.ts +1 -0
- package/lib/types/asset/loaders/binary.d.ts.map +1 -1
- package/lib/types/asset/loaders/bitmap-font.d.ts +1 -0
- package/lib/types/asset/loaders/bitmap-font.d.ts.map +1 -1
- package/lib/types/asset/loaders/font.d.ts +1 -0
- package/lib/types/asset/loaders/font.d.ts.map +1 -1
- package/lib/types/asset/loaders/spritesheet.d.ts +11 -3
- package/lib/types/asset/loaders/spritesheet.d.ts.map +1 -1
- package/lib/types/asset/loaders/text.d.ts +1 -0
- package/lib/types/asset/loaders/text.d.ts.map +1 -1
- package/lib/types/asset/loaders/texture.d.ts +1 -1
- package/lib/types/asset/loaders/texture.d.ts.map +1 -1
- package/lib/types/asset/preload.d.ts +2 -2
- package/lib/types/asset/preload.d.ts.map +1 -1
- package/lib/types/atlas copy.js +2 -0
- package/lib/types/atlas copy.js.map +1 -0
- package/lib/types/atlas.js +2 -0
- package/lib/types/atlas.js.map +1 -0
- package/lib/types/dom/dom-animated-sprite.d.ts +4 -10
- 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-particle.d.ts.map +1 -1
- package/lib/types/index.d.ts +2 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/node/core/dirty-number.d.ts +0 -8
- package/lib/types/node/core/dirty-number.d.ts.map +1 -1
- package/lib/types/node/core/renderable.d.ts +1 -0
- package/lib/types/node/core/renderable.d.ts.map +1 -1
- package/lib/types/node/core/transform.d.ts +4 -2
- package/lib/types/node/core/transform.d.ts.map +1 -1
- package/lib/types/node/ext/animated-sprite.d.ts +4 -10
- package/lib/types/node/ext/animated-sprite.d.ts.map +1 -1
- package/lib/types/node/ext/bitmap-text.d.ts.map +1 -1
- package/lib/types/node/ext/circle.d.ts +3 -3
- package/lib/types/node/ext/circle.d.ts.map +1 -1
- package/lib/types/node/ext/deplay.d.ts.map +1 -1
- package/lib/types/node/ext/dom-container.d.ts +1 -1
- package/lib/types/node/ext/dom-container.d.ts.map +1 -1
- package/lib/types/node/ext/interval.d.ts.map +1 -1
- package/lib/types/node/ext/particle.d.ts.map +1 -1
- package/lib/types/node/ext/rectangle.d.ts +4 -4
- package/lib/types/node/ext/rectangle.d.ts.map +1 -1
- package/lib/types/node/physics/physics-object.d.ts +2 -2
- package/lib/types/node/physics/physics-object.d.ts.map +1 -1
- package/lib/types/node/physics/physics-world.d.ts.map +1 -1
- package/lib/types/node/physics/rigidbodies.d.ts +23 -0
- package/lib/types/node/physics/rigidbodies.d.ts.map +1 -0
- package/lib/types/renderer/renderer.d.ts.map +1 -1
- package/lib/types/sprite-atlas.js +2 -0
- package/lib/types/sprite-atlas.js.map +1 -0
- package/lib/types/types/animation-atlas.d.ts +14 -0
- package/lib/types/types/animation-atlas.d.ts.map +1 -0
- package/lib/types/types/atlas copy.d.ts +12 -0
- package/lib/types/types/atlas copy.d.ts.map +1 -0
- package/lib/types/types/atlas.d.ts +16 -0
- package/lib/types/types/atlas.d.ts.map +1 -0
- package/lib/types/types/sprite-atlas.d.ts +13 -0
- package/lib/types/types/sprite-atlas.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/asset/loaders/audio.ts +5 -2
- package/src/asset/loaders/binary.ts +5 -1
- package/src/asset/loaders/bitmap-font.ts +33 -27
- package/src/asset/loaders/font.ts +4 -0
- package/src/asset/loaders/spritesheet.ts +18 -5
- package/src/asset/loaders/text.ts +4 -0
- package/src/asset/loaders/texture.ts +19 -27
- package/src/asset/preload.ts +4 -8
- package/src/collision/check-collision.ts +16 -16
- package/src/dom/dom-animated-sprite.ts +24 -45
- package/src/dom/dom-game-object.ts +9 -6
- package/src/dom/dom-particle.ts +1 -1
- package/src/index.ts +2 -0
- package/src/node/core/dirty-number.ts +0 -24
- package/src/node/core/renderable.ts +7 -0
- package/src/node/core/transform.ts +23 -11
- package/src/node/ext/animated-sprite.ts +9 -29
- package/src/node/ext/bitmap-text.ts +7 -3
- package/src/node/ext/circle.ts +18 -3
- package/src/node/ext/deplay.ts +1 -0
- package/src/node/ext/dom-container.ts +2 -2
- package/src/node/ext/interval.ts +1 -0
- package/src/node/ext/particle.ts +1 -1
- package/src/node/ext/rectangle.ts +24 -4
- package/src/node/physics/physics-object.ts +11 -40
- package/src/node/physics/physics-world.ts +1 -0
- package/src/node/physics/rigidbodies.ts +14 -0
- package/src/renderer/renderer.ts +4 -3
- package/src/types/atlas.ts +17 -0
- package/examples/flappy-cat/assets/bgm/bgm.ogg +0 -0
- package/examples/flappy-cat/assets/images/base.png +0 -0
- package/examples/flappy-cat/assets/images/bg.png +0 -0
- package/examples/flappy-cat/assets/images/cat.png +0 -0
- package/examples/flappy-cat/assets/images/pipe-green.png +0 -0
- package/examples/flappy-cat/assets/images/pipe-red.png +0 -0
- package/examples/flappy-cat/assets/sfx/die.wav +0 -0
- package/examples/flappy-cat/assets/sfx/hit.wav +0 -0
- package/examples/flappy-cat/assets/sfx/point.wav +0 -0
- package/examples/flappy-cat/assets/sfx/wing.wav +0 -0
- package/examples/flappy-cat/dist/game.js +0 -0
- package/examples/flappy-cat/index.ts +0 -0
- /package/examples/{flappy-cat → auto-battle}/index.html +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom-container.js","sourceRoot":"","sources":["../../../src/node/ext/dom-container.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAqB,MAAM,qBAAqB,CAAA;AAInE,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAC9C,GAAG,CAAa;IAEhB,YAAY,EAAe,EAAE,OAAiC;QAC5D,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAA;QAC9B,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAA;QACnB,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAA;QAClB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAA;QACrB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;IACf,CAAC;IAED,cAAc;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC9B,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAA;YAC9B,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAA;YAEhC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG;;wBAET,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,OAAO,GAAG,CAAC;wBACvD,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,OAAO,GAAG,CAAC;;gBAE9D,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;iBAClC,EAAE,CAAC,QAAQ,CAAC,CAAC;OACvB,CAAA;QACH,CAAC;IACH,CAAC;IAED,IAAuB,QAAQ,CAAC,QAA8B;QAC5D,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAEzB,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACxC,IAAI,CAAC,cAAc,EAAE,CAAA;QACvB,CAAC;IACH,CAAC;IAED,IAAuB,QAAQ;QAC7B,OAAO,KAAK,CAAC,QAAQ,CAAA;IACvB,CAAC;
|
|
1
|
+
{"version":3,"file":"dom-container.js","sourceRoot":"","sources":["../../../src/node/ext/dom-container.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAqB,MAAM,qBAAqB,CAAA;AAInE,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAC9C,GAAG,CAAa;IAEhB,YAAY,EAAe,EAAE,OAAiC;QAC5D,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAA;QAC9B,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAA;QACnB,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAA;QAClB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAA;QACrB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;IACf,CAAC;IAED,cAAc;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC9B,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAA;YAC9B,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAA;YAEhC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG;;wBAET,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,OAAO,GAAG,CAAC;wBACvD,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,OAAO,GAAG,CAAC;;gBAE9D,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;iBAClC,EAAE,CAAC,QAAQ,CAAC,CAAC;OACvB,CAAA;QACH,CAAC;IACH,CAAC;IAED,IAAuB,QAAQ,CAAC,QAA8B;QAC5D,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAEzB,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACxC,IAAI,CAAC,cAAc,EAAE,CAAA;QACvB,CAAC;IACH,CAAC;IAED,IAAuB,QAAQ;QAC7B,OAAO,KAAK,CAAC,QAAQ,CAAA;IACvB,CAAC;IAEQ,qBAAqB;QAC5B,KAAK,CAAC,qBAAqB,EAAE,CAAA;QAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC9B,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,cAAc,EAAE,CAAA;QACvB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK;YAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAClF,CAAC;IAEQ,MAAM;QACb,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAA;QACjB,KAAK,CAAC,MAAM,EAAE,CAAA;IAChB,CAAC;CACF","sourcesContent":["import { Renderer } from '../../renderer/renderer'\nimport { GameObject, GameObjectOptions } from '../core/game-object'\n\nexport type DomContainerNodeOptions = {} & GameObjectOptions\n\nexport class DomContainerNode extends GameObject {\n #el: HTMLElement\n\n constructor(el: HTMLElement, options?: DomContainerNodeOptions) {\n super(options)\n el.style.position = 'absolute'\n el.style.left = '0'\n el.style.top = '0'\n el.style.zIndex = '1'\n this.#el = el\n }\n\n #syncTransform() {\n const renderer = this.renderer\n if (renderer) {\n const wt = this.worldTransform\n const S = renderer.viewportScale\n\n this.#el.style.transform = `\n translate(\n calc(-50% + ${wt.x.v * S + renderer.canvasLeft + renderer.centerX * S}px),\n calc(-50% + ${wt.y.v * S + renderer.canvasTop + renderer.centerY * S}px)\n )\n scale(${wt.scaleX.v * S}, ${wt.scaleY.v * S})\n rotate(${wt.rotation.v}rad)\n `\n }\n }\n\n protected override set renderer(renderer: Renderer | undefined) {\n super.renderer = renderer\n\n if (renderer) {\n renderer.container.appendChild(this.#el)\n this.#syncTransform()\n }\n }\n\n protected override get renderer() {\n return super.renderer\n }\n\n override _updateWorldTransform() {\n super._updateWorldTransform()\n\n const renderer = this.renderer\n if (renderer && (renderer._isSizeDirty || this.worldTransform.dirty)) {\n this.#syncTransform()\n }\n if (this.worldAlpha.dirty) this.#el.style.opacity = this.worldAlpha.v.toString()\n }\n\n override remove() {\n this.#el.remove()\n super.remove()\n }\n}\n"]}
|
package/lib/node/ext/interval.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interval.js","sourceRoot":"","sources":["../../../src/node/ext/interval.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,MAAM,OAAO,YAAa,SAAQ,QAAkB;IAClD,QAAQ,CAAQ;IAChB,YAAY,GAAG,CAAC,CAAA;IAChB,SAAS,CAAY;IAErB,YAAY,QAAgB,EAAE,QAAoB;QAChD,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;IAC3B,CAAC;IAEkB,MAAM,CAAC,EAAU;QAClC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAEhB,IAAI,CAAC,YAAY,IAAI,EAAE,CAAA;QACvB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAA;YAClC,IAAI,CAAC,SAAS,EAAE,CAAA;QAClB,CAAC;IACH,CAAC;CACF","sourcesContent":["import { EventMap } from '@webtaku/event-emitter'\nimport { GameNode } from '../core/game-node'\n\nexport class IntervalNode extends GameNode<EventMap> {\n interval: number\n #accumulated = 0\n #callback: () => void\n\n constructor(interval: number, callback: () => void) {\n super()\n this.interval = interval\n this.#callback = callback\n }\n\n protected override update(dt: number) {\n super.update(dt)\n\n this.#accumulated += dt\n if (this.#accumulated >= this.interval) {\n this.#accumulated %= this.interval\n this.#callback()\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"interval.js","sourceRoot":"","sources":["../../../src/node/ext/interval.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,MAAM,OAAO,YAAa,SAAQ,QAAkB;IAClD,QAAQ,CAAQ;IAChB,YAAY,GAAG,CAAC,CAAA;IAChB,SAAS,CAAY;IAErB,YAAY,QAAgB,EAAE,QAAoB;QAChD,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;IAC3B,CAAC;IAEkB,MAAM,CAAC,EAAU;QAClC,IAAI,IAAI,CAAC,MAAM;YAAE,OAAM;QACvB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAEhB,IAAI,CAAC,YAAY,IAAI,EAAE,CAAA;QACvB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAA;YAClC,IAAI,CAAC,SAAS,EAAE,CAAA;QAClB,CAAC;IACH,CAAC;CACF","sourcesContent":["import { EventMap } from '@webtaku/event-emitter'\nimport { GameNode } from '../core/game-node'\n\nexport class IntervalNode extends GameNode<EventMap> {\n interval: number\n #accumulated = 0\n #callback: () => void\n\n constructor(interval: number, callback: () => void) {\n super()\n this.interval = interval\n this.#callback = callback\n }\n\n protected override update(dt: number) {\n if (this.paused) return\n super.update(dt)\n\n this.#accumulated += dt\n if (this.#accumulated >= this.interval) {\n this.#accumulated %= this.interval\n this.#callback()\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"particle.js","sourceRoot":"","sources":["../../../src/node/ext/particle.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"particle.js","sourceRoot":"","sources":["../../../src/node/ext/particle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,MAAM,IAAI,UAAU,EAA0B,MAAM,SAAS,CAAA;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAqB,MAAM,qBAAqB,CAAA;AAgCnE,SAAS,MAAM,CAAC,GAAW,EAAE,GAAW;IACtC,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;AAC1C,CAAC;AAED,MAAM,OAAO,cAAe,SAAQ,UAAU;IAC5C,WAAW,CAAQ;IACnB,MAAM,CAAa;IACnB,SAAS,CAAa;IACtB,MAAM,CAAa;IACnB,SAAS,CAAa;IACtB,MAAM,CAAa;IACnB,WAAW,CAAS;IACpB,SAAS,CAAQ;IACjB,iBAAiB,CAAS;IAC1B,UAAU,CAAc;IAExB,QAAQ,CAAc;IACtB,mBAAmB,CAAe;IAClC,UAAU,GAAe,EAAE,CAAA;IAE3B,YAAY,OAA8B;QACxC,KAAK,CAAC,OAAO,CAAC,CAAA;QAEd,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAA;QAClC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAA;QAC3B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAA;QACjC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAA;QAC3B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAA;QACjC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,aAAa,CAAA;QACnC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAA;QACrC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAA;QACjC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAA;QACjD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAA;QAEnC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;IAChD,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,IAAI,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC3D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,uCAAuC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;YACvE,IAAI,CAAC,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAA4B;QAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,CAAC,mBAAmB,CAAA;QAElD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAEtD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC;gBAC5B,CAAC,EAAE,CAAC;gBACJ,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,MAAM,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;gBAC1B,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;gBAC7B,KAAK,EAAE,IAAI,CAAC,WAAW;gBACvB,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aACrD,CAAC,CAAA;YAEF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACnB,MAAM;gBACN,GAAG,EAAE,CAAC;gBACN,QAAQ;gBACR,SAAS,EAAE,QAAQ,GAAG,GAAG;gBACzB,SAAS,EAAE,QAAQ,GAAG,GAAG;gBACzB,QAAQ,EAAE,IAAI,CAAC,SAAS;aACzB,CAAC,CAAA;YAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAEkB,MAAM,CAAC,EAAU;QAClC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAEhB,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAA;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;YACf,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAA;YAElB,CAAC,CAAC,GAAG,IAAI,EAAE,CAAA;YACX,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACvB,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;gBAC7B,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBACf,CAAC,EAAE,CAAA;gBACH,SAAQ;YACV,CAAC;YAED,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,EAAE,CAAA;YACvB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,EAAE,CAAA;YACvB,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAA;QAC5B,CAAC;IACH,CAAC;IAEQ,MAAM;QACb,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACvC,KAAK,CAAC,MAAM,EAAE,CAAA;IAChB,CAAC;CACF","sourcesContent":["import { BLEND_MODES, Sprite as PixiSprite, Texture as PixiTexture } from 'pixi.js'\nimport { textureLoader } from '../../asset/loaders/texture'\nimport { GameObject, GameObjectOptions } from '../core/game-object'\n\ntype RandomRange = { min: number, max: number }\n\nexport type ParticleSystemOptions = {\n texture: string\n\n count: RandomRange\n lifespan: RandomRange\n angle: RandomRange\n velocity: RandomRange\n particleScale: RandomRange\n\n startAlpha?: number\n fadeRate: number\n orientToVelocity: boolean\n\n blendMode?: BLEND_MODES // ex) 'screen', 'multiply'\n} & GameObjectOptions\n\ninterface Particle {\n sprite: PixiSprite\n\n age: number\n lifespan: number\n\n velocityX: number\n velocityY: number\n\n fadeRate: number\n}\n\nfunction random(min: number, max: number) {\n return Math.random() * (max - min) + min\n}\n\nexport class ParticleSystem extends GameObject {\n #textureSrc: string\n #count: RandomRange\n #lifespan: RandomRange\n #angle: RandomRange\n #velocity: RandomRange\n #scale: RandomRange\n #startAlpha?: number\n #fadeRate: number\n #orientToVelocity: boolean\n #blendMode?: BLEND_MODES\n\n #texture?: PixiTexture\n #loadTexturePromise: Promise<void>\n #particles: Particle[] = []\n\n constructor(options: ParticleSystemOptions) {\n super(options)\n\n this.#textureSrc = options.texture\n this.#count = options.count\n this.#lifespan = options.lifespan\n this.#angle = options.angle\n this.#velocity = options.velocity\n this.#scale = options.particleScale\n this.#startAlpha = options.startAlpha\n this.#fadeRate = options.fadeRate\n this.#orientToVelocity = options.orientToVelocity\n this.#blendMode = options.blendMode\n\n this.#loadTexturePromise = this.#loadTexture()\n }\n\n async #loadTexture() {\n if (textureLoader.checkCached(this.#textureSrc)) {\n this.#texture = textureLoader.getCached(this.#textureSrc)\n } else {\n console.info(`Texture not preloaded. Loading now: ${this.#textureSrc}`)\n this.#texture = await textureLoader.load(this.#textureSrc)\n }\n }\n\n async burst({ x, y }: { x: number; y: number }) {\n if (!this.#texture) await this.#loadTexturePromise\n\n const count = random(this.#count.min, this.#count.max)\n for (let i = 0; i < count; i++) {\n const lifespan = random(this.#lifespan.min, this.#lifespan.max)\n const angle = random(this.#angle.min, this.#angle.max)\n const sin = Math.sin(angle)\n const cos = Math.cos(angle)\n const velocity = random(this.#velocity.min, this.#velocity.max)\n const scale = random(this.#scale.min, this.#scale.max)\n\n const sprite = new PixiSprite({\n x, y,\n texture: this.#texture,\n anchor: { x: 0.5, y: 0.5 },\n scale: { x: scale, y: scale },\n alpha: this.#startAlpha,\n blendMode: this.#blendMode,\n rotation: this.#orientToVelocity ? angle : undefined,\n })\n\n this.#particles.push({\n sprite,\n age: 0,\n lifespan,\n velocityX: velocity * cos,\n velocityY: velocity * sin,\n fadeRate: this.#fadeRate,\n })\n\n this._pixiContainer.addChild(sprite)\n }\n }\n\n protected override update(dt: number) {\n super.update(dt)\n\n const ps = this.#particles\n for (let i = 0; i < ps.length; i++) {\n const p = ps[i]\n const g = p.sprite\n\n p.age += dt\n if (p.age > p.lifespan) {\n g.destroy({ children: true })\n ps.splice(i, 1)\n i--\n continue\n }\n\n g.x += p.velocityX * dt\n g.y += p.velocityY * dt\n g.alpha += p.fadeRate * dt\n }\n }\n\n override remove() {\n textureLoader.release(this.#textureSrc)\n super.remove()\n }\n}\n"]}
|
|
@@ -20,13 +20,33 @@ export class RectangleNode extends TransformableNode {
|
|
|
20
20
|
if (this.#stroke)
|
|
21
21
|
this._pixiContainer.stroke(this.#stroke);
|
|
22
22
|
}
|
|
23
|
+
set width(v) {
|
|
24
|
+
if (v !== this.#width) {
|
|
25
|
+
this.#width = v;
|
|
26
|
+
this.#draw();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
23
29
|
get width() { return this.#width; }
|
|
24
|
-
set
|
|
30
|
+
set height(v) {
|
|
31
|
+
if (v !== this.#height) {
|
|
32
|
+
this.#height = v;
|
|
33
|
+
this.#draw();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
25
36
|
get height() { return this.#height; }
|
|
26
|
-
set
|
|
37
|
+
set fill(v) {
|
|
38
|
+
if (v !== this.#fill) {
|
|
39
|
+
this.#fill = v;
|
|
40
|
+
this.#draw();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
27
43
|
get fill() { return this.#fill; }
|
|
28
|
-
set
|
|
44
|
+
set stroke(v) {
|
|
45
|
+
if (v !== this.#stroke) {
|
|
46
|
+
this.#stroke = v;
|
|
47
|
+
this.#draw();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
29
50
|
get stroke() { return this.#stroke; }
|
|
30
|
-
set stroke(v) { this.#stroke = v; this.#draw(); }
|
|
31
51
|
}
|
|
32
52
|
//# sourceMappingURL=rectangle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rectangle.js","sourceRoot":"","sources":["../../../src/node/ext/rectangle.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,QAAQ,EAAe,MAAM,SAAS,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAA4B,MAAM,uBAAuB,CAAA;AASnF,MAAM,OAAO,aAAc,SAAQ,iBAAqC;IACtE,MAAM,CAAQ;IACd,OAAO,CAAQ;IACf,KAAK,CAAY;IACjB,OAAO,CAAc;IAErB,YAAY,OAA6B;QACvC,KAAK,CAAC,IAAI,QAAQ,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;QAExD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAA;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA;QAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAA;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA;QAE7B,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,KAAK;QACH,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,IAAI,CAC9B,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAChB,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EACjB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,CACb,CAAA;QACD,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpD,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC5D,CAAC;IAED,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"rectangle.js","sourceRoot":"","sources":["../../../src/node/ext/rectangle.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,QAAQ,EAAe,MAAM,SAAS,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAA4B,MAAM,uBAAuB,CAAA;AASnF,MAAM,OAAO,aAAc,SAAQ,iBAAqC;IACtE,MAAM,CAAQ;IACd,OAAO,CAAQ;IACf,KAAK,CAAY;IACjB,OAAO,CAAc;IAErB,YAAY,OAA6B;QACvC,KAAK,CAAC,IAAI,QAAQ,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;QAExD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAA;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA;QAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAA;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA;QAE7B,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,KAAK;QACH,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,IAAI,CAC9B,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAChB,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EACjB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,CACb,CAAA;QACD,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpD,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC5D,CAAC;IAED,IAAI,KAAK,CAAC,CAAC;QACT,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;YACf,IAAI,CAAC,KAAK,EAAE,CAAA;QACd,CAAC;IACH,CAAC;IACD,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,MAAM,CAAA,CAAC,CAAC;IAElC,IAAI,MAAM,CAAC,CAAC;QACV,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;YAChB,IAAI,CAAC,KAAK,EAAE,CAAA;QACd,CAAC;IACH,CAAC;IACD,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,OAAO,CAAA,CAAC,CAAC;IAEpC,IAAI,IAAI,CAAC,CAAC;QACR,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;YACd,IAAI,CAAC,KAAK,EAAE,CAAA;QACd,CAAC;IACH,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAA,CAAC,CAAC;IAEhC,IAAI,MAAM,CAAC,CAAC;QACV,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;YAChB,IAAI,CAAC,KAAK,EAAE,CAAA;QACd,CAAC;IACH,CAAC;IACD,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,OAAO,CAAA,CAAC,CAAC;CACrC","sourcesContent":["import { EventMap } from '@webtaku/event-emitter'\nimport { FillInput, Graphics, StrokeInput } from 'pixi.js'\nimport { TransformableNode, TransformableNodeOptions } from '../core/transformable'\n\nexport type RectangleNodeOptions = {\n width: number\n height: number\n fill?: FillInput\n stroke?: StrokeInput\n} & TransformableNodeOptions\n\nexport class RectangleNode extends TransformableNode<Graphics, EventMap> {\n #width: number\n #height: number\n #fill?: FillInput\n #stroke?: StrokeInput\n\n constructor(options: RectangleNodeOptions) {\n super(new Graphics({ sortableChildren: true }), options)\n\n this.#width = options.width\n this.#height = options.height\n this.#fill = options.fill\n this.#stroke = options.stroke\n\n this.#draw()\n }\n\n #draw() {\n this._pixiContainer.clear().rect(\n -this.#width / 2,\n -this.#height / 2,\n this.#width,\n this.#height,\n )\n if (this.#fill) this._pixiContainer.fill(this.#fill)\n if (this.#stroke) this._pixiContainer.stroke(this.#stroke)\n }\n\n set width(v) {\n if (v !== this.#width) {\n this.#width = v\n this.#draw()\n }\n }\n get width() { return this.#width }\n\n set height(v) {\n if (v !== this.#height) {\n this.#height = v\n this.#draw()\n }\n }\n get height() { return this.#height }\n\n set fill(v) {\n if (v !== this.#fill) {\n this.#fill = v\n this.#draw()\n }\n }\n get fill() { return this.#fill }\n\n set stroke(v) {\n if (v !== this.#stroke) {\n this.#stroke = v\n this.#draw()\n }\n }\n get stroke() { return this.#stroke }\n}\n"]}
|
|
@@ -1,31 +1,16 @@
|
|
|
1
1
|
import Matter from 'matter-js';
|
|
2
2
|
import { Container as PixiContainer } from 'pixi.js';
|
|
3
|
-
import { ColliderType } from '../../collision/colliders';
|
|
4
3
|
import { isRenderableNode, RenderableNode } from '../core/renderable';
|
|
5
4
|
import { LocalTransform } from '../core/transform';
|
|
6
5
|
import { PhysicsWorld } from './physics-world';
|
|
7
|
-
|
|
8
|
-
// segLen은 "인접 정점 사이의 목표 간격(px)" 정도로 생각하면 됩니다.
|
|
9
|
-
segLen = 6) {
|
|
10
|
-
const rx = width / 2;
|
|
11
|
-
const ry = height / 2;
|
|
12
|
-
// 주변길이 ~ π(a+b) 근사 → 그 길이를 segLen 간격으로 쪼개서 정점 수 결정
|
|
13
|
-
const perimeterApprox = Math.PI * (rx + ry);
|
|
14
|
-
const segments = Math.max(12, Math.ceil(perimeterApprox / segLen));
|
|
15
|
-
const verts = Array.from({ length: segments }, (_, i) => {
|
|
16
|
-
const t = (i / segments) * Math.PI * 2;
|
|
17
|
-
return { x: Math.cos(t) * rx, y: Math.sin(t) * ry };
|
|
18
|
-
});
|
|
19
|
-
// fromVertices는 로컬 기준이므로 x,y는 중심 위치로 넘깁니다.
|
|
20
|
-
return Matter.Bodies.fromVertices(x, y, [verts], options);
|
|
21
|
-
}
|
|
6
|
+
import { RigidbodyType } from './rigidbodies';
|
|
22
7
|
export class PhysicsObject extends RenderableNode {
|
|
23
8
|
#localTransform = new LocalTransform();
|
|
24
9
|
#matterBody;
|
|
25
10
|
#useYSort = false;
|
|
26
11
|
constructor(options) {
|
|
27
12
|
super(new PixiContainer({ sortableChildren: true }));
|
|
28
|
-
const
|
|
13
|
+
const r = options.rigidbody;
|
|
29
14
|
const x = options.x ?? 0;
|
|
30
15
|
const y = options.y ?? 0;
|
|
31
16
|
const bodyOptions = {
|
|
@@ -37,22 +22,17 @@ export class PhysicsObject extends RenderableNode {
|
|
|
37
22
|
bodyOptions.inertia = Infinity;
|
|
38
23
|
bodyOptions.angularVelocity = 0;
|
|
39
24
|
}
|
|
40
|
-
if (
|
|
41
|
-
this.#matterBody = Matter.Bodies.rectangle(x, y,
|
|
42
|
-
}
|
|
43
|
-
else if (c.type === ColliderType.Circle) {
|
|
44
|
-
this.#matterBody = Matter.Bodies.circle(x, y, c.radius, bodyOptions);
|
|
25
|
+
if (r.type === RigidbodyType.Rectangle) {
|
|
26
|
+
this.#matterBody = Matter.Bodies.rectangle(x, y, r.width, r.height, bodyOptions);
|
|
45
27
|
}
|
|
46
|
-
else if (
|
|
47
|
-
this.#matterBody =
|
|
48
|
-
/* segLen= */ 6 // 더 매끄럽게 하고 싶으면 더 작게
|
|
49
|
-
);
|
|
28
|
+
else if (r.type === RigidbodyType.Circle) {
|
|
29
|
+
this.#matterBody = Matter.Bodies.circle(x, y, r.radius, bodyOptions);
|
|
50
30
|
}
|
|
51
|
-
else if (
|
|
52
|
-
this.#matterBody = Matter.Bodies.fromVertices(x, y, [
|
|
31
|
+
else if (r.type === RigidbodyType.Polygon) {
|
|
32
|
+
this.#matterBody = Matter.Bodies.fromVertices(x, y, [r.vertices], bodyOptions);
|
|
53
33
|
}
|
|
54
34
|
else {
|
|
55
|
-
throw new Error('Invalid
|
|
35
|
+
throw new Error('Invalid rigidbody type');
|
|
56
36
|
}
|
|
57
37
|
this.#useYSort = options.useYSort ?? false;
|
|
58
38
|
}
|
|
@@ -1 +1 @@
|
|
|
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 { Collider, ColliderType } from '../../collision/colliders'\nimport { GameNode } from '../core/game-node'\nimport { isRenderableNode, RenderableNode } from '../core/renderable'\nimport { LocalTransform } from '../core/transform'\nimport { PhysicsWorld } from './physics-world'\n\nfunction createEllipseBody(\n x: number,\n y: number,\n width: number,\n height: number,\n options: IChamferableBodyDefinition = {},\n // segLen은 \"인접 정점 사이의 목표 간격(px)\" 정도로 생각하면 됩니다.\n segLen = 6\n): Matter.Body {\n const rx = width / 2\n const ry = height / 2\n\n // 주변길이 ~ π(a+b) 근사 → 그 길이를 segLen 간격으로 쪼개서 정점 수 결정\n const perimeterApprox = Math.PI * (rx + ry)\n const segments = Math.max(12, Math.ceil(perimeterApprox / segLen))\n\n const verts = Array.from({ length: segments }, (_, i) => {\n const t = (i / segments) * Math.PI * 2\n return { x: Math.cos(t) * rx, y: Math.sin(t) * ry }\n })\n\n // fromVertices는 로컬 기준이므로 x,y는 중심 위치로 넘깁니다.\n return Matter.Bodies.fromVertices(x, y, [verts], options)\n}\n\nexport type PhysicsObjectOptions = {\n collider: Collider\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 = EventMap> extends RenderableNode<PixiContainer, E> {\n #localTransform = new LocalTransform()\n #matterBody: Matter.Body\n\n #useYSort = false\n\n constructor(options: PhysicsObjectOptions) {\n super(new PixiContainer({ sortableChildren: true }))\n\n const c = options.collider\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 (c.type === ColliderType.Rectangle) {\n this.#matterBody = Matter.Bodies.rectangle(x, y, c.width, c.height, bodyOptions)\n } else if (c.type === ColliderType.Circle) {\n this.#matterBody = Matter.Bodies.circle(x, y, c.radius, bodyOptions)\n } else if (c.type === ColliderType.Ellipse) {\n this.#matterBody = createEllipseBody(\n x, y, c.width, c.height, bodyOptions,\n /* segLen= */ 6 // 더 매끄럽게 하고 싶으면 더 작게\n )\n } else if (c.type === ColliderType.Polygon) {\n this.#matterBody = Matter.Bodies.fromVertices(x, y, [c.vertices], bodyOptions)\n } else {\n throw new Error('Invalid collider 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 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.#removeFromWorld()\n }\n}\n"]}
|
|
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 = EventMap> extends RenderableNode<PixiContainer, E> {\n #localTransform = new LocalTransform()\n #matterBody: Matter.Body\n\n #useYSort = false\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 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.#removeFromWorld()\n }\n}\n"]}
|
|
@@ -15,6 +15,8 @@ export class PhysicsWorld extends RenderableNode {
|
|
|
15
15
|
addBody(body) { Matter.World.add(this.#matterEngine.world, body); }
|
|
16
16
|
removeBody(body) { Matter.World.remove(this.#matterEngine.world, body); }
|
|
17
17
|
update(dt) {
|
|
18
|
+
if (this.paused)
|
|
19
|
+
return;
|
|
18
20
|
super.update(dt);
|
|
19
21
|
const matterDt = dt * 1000;
|
|
20
22
|
Matter.Engine.update(this.#matterEngine, matterDt > 16.666 ? 16.666 : matterDt);
|
|
@@ -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,YAA4C,SAAQ,cAAgC;IAC/F,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,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 = 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 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"]}
|
|
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,YAA4C,SAAQ,cAAgC;IAC/F,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 = 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"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export var RigidbodyType;
|
|
2
|
+
(function (RigidbodyType) {
|
|
3
|
+
RigidbodyType[RigidbodyType["Rectangle"] = 0] = "Rectangle";
|
|
4
|
+
RigidbodyType[RigidbodyType["Circle"] = 1] = "Circle";
|
|
5
|
+
RigidbodyType[RigidbodyType["Polygon"] = 2] = "Polygon";
|
|
6
|
+
})(RigidbodyType || (RigidbodyType = {}));
|
|
7
|
+
//# sourceMappingURL=rigidbodies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rigidbodies.js","sourceRoot":"","sources":["../../../src/node/physics/rigidbodies.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,2DAAS,CAAA;IACT,qDAAM,CAAA;IACN,uDAAO,CAAA;AACT,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB","sourcesContent":["export enum RigidbodyType {\n Rectangle,\n Circle,\n Polygon,\n}\n\nexport type RectangleRigidbody = { type: RigidbodyType.Rectangle, width: number, height: number }\nexport type CircleRigidbody = { type: RigidbodyType.Circle, radius: number }\nexport type PolygonRigidbody = { type: RigidbodyType.Polygon, vertices: { x: number, y: number }[] }\n\nexport type Rigidbody =\n | RectangleRigidbody\n | CircleRigidbody\n | PolygonRigidbody\n"]}
|
package/lib/renderer/renderer.js
CHANGED
|
@@ -117,11 +117,12 @@ export class Renderer extends RenderableNode {
|
|
|
117
117
|
this._isSizeDirty = true;
|
|
118
118
|
}
|
|
119
119
|
#render(dt) {
|
|
120
|
-
this.
|
|
121
|
-
this.update(dt);
|
|
120
|
+
this.update(dt); // 로직 업데이트
|
|
122
121
|
this._updateWorldTransform();
|
|
122
|
+
this._resetWorldTransformDirty();
|
|
123
123
|
this.#pixiRenderer?.render(this._pixiContainer);
|
|
124
124
|
this.fpsDisplay?.update();
|
|
125
|
+
this._isSizeDirty = false;
|
|
125
126
|
}
|
|
126
127
|
_addToLayer(node, layerName) {
|
|
127
128
|
const layer = this.#layers[layerName];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/renderer/renderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventMap } from '@webtaku/event-emitter'\nimport { AutoDetectOptions, autoDetectRenderer, ColorSource, Container as PixiContainer, Renderer as PixiRenderer } from 'pixi.js'\nimport { debugMode } from '../debug'\nimport { setStyle } from '../dom/dom-utils'\nimport { RenderableNode } from '../node/core/renderable'\nimport { Camera } from './camera'\nimport { RendererContainerManager } from './container-manager'\nimport { FpsDisplay } from './fps-display'\nimport { Layer } from './layer'\nimport { Ticker } from './ticker'\n\nexport type RendererOptions = {\n logicalWidth?: number\n logicalHeight?: number\n backgroundColor?: ColorSource\n backgroundAlpha?: number\n layers?: { name: string; drawOrder: number }[]\n}\n\nexport class Renderer extends RenderableNode<PixiContainer, {\n resize: (width: number, height: number) => void\n}> {\n #containerManager: RendererContainerManager\n #ticker = new Ticker((dt) => this.#render(dt))\n camera = new Camera()\n fpsDisplay?: FpsDisplay\n\n #logicalWidth?: number\n #logicalHeight?: number\n #backgroundColor?: ColorSource\n #backgroundAlpha?: number\n\n #pixiRenderer?: PixiRenderer\n #layers: { [name: string]: Layer } = {}\n _isSizeDirty = false\n\n canvasWidth = 0\n canvasHeight = 0\n canvasLeft = 0\n canvasTop = 0\n viewportScale = 1\n centerX = 0\n centerY = 0\n\n constructor(public container: HTMLElement, options?: RendererOptions) {\n super(new PixiContainer({ sortableChildren: true }))\n this.renderer = this\n\n this.worldTransform.x.v = 0\n this.worldTransform.y.v = 0\n this.worldTransform.resetDirty()\n\n this.#containerManager = new RendererContainerManager(container)\n this.#containerManager.on('resize', (width, height) => this.#updateSize(width, height))\n\n this.camera.on('positionChanged', () => this.#updatePosition())\n this.camera.on('scaleChanged', () => this.#updatePosition())\n\n if (options) {\n if (options.logicalWidth !== undefined) this.#logicalWidth = options.logicalWidth\n if (options.logicalHeight !== undefined) this.#logicalHeight = options.logicalHeight\n if (options.backgroundColor !== undefined) this.#backgroundColor = options.backgroundColor\n if (options.backgroundAlpha !== undefined) this.#backgroundAlpha = options.backgroundAlpha\n\n if (options.layers) {\n for (const layerOption of options.layers) {\n const layer = new Layer(layerOption.drawOrder)\n this._pixiContainer.addChild(layer._pixiContainer)\n this.#layers[layerOption.name] = layer\n }\n }\n }\n\n if (debugMode) {\n this.fpsDisplay = new FpsDisplay(container)\n }\n\n this.init()\n }\n\n private async init() {\n const options: Partial<AutoDetectOptions> = {\n eventMode: 'none',\n resolution: window.devicePixelRatio,\n }\n\n if (this.#logicalWidth) options.width = this.#logicalWidth\n if (this.#logicalHeight) options.height = this.#logicalHeight\n if (this.#backgroundColor) options.backgroundColor = this.#backgroundColor\n if (this.#backgroundAlpha) options.backgroundAlpha = this.#backgroundAlpha\n\n const pr = await autoDetectRenderer(options)\n\n setStyle(pr.canvas, {\n position: 'absolute',\n touchAction: 'auto',\n })\n this.container.appendChild(pr.canvas)\n\n this.#pixiRenderer = pr\n\n const cr = this.container.getBoundingClientRect()\n this.#updateSize(cr.width, cr.height)\n }\n\n #updatePosition() {\n const S = this.camera.scale\n this._pixiContainer.scale = S\n this._pixiContainer.position.set(\n this.centerX - this.camera.x * S,\n this.centerY - this.camera.y * S\n )\n }\n\n #updateSize(containerWidth: number, containerHeight: number) {\n const canvasWidth = this.#logicalWidth ?? containerWidth\n const canvasHeight = this.#logicalHeight ?? containerHeight\n this.canvasWidth = canvasWidth\n this.canvasHeight = canvasHeight\n\n this.centerX = canvasWidth / 2\n this.centerY = canvasHeight / 2\n this.#updatePosition()\n\n const S = Math.min(containerWidth / canvasWidth, containerHeight / canvasHeight)\n this.viewportScale = S\n\n const displayWidth = canvasWidth * S\n const displayHeight = canvasHeight * S\n\n const canvasLeft = (containerWidth - displayWidth) / 2\n const canvasTop = (containerHeight - displayHeight) / 2\n this.canvasLeft = canvasLeft\n this.canvasTop = canvasTop\n\n if (this.#pixiRenderer) {\n this.#pixiRenderer.resize(canvasWidth, canvasHeight)\n\n setStyle(this.#pixiRenderer.canvas, {\n width: `${displayWidth}px`,\n height: `${displayHeight}px`,\n left: `${canvasLeft}px`,\n top: `${canvasTop}px`,\n })\n\n this.emit('resize', canvasWidth, canvasHeight)\n }\n\n this._isSizeDirty = true\n }\n\n #render(dt: number) {\n this._isSizeDirty = false\n\n this.update(dt)\n this._updateWorldTransform()\n this.#pixiRenderer?.render(this._pixiContainer)\n this.fpsDisplay?.update()\n }\n\n _addToLayer(node: RenderableNode<PixiContainer, EventMap>, layerName: string) {\n const layer = this.#layers[layerName]\n if (!layer) throw new Error(`Layer ${layerName} does not exist.`)\n layer._pixiContainer.addChild(node._pixiContainer)\n }\n\n override remove() {\n this.#containerManager.remove()\n this.#ticker.remove()\n this.#pixiRenderer?.destroy()\n this.fpsDisplay?.remove()\n super.remove()\n }\n\n screenToWorld(screenX: number, screenY: number) {\n const x = (screenX - this.canvasLeft) / this.viewportScale - this.canvasWidth / 2\n const y = (screenY - this.canvasTop) / this.viewportScale - this.canvasHeight / 2\n return { x, y }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/renderer/renderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,kBAAkB,EAAe,SAAS,IAAI,aAAa,EAA4B,MAAM,SAAS,CAAA;AAClI,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAUjC,MAAM,OAAO,QAAS,SAAQ,cAE5B;IAuBmB;IAtBnB,iBAAiB,CAA0B;IAC3C,OAAO,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;IAC9C,MAAM,GAAG,IAAI,MAAM,EAAE,CAAA;IACrB,UAAU,CAAa;IAEvB,aAAa,CAAS;IACtB,cAAc,CAAS;IACvB,gBAAgB,CAAc;IAC9B,gBAAgB,CAAS;IAEzB,aAAa,CAAe;IAC5B,OAAO,GAA8B,EAAE,CAAA;IACvC,YAAY,GAAG,KAAK,CAAA;IAEpB,WAAW,GAAG,CAAC,CAAA;IACf,YAAY,GAAG,CAAC,CAAA;IAChB,UAAU,GAAG,CAAC,CAAA;IACd,SAAS,GAAG,CAAC,CAAA;IACb,aAAa,GAAG,CAAC,CAAA;IACjB,OAAO,GAAG,CAAC,CAAA;IACX,OAAO,GAAG,CAAC,CAAA;IAEX,YAAmB,SAAsB,EAAE,OAAyB;QAClE,KAAK,CAAC,IAAI,aAAa,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QADnC,cAAS,GAAT,SAAS,CAAa;QAEvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QAEpB,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,iBAAiB,GAAG,IAAI,wBAAwB,CAAC,SAAS,CAAC,CAAA;QAChE,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;QAEvF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAA;QAC/D,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAA;QAE5D,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;gBAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAA;YACjF,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS;gBAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAA;YACpF,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS;gBAAE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAA;YAC1F,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS;gBAAE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAA;YAE1F,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACzC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;oBAC9C,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;oBAClD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;gBACxC,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAA;IACb,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,MAAM,OAAO,GAA+B;YAC1C,SAAS,EAAE,MAAM;YACjB,UAAU,EAAE,MAAM,CAAC,gBAAgB;SACpC,CAAA;QAED,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAA;QAC1D,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAA;QAC7D,IAAI,IAAI,CAAC,gBAAgB;YAAE,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAC1E,IAAI,IAAI,CAAC,gBAAgB;YAAE,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAE1E,MAAM,EAAE,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAA;QAE5C,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE;YAClB,QAAQ,EAAE,UAAU;YACpB,WAAW,EAAE,MAAM;SACpB,CAAC,CAAA;QACF,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;QAErC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QAEvB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAA;QACjD,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,CAAA;IACvC,CAAC;IAED,eAAe;QACb,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA;QAC3B,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC,CAAA;QAC7B,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAChC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CACjC,CAAA;IACH,CAAC;IAED,WAAW,CAAC,cAAsB,EAAE,eAAuB;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,IAAI,cAAc,CAAA;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,IAAI,eAAe,CAAA;QAC3D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAEhC,IAAI,CAAC,OAAO,GAAG,WAAW,GAAG,CAAC,CAAA;QAC9B,IAAI,CAAC,OAAO,GAAG,YAAY,GAAG,CAAC,CAAA;QAC/B,IAAI,CAAC,eAAe,EAAE,CAAA;QAEtB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,WAAW,EAAE,eAAe,GAAG,YAAY,CAAC,CAAA;QAChF,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA;QAEtB,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,CAAA;QACpC,MAAM,aAAa,GAAG,YAAY,GAAG,CAAC,CAAA;QAEtC,MAAM,UAAU,GAAG,CAAC,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;QACtD,MAAM,SAAS,GAAG,CAAC,eAAe,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;QACvD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAE1B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;YAEpD,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;gBAClC,KAAK,EAAE,GAAG,YAAY,IAAI;gBAC1B,MAAM,EAAE,GAAG,aAAa,IAAI;gBAC5B,IAAI,EAAE,GAAG,UAAU,IAAI;gBACvB,GAAG,EAAE,GAAG,SAAS,IAAI;aACtB,CAAC,CAAA;YAEF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;QAChD,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IAC1B,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA,CAAC,UAAU;QAC1B,IAAI,CAAC,qBAAqB,EAAE,CAAA;QAC5B,IAAI,CAAC,yBAAyB,EAAE,CAAA;QAChC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC/C,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,CAAA;QAEzB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;IAC3B,CAAC;IAED,WAAW,CAAC,IAA6C,EAAE,SAAiB;QAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACrC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,SAAS,SAAS,kBAAkB,CAAC,CAAA;QACjE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IACpD,CAAC;IAEQ,MAAM;QACb,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAA;QAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA;QACrB,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,CAAA;QAC7B,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,CAAA;QACzB,KAAK,CAAC,MAAM,EAAE,CAAA;IAChB,CAAC;IAED,aAAa,CAAC,OAAe,EAAE,OAAe;QAC5C,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAA;QACjF,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;QACjF,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;IACjB,CAAC;CACF","sourcesContent":["import { EventMap } from '@webtaku/event-emitter'\nimport { AutoDetectOptions, autoDetectRenderer, ColorSource, Container as PixiContainer, Renderer as PixiRenderer } from 'pixi.js'\nimport { debugMode } from '../debug'\nimport { setStyle } from '../dom/dom-utils'\nimport { RenderableNode } from '../node/core/renderable'\nimport { Camera } from './camera'\nimport { RendererContainerManager } from './container-manager'\nimport { FpsDisplay } from './fps-display'\nimport { Layer } from './layer'\nimport { Ticker } from './ticker'\n\nexport type RendererOptions = {\n logicalWidth?: number\n logicalHeight?: number\n backgroundColor?: ColorSource\n backgroundAlpha?: number\n layers?: { name: string; drawOrder: number }[]\n}\n\nexport class Renderer extends RenderableNode<PixiContainer, {\n resize: (width: number, height: number) => void\n}> {\n #containerManager: RendererContainerManager\n #ticker = new Ticker((dt) => this.#render(dt))\n camera = new Camera()\n fpsDisplay?: FpsDisplay\n\n #logicalWidth?: number\n #logicalHeight?: number\n #backgroundColor?: ColorSource\n #backgroundAlpha?: number\n\n #pixiRenderer?: PixiRenderer\n #layers: { [name: string]: Layer } = {}\n _isSizeDirty = false\n\n canvasWidth = 0\n canvasHeight = 0\n canvasLeft = 0\n canvasTop = 0\n viewportScale = 1\n centerX = 0\n centerY = 0\n\n constructor(public container: HTMLElement, options?: RendererOptions) {\n super(new PixiContainer({ sortableChildren: true }))\n this.renderer = this\n\n this.worldTransform.x.v = 0\n this.worldTransform.y.v = 0\n this.worldTransform.resetDirty()\n\n this.#containerManager = new RendererContainerManager(container)\n this.#containerManager.on('resize', (width, height) => this.#updateSize(width, height))\n\n this.camera.on('positionChanged', () => this.#updatePosition())\n this.camera.on('scaleChanged', () => this.#updatePosition())\n\n if (options) {\n if (options.logicalWidth !== undefined) this.#logicalWidth = options.logicalWidth\n if (options.logicalHeight !== undefined) this.#logicalHeight = options.logicalHeight\n if (options.backgroundColor !== undefined) this.#backgroundColor = options.backgroundColor\n if (options.backgroundAlpha !== undefined) this.#backgroundAlpha = options.backgroundAlpha\n\n if (options.layers) {\n for (const layerOption of options.layers) {\n const layer = new Layer(layerOption.drawOrder)\n this._pixiContainer.addChild(layer._pixiContainer)\n this.#layers[layerOption.name] = layer\n }\n }\n }\n\n if (debugMode) {\n this.fpsDisplay = new FpsDisplay(container)\n }\n\n this.init()\n }\n\n private async init() {\n const options: Partial<AutoDetectOptions> = {\n eventMode: 'none',\n resolution: window.devicePixelRatio,\n }\n\n if (this.#logicalWidth) options.width = this.#logicalWidth\n if (this.#logicalHeight) options.height = this.#logicalHeight\n if (this.#backgroundColor) options.backgroundColor = this.#backgroundColor\n if (this.#backgroundAlpha) options.backgroundAlpha = this.#backgroundAlpha\n\n const pr = await autoDetectRenderer(options)\n\n setStyle(pr.canvas, {\n position: 'absolute',\n touchAction: 'auto',\n })\n this.container.appendChild(pr.canvas)\n\n this.#pixiRenderer = pr\n\n const cr = this.container.getBoundingClientRect()\n this.#updateSize(cr.width, cr.height)\n }\n\n #updatePosition() {\n const S = this.camera.scale\n this._pixiContainer.scale = S\n this._pixiContainer.position.set(\n this.centerX - this.camera.x * S,\n this.centerY - this.camera.y * S\n )\n }\n\n #updateSize(containerWidth: number, containerHeight: number) {\n const canvasWidth = this.#logicalWidth ?? containerWidth\n const canvasHeight = this.#logicalHeight ?? containerHeight\n this.canvasWidth = canvasWidth\n this.canvasHeight = canvasHeight\n\n this.centerX = canvasWidth / 2\n this.centerY = canvasHeight / 2\n this.#updatePosition()\n\n const S = Math.min(containerWidth / canvasWidth, containerHeight / canvasHeight)\n this.viewportScale = S\n\n const displayWidth = canvasWidth * S\n const displayHeight = canvasHeight * S\n\n const canvasLeft = (containerWidth - displayWidth) / 2\n const canvasTop = (containerHeight - displayHeight) / 2\n this.canvasLeft = canvasLeft\n this.canvasTop = canvasTop\n\n if (this.#pixiRenderer) {\n this.#pixiRenderer.resize(canvasWidth, canvasHeight)\n\n setStyle(this.#pixiRenderer.canvas, {\n width: `${displayWidth}px`,\n height: `${displayHeight}px`,\n left: `${canvasLeft}px`,\n top: `${canvasTop}px`,\n })\n\n this.emit('resize', canvasWidth, canvasHeight)\n }\n\n this._isSizeDirty = true\n }\n\n #render(dt: number) {\n this.update(dt) // 로직 업데이트\n this._updateWorldTransform()\n this._resetWorldTransformDirty()\n this.#pixiRenderer?.render(this._pixiContainer)\n this.fpsDisplay?.update()\n\n this._isSizeDirty = false\n }\n\n _addToLayer(node: RenderableNode<PixiContainer, EventMap>, layerName: string) {\n const layer = this.#layers[layerName]\n if (!layer) throw new Error(`Layer ${layerName} does not exist.`)\n layer._pixiContainer.addChild(node._pixiContainer)\n }\n\n override remove() {\n this.#containerManager.remove()\n this.#ticker.remove()\n this.#pixiRenderer?.destroy()\n this.fpsDisplay?.remove()\n super.remove()\n }\n\n screenToWorld(screenX: number, screenY: number) {\n const x = (screenX - this.canvasLeft) / this.viewportScale - this.canvasWidth / 2\n const y = (screenY - this.canvasTop) / this.viewportScale - this.canvasHeight / 2\n return { x, y }\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation-atlas.js","sourceRoot":"","sources":["../../src/types/animation-atlas.ts"],"names":[],"mappings":"","sourcesContent":["export type AnimationAtlas = {\n frames: Record<string, { x: number, y: number, w: number, h: number }>\n animations: Record<string, { frames: string[], fps: number, loop?: boolean }>\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Loader } from './loader';
|
|
2
2
|
declare class AudioLoader extends Loader<AudioBuffer> {
|
|
3
3
|
protected doLoad(src: string): Promise<AudioBuffer | undefined>;
|
|
4
|
+
load(src: string): Promise<AudioBuffer | undefined>;
|
|
4
5
|
}
|
|
5
6
|
export declare const audioLoader: AudioLoader;
|
|
6
7
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../../../src/asset/loaders/audio.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,cAAM,WAAY,SAAQ,MAAM,CAAC,WAAW,CAAC;cAClB,MAAM,CAAC,GAAG,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../../../src/asset/loaders/audio.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,cAAM,WAAY,SAAQ,MAAM,CAAC,WAAW,CAAC;cAClB,MAAM,CAAC,GAAG,EAAE,MAAM;IAgC5B,IAAI,CAAC,GAAG,EAAE,MAAM;CAGhC;AAED,eAAO,MAAM,WAAW,aAAoB,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Loader } from './loader';
|
|
2
2
|
declare class BinaryLoader extends Loader<Uint8Array> {
|
|
3
3
|
protected doLoad(src: string): Promise<Uint8Array<ArrayBuffer> | undefined>;
|
|
4
|
+
load(src: string): Promise<Uint8Array<ArrayBufferLike> | undefined>;
|
|
4
5
|
}
|
|
5
6
|
export declare const binaryLoader: BinaryLoader;
|
|
6
7
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../../../src/asset/loaders/binary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,cAAM,YAAa,SAAQ,MAAM,CAAC,UAAU,CAAC;cAClB,MAAM,CAAC,GAAG,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../../../src/asset/loaders/binary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,cAAM,YAAa,SAAQ,MAAM,CAAC,UAAU,CAAC;cAClB,MAAM,CAAC,GAAG,EAAE,MAAM;IA2B5B,IAAI,CAAC,GAAG,EAAE,MAAM;CAGhC;AAED,eAAO,MAAM,YAAY,cAAqB,CAAA"}
|
|
@@ -10,6 +10,7 @@ declare class BitmapFontLoader extends Loader<BitmapFont> {
|
|
|
10
10
|
lineHeight: number;
|
|
11
11
|
} | undefined>;
|
|
12
12
|
protected cleanup(fnt: string): void;
|
|
13
|
+
load(fnt: string, src: string): Promise<BitmapFont | undefined>;
|
|
13
14
|
}
|
|
14
15
|
export declare const bitmapFontLoader: BitmapFontLoader;
|
|
15
16
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitmap-font.d.ts","sourceRoot":"","sources":["../../../../src/asset/loaders/bitmap-font.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAGjC,cAAM,gBAAiB,SAAQ,MAAM,CAAC,UAAU,CAAC;;cAGtB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;;;;;;;
|
|
1
|
+
{"version":3,"file":"bitmap-font.d.ts","sourceRoot":"","sources":["../../../../src/asset/loaders/bitmap-font.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAGjC,cAAM,gBAAiB,SAAQ,MAAM,CAAC,UAAU,CAAC;;cAGtB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;;;;;;;cAyErC,OAAO,CAAC,GAAG,EAAE,MAAM;IAKvB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAG7C;AAED,eAAO,MAAM,gBAAgB,kBAAyB,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Loader } from './loader';
|
|
2
2
|
declare class FontFamilyLoader extends Loader<boolean> {
|
|
3
3
|
protected doLoad(fontName: string): Promise<true | undefined>;
|
|
4
|
+
load(fontName: string): Promise<boolean | undefined>;
|
|
4
5
|
}
|
|
5
6
|
export declare const fontFamilyLoader: FontFamilyLoader;
|
|
6
7
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"font.d.ts","sourceRoot":"","sources":["../../../../src/asset/loaders/font.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,cAAM,gBAAiB,SAAQ,MAAM,CAAC,OAAO,CAAC;cACnB,MAAM,CAAC,QAAQ,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"font.d.ts","sourceRoot":"","sources":["../../../../src/asset/loaders/font.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,cAAM,gBAAiB,SAAQ,MAAM,CAAC,OAAO,CAAC;cACnB,MAAM,CAAC,QAAQ,EAAE,MAAM;IAsBjC,IAAI,CAAC,QAAQ,EAAE,MAAM;CAGrC;AAED,eAAO,MAAM,gBAAgB,kBAAyB,CAAA"}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
import { Spritesheet,
|
|
1
|
+
import { Dict, Spritesheet, SpritesheetFrameData } from 'pixi.js';
|
|
2
|
+
import { Atlas } from '../../types/atlas';
|
|
2
3
|
import { Loader } from './loader';
|
|
3
|
-
export declare function getCachedAtlasId(src: string, atlas:
|
|
4
|
+
export declare function getCachedAtlasId(src: string, atlas: Atlas): string;
|
|
4
5
|
declare class SpritesheetLoader extends Loader<Spritesheet> {
|
|
5
6
|
#private;
|
|
6
|
-
protected doLoad(id: string, src: string, atlas:
|
|
7
|
+
protected doLoad(id: string, src: string, atlas: Atlas): Promise<Spritesheet<{
|
|
8
|
+
frames: Dict<SpritesheetFrameData>;
|
|
9
|
+
meta: {
|
|
10
|
+
scale: number;
|
|
11
|
+
};
|
|
12
|
+
animations: Dict<string[]>;
|
|
13
|
+
}> | undefined>;
|
|
7
14
|
protected cleanup(id: string, spritesheet: Spritesheet): void;
|
|
15
|
+
load(id: string, src: string, atlas: Atlas): Promise<Spritesheet<import("pixi.js").SpritesheetData> | undefined>;
|
|
8
16
|
}
|
|
9
17
|
export declare const spritesheetLoader: SpritesheetLoader;
|
|
10
18
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spritesheet.d.ts","sourceRoot":"","sources":["../../../../src/asset/loaders/spritesheet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"spritesheet.d.ts","sourceRoot":"","sources":["../../../../src/asset/loaders/spritesheet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAMjC,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAYlE;AAED,cAAM,iBAAkB,SAAQ,MAAM,CAAC,WAAW,CAAC;;cAGxB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;;;;;;;cAwClD,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW;IAOhD,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAG1D;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../../src/asset/loaders/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,cAAM,UAAW,SAAQ,MAAM,CAAC,MAAM,CAAC;cACZ,MAAM,CAAC,GAAG,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../../src/asset/loaders/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,cAAM,UAAW,SAAQ,MAAM,CAAC,MAAM,CAAC;cACZ,MAAM,CAAC,GAAG,EAAE,MAAM;IA0B5B,IAAI,CAAC,GAAG,EAAE,MAAM;CAGhC;AAED,eAAO,MAAM,UAAU,YAAmB,CAAA"}
|
|
@@ -2,7 +2,7 @@ import { Texture } from 'pixi.js';
|
|
|
2
2
|
import { Loader } from './loader';
|
|
3
3
|
declare class TextureLoader extends Loader<Texture> {
|
|
4
4
|
protected doLoad(src: string): Promise<Texture<import("pixi.js").TextureSource<any>> | undefined>;
|
|
5
|
-
|
|
5
|
+
load(src: string): Promise<Texture<import("pixi.js").TextureSource<any>> | undefined>;
|
|
6
6
|
}
|
|
7
7
|
export declare const textureLoader: TextureLoader;
|
|
8
8
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"texture.d.ts","sourceRoot":"","sources":["../../../../src/asset/loaders/texture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,cAAM,aAAc,SAAQ,MAAM,CAAC,OAAO,CAAC;cAChB,MAAM,CAAC,GAAG,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"texture.d.ts","sourceRoot":"","sources":["../../../../src/asset/loaders/texture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,cAAM,aAAc,SAAQ,MAAM,CAAC,OAAO,CAAC;cAChB,MAAM,CAAC,GAAG,EAAE,MAAM;IA6B5B,IAAI,CAAC,GAAG,EAAE,MAAM;CAGhC;AAED,eAAO,MAAM,aAAa,eAAsB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../../../src/asset/preload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../../../src/asset/preload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAUtC,MAAM,MAAM,WAAW,GAAG,MAAM,GAC5B;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC7B;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAkDhC,wBAAsB,OAAO,CAC3B,MAAM,EAAE,WAAW,EAAE,EACrB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAC5C,OAAO,CAAC,MAAM,IAAI,CAAC,CAiBrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atlas copy.js","sourceRoot":"","sources":["../../src/types/atlas copy.ts"],"names":[],"mappings":"","sourcesContent":["export type Atlas = {\n frames: Record<string, { frame: { x: number, y: number, w: number, h: number } }>\n animations: Record<string, string[]>\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atlas.js","sourceRoot":"","sources":["../../src/types/atlas.ts"],"names":[],"mappings":"","sourcesContent":["export interface Frame {\n x: number\n y: number\n w: number\n h: number\n}\n\nexport type Animation = {\n frames: string[],\n fps: number,\n loop: boolean\n}\n\nexport type Atlas = {\n frames: Record<string, Frame>\n animations: Record<string, Animation>\n}\n"]}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { EventMap } from '@webtaku/event-emitter';
|
|
2
|
-
import {
|
|
2
|
+
import { Atlas } from '../types/atlas';
|
|
3
3
|
import { DomGameObject, DomGameObjectOptions } from './dom-game-object';
|
|
4
4
|
export type DomAnimatedSpriteNodeOptions = {
|
|
5
5
|
src: string;
|
|
6
|
-
atlas:
|
|
6
|
+
atlas: Atlas;
|
|
7
7
|
animation: string;
|
|
8
|
-
fps: number;
|
|
9
|
-
loop?: boolean;
|
|
10
8
|
} & DomGameObjectOptions;
|
|
11
9
|
export declare class DomAnimatedSpriteNode<E extends EventMap = EventMap> extends DomGameObject<E & {
|
|
12
10
|
animationend: (animation: string) => void;
|
|
@@ -16,14 +14,10 @@ export declare class DomAnimatedSpriteNode<E extends EventMap = EventMap> extend
|
|
|
16
14
|
render(dt: number): void;
|
|
17
15
|
set src(src: string);
|
|
18
16
|
get src(): string;
|
|
19
|
-
set atlas(atlas:
|
|
20
|
-
get atlas():
|
|
17
|
+
set atlas(atlas: Atlas);
|
|
18
|
+
get atlas(): Atlas;
|
|
21
19
|
set animation(animation: string);
|
|
22
20
|
get animation(): string;
|
|
23
|
-
set fps(fps: number);
|
|
24
|
-
get fps(): number;
|
|
25
|
-
set loop(loop: boolean);
|
|
26
|
-
get loop(): boolean;
|
|
27
21
|
remove(): void;
|
|
28
22
|
}
|
|
29
23
|
//# sourceMappingURL=dom-animated-sprite.d.ts.map
|
|
@@ -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,
|
|
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,QAAQ,CAAE,SAAQ,aAAa,CAAC,CAAC,GAAG;IAC1F,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"}
|
|
@@ -2,6 +2,7 @@ import { EventMap } from '@webtaku/event-emitter';
|
|
|
2
2
|
import { DirtyNumber } from '../node/core/dirty-number';
|
|
3
3
|
import { GameNode } from '../node/core/game-node';
|
|
4
4
|
import { WorldTransform } from '../node/core/transform';
|
|
5
|
+
export declare function isDomGameObject(v: unknown): v is DomGameObject;
|
|
5
6
|
export type DomGameObjectOptions = {
|
|
6
7
|
x?: number;
|
|
7
8
|
y?: number;
|
|
@@ -22,7 +23,6 @@ export declare class DomGameObject<E extends EventMap = EventMap> extends GameNo
|
|
|
22
23
|
worldAlpha: DirtyNumber;
|
|
23
24
|
constructor(options?: DomGameObjectOptions);
|
|
24
25
|
render(dt: number): void;
|
|
25
|
-
protected _updateWorldTransform(): void;
|
|
26
26
|
attachTo(target: HTMLElement): this;
|
|
27
27
|
set x(v: number);
|
|
28
28
|
get x(): number;
|
|
@@ -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;
|
|
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,QAAQ,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;;IAC3E,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"}
|