@datamoc/mw_games 0.15.0 → 0.16.0
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/CHANGELOG.md +17 -1
- package/dist/mw_games.global.js +18 -18
- package/dist/two-d/render/RpgmAutotile.d.ts +217 -0
- package/dist/two-d/render/RpgmAutotile.d.ts.map +1 -1
- package/dist/two-d/render/RpgmAutotile.js +756 -0
- package/dist/two-d/render/RpgmAutotile.js.map +1 -1
- package/dist/two-d/render/TileMap.d.ts +90 -0
- package/dist/two-d/render/TileMap.d.ts.map +1 -1
- package/dist/two-d/render/TileMap.js +319 -31
- package/dist/two-d/render/TileMap.js.map +1 -1
- package/dist/two-d/render/index.d.ts +3 -3
- package/dist/two-d/render/index.d.ts.map +1 -1
- package/dist/two-d/render/index.js +1 -1
- package/dist/two-d/render/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpgmAutotile.js","sourceRoot":"","sources":["../../../src/two-d/render/RpgmAutotile.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RpgmAutotile.js","sourceRoot":"","sources":["../../../src/two-d/render/RpgmAutotile.ts"],"names":[],"mappings":"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CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;CACD,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAA2B;IAC/D;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;IACD;QACC,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;KACN;CACD,CAAC;AAKF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAiC;IACjE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IACd,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IACd,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IACd,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IACd,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IACd,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CACZ,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACzD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAClH,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAClH,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAClH,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACjH,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,E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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Container } from 'pixi.js';
|
|
2
2
|
import type { SpriteSheet } from './SpriteSheet.ts';
|
|
3
3
|
import type { Camera } from './Camera.ts';
|
|
4
|
+
import type { RpgmAutotileShapeTable, RpgmAutotileSlot } from './RpgmAutotile.ts';
|
|
4
5
|
/**
|
|
5
6
|
* The frame value meaning "nothing here"; a cell holding it gets no sprite at all.
|
|
6
7
|
*
|
|
@@ -96,6 +97,43 @@ export interface TileMapOptions {
|
|
|
96
97
|
*/
|
|
97
98
|
heightStep?: number;
|
|
98
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Which engine family an autotile sheet comes from: RPG Maker MV's A1-A4
|
|
102
|
+
* quadrant sheets, or RPG Maker XP's 96 by 128 pattern templates (and 32px
|
|
103
|
+
* single-tile strips).
|
|
104
|
+
*/
|
|
105
|
+
export type AutotileFormat = 'rpgm-mv' | 'rpgm-xp';
|
|
106
|
+
/**
|
|
107
|
+
* One autotile source a layer draws from. MV sets name an A-sheet family;
|
|
108
|
+
* XP sets name one autotile image. A layer takes one set, or one per family
|
|
109
|
+
* slot (MV) or image index (XP), and each cell routes to the set claiming
|
|
110
|
+
* its id - the same split a multi-sheet map already uses for plain layers.
|
|
111
|
+
*/
|
|
112
|
+
export interface AutotileSet {
|
|
113
|
+
/** the raw source image: an MV A-sheet of 48px cells, or one XP autotile image */
|
|
114
|
+
sheet: SpriteSheet;
|
|
115
|
+
/** which family; MV quadrant sheets unless 'rpgm-xp' says otherwise */
|
|
116
|
+
format?: AutotileFormat;
|
|
117
|
+
/** MV only, required: which A-family (0-3) this sheet is */
|
|
118
|
+
slot?: RpgmAutotileSlot;
|
|
119
|
+
/** MV only: which shape table to sample; floor for slots 0-1, wall for 2-3 */
|
|
120
|
+
mode?: 'floor' | 'wall';
|
|
121
|
+
/** MV only: a custom shape table, overriding mode for non-standard sheets */
|
|
122
|
+
table?: RpgmAutotileShapeTable;
|
|
123
|
+
/** XP only: which autotile image this sheet is, 0-7 */
|
|
124
|
+
index?: number;
|
|
125
|
+
/** XP only: animation stripes in the image; counted from the sheet width when omitted */
|
|
126
|
+
frames?: number;
|
|
127
|
+
/** MV only: kind runs advancing together when the frame changes (water, waterfalls) */
|
|
128
|
+
animation?: ReadonlyArray<ReadonlyArray<number>>;
|
|
129
|
+
/** the layer's initial animation frame */
|
|
130
|
+
animationFrame?: number;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* One autotile cell: a raw MV tile id or XP tile value. EMPTY (or any
|
|
134
|
+
* value at or below zero) leaves the cell blank.
|
|
135
|
+
*/
|
|
136
|
+
export type AutotileCell = number;
|
|
99
137
|
/**
|
|
100
138
|
* A grid of tiles, drawn as sprites.
|
|
101
139
|
*
|
|
@@ -173,6 +211,53 @@ export declare class TileMap extends Container {
|
|
|
173
211
|
* `tileFrame` packs rather than plain indices.
|
|
174
212
|
*/
|
|
175
213
|
addLayer(name: string, data?: ArrayLike<number>): this;
|
|
214
|
+
private beginLayer;
|
|
215
|
+
/**
|
|
216
|
+
* Adds an autotile layer on top of the existing ones: each non-blank cell
|
|
217
|
+
* holds a raw MV tile id or XP tile value, and the map assembles that
|
|
218
|
+
* cell's quadrant halves straight from the source sheet - no prebuilt
|
|
219
|
+
* atlas canvas in between. Cells route to the set claiming their id, so
|
|
220
|
+
* one layer can span every A-sheet (or every autotile image) the same way
|
|
221
|
+
* one plain layer can span several sheets.
|
|
222
|
+
*
|
|
223
|
+
* @param cells one raw id per cell, row-major; EMPTY (or at/below zero)
|
|
224
|
+
* for a blank cell. Every other value must fall in one of the sets'
|
|
225
|
+
* ranges, or the call throws naming it.
|
|
226
|
+
* @param set one source, or one per family slot (MV) or image index (XP).
|
|
227
|
+
*
|
|
228
|
+
* @example
|
|
229
|
+
* ```ts
|
|
230
|
+
* import { TileMap, SpriteSheet, type AutotileSet } from '@datamoc/mw_games/two-d/render';
|
|
231
|
+
*
|
|
232
|
+
* declare const sheet: SpriteSheet; // a raw MV A1 sheet: 48px cells, slot 0
|
|
233
|
+
*
|
|
234
|
+
* const map = new TileMap({ width: 4, height: 4, sheet });
|
|
235
|
+
* const sea: AutotileSet = { sheet, slot: 0, animation: [[0, 1, 2]] };
|
|
236
|
+
* map.addAutotileLayer('sea', new Array(16).fill(2048), sea);
|
|
237
|
+
* map.setAutotileFrame('sea', 1);
|
|
238
|
+
* console.log(map.getAutotileFrame('sea')); // 1
|
|
239
|
+
* console.log(map.getTile('sea', 0, 0)); // 2048 - raw MV ids, EMPTY where blank
|
|
240
|
+
* ```
|
|
241
|
+
*/
|
|
242
|
+
addAutotileLayer(name: string, cells: ArrayLike<number>, set: AutotileSet | readonly AutotileSet[]): this;
|
|
243
|
+
/**
|
|
244
|
+
* Advances an autotile layer's animation frame: every animated cell
|
|
245
|
+
* re-points its quadrant textures (MV kind cycles, XP frame stripes)
|
|
246
|
+
* while cells outside any cycle stay on frame zero's art. A repeated
|
|
247
|
+
* frame is a no-op.
|
|
248
|
+
*/
|
|
249
|
+
setAutotileFrame(layer: string | number, frame: number): void;
|
|
250
|
+
/** the animation frame an autotile layer currently shows */
|
|
251
|
+
getAutotileFrame(layer: string | number): number;
|
|
252
|
+
private resolveAutotileSet;
|
|
253
|
+
private resolveRpgmSet;
|
|
254
|
+
private resolveXpSet;
|
|
255
|
+
private claimAutotileSets;
|
|
256
|
+
private autotilePieces;
|
|
257
|
+
private makeAutotileSprites;
|
|
258
|
+
private setAutotileCell;
|
|
259
|
+
private eachCellSprite;
|
|
260
|
+
private firstCellSprite;
|
|
176
261
|
private layerAt;
|
|
177
262
|
private chunkIndex;
|
|
178
263
|
/** the centre of a cell's tile, before the projections below settle on a shared contract */
|
|
@@ -185,6 +270,11 @@ export declare class TileMap extends Container {
|
|
|
185
270
|
private textureFor;
|
|
186
271
|
private buildSprite;
|
|
187
272
|
getTile(layer: string | number, x: number, y: number): number;
|
|
273
|
+
/**
|
|
274
|
+
* Replaces one cell. On an autotile layer the value is a raw autotile id
|
|
275
|
+
* rather than a frame index; EMPTY (or any value at or below zero)
|
|
276
|
+
* clears the cell there too.
|
|
277
|
+
*/
|
|
188
278
|
setTile(layer: string | number, x: number, y: number, frame: number): void;
|
|
189
279
|
/** fills a whole layer at once, which is what loading a map does */
|
|
190
280
|
setLayerData(layer: string | number, data: ArrayLike<number>): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TileMap.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/TileMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"TileMap.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/TileMap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Container, Graphics } from 'pixi.js';
|
|
1
|
+
import { Container, Graphics, Rectangle, Texture } from 'pixi.js';
|
|
2
2
|
import { TintedSprite } from './TintedSprite.js';
|
|
3
3
|
import { hexToPixel, pixelToHex } from '../../core/Hex.js';
|
|
4
|
+
import { assertAutotileLayout, autotileCellParts, rpgmAutotileSlot, xpAutotileRef, RPGM_FLOOR_AUTOTILE_TABLE, RPGM_WALL_AUTOTILE_TABLE, } from './RpgmAutotile.js';
|
|
4
5
|
/**
|
|
5
6
|
* The frame value meaning "nothing here"; a cell holding it gets no sprite at all.
|
|
6
7
|
*
|
|
@@ -192,44 +193,320 @@ export class TileMap extends Container {
|
|
|
192
193
|
* `tileFrame` packs rather than plain indices.
|
|
193
194
|
*/
|
|
194
195
|
addLayer(name, data) {
|
|
196
|
+
const { cells, container, chunks } = this.beginLayer(name, data?.length);
|
|
197
|
+
const layer = {
|
|
198
|
+
kind: 'tiles',
|
|
199
|
+
name,
|
|
200
|
+
data: data ? Int32Array.from(data) : new Int32Array(cells).fill(EMPTY),
|
|
201
|
+
sprites: new Array(cells).fill(null),
|
|
202
|
+
container,
|
|
203
|
+
};
|
|
204
|
+
this.layers.push(layer);
|
|
205
|
+
this.layersByName.set(name, layer);
|
|
206
|
+
this.chunks.push(chunks);
|
|
207
|
+
this.addChild(container);
|
|
208
|
+
//sprites are built after registration so setTile can find the layer
|
|
209
|
+
const isBottom = this.layers.length === 1;
|
|
210
|
+
for (let y = 0; y < this.heightInTiles; y++) {
|
|
211
|
+
for (let x = 0; x < this.widthInTiles; x++) {
|
|
212
|
+
const frame = layer.data[this.index(x, y)];
|
|
213
|
+
if (frame !== EMPTY)
|
|
214
|
+
this.buildSprite(layer, x, y, frame);
|
|
215
|
+
//faces belong to the block, which the bottom layer defines; upper
|
|
216
|
+
//layers ride the same lift through buildSprite but draw no faces
|
|
217
|
+
if (isBottom)
|
|
218
|
+
this.syncFaces(x, y);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return this;
|
|
222
|
+
}
|
|
223
|
+
beginLayer(name, length) {
|
|
195
224
|
if (this.layersByName.has(name))
|
|
196
225
|
throw new Error(`this map already has a layer named "${name}"`);
|
|
197
226
|
const cells = this.widthInTiles * this.heightInTiles;
|
|
198
|
-
if (
|
|
199
|
-
throw new Error(`layer "${name}" has ${
|
|
227
|
+
if (length !== undefined && length !== cells) {
|
|
228
|
+
throw new Error(`layer "${name}" has ${length} cells, but the map has ${cells}`);
|
|
200
229
|
}
|
|
201
230
|
const container = new Container();
|
|
202
|
-
const
|
|
231
|
+
const chunks = [];
|
|
203
232
|
for (let i = 0; i < this.chunkColumns * this.chunkRows; i++) {
|
|
204
233
|
const chunk = new Container();
|
|
205
|
-
|
|
234
|
+
chunks.push(chunk);
|
|
206
235
|
container.addChild(chunk);
|
|
207
236
|
}
|
|
237
|
+
return { cells, container, chunks };
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Adds an autotile layer on top of the existing ones: each non-blank cell
|
|
241
|
+
* holds a raw MV tile id or XP tile value, and the map assembles that
|
|
242
|
+
* cell's quadrant halves straight from the source sheet - no prebuilt
|
|
243
|
+
* atlas canvas in between. Cells route to the set claiming their id, so
|
|
244
|
+
* one layer can span every A-sheet (or every autotile image) the same way
|
|
245
|
+
* one plain layer can span several sheets.
|
|
246
|
+
*
|
|
247
|
+
* @param cells one raw id per cell, row-major; EMPTY (or at/below zero)
|
|
248
|
+
* for a blank cell. Every other value must fall in one of the sets'
|
|
249
|
+
* ranges, or the call throws naming it.
|
|
250
|
+
* @param set one source, or one per family slot (MV) or image index (XP).
|
|
251
|
+
*
|
|
252
|
+
* @example
|
|
253
|
+
* ```ts
|
|
254
|
+
* import { TileMap, SpriteSheet, type AutotileSet } from '@datamoc/mw_games/two-d/render';
|
|
255
|
+
*
|
|
256
|
+
* declare const sheet: SpriteSheet; // a raw MV A1 sheet: 48px cells, slot 0
|
|
257
|
+
*
|
|
258
|
+
* const map = new TileMap({ width: 4, height: 4, sheet });
|
|
259
|
+
* const sea: AutotileSet = { sheet, slot: 0, animation: [[0, 1, 2]] };
|
|
260
|
+
* map.addAutotileLayer('sea', new Array(16).fill(2048), sea);
|
|
261
|
+
* map.setAutotileFrame('sea', 1);
|
|
262
|
+
* console.log(map.getAutotileFrame('sea')); // 1
|
|
263
|
+
* console.log(map.getTile('sea', 0, 0)); // 2048 - raw MV ids, EMPTY where blank
|
|
264
|
+
* ```
|
|
265
|
+
*/
|
|
266
|
+
addAutotileLayer(name, cells, set) {
|
|
267
|
+
const entries = Array.isArray(set) ? set : [set];
|
|
268
|
+
if (entries.length === 0)
|
|
269
|
+
throw new Error(`autotile layer "${name}" needs at least one set`);
|
|
270
|
+
const { cells: total, container, chunks } = this.beginLayer(name, cells.length);
|
|
271
|
+
const sets = entries.map((entry, position) => this.resolveAutotileSet(name, entry, position));
|
|
272
|
+
const claimed = new Set();
|
|
273
|
+
for (const resolved of sets) {
|
|
274
|
+
const key = resolved.layout.format === 'rpgm-mv'
|
|
275
|
+
? `slot ${resolved.layout.slot}`
|
|
276
|
+
: `autotile ${resolved.layout.index}`;
|
|
277
|
+
if (claimed.has(key))
|
|
278
|
+
throw new Error(`autotile layer "${name}" has two sets for ${key}`);
|
|
279
|
+
claimed.add(key);
|
|
280
|
+
}
|
|
281
|
+
let frame = 0;
|
|
282
|
+
entries.forEach((entry, position) => {
|
|
283
|
+
const initial = entry.animationFrame ?? 0;
|
|
284
|
+
if (!Number.isInteger(initial) || initial < 0) {
|
|
285
|
+
throw new Error(`autotile layer "${name}" set ${position} starts at an invalid animation frame, got ${entry.animationFrame}`);
|
|
286
|
+
}
|
|
287
|
+
if (position === 0)
|
|
288
|
+
frame = initial;
|
|
289
|
+
else if (initial !== frame) {
|
|
290
|
+
throw new Error(`autotile layer "${name}" sets disagree on their initial animation frame (${frame} vs ${initial})`);
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
const data = Int32Array.from(cells);
|
|
294
|
+
for (let cell = 0; cell < total; cell++) {
|
|
295
|
+
if (data[cell] > 0)
|
|
296
|
+
this.claimAutotileSets(sets, name, data[cell]);
|
|
297
|
+
}
|
|
208
298
|
const layer = {
|
|
299
|
+
kind: 'autotile',
|
|
209
300
|
name,
|
|
210
|
-
data
|
|
211
|
-
sprites: new Array(
|
|
301
|
+
data,
|
|
302
|
+
sprites: new Array(total).fill(null),
|
|
212
303
|
container,
|
|
304
|
+
sets,
|
|
305
|
+
frame,
|
|
213
306
|
};
|
|
214
307
|
this.layers.push(layer);
|
|
215
308
|
this.layersByName.set(name, layer);
|
|
216
|
-
this.chunks.push(
|
|
309
|
+
this.chunks.push(chunks);
|
|
217
310
|
this.addChild(container);
|
|
218
|
-
//sprites are built after registration so
|
|
311
|
+
//sprites are built after registration so the claim above stays the only check
|
|
219
312
|
const isBottom = this.layers.length === 1;
|
|
220
313
|
for (let y = 0; y < this.heightInTiles; y++) {
|
|
221
314
|
for (let x = 0; x < this.widthInTiles; x++) {
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
315
|
+
const at = this.index(x, y);
|
|
316
|
+
const tile = data[at];
|
|
317
|
+
if (tile <= 0)
|
|
318
|
+
continue;
|
|
319
|
+
layer.sprites[at] = this.makeAutotileSprites(layer, this.claimAutotileSets(sets, name, tile), x, y, tile);
|
|
227
320
|
if (isBottom)
|
|
228
321
|
this.syncFaces(x, y);
|
|
229
322
|
}
|
|
230
323
|
}
|
|
231
324
|
return this;
|
|
232
325
|
}
|
|
326
|
+
/**
|
|
327
|
+
* Advances an autotile layer's animation frame: every animated cell
|
|
328
|
+
* re-points its quadrant textures (MV kind cycles, XP frame stripes)
|
|
329
|
+
* while cells outside any cycle stay on frame zero's art. A repeated
|
|
330
|
+
* frame is a no-op.
|
|
331
|
+
*/
|
|
332
|
+
setAutotileFrame(layer, frame) {
|
|
333
|
+
const target = this.layerAt(layer);
|
|
334
|
+
if (target.kind !== 'autotile')
|
|
335
|
+
throw new Error(`layer "${target.name}" is not an autotile layer`);
|
|
336
|
+
if (!Number.isInteger(frame) || frame < 0) {
|
|
337
|
+
throw new Error(`an autotile animation frame must be an integer at or above zero, got ${frame}`);
|
|
338
|
+
}
|
|
339
|
+
if (target.frame === frame)
|
|
340
|
+
return;
|
|
341
|
+
target.frame = frame;
|
|
342
|
+
for (let y = 0; y < this.heightInTiles; y++) {
|
|
343
|
+
for (let x = 0; x < this.widthInTiles; x++) {
|
|
344
|
+
const cell = this.index(x, y);
|
|
345
|
+
const tile = target.data[cell];
|
|
346
|
+
if (tile <= 0)
|
|
347
|
+
continue;
|
|
348
|
+
const set = this.claimAutotileSets(target.sets, target.name, tile);
|
|
349
|
+
const pieces = this.autotilePieces(set, tile, frame);
|
|
350
|
+
const sprites = target.sprites[cell];
|
|
351
|
+
if (!sprites)
|
|
352
|
+
continue;
|
|
353
|
+
for (let i = 0; i < sprites.length; i++)
|
|
354
|
+
sprites[i].texture = pieces.textures[i];
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
/** the animation frame an autotile layer currently shows */
|
|
359
|
+
getAutotileFrame(layer) {
|
|
360
|
+
const target = this.layerAt(layer);
|
|
361
|
+
if (target.kind !== 'autotile')
|
|
362
|
+
throw new Error(`layer "${target.name}" is not an autotile layer`);
|
|
363
|
+
return target.frame;
|
|
364
|
+
}
|
|
365
|
+
resolveAutotileSet(layerName, entry, position) {
|
|
366
|
+
const where = `autotile layer "${layerName}" set ${position}`;
|
|
367
|
+
if (!entry || !entry.sheet)
|
|
368
|
+
throw new Error(`${where} needs a source sheet`);
|
|
369
|
+
const format = entry.format ?? 'rpgm-mv';
|
|
370
|
+
if (format !== 'rpgm-mv' && format !== 'rpgm-xp')
|
|
371
|
+
throw new Error(`${where} has an unknown format "${entry.format}"`);
|
|
372
|
+
if (format === 'rpgm-mv')
|
|
373
|
+
return this.resolveRpgmSet(where, entry);
|
|
374
|
+
return this.resolveXpSet(where, entry);
|
|
375
|
+
}
|
|
376
|
+
resolveRpgmSet(where, entry) {
|
|
377
|
+
if (entry.slot === undefined)
|
|
378
|
+
throw new Error(`${where} needs a slot (0-3) for its MV sheet`);
|
|
379
|
+
if (entry.mode !== undefined && entry.mode !== 'floor' && entry.mode !== 'wall') {
|
|
380
|
+
throw new Error(`${where} has an unknown mode "${entry.mode}"`);
|
|
381
|
+
}
|
|
382
|
+
if (entry.animation !== undefined && !Array.isArray(entry.animation)) {
|
|
383
|
+
throw new Error(`${where} animation must list kind runs, got ${typeof entry.animation}`);
|
|
384
|
+
}
|
|
385
|
+
const mode = entry.mode ?? (entry.slot < 2 ? 'floor' : 'wall');
|
|
386
|
+
const layout = {
|
|
387
|
+
format: 'rpgm-mv',
|
|
388
|
+
slot: entry.slot,
|
|
389
|
+
table: entry.table ?? (mode === 'floor' ? RPGM_FLOOR_AUTOTILE_TABLE : RPGM_WALL_AUTOTILE_TABLE),
|
|
390
|
+
cycles: entry.animation ?? [],
|
|
391
|
+
};
|
|
392
|
+
assertAutotileLayout(layout);
|
|
393
|
+
return {
|
|
394
|
+
sheet: entry.sheet,
|
|
395
|
+
layout,
|
|
396
|
+
cache: new Map(),
|
|
397
|
+
claims: (tile) => rpgmAutotileSlot(tile) === entry.slot,
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
resolveXpSet(where, entry) {
|
|
401
|
+
const index = entry.index ?? 0;
|
|
402
|
+
const texture = entry.sheet.texture;
|
|
403
|
+
//a 32px-tall strip holds whole animated tiles rather than a quadrant
|
|
404
|
+
//template; anything else must be the 128px template (the 192px
|
|
405
|
+
//expanded-corner variant stays game-side, unsupported here)
|
|
406
|
+
const single = texture.height === 32;
|
|
407
|
+
if (texture.height !== 32 && texture.height !== 128) {
|
|
408
|
+
throw new Error(`${where} is ${texture.height}px tall - XP autotile images are 128px templates or 32px single-tile strips`);
|
|
409
|
+
}
|
|
410
|
+
const stripe = single ? 32 : 96;
|
|
411
|
+
const frames = entry.frames ?? Math.max(1, Math.floor(texture.width / stripe));
|
|
412
|
+
const layout = { format: 'rpgm-xp', index, frames, single };
|
|
413
|
+
assertAutotileLayout(layout);
|
|
414
|
+
if (frames > Math.floor(texture.width / stripe)) {
|
|
415
|
+
throw new Error(`${where} asks for ${frames} frames but its sheet fits ${Math.floor(texture.width / stripe)}`);
|
|
416
|
+
}
|
|
417
|
+
return {
|
|
418
|
+
sheet: entry.sheet,
|
|
419
|
+
layout,
|
|
420
|
+
cache: new Map(),
|
|
421
|
+
claims: (tile) => {
|
|
422
|
+
const ref = xpAutotileRef(tile);
|
|
423
|
+
return ref !== null && ref.index === index;
|
|
424
|
+
},
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
claimAutotileSets(sets, layerName, tile) {
|
|
428
|
+
for (const set of sets) {
|
|
429
|
+
if (set.claims(tile))
|
|
430
|
+
return set;
|
|
431
|
+
}
|
|
432
|
+
throw new Error(`tile ${tile} in autotile layer "${layerName}" matches none of its sets`);
|
|
433
|
+
}
|
|
434
|
+
autotilePieces(set, tile, frame) {
|
|
435
|
+
const key = `${tile}:${frame}`;
|
|
436
|
+
const cached = set.cache.get(key);
|
|
437
|
+
if (cached)
|
|
438
|
+
return cached;
|
|
439
|
+
//tile > 0 is established by every caller, so these parts exist
|
|
440
|
+
const parts = autotileCellParts(set.layout, tile, frame);
|
|
441
|
+
const textures = parts.map((part) => new Texture({
|
|
442
|
+
source: set.sheet.texture.source,
|
|
443
|
+
frame: new Rectangle(part.sourceX, part.sourceY, part.sourceWidth, part.sourceHeight),
|
|
444
|
+
}));
|
|
445
|
+
const pieces = { parts, textures };
|
|
446
|
+
set.cache.set(key, pieces);
|
|
447
|
+
return pieces;
|
|
448
|
+
}
|
|
449
|
+
makeAutotileSprites(layer, set, x, y, tile) {
|
|
450
|
+
const cell = this.index(x, y);
|
|
451
|
+
const pieces = this.autotilePieces(set, tile, layer.frame);
|
|
452
|
+
const origin = this.cellOrigin(x, y);
|
|
453
|
+
const lift = this.cellHeight[cell] * this.heightStep;
|
|
454
|
+
const made = pieces.textures.map((texture, i) => {
|
|
455
|
+
const part = pieces.parts[i];
|
|
456
|
+
const sprite = new TintedSprite(texture);
|
|
457
|
+
sprite.x = origin.x + part.destX * this.tileWidth;
|
|
458
|
+
sprite.y = origin.y - lift + part.destY * this.tileHeight;
|
|
459
|
+
sprite.scale.set((part.destWidth * this.tileWidth) / part.sourceWidth, (part.destHeight * this.tileHeight) / part.sourceHeight);
|
|
460
|
+
sprite.tint = this.cellTint[cell];
|
|
461
|
+
sprite.colorAdd = this.cellAdd[cell];
|
|
462
|
+
return sprite;
|
|
463
|
+
});
|
|
464
|
+
const chunk = this.chunks[this.layers.indexOf(layer)][this.chunkIndex(x, y)];
|
|
465
|
+
for (const sprite of made)
|
|
466
|
+
chunk.addChild(sprite);
|
|
467
|
+
return made;
|
|
468
|
+
}
|
|
469
|
+
setAutotileCell(layer, x, y, tile) {
|
|
470
|
+
const cell = this.index(x, y);
|
|
471
|
+
layer.data[cell] = tile;
|
|
472
|
+
const existing = layer.sprites[cell];
|
|
473
|
+
if (tile <= 0) {
|
|
474
|
+
if (existing)
|
|
475
|
+
for (const sprite of existing)
|
|
476
|
+
sprite.destroy();
|
|
477
|
+
layer.sprites[cell] = null;
|
|
478
|
+
return;
|
|
479
|
+
}
|
|
480
|
+
const set = this.claimAutotileSets(layer.sets, layer.name, tile);
|
|
481
|
+
const pieces = this.autotilePieces(set, tile, layer.frame);
|
|
482
|
+
if (existing && existing.length === pieces.textures.length) {
|
|
483
|
+
for (let i = 0; i < existing.length; i++)
|
|
484
|
+
existing[i].texture = pieces.textures[i];
|
|
485
|
+
return;
|
|
486
|
+
}
|
|
487
|
+
if (existing)
|
|
488
|
+
for (const sprite of existing)
|
|
489
|
+
sprite.destroy();
|
|
490
|
+
layer.sprites[cell] = this.makeAutotileSprites(layer, set, x, y, tile);
|
|
491
|
+
}
|
|
492
|
+
eachCellSprite(layer, cell, apply) {
|
|
493
|
+
const entry = layer.sprites[cell];
|
|
494
|
+
if (!entry)
|
|
495
|
+
return;
|
|
496
|
+
if (Array.isArray(entry)) {
|
|
497
|
+
for (const sprite of entry)
|
|
498
|
+
apply(sprite);
|
|
499
|
+
}
|
|
500
|
+
else {
|
|
501
|
+
apply(entry);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
firstCellSprite(layer, cell) {
|
|
505
|
+
const entry = layer.sprites[cell];
|
|
506
|
+
if (!entry)
|
|
507
|
+
return null;
|
|
508
|
+
return Array.isArray(entry) ? entry[0] : entry;
|
|
509
|
+
}
|
|
233
510
|
layerAt(layer) {
|
|
234
511
|
const found = typeof layer === 'number' ? this.layers[layer] : this.layersByName.get(layer);
|
|
235
512
|
if (!found)
|
|
@@ -312,6 +589,11 @@ export class TileMap extends Container {
|
|
|
312
589
|
return EMPTY;
|
|
313
590
|
return this.layerAt(layer).data[this.index(x, y)];
|
|
314
591
|
}
|
|
592
|
+
/**
|
|
593
|
+
* Replaces one cell. On an autotile layer the value is a raw autotile id
|
|
594
|
+
* rather than a frame index; EMPTY (or any value at or below zero)
|
|
595
|
+
* clears the cell there too.
|
|
596
|
+
*/
|
|
315
597
|
setTile(layer, x, y, frame) {
|
|
316
598
|
if (!this.inside(x, y))
|
|
317
599
|
return;
|
|
@@ -319,17 +601,22 @@ export class TileMap extends Container {
|
|
|
319
601
|
const cell = this.index(x, y);
|
|
320
602
|
if (target.data[cell] === frame)
|
|
321
603
|
return;
|
|
322
|
-
target.
|
|
323
|
-
|
|
324
|
-
if (frame === EMPTY) {
|
|
325
|
-
existing?.destroy();
|
|
326
|
-
target.sprites[cell] = null;
|
|
327
|
-
}
|
|
328
|
-
else if (existing) {
|
|
329
|
-
existing.texture = this.textureFor(frame);
|
|
604
|
+
if (target.kind === 'autotile') {
|
|
605
|
+
this.setAutotileCell(target, x, y, frame);
|
|
330
606
|
}
|
|
331
607
|
else {
|
|
332
|
-
|
|
608
|
+
target.data[cell] = frame;
|
|
609
|
+
const existing = target.sprites[cell];
|
|
610
|
+
if (frame === EMPTY) {
|
|
611
|
+
existing?.destroy();
|
|
612
|
+
target.sprites[cell] = null;
|
|
613
|
+
}
|
|
614
|
+
else if (existing) {
|
|
615
|
+
existing.texture = this.textureFor(frame);
|
|
616
|
+
}
|
|
617
|
+
else {
|
|
618
|
+
this.buildSprite(target, x, y, frame);
|
|
619
|
+
}
|
|
333
620
|
}
|
|
334
621
|
//faces follow the bottom layer: no tile there, no block to side
|
|
335
622
|
if (this.layers[0] === target)
|
|
@@ -362,11 +649,10 @@ export class TileMap extends Container {
|
|
|
362
649
|
this.cellTint[cell] = tint;
|
|
363
650
|
this.cellAdd[cell] = add;
|
|
364
651
|
for (const layer of this.layers) {
|
|
365
|
-
|
|
366
|
-
if (sprite) {
|
|
652
|
+
this.eachCellSprite(layer, cell, (sprite) => {
|
|
367
653
|
sprite.tint = tint;
|
|
368
654
|
sprite.colorAdd = add;
|
|
369
|
-
}
|
|
655
|
+
});
|
|
370
656
|
}
|
|
371
657
|
const face = this.faces[cell];
|
|
372
658
|
if (face)
|
|
@@ -405,12 +691,14 @@ export class TileMap extends Container {
|
|
|
405
691
|
const cell = this.index(x, y);
|
|
406
692
|
if (this.cellHeight[cell] === height)
|
|
407
693
|
return;
|
|
694
|
+
//a delta keeps each sprite's own offset inside its cell, so the four
|
|
695
|
+
//quadrant halves of an autotile ride up together with plain tiles
|
|
696
|
+
const rise = (height - this.cellHeight[cell]) * this.heightStep;
|
|
408
697
|
this.cellHeight[cell] = height;
|
|
409
|
-
const lift = height * this.heightStep;
|
|
410
698
|
for (const layer of this.layers) {
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
699
|
+
this.eachCellSprite(layer, cell, (sprite) => {
|
|
700
|
+
sprite.y -= rise;
|
|
701
|
+
});
|
|
414
702
|
}
|
|
415
703
|
this.syncFaces(x, y);
|
|
416
704
|
}
|
|
@@ -445,7 +733,7 @@ export class TileMap extends Container {
|
|
|
445
733
|
this.faces[cell] = face;
|
|
446
734
|
//behind the cell's own top, after everything drawn above it on screen
|
|
447
735
|
const chunk = this.chunks[0][this.chunkIndex(x, y)];
|
|
448
|
-
const top = this.layers[0]
|
|
736
|
+
const top = this.firstCellSprite(this.layers[0], cell);
|
|
449
737
|
if (top)
|
|
450
738
|
chunk.addChildAt(face, chunk.getChildIndex(top));
|
|
451
739
|
else
|