@pixi-spine/base
Version:
Base of pixi-spine integration, common files for spine runtimes of different versions
1 lines • 26.5 kB
Source Map (JSON)
{"version":3,"file":"TextureAtlas.mjs","sources":["../../src/core/TextureAtlas.ts"],"sourcesContent":["import { Texture, SCALE_MODES, MIPMAP_MODES, ALPHA_MODES, Rectangle } from '@pixi/core';\nimport { TextureRegion, TextureWrap, TextureFilter, filterFromString } from './TextureRegion';\nimport type { Map, Disposable } from './Utils';\nimport type { BaseTexture } from '@pixi/core';\n\nclass RegionFields {\n x = 0;\n y = 0;\n width = 0;\n height = 0;\n offsetX = 0;\n offsetY = 0;\n originalWidth = 0;\n originalHeight = 0;\n rotate = 0;\n index = 0;\n}\n/**\n * @public\n */\nexport class TextureAtlas implements Disposable {\n pages = new Array<TextureAtlasPage>();\n regions = new Array<TextureAtlasRegion>();\n\n constructor(atlasText?: string, textureLoader?: (path: string, loaderFunction: (tex: BaseTexture) => any) => any, callback?: (obj: TextureAtlas) => any) {\n if (atlasText) {\n this.addSpineAtlas(atlasText, textureLoader, callback);\n }\n }\n\n addTexture(name: string, texture: Texture) {\n const pages = this.pages;\n let page: TextureAtlasPage = null;\n\n for (let i = 0; i < pages.length; i++) {\n if (pages[i].baseTexture === texture.baseTexture) {\n page = pages[i];\n break;\n }\n }\n if (page === null) {\n page = new TextureAtlasPage();\n page.name = 'texturePage';\n const baseTexture = texture.baseTexture;\n\n page.width = baseTexture.realWidth;\n page.height = baseTexture.realHeight;\n page.baseTexture = baseTexture;\n // those fields are not relevant in Pixi\n page.minFilter = page.magFilter = TextureFilter.Nearest;\n page.uWrap = TextureWrap.ClampToEdge;\n page.vWrap = TextureWrap.ClampToEdge;\n pages.push(page);\n }\n const region = new TextureAtlasRegion();\n\n region.name = name;\n region.page = page;\n region.texture = texture;\n region.index = -1;\n this.regions.push(region);\n\n return region;\n }\n\n addTextureHash(textures: Map<Texture>, stripExtension: boolean) {\n for (const key in textures) {\n if (textures.hasOwnProperty(key)) {\n this.addTexture(stripExtension && key.indexOf('.') !== -1 ? key.substr(0, key.lastIndexOf('.')) : key, textures[key]);\n }\n }\n }\n\n public addSpineAtlas(atlasText: string, textureLoader: (path: string, loaderFunction: (tex: BaseTexture) => any) => any, callback: (obj: TextureAtlas) => any) {\n return this.load(atlasText, textureLoader, callback);\n }\n\n private load(atlasText: string, textureLoader: (path: string, loaderFunction: (tex: BaseTexture) => any) => any, callback: (obj: TextureAtlas) => any) {\n if (textureLoader == null) {\n throw new Error('textureLoader cannot be null.');\n }\n\n const reader = new TextureAtlasReader(atlasText);\n const entry = new Array<string>(4);\n let page: TextureAtlasPage = null;\n const pageFields: Map<Function> = {};\n let region: RegionFields = null;\n\n pageFields.size = () => {\n page.width = parseInt(entry[1]);\n page.height = parseInt(entry[2]);\n };\n pageFields.format = () => {\n // page.format = Format[tuple[0]]; we don't need format in WebGL\n };\n pageFields.filter = () => {\n page.minFilter = filterFromString(entry[1]);\n page.magFilter = filterFromString(entry[2]);\n };\n pageFields.repeat = () => {\n if (entry[1].indexOf('x') != -1) page.uWrap = TextureWrap.Repeat;\n if (entry[1].indexOf('y') != -1) page.vWrap = TextureWrap.Repeat;\n };\n pageFields.pma = () => {\n page.pma = entry[1] == 'true';\n };\n\n const regionFields: Map<Function> = {};\n\n regionFields.xy = () => {\n // Deprecated, use bounds.\n region.x = parseInt(entry[1]);\n region.y = parseInt(entry[2]);\n };\n regionFields.size = () => {\n // Deprecated, use bounds.\n region.width = parseInt(entry[1]);\n region.height = parseInt(entry[2]);\n };\n regionFields.bounds = () => {\n region.x = parseInt(entry[1]);\n region.y = parseInt(entry[2]);\n region.width = parseInt(entry[3]);\n region.height = parseInt(entry[4]);\n };\n regionFields.offset = () => {\n // Deprecated, use offsets.\n region.offsetX = parseInt(entry[1]);\n region.offsetY = parseInt(entry[2]);\n };\n regionFields.orig = () => {\n // Deprecated, use offsets.\n region.originalWidth = parseInt(entry[1]);\n region.originalHeight = parseInt(entry[2]);\n };\n regionFields.offsets = () => {\n region.offsetX = parseInt(entry[1]);\n region.offsetY = parseInt(entry[2]);\n region.originalWidth = parseInt(entry[3]);\n region.originalHeight = parseInt(entry[4]);\n };\n regionFields.rotate = () => {\n const rotateValue = entry[1];\n let rotate = 0;\n\n if (rotateValue.toLocaleLowerCase() == 'true') {\n rotate = 6;\n } else if (rotateValue.toLocaleLowerCase() == 'false') {\n rotate = 0;\n } else {\n rotate = ((720 - parseFloat(rotateValue)) % 360) / 45;\n }\n region.rotate = rotate;\n };\n regionFields.index = () => {\n region.index = parseInt(entry[1]);\n };\n\n let line = reader.readLine();\n // Ignore empty lines before first entry.\n\n while (line != null && line.trim().length == 0) {\n line = reader.readLine();\n }\n // Header entries.\n while (true) {\n if (line == null || line.trim().length == 0) break;\n if (reader.readEntry(entry, line) == 0) break; // Silently ignore all header fields.\n line = reader.readLine();\n }\n\n const iterateParser = () => {\n while (true) {\n if (line == null) {\n return callback && callback(this);\n }\n if (line.trim().length == 0) {\n page = null;\n line = reader.readLine();\n } else if (page === null) {\n page = new TextureAtlasPage();\n page.name = line.trim();\n\n while (true) {\n if (reader.readEntry(entry, (line = reader.readLine())) == 0) break;\n const field: Function = pageFields[entry[0]];\n\n if (field) field();\n }\n this.pages.push(page);\n\n textureLoader(page.name, (texture: BaseTexture) => {\n if (texture === null) {\n this.pages.splice(this.pages.indexOf(page), 1);\n\n return callback && callback(null);\n }\n page.baseTexture = texture;\n // TODO: set scaleMode and mipmapMode from spine\n if (page.pma) {\n texture.alphaMode = ALPHA_MODES.PMA;\n }\n if (!texture.valid) {\n texture.setSize(page.width, page.height);\n }\n page.setFilters();\n\n if (!page.width || !page.height) {\n page.width = texture.realWidth;\n page.height = texture.realHeight;\n if (!page.width || !page.height) {\n console.log(\n `ERROR spine atlas page ${page.name}: meshes wont work if you dont specify size in atlas (http://www.html5gamedevs.com/topic/18888-pixi-spines-and-meshes/?p=107121)`\n );\n }\n }\n iterateParser();\n });\n break;\n } else {\n region = new RegionFields();\n const atlasRegion = new TextureAtlasRegion();\n\n atlasRegion.name = line;\n atlasRegion.page = page;\n let names: string[] = null;\n let values: number[][] = null;\n\n while (true) {\n const count = reader.readEntry(entry, (line = reader.readLine()));\n\n if (count == 0) break;\n const field: Function = regionFields[entry[0]];\n\n if (field) {\n field();\n } else {\n if (names == null) {\n names = [];\n values = [];\n }\n names.push(entry[0]);\n const entryValues: number[] = [];\n\n for (let i = 0; i < count; i++) {\n entryValues.push(parseInt(entry[i + 1]));\n }\n values.push(entryValues);\n }\n }\n if (region.originalWidth == 0 && region.originalHeight == 0) {\n region.originalWidth = region.width;\n region.originalHeight = region.height;\n }\n\n const resolution = page.baseTexture.resolution;\n\n region.x /= resolution;\n region.y /= resolution;\n region.width /= resolution;\n region.height /= resolution;\n region.originalWidth /= resolution;\n region.originalHeight /= resolution;\n region.offsetX /= resolution;\n region.offsetY /= resolution;\n\n const swapWH = region.rotate % 4 !== 0;\n const frame = new Rectangle(region.x, region.y, swapWH ? region.height : region.width, swapWH ? region.width : region.height);\n\n const orig = new Rectangle(0, 0, region.originalWidth, region.originalHeight);\n const trim = new Rectangle(region.offsetX, region.originalHeight - region.height - region.offsetY, region.width, region.height);\n\n atlasRegion.texture = new Texture(atlasRegion.page.baseTexture, frame, orig, trim, region.rotate);\n atlasRegion.index = region.index;\n atlasRegion.texture.updateUvs();\n\n this.regions.push(atlasRegion);\n }\n }\n };\n\n iterateParser();\n }\n\n findRegion(name: string): TextureAtlasRegion {\n for (let i = 0; i < this.regions.length; i++) {\n if (this.regions[i].name == name) {\n return this.regions[i];\n }\n }\n\n return null;\n }\n\n dispose() {\n for (let i = 0; i < this.pages.length; i++) {\n this.pages[i].baseTexture.dispose();\n }\n }\n}\n\n/**\n * @public\n */\nclass TextureAtlasReader {\n lines: Array<string>;\n index = 0;\n\n constructor(text: string) {\n this.lines = text.split(/\\r\\n|\\r|\\n/);\n }\n\n readLine(): string {\n if (this.index >= this.lines.length) {\n return null;\n }\n\n return this.lines[this.index++];\n }\n\n readEntry(entry: string[], line: string): number {\n if (line == null) return 0;\n line = line.trim();\n if (line.length == 0) return 0;\n\n const colon = line.indexOf(':');\n\n if (colon == -1) return 0;\n entry[0] = line.substr(0, colon).trim();\n for (let i = 1, lastMatch = colon + 1; ; i++) {\n const comma = line.indexOf(',', lastMatch);\n\n if (comma == -1) {\n entry[i] = line.substr(lastMatch).trim();\n\n return i;\n }\n entry[i] = line.substr(lastMatch, comma - lastMatch).trim();\n lastMatch = comma + 1;\n if (i == 4) return 4;\n }\n }\n}\n\n/**\n * @public\n */\nexport class TextureAtlasPage {\n name: string;\n minFilter: TextureFilter = TextureFilter.Nearest;\n magFilter: TextureFilter = TextureFilter.Nearest;\n uWrap: TextureWrap = TextureWrap.ClampToEdge;\n vWrap: TextureWrap = TextureWrap.ClampToEdge;\n baseTexture: BaseTexture;\n width: number;\n height: number;\n pma: boolean;\n\n public setFilters() {\n const tex = this.baseTexture;\n const filter = this.minFilter;\n\n if (filter == TextureFilter.Linear) {\n tex.scaleMode = SCALE_MODES.LINEAR;\n } else if (this.minFilter == TextureFilter.Nearest) {\n tex.scaleMode = SCALE_MODES.NEAREST;\n } else {\n tex.mipmap = MIPMAP_MODES.POW2;\n if (filter == TextureFilter.MipMapNearestNearest) {\n tex.scaleMode = SCALE_MODES.NEAREST;\n } else {\n tex.scaleMode = SCALE_MODES.LINEAR;\n }\n }\n }\n}\n\n/**\n * @public\n */\nexport class TextureAtlasRegion extends TextureRegion {\n page: TextureAtlasPage;\n name: string;\n index: number;\n}\n"],"names":[],"mappings":"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"}