From 5e01f03a500161d7e887ea5c593504db08bf40eb Mon Sep 17 00:00:00 2001 From: Zyie <24736175+Zyie@users.noreply.github.com> Date: Mon, 29 Apr 2024 16:00:54 +0100 Subject: [PATCH] chore(spine): ensure spine tag is used --- packages/spine/src/spineAtlasCacheBuster.ts | 17 ++++++--- packages/spine/src/spineAtlasCompress.ts | 8 +++-- packages/spine/src/spineAtlasManifestMod.ts | 39 ++++++++++++++------- packages/spine/src/spineAtlasMipmap.ts | 7 ++-- 4 files changed, 48 insertions(+), 23 deletions(-) diff --git a/packages/spine/src/spineAtlasCacheBuster.ts b/packages/spine/src/spineAtlasCacheBuster.ts index 90bdcc94..e8b3ca75 100644 --- a/packages/spine/src/spineAtlasCacheBuster.ts +++ b/packages/spine/src/spineAtlasCacheBuster.ts @@ -2,7 +2,9 @@ import { removeSync, writeFileSync } from 'fs-extra'; import { AtlasView } from './AtlasView'; import { type AssetPipe, checkExt, findAssets } from '@play-co/assetpack-core'; -import type { Asset } from '@play-co/assetpack-core'; +import type { Asset, PluginOptions } from '@play-co/assetpack-core'; + +export type SpineAtlasCacheBustOptions = PluginOptions<'spine'>; /** * This should be used after the cache buster plugin in the pipes. @@ -18,9 +20,14 @@ import type { Asset } from '@play-co/assetpack-core'; * @param _options * @returns */ -export function spineAtlasCacheBuster(): AssetPipe +export function spineAtlasCacheBuster(_options: SpineAtlasCacheBustOptions = {}): AssetPipe { - const defaultOptions = {}; + const defaultOptions = { + tags: { + spine: 'spine', + ..._options.tags, + }, + }; const atlasFileToFix: Asset[] = []; @@ -28,9 +35,9 @@ export function spineAtlasCacheBuster(): AssetPipe folder: false, name: 'spine-cache-buster', defaultOptions, - test(asset: Asset, _options) + test(asset: Asset, options) { - return checkExt(asset.path, '.atlas'); + return checkExt(asset.path, '.atlas') && asset.metaData[options.tags.spine]; }, async transform(asset: Asset, _options) diff --git a/packages/spine/src/spineAtlasCompress.ts b/packages/spine/src/spineAtlasCompress.ts index 1ea8dfdc..1645f993 100644 --- a/packages/spine/src/spineAtlasCompress.ts +++ b/packages/spine/src/spineAtlasCompress.ts @@ -4,14 +4,15 @@ import { checkExt, createNewAssetAt, swapExt } from '@play-co/assetpack-core'; import type { Asset, AssetPipe, PluginOptions } from '@play-co/assetpack-core'; import type { CompressOptions } from '@play-co/assetpack-plugin-image'; -export type SpineAtlasCompressOptions = PluginOptions<'nc'> & CompressOptions; +export type SpineAtlasCompressOptions = PluginOptions<'nc' | 'spine'> & CompressOptions; export function spineAtlasCompress(_options?: SpineAtlasCompressOptions): AssetPipe { const defaultOptions = { ..._options, tags: { - tps: 'nc', + nc: 'nc', + spine: 'spine', ..._options?.tags } }; @@ -22,7 +23,8 @@ export function spineAtlasCompress(_options?: SpineAtlasCompressOptions): AssetP test(asset: Asset, options) { return !asset.allMetaData[options.tags.nc] - && checkExt(asset.path, '.atlas'); + && checkExt(asset.path, '.atlas') + && asset.metaData[options.tags.spine]; }, async transform(asset: Asset, options) { diff --git a/packages/spine/src/spineAtlasManifestMod.ts b/packages/spine/src/spineAtlasManifestMod.ts index 896eebd5..5f30fffd 100644 --- a/packages/spine/src/spineAtlasManifestMod.ts +++ b/packages/spine/src/spineAtlasManifestMod.ts @@ -2,12 +2,11 @@ import { readJsonSync, writeJSONSync } from 'fs-extra'; import { AtlasView } from './AtlasView'; import { type AssetPipe, findAssets, path } from '@play-co/assetpack-core'; -import type { Asset } from '@play-co/assetpack-core'; +import type { Asset, PluginOptions } from '@play-co/assetpack-core'; -export interface SpineManifestOptions -{ +export type SpineManifestOptions = PluginOptions<'spine'> & { output?: string; -} +}; /** * This pipe will modify the manifest generated by 'pixiManifest'. It will look for any images found in the atlas @@ -32,7 +31,11 @@ export function spineAtlasManifestMod(_options: SpineManifestOptions = {}): Asse { const defaultOptions = { output: 'manifest.json', - ..._options + ..._options, + tags: { + spine: 'spine', + ..._options.tags, + }, }; return { @@ -42,13 +45,21 @@ export function spineAtlasManifestMod(_options: SpineManifestOptions = {}): Asse async finish(asset: Asset, options, pipeSystem) { - const atlasAssets = findAssets((asset) => - asset.extension === '.atlas' && asset.transformChildren.length === 0, asset, true); + const atlasAssets = findAssets( + (asset) => + asset.extension === '.atlas' + && asset.transformChildren.length === 0 + && asset.metaData[options.tags.spine], + asset, + true + ); const manifestLocation = options.output; - const newFileName = path.dirname(manifestLocation) === '.' - ? path.joinSafe(pipeSystem.outputPath, manifestLocation) : manifestLocation; + const newFileName + = path.dirname(manifestLocation) === '.' + ? path.joinSafe(pipeSystem.outputPath, manifestLocation) + : manifestLocation; const manifest = readJsonSync(newFileName); @@ -59,14 +70,17 @@ export function spineAtlasManifestMod(_options: SpineManifestOptions = {}): Asse atlasView.getTextures().forEach((texture) => { // relative path to the output folder - const texturePath = path.relative(pipeSystem.outputPath, path.joinSafe(atlasAsset.directory, texture)); + const texturePath = path.relative( + pipeSystem.outputPath, + path.joinSafe(atlasAsset.directory, texture) + ); findAndRemoveManifestAsset(manifest, texturePath); }); }); writeJSONSync(newFileName, manifest, { spaces: 2 }); - } + }, }; } @@ -76,8 +90,7 @@ function findAndRemoveManifestAsset(manifest: any, assetPath: string) { const assets = manifest.bundles[i].assets; - const manifestAsset = assets.find((asset: {src: string[]}) => - + const manifestAsset = assets.find((asset: { src: string[] }) => asset.src.includes(assetPath) ); diff --git a/packages/spine/src/spineAtlasMipmap.ts b/packages/spine/src/spineAtlasMipmap.ts index 7180d18c..23d29149 100644 --- a/packages/spine/src/spineAtlasMipmap.ts +++ b/packages/spine/src/spineAtlasMipmap.ts @@ -3,7 +3,7 @@ import { type AssetPipe, checkExt, createNewAssetAt } from '@play-co/assetpack-c import type { Asset, PluginOptions } from '@play-co/assetpack-core'; import type { MipmapOptions } from '@play-co/assetpack-plugin-image'; -export type SpineOptions = PluginOptions<'fix'> & MipmapOptions; +export type SpineOptions = PluginOptions<'fix' | 'spine'> & MipmapOptions; export function spineAtlasMipmap(_options?: SpineOptions): AssetPipe { @@ -14,6 +14,7 @@ export function spineAtlasMipmap(_options?: SpineOptions): AssetPipe