diff --git a/package-lock.json b/package-lock.json index e35201f4..5b7434e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -109,7 +109,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -2735,7 +2734,6 @@ "integrity": "sha512-lAS9k7d6I0MPN+gb9bKDt7X8SdxknYqAMh44S5L+lNqIN2NuV8nvv3g8rPp7MuRxcOpxpUIATWprO0C34a8Qmg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@octokit/auth-token": "^5.0.0", "@octokit/graphql": "^8.1.2", @@ -3402,7 +3400,6 @@ "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -3614,7 +3611,6 @@ "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -3707,7 +3703,6 @@ "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.38.0", "@typescript-eslint/types": "8.38.0", @@ -3913,7 +3908,6 @@ "integrity": "sha512-tJxiPrWmzH8a+w9nLKlQMzAKX/7VjFs50MWgcAj7p9XQ7AQ9/35fByFYptgPELyLw+0aixTnC4pUWV+APcZ/kw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@testing-library/dom": "^10.4.0", "@testing-library/user-event": "^14.6.1", @@ -4135,7 +4129,6 @@ "integrity": "sha512-hGISOaP18plkzbWEcP/QvtRW1xDXF2+96HbEX6byqQhAUbiS5oH6/9JwW+QsQCIYON2bI6QZBF+2PvOmrRZ9wA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/utils": "3.2.4", "fflate": "^0.8.2", @@ -4416,7 +4409,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4466,7 +4458,6 @@ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -5076,7 +5067,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", @@ -6189,7 +6179,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001726", "electron-to-chromium": "^1.5.173", @@ -6648,8 +6637,7 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1521046.tgz", "integrity": "sha512-vhE6eymDQSKWUXwwA37NtTTVEzjtGVfDr3pRbsWEQ5onH/Snp2c+2xZHWJJawG/0hCCJLRGt4xVtEVUVILol4w==", "dev": true, - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/di": { "version": "0.0.1", @@ -6965,7 +6953,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -7050,7 +7037,6 @@ "integrity": "sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -8734,7 +8720,6 @@ "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -10403,7 +10388,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", @@ -10513,7 +10497,6 @@ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -10900,7 +10883,6 @@ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -11516,7 +11498,6 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -12121,7 +12102,6 @@ "integrity": "sha512-r9hwcSMM3dq7dkMveaWFTosrmyHCL2FRrV3JOwVnVWraF6GtCgp2k+r4hsYtyp1bY3zdmK9e4KYzXsGs5q1h/Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@storybook/global": "^5.0.0", "@testing-library/jest-dom": "^6.6.3", @@ -12585,7 +12565,6 @@ "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -12847,7 +12826,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -13071,7 +13049,6 @@ "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13365,7 +13342,6 @@ "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -13526,7 +13502,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -13540,7 +13515,6 @@ "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", @@ -13690,7 +13664,6 @@ "integrity": "sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -13740,7 +13713,6 @@ "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^2.1.1", diff --git a/site/docs/13-plugins/15-spritefusion-plugin.mdx b/site/docs/13-plugins/15-spritefusion-plugin.mdx index 5a1fc315..ec9c7221 100644 --- a/site/docs/13-plugins/15-spritefusion-plugin.mdx +++ b/site/docs/13-plugins/15-spritefusion-plugin.mdx @@ -1,5 +1,5 @@ --- -title: Sprite Fusion Plugin ✨New!✨ +title: Sprite Fusion Plugin ✨Updated!✨ slug: /spritefusion-plugin section: Plugins --- @@ -82,4 +82,170 @@ Currently you need to count the sprite id from the exported spritesheet.png. For example, now tile id `0` is replaced with a custom implementation that shows a red box. -![factory custom implementation](./spritefusion/factory-result.png) \ No newline at end of file +![factory custom implementation](./spritefusion/factory-result.png) + +## New API methods + +```ts + getSpriteById(tileId: string): Sprite | undefined + getTileMap(layername: string): TileMap | undefined +``` + +- `getSpriteId` + + Using the string tileId from the SF json output, one can easiely extract the tile sprite from the resource + +- `getTileMap` + + Using the layername string from the SF json output, one can get the Excalibur TileMap object from the resource + +## NEW FEATURE - Sprite Fusion Tile Attributes! + +Now in SpriteFusion (as of 10/20/2025), custom tile data is now available! + +### Tile Attributes! + +![New Tile Attribute](./spritefusion/tileattribut.png) + +When you use SF you can add json data to a tile's location, and it shows up like this when the JSON is exported: + +```json +{ + "tileSize": 16, + "mapWidth": 30, + "mapHeight": 12, + "layers": [ + { + "name": "ObjectLayer", + "tiles": [ + { "id": "0", "x": 25, "y": 3, "attributes": { "entity": "bottle" } }, + { "id": "1", "x": 10, "y": 6, "attributes": { "entity": "mushroom" } }, + { "id": "5", "x": 4, "y": 4, "attributes": { "entity": "knight" } } + ], + "collider": false + }, +... +``` + +### How the plugin manages this + +To leverage this, there are a couple new interface properties available in the API + +```ts + ... + // in SpriteFusionResourceOptions interface + /** + * Callback to run when attributes are encountered + */ + tileAttributeFactory?: (attData: AttributeData) => void; + /** + * List of layer names to treat as object layers + * + */ + objectLayers?: string[]; +``` + +and some new interfaces: + +```ts +export interface TileData { + /** + * SpriteFusion Tile Id + */ + id: number; + /** + * The x and y position of the tile + */ + x: number; + y: number; + /** + * The optional attributes of the tile + * */ + attributes: any; +} + +export interface TileAttributeData { + tileData: TileData; + mapData: SpriteFusionMapData; +} + +//Have FactoryProps extends TileData now +export interface FactoryProps extends TileData { + /** + * Excalibur world position + * */ + worldPos: Vector; + /** + * Layer that this object is part of + * */ + layer: Layer; +} + +``` + +### tileAttributeFactory Callback + +This property allows you to pass into the plugin a callback that let's you manually manage how you want the attribute data to be +handled. + +In this example, i'm passing this function into the setup: + +```ts +export const attributeCallback = (attData: TileAttributeData) => { + const { tileData, mapData } = attData; + const { attributes, x, y, id } = tileData; + + // do whatever you want with the data!!!! +}; + +const spriteFusionMap = new SpriteFusionResource({ + mapPath: "./src/SFmapData/map.json", + spritesheetPath: "./src/SFmapData/spritesheet.png", + tileAttributeFactory: attributeCallback, +}); +``` + +This can make using the attribute data easier. I've used it to create entities based off the tilemap data, and it can then be added to +the scene. + +### Object Layers + +When you are creating a SF map project, you might want to create a layer that has data embedded into it, but you don't want things +'drawn' as a tilemap layer by Excalibur. + +Now you can add layernames into this array field, and the layer attributes gets parsed and the tileAttributeFactory callback gets called, but +nothing gets drawn to a layer. + +Example: + +```ts +const spriteFusionMap = new SpriteFusionResource({ + mapPath: "./src/SFmapData/map.json", + spritesheetPath: "./src/SFmapData/spritesheet.png", + tileAttributeFactory: attributeCallback, + objectLayers: ["ObjectLayer"], +}); +``` + +```json +{ + "tileSize": 16, + "mapWidth": 30, + "mapHeight": 12, + "layers": [ + { + "name": "ObjectLayer", + "tiles": [ + { "id": "0", "x": 25, "y": 3, "attributes": { "entity": "bottle" } }, + { "id": "1", "x": 10, "y": 6, "attributes": { "entity": "mushroom" } }, + { "id": "5", "x": 4, "y": 4, "attributes": { "entity": "knight" } } + ], + "collider": false + }, +``` + +None of the `ObjectLayer` gets drawn to a tilemap, but the information gets passed to the tileAttributeFactory Callback. + +## Documentation + +For more information visit https://excaliburjs.com diff --git a/site/docs/13-plugins/spritefusion/tileattribut.png b/site/docs/13-plugins/spritefusion/tileattribut.png new file mode 100644 index 0000000000000000000000000000000000000000..3561dd542ca5d25b0c9fc041a33506e484a0a091 GIT binary patch literal 28771 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 literal 0 HcmV?d00001