[ts] Fixed atlas parsing.

This commit is contained in:
badlogic 2020-12-29 16:37:46 +01:00
parent 3943bdd9b0
commit 20bca55b93
20 changed files with 922 additions and 544 deletions

View File

@ -982,7 +982,7 @@ declare module spine {
v2: number; v2: number;
width: number; width: number;
height: number; height: number;
rotate: boolean; degrees: number;
offsetX: number; offsetX: number;
offsetY: number; offsetY: number;
originalWidth: number; originalWidth: number;
@ -1012,6 +1012,7 @@ declare module spine {
texture: Texture; texture: Texture;
width: number; width: number;
height: number; height: number;
pma: boolean;
} }
class TextureAtlasRegion extends TextureRegion { class TextureAtlasRegion extends TextureRegion {
page: TextureAtlasPage; page: TextureAtlasPage;
@ -1022,6 +1023,8 @@ declare module spine {
rotate: boolean; rotate: boolean;
degrees: number; degrees: number;
texture: Texture; texture: Texture;
names: string[];
values: number[][];
} }
} }
declare module spine { declare module spine {

View File

@ -7750,7 +7750,7 @@ var spine;
this.v2 = 0; this.v2 = 0;
this.width = 0; this.width = 0;
this.height = 0; this.height = 0;
this.rotate = false; this.degrees = 0;
this.offsetX = 0; this.offsetX = 0;
this.offsetY = 0; this.offsetY = 0;
this.originalWidth = 0; this.originalWidth = 0;
@ -7783,88 +7783,145 @@ var spine;
if (textureLoader == null) if (textureLoader == null)
throw new Error("textureLoader cannot be null."); throw new Error("textureLoader cannot be null.");
var reader = new TextureAtlasReader(atlasText); var reader = new TextureAtlasReader(atlasText);
var tuple = new Array(4); var entry = new Array(4);
var page = null; var page = null;
var region = null;
var pageFields = {};
pageFields["size"] = function () {
page.width = parseInt(entry[1]);
page.height = parseInt(entry[2]);
};
pageFields["format"] = function () {
};
pageFields["filter"] = function () {
page.minFilter = spine.Texture.filterFromString(entry[1]);
page.magFilter = spine.Texture.filterFromString(entry[2]);
};
pageFields["repeat"] = function () {
if (entry[1].indexOf('x') != -1)
page.uWrap = spine.TextureWrap.Repeat;
if (entry[1].indexOf('y') != -1)
page.vWrap = spine.TextureWrap.Repeat;
};
pageFields["pma"] = function () {
page.pma = entry[1] == "true";
};
var regionFields = {};
regionFields["xy"] = function () {
region.x = parseInt(entry[1]);
region.y = parseInt(entry[2]);
};
regionFields["size"] = function () {
region.width = parseInt(entry[1]);
region.height = parseInt(entry[2]);
};
regionFields["bounds"] = function () {
region.x = parseInt(entry[1]);
region.y = parseInt(entry[2]);
region.width = parseInt(entry[3]);
region.height = parseInt(entry[4]);
};
regionFields["offset"] = function () {
region.offsetX = parseInt(entry[1]);
region.offsetY = parseInt(entry[2]);
};
regionFields["orig"] = function () {
region.originalWidth = parseInt(entry[1]);
region.originalHeight = parseInt(entry[2]);
};
regionFields["offsets"] = function () {
region.offsetX = parseInt(entry[1]);
region.offsetY = parseInt(entry[2]);
region.originalWidth = parseInt(entry[3]);
region.originalHeight = parseInt(entry[4]);
};
regionFields["rotate"] = function () {
var value = entry[1];
if (value == "true")
region.degrees = 90;
else if (value != "false")
region.degrees = parseInt(value);
};
regionFields["index"] = function () {
region.index = parseInt(entry[1]);
};
var line = reader.readLine();
while (line != null && line.trim().length == 0)
line = reader.readLine();
while (true) {
if (line == null || line.trim().length == 0)
break;
if (reader.readEntry(entry, line) == 0)
break;
line = reader.readLine();
}
var names = null;
var values = null;
while (true) { while (true) {
var line = reader.readLine();
if (line == null) if (line == null)
break; break;
line = line.trim(); if (line.trim().length == 0) {
if (line.length == 0)
page = null; page = null;
else if (!page) { line = reader.readLine();
}
else if (page == null) {
page = new TextureAtlasPage(); page = new TextureAtlasPage();
page.name = line; page.name = line.trim();
if (reader.readTuple(tuple) == 2) { while (true) {
page.width = parseInt(tuple[0]); if (reader.readEntry(entry, line = reader.readLine()) == 0)
page.height = parseInt(tuple[1]); break;
reader.readTuple(tuple); var field = pageFields[entry[0]];
if (field)
field();
} }
reader.readTuple(tuple); page.texture = textureLoader(page.name);
page.minFilter = spine.Texture.filterFromString(tuple[0]);
page.magFilter = spine.Texture.filterFromString(tuple[1]);
var direction = reader.readValue();
page.uWrap = spine.TextureWrap.ClampToEdge;
page.vWrap = spine.TextureWrap.ClampToEdge;
if (direction == "x")
page.uWrap = spine.TextureWrap.Repeat;
else if (direction == "y")
page.vWrap = spine.TextureWrap.Repeat;
else if (direction == "xy")
page.uWrap = page.vWrap = spine.TextureWrap.Repeat;
page.texture = textureLoader(line);
page.texture.setFilters(page.minFilter, page.magFilter); page.texture.setFilters(page.minFilter, page.magFilter);
page.texture.setWraps(page.uWrap, page.vWrap); page.texture.setWraps(page.uWrap, page.vWrap);
page.width = page.texture.getImage().width;
page.height = page.texture.getImage().height;
this.pages.push(page); this.pages.push(page);
} }
else { else {
var region = new TextureAtlasRegion(); region = new TextureAtlasRegion();
region.name = line;
region.page = page; region.page = page;
var rotateValue = reader.readValue(); region.name = line;
if (rotateValue.toLocaleLowerCase() == "true") { while (true) {
region.degrees = 90; var count = reader.readEntry(entry, line = reader.readLine());
} if (count == 0)
else if (rotateValue.toLocaleLowerCase() == "false") { break;
region.degrees = 0; var field = regionFields[entry[0]];
} if (field)
else { field();
region.degrees = parseFloat(rotateValue); else {
} if (names == null) {
region.rotate = region.degrees == 90; names = [];
reader.readTuple(tuple); values = [];
var x = parseInt(tuple[0]); }
var y = parseInt(tuple[1]); names.push(entry[0]);
reader.readTuple(tuple); var entryValues = [];
var width = parseInt(tuple[0]); for (var i = 0; i < count; i++)
var height = parseInt(tuple[1]); entryValues.push(parseInt(entry[i + 1]));
region.u = x / page.width; values.push(entryValues);
region.v = y / page.height;
if (region.rotate) {
region.u2 = (x + height) / page.width;
region.v2 = (y + width) / page.height;
}
else {
region.u2 = (x + width) / page.width;
region.v2 = (y + height) / page.height;
}
region.x = x;
region.y = y;
region.width = Math.abs(width);
region.height = Math.abs(height);
if (reader.readTuple(tuple) == 4) {
if (reader.readTuple(tuple) == 4) {
reader.readTuple(tuple);
} }
} }
region.originalWidth = parseInt(tuple[0]); if (region.originalWidth == 0 && region.originalHeight == 0) {
region.originalHeight = parseInt(tuple[1]); region.originalWidth = region.width;
reader.readTuple(tuple); region.originalHeight = region.height;
region.offsetX = parseInt(tuple[0]); }
region.offsetY = parseInt(tuple[1]); if (names != null && names.length > 0) {
region.index = parseInt(reader.readValue()); region.names = names;
region.values = values;
names = null;
values = null;
}
region.u = region.x / page.width;
region.v = region.y / page.height;
if (region.degrees == 90) {
region.u2 = (region.x + region.height) / page.width;
region.v2 = (region.y + region.width) / page.height;
}
else {
region.u2 = (region.x + region.width) / page.width;
region.v2 = (region.y + region.height) / page.height;
}
region.texture = page.texture; region.texture = page.texture;
this.regions.push(region); this.regions.push(region);
} }
@ -7896,33 +7953,36 @@ var spine;
return null; return null;
return this.lines[this.index++]; return this.lines[this.index++];
}; };
TextureAtlasReader.prototype.readValue = function () { TextureAtlasReader.prototype.readEntry = function (entry, line) {
var line = this.readLine(); if (line == null)
var colon = line.indexOf(":"); return 0;
line = line.trim();
if (line.length == 0)
return 0;
var colon = line.indexOf(':');
if (colon == -1) if (colon == -1)
throw new Error("Invalid line: " + line); return 0;
return line.substring(colon + 1).trim(); entry[0] = line.substr(0, colon).trim();
}; for (var i = 1, lastMatch = colon + 1;; i++) {
TextureAtlasReader.prototype.readTuple = function (tuple) { var comma = line.indexOf(',', lastMatch);
var line = this.readLine(); if (comma == -1) {
var colon = line.indexOf(":"); entry[i] = line.substr(lastMatch).trim();
if (colon == -1) return i;
throw new Error("Invalid line: " + line); }
var i = 0, lastMatch = colon + 1; entry[i] = line.substr(lastMatch, comma - lastMatch).trim();
for (; i < 3; i++) {
var comma = line.indexOf(",", lastMatch);
if (comma == -1)
break;
tuple[i] = line.substr(lastMatch, comma - lastMatch).trim();
lastMatch = comma + 1; lastMatch = comma + 1;
if (i == 4)
return 4;
} }
tuple[i] = line.substring(lastMatch).trim();
return i + 1;
}; };
return TextureAtlasReader; return TextureAtlasReader;
}()); }());
var TextureAtlasPage = (function () { var TextureAtlasPage = (function () {
function TextureAtlasPage() { function TextureAtlasPage() {
this.minFilter = spine.TextureFilter.Nearest;
this.magFilter = spine.TextureFilter.Nearest;
this.uWrap = spine.TextureWrap.ClampToEdge;
this.vWrap = spine.TextureWrap.ClampToEdge;
} }
return TextureAtlasPage; return TextureAtlasPage;
}()); }());
@ -9208,7 +9268,7 @@ var spine;
RegionAttachment.prototype.setRegion = function (region) { RegionAttachment.prototype.setRegion = function (region) {
this.region = region; this.region = region;
var uvs = this.uvs; var uvs = this.uvs;
if (region.rotate) { if (region.degrees == 90) {
uvs[2] = region.u; uvs[2] = region.u;
uvs[3] = region.v2; uvs[3] = region.v2;
uvs[4] = region.u; uvs[4] = region.u;
@ -9461,7 +9521,7 @@ var spine;
var atlasScale = att.width / w; var atlasScale = att.width / w;
ctx.scale(atlasScale * attachment.scaleX, atlasScale * attachment.scaleY); ctx.scale(atlasScale * attachment.scaleX, atlasScale * attachment.scaleY);
ctx.translate(w / 2, h / 2); ctx.translate(w / 2, h / 2);
if (attachment.region.rotate) { if (attachment.region.degrees == 90) {
var t = w; var t = w;
w = h; w = h;
h = t; h = t;

File diff suppressed because one or more lines are too long

View File

@ -982,7 +982,7 @@ declare module spine {
v2: number; v2: number;
width: number; width: number;
height: number; height: number;
rotate: boolean; degrees: number;
offsetX: number; offsetX: number;
offsetY: number; offsetY: number;
originalWidth: number; originalWidth: number;
@ -1012,6 +1012,7 @@ declare module spine {
texture: Texture; texture: Texture;
width: number; width: number;
height: number; height: number;
pma: boolean;
} }
class TextureAtlasRegion extends TextureRegion { class TextureAtlasRegion extends TextureRegion {
page: TextureAtlasPage; page: TextureAtlasPage;
@ -1022,6 +1023,8 @@ declare module spine {
rotate: boolean; rotate: boolean;
degrees: number; degrees: number;
texture: Texture; texture: Texture;
names: string[];
values: number[][];
} }
} }
declare module spine { declare module spine {

View File

@ -7750,7 +7750,7 @@ var spine;
this.v2 = 0; this.v2 = 0;
this.width = 0; this.width = 0;
this.height = 0; this.height = 0;
this.rotate = false; this.degrees = 0;
this.offsetX = 0; this.offsetX = 0;
this.offsetY = 0; this.offsetY = 0;
this.originalWidth = 0; this.originalWidth = 0;
@ -7783,88 +7783,145 @@ var spine;
if (textureLoader == null) if (textureLoader == null)
throw new Error("textureLoader cannot be null."); throw new Error("textureLoader cannot be null.");
var reader = new TextureAtlasReader(atlasText); var reader = new TextureAtlasReader(atlasText);
var tuple = new Array(4); var entry = new Array(4);
var page = null; var page = null;
var region = null;
var pageFields = {};
pageFields["size"] = function () {
page.width = parseInt(entry[1]);
page.height = parseInt(entry[2]);
};
pageFields["format"] = function () {
};
pageFields["filter"] = function () {
page.minFilter = spine.Texture.filterFromString(entry[1]);
page.magFilter = spine.Texture.filterFromString(entry[2]);
};
pageFields["repeat"] = function () {
if (entry[1].indexOf('x') != -1)
page.uWrap = spine.TextureWrap.Repeat;
if (entry[1].indexOf('y') != -1)
page.vWrap = spine.TextureWrap.Repeat;
};
pageFields["pma"] = function () {
page.pma = entry[1] == "true";
};
var regionFields = {};
regionFields["xy"] = function () {
region.x = parseInt(entry[1]);
region.y = parseInt(entry[2]);
};
regionFields["size"] = function () {
region.width = parseInt(entry[1]);
region.height = parseInt(entry[2]);
};
regionFields["bounds"] = function () {
region.x = parseInt(entry[1]);
region.y = parseInt(entry[2]);
region.width = parseInt(entry[3]);
region.height = parseInt(entry[4]);
};
regionFields["offset"] = function () {
region.offsetX = parseInt(entry[1]);
region.offsetY = parseInt(entry[2]);
};
regionFields["orig"] = function () {
region.originalWidth = parseInt(entry[1]);
region.originalHeight = parseInt(entry[2]);
};
regionFields["offsets"] = function () {
region.offsetX = parseInt(entry[1]);
region.offsetY = parseInt(entry[2]);
region.originalWidth = parseInt(entry[3]);
region.originalHeight = parseInt(entry[4]);
};
regionFields["rotate"] = function () {
var value = entry[1];
if (value == "true")
region.degrees = 90;
else if (value != "false")
region.degrees = parseInt(value);
};
regionFields["index"] = function () {
region.index = parseInt(entry[1]);
};
var line = reader.readLine();
while (line != null && line.trim().length == 0)
line = reader.readLine();
while (true) {
if (line == null || line.trim().length == 0)
break;
if (reader.readEntry(entry, line) == 0)
break;
line = reader.readLine();
}
var names = null;
var values = null;
while (true) { while (true) {
var line = reader.readLine();
if (line == null) if (line == null)
break; break;
line = line.trim(); if (line.trim().length == 0) {
if (line.length == 0)
page = null; page = null;
else if (!page) { line = reader.readLine();
}
else if (page == null) {
page = new TextureAtlasPage(); page = new TextureAtlasPage();
page.name = line; page.name = line.trim();
if (reader.readTuple(tuple) == 2) { while (true) {
page.width = parseInt(tuple[0]); if (reader.readEntry(entry, line = reader.readLine()) == 0)
page.height = parseInt(tuple[1]); break;
reader.readTuple(tuple); var field = pageFields[entry[0]];
if (field)
field();
} }
reader.readTuple(tuple); page.texture = textureLoader(page.name);
page.minFilter = spine.Texture.filterFromString(tuple[0]);
page.magFilter = spine.Texture.filterFromString(tuple[1]);
var direction = reader.readValue();
page.uWrap = spine.TextureWrap.ClampToEdge;
page.vWrap = spine.TextureWrap.ClampToEdge;
if (direction == "x")
page.uWrap = spine.TextureWrap.Repeat;
else if (direction == "y")
page.vWrap = spine.TextureWrap.Repeat;
else if (direction == "xy")
page.uWrap = page.vWrap = spine.TextureWrap.Repeat;
page.texture = textureLoader(line);
page.texture.setFilters(page.minFilter, page.magFilter); page.texture.setFilters(page.minFilter, page.magFilter);
page.texture.setWraps(page.uWrap, page.vWrap); page.texture.setWraps(page.uWrap, page.vWrap);
page.width = page.texture.getImage().width;
page.height = page.texture.getImage().height;
this.pages.push(page); this.pages.push(page);
} }
else { else {
var region = new TextureAtlasRegion(); region = new TextureAtlasRegion();
region.name = line;
region.page = page; region.page = page;
var rotateValue = reader.readValue(); region.name = line;
if (rotateValue.toLocaleLowerCase() == "true") { while (true) {
region.degrees = 90; var count = reader.readEntry(entry, line = reader.readLine());
} if (count == 0)
else if (rotateValue.toLocaleLowerCase() == "false") { break;
region.degrees = 0; var field = regionFields[entry[0]];
} if (field)
else { field();
region.degrees = parseFloat(rotateValue); else {
} if (names == null) {
region.rotate = region.degrees == 90; names = [];
reader.readTuple(tuple); values = [];
var x = parseInt(tuple[0]); }
var y = parseInt(tuple[1]); names.push(entry[0]);
reader.readTuple(tuple); var entryValues = [];
var width = parseInt(tuple[0]); for (var i = 0; i < count; i++)
var height = parseInt(tuple[1]); entryValues.push(parseInt(entry[i + 1]));
region.u = x / page.width; values.push(entryValues);
region.v = y / page.height;
if (region.rotate) {
region.u2 = (x + height) / page.width;
region.v2 = (y + width) / page.height;
}
else {
region.u2 = (x + width) / page.width;
region.v2 = (y + height) / page.height;
}
region.x = x;
region.y = y;
region.width = Math.abs(width);
region.height = Math.abs(height);
if (reader.readTuple(tuple) == 4) {
if (reader.readTuple(tuple) == 4) {
reader.readTuple(tuple);
} }
} }
region.originalWidth = parseInt(tuple[0]); if (region.originalWidth == 0 && region.originalHeight == 0) {
region.originalHeight = parseInt(tuple[1]); region.originalWidth = region.width;
reader.readTuple(tuple); region.originalHeight = region.height;
region.offsetX = parseInt(tuple[0]); }
region.offsetY = parseInt(tuple[1]); if (names != null && names.length > 0) {
region.index = parseInt(reader.readValue()); region.names = names;
region.values = values;
names = null;
values = null;
}
region.u = region.x / page.width;
region.v = region.y / page.height;
if (region.degrees == 90) {
region.u2 = (region.x + region.height) / page.width;
region.v2 = (region.y + region.width) / page.height;
}
else {
region.u2 = (region.x + region.width) / page.width;
region.v2 = (region.y + region.height) / page.height;
}
region.texture = page.texture; region.texture = page.texture;
this.regions.push(region); this.regions.push(region);
} }
@ -7896,33 +7953,36 @@ var spine;
return null; return null;
return this.lines[this.index++]; return this.lines[this.index++];
}; };
TextureAtlasReader.prototype.readValue = function () { TextureAtlasReader.prototype.readEntry = function (entry, line) {
var line = this.readLine(); if (line == null)
var colon = line.indexOf(":"); return 0;
line = line.trim();
if (line.length == 0)
return 0;
var colon = line.indexOf(':');
if (colon == -1) if (colon == -1)
throw new Error("Invalid line: " + line); return 0;
return line.substring(colon + 1).trim(); entry[0] = line.substr(0, colon).trim();
}; for (var i = 1, lastMatch = colon + 1;; i++) {
TextureAtlasReader.prototype.readTuple = function (tuple) { var comma = line.indexOf(',', lastMatch);
var line = this.readLine(); if (comma == -1) {
var colon = line.indexOf(":"); entry[i] = line.substr(lastMatch).trim();
if (colon == -1) return i;
throw new Error("Invalid line: " + line); }
var i = 0, lastMatch = colon + 1; entry[i] = line.substr(lastMatch, comma - lastMatch).trim();
for (; i < 3; i++) {
var comma = line.indexOf(",", lastMatch);
if (comma == -1)
break;
tuple[i] = line.substr(lastMatch, comma - lastMatch).trim();
lastMatch = comma + 1; lastMatch = comma + 1;
if (i == 4)
return 4;
} }
tuple[i] = line.substring(lastMatch).trim();
return i + 1;
}; };
return TextureAtlasReader; return TextureAtlasReader;
}()); }());
var TextureAtlasPage = (function () { var TextureAtlasPage = (function () {
function TextureAtlasPage() { function TextureAtlasPage() {
this.minFilter = spine.TextureFilter.Nearest;
this.magFilter = spine.TextureFilter.Nearest;
this.uWrap = spine.TextureWrap.ClampToEdge;
this.vWrap = spine.TextureWrap.ClampToEdge;
} }
return TextureAtlasPage; return TextureAtlasPage;
}()); }());
@ -9208,7 +9268,7 @@ var spine;
RegionAttachment.prototype.setRegion = function (region) { RegionAttachment.prototype.setRegion = function (region) {
this.region = region; this.region = region;
var uvs = this.uvs; var uvs = this.uvs;
if (region.rotate) { if (region.degrees == 90) {
uvs[2] = region.u; uvs[2] = region.u;
uvs[3] = region.v2; uvs[3] = region.v2;
uvs[4] = region.u; uvs[4] = region.u;
@ -9461,7 +9521,7 @@ var spine;
var atlasScale = att.width / w; var atlasScale = att.width / w;
ctx.scale(atlasScale * attachment.scaleX, atlasScale * attachment.scaleY); ctx.scale(atlasScale * attachment.scaleX, atlasScale * attachment.scaleY);
ctx.translate(w / 2, h / 2); ctx.translate(w / 2, h / 2);
if (attachment.region.rotate) { if (attachment.region.degrees == 90) {
var t = w; var t = w;
w = h; w = h;
h = t; h = t;

File diff suppressed because one or more lines are too long

View File

@ -982,7 +982,7 @@ declare module spine {
v2: number; v2: number;
width: number; width: number;
height: number; height: number;
rotate: boolean; degrees: number;
offsetX: number; offsetX: number;
offsetY: number; offsetY: number;
originalWidth: number; originalWidth: number;
@ -1012,6 +1012,7 @@ declare module spine {
texture: Texture; texture: Texture;
width: number; width: number;
height: number; height: number;
pma: boolean;
} }
class TextureAtlasRegion extends TextureRegion { class TextureAtlasRegion extends TextureRegion {
page: TextureAtlasPage; page: TextureAtlasPage;
@ -1022,6 +1023,8 @@ declare module spine {
rotate: boolean; rotate: boolean;
degrees: number; degrees: number;
texture: Texture; texture: Texture;
names: string[];
values: number[][];
} }
} }
declare module spine { declare module spine {

View File

@ -7750,7 +7750,7 @@ var spine;
this.v2 = 0; this.v2 = 0;
this.width = 0; this.width = 0;
this.height = 0; this.height = 0;
this.rotate = false; this.degrees = 0;
this.offsetX = 0; this.offsetX = 0;
this.offsetY = 0; this.offsetY = 0;
this.originalWidth = 0; this.originalWidth = 0;
@ -7783,88 +7783,145 @@ var spine;
if (textureLoader == null) if (textureLoader == null)
throw new Error("textureLoader cannot be null."); throw new Error("textureLoader cannot be null.");
var reader = new TextureAtlasReader(atlasText); var reader = new TextureAtlasReader(atlasText);
var tuple = new Array(4); var entry = new Array(4);
var page = null; var page = null;
var region = null;
var pageFields = {};
pageFields["size"] = function () {
page.width = parseInt(entry[1]);
page.height = parseInt(entry[2]);
};
pageFields["format"] = function () {
};
pageFields["filter"] = function () {
page.minFilter = spine.Texture.filterFromString(entry[1]);
page.magFilter = spine.Texture.filterFromString(entry[2]);
};
pageFields["repeat"] = function () {
if (entry[1].indexOf('x') != -1)
page.uWrap = spine.TextureWrap.Repeat;
if (entry[1].indexOf('y') != -1)
page.vWrap = spine.TextureWrap.Repeat;
};
pageFields["pma"] = function () {
page.pma = entry[1] == "true";
};
var regionFields = {};
regionFields["xy"] = function () {
region.x = parseInt(entry[1]);
region.y = parseInt(entry[2]);
};
regionFields["size"] = function () {
region.width = parseInt(entry[1]);
region.height = parseInt(entry[2]);
};
regionFields["bounds"] = function () {
region.x = parseInt(entry[1]);
region.y = parseInt(entry[2]);
region.width = parseInt(entry[3]);
region.height = parseInt(entry[4]);
};
regionFields["offset"] = function () {
region.offsetX = parseInt(entry[1]);
region.offsetY = parseInt(entry[2]);
};
regionFields["orig"] = function () {
region.originalWidth = parseInt(entry[1]);
region.originalHeight = parseInt(entry[2]);
};
regionFields["offsets"] = function () {
region.offsetX = parseInt(entry[1]);
region.offsetY = parseInt(entry[2]);
region.originalWidth = parseInt(entry[3]);
region.originalHeight = parseInt(entry[4]);
};
regionFields["rotate"] = function () {
var value = entry[1];
if (value == "true")
region.degrees = 90;
else if (value != "false")
region.degrees = parseInt(value);
};
regionFields["index"] = function () {
region.index = parseInt(entry[1]);
};
var line = reader.readLine();
while (line != null && line.trim().length == 0)
line = reader.readLine();
while (true) {
if (line == null || line.trim().length == 0)
break;
if (reader.readEntry(entry, line) == 0)
break;
line = reader.readLine();
}
var names = null;
var values = null;
while (true) { while (true) {
var line = reader.readLine();
if (line == null) if (line == null)
break; break;
line = line.trim(); if (line.trim().length == 0) {
if (line.length == 0)
page = null; page = null;
else if (!page) { line = reader.readLine();
}
else if (page == null) {
page = new TextureAtlasPage(); page = new TextureAtlasPage();
page.name = line; page.name = line.trim();
if (reader.readTuple(tuple) == 2) { while (true) {
page.width = parseInt(tuple[0]); if (reader.readEntry(entry, line = reader.readLine()) == 0)
page.height = parseInt(tuple[1]); break;
reader.readTuple(tuple); var field = pageFields[entry[0]];
if (field)
field();
} }
reader.readTuple(tuple); page.texture = textureLoader(page.name);
page.minFilter = spine.Texture.filterFromString(tuple[0]);
page.magFilter = spine.Texture.filterFromString(tuple[1]);
var direction = reader.readValue();
page.uWrap = spine.TextureWrap.ClampToEdge;
page.vWrap = spine.TextureWrap.ClampToEdge;
if (direction == "x")
page.uWrap = spine.TextureWrap.Repeat;
else if (direction == "y")
page.vWrap = spine.TextureWrap.Repeat;
else if (direction == "xy")
page.uWrap = page.vWrap = spine.TextureWrap.Repeat;
page.texture = textureLoader(line);
page.texture.setFilters(page.minFilter, page.magFilter); page.texture.setFilters(page.minFilter, page.magFilter);
page.texture.setWraps(page.uWrap, page.vWrap); page.texture.setWraps(page.uWrap, page.vWrap);
page.width = page.texture.getImage().width;
page.height = page.texture.getImage().height;
this.pages.push(page); this.pages.push(page);
} }
else { else {
var region = new TextureAtlasRegion(); region = new TextureAtlasRegion();
region.name = line;
region.page = page; region.page = page;
var rotateValue = reader.readValue(); region.name = line;
if (rotateValue.toLocaleLowerCase() == "true") { while (true) {
region.degrees = 90; var count = reader.readEntry(entry, line = reader.readLine());
} if (count == 0)
else if (rotateValue.toLocaleLowerCase() == "false") { break;
region.degrees = 0; var field = regionFields[entry[0]];
} if (field)
else { field();
region.degrees = parseFloat(rotateValue); else {
} if (names == null) {
region.rotate = region.degrees == 90; names = [];
reader.readTuple(tuple); values = [];
var x = parseInt(tuple[0]); }
var y = parseInt(tuple[1]); names.push(entry[0]);
reader.readTuple(tuple); var entryValues = [];
var width = parseInt(tuple[0]); for (var i = 0; i < count; i++)
var height = parseInt(tuple[1]); entryValues.push(parseInt(entry[i + 1]));
region.u = x / page.width; values.push(entryValues);
region.v = y / page.height;
if (region.rotate) {
region.u2 = (x + height) / page.width;
region.v2 = (y + width) / page.height;
}
else {
region.u2 = (x + width) / page.width;
region.v2 = (y + height) / page.height;
}
region.x = x;
region.y = y;
region.width = Math.abs(width);
region.height = Math.abs(height);
if (reader.readTuple(tuple) == 4) {
if (reader.readTuple(tuple) == 4) {
reader.readTuple(tuple);
} }
} }
region.originalWidth = parseInt(tuple[0]); if (region.originalWidth == 0 && region.originalHeight == 0) {
region.originalHeight = parseInt(tuple[1]); region.originalWidth = region.width;
reader.readTuple(tuple); region.originalHeight = region.height;
region.offsetX = parseInt(tuple[0]); }
region.offsetY = parseInt(tuple[1]); if (names != null && names.length > 0) {
region.index = parseInt(reader.readValue()); region.names = names;
region.values = values;
names = null;
values = null;
}
region.u = region.x / page.width;
region.v = region.y / page.height;
if (region.degrees == 90) {
region.u2 = (region.x + region.height) / page.width;
region.v2 = (region.y + region.width) / page.height;
}
else {
region.u2 = (region.x + region.width) / page.width;
region.v2 = (region.y + region.height) / page.height;
}
region.texture = page.texture; region.texture = page.texture;
this.regions.push(region); this.regions.push(region);
} }
@ -7896,33 +7953,36 @@ var spine;
return null; return null;
return this.lines[this.index++]; return this.lines[this.index++];
}; };
TextureAtlasReader.prototype.readValue = function () { TextureAtlasReader.prototype.readEntry = function (entry, line) {
var line = this.readLine(); if (line == null)
var colon = line.indexOf(":"); return 0;
line = line.trim();
if (line.length == 0)
return 0;
var colon = line.indexOf(':');
if (colon == -1) if (colon == -1)
throw new Error("Invalid line: " + line); return 0;
return line.substring(colon + 1).trim(); entry[0] = line.substr(0, colon).trim();
}; for (var i = 1, lastMatch = colon + 1;; i++) {
TextureAtlasReader.prototype.readTuple = function (tuple) { var comma = line.indexOf(',', lastMatch);
var line = this.readLine(); if (comma == -1) {
var colon = line.indexOf(":"); entry[i] = line.substr(lastMatch).trim();
if (colon == -1) return i;
throw new Error("Invalid line: " + line); }
var i = 0, lastMatch = colon + 1; entry[i] = line.substr(lastMatch, comma - lastMatch).trim();
for (; i < 3; i++) {
var comma = line.indexOf(",", lastMatch);
if (comma == -1)
break;
tuple[i] = line.substr(lastMatch, comma - lastMatch).trim();
lastMatch = comma + 1; lastMatch = comma + 1;
if (i == 4)
return 4;
} }
tuple[i] = line.substring(lastMatch).trim();
return i + 1;
}; };
return TextureAtlasReader; return TextureAtlasReader;
}()); }());
var TextureAtlasPage = (function () { var TextureAtlasPage = (function () {
function TextureAtlasPage() { function TextureAtlasPage() {
this.minFilter = spine.TextureFilter.Nearest;
this.magFilter = spine.TextureFilter.Nearest;
this.uWrap = spine.TextureWrap.ClampToEdge;
this.vWrap = spine.TextureWrap.ClampToEdge;
} }
return TextureAtlasPage; return TextureAtlasPage;
}()); }());
@ -9208,7 +9268,7 @@ var spine;
RegionAttachment.prototype.setRegion = function (region) { RegionAttachment.prototype.setRegion = function (region) {
this.region = region; this.region = region;
var uvs = this.uvs; var uvs = this.uvs;
if (region.rotate) { if (region.degrees == 90) {
uvs[2] = region.u; uvs[2] = region.u;
uvs[3] = region.v2; uvs[3] = region.v2;
uvs[4] = region.u; uvs[4] = region.u;

File diff suppressed because one or more lines are too long

View File

@ -982,7 +982,7 @@ declare module spine {
v2: number; v2: number;
width: number; width: number;
height: number; height: number;
rotate: boolean; degrees: number;
offsetX: number; offsetX: number;
offsetY: number; offsetY: number;
originalWidth: number; originalWidth: number;
@ -1012,6 +1012,7 @@ declare module spine {
texture: Texture; texture: Texture;
width: number; width: number;
height: number; height: number;
pma: boolean;
} }
class TextureAtlasRegion extends TextureRegion { class TextureAtlasRegion extends TextureRegion {
page: TextureAtlasPage; page: TextureAtlasPage;
@ -1022,6 +1023,8 @@ declare module spine {
rotate: boolean; rotate: boolean;
degrees: number; degrees: number;
texture: Texture; texture: Texture;
names: string[];
values: number[][];
} }
} }
declare module spine { declare module spine {

View File

@ -7750,7 +7750,7 @@ var spine;
this.v2 = 0; this.v2 = 0;
this.width = 0; this.width = 0;
this.height = 0; this.height = 0;
this.rotate = false; this.degrees = 0;
this.offsetX = 0; this.offsetX = 0;
this.offsetY = 0; this.offsetY = 0;
this.originalWidth = 0; this.originalWidth = 0;
@ -7783,88 +7783,145 @@ var spine;
if (textureLoader == null) if (textureLoader == null)
throw new Error("textureLoader cannot be null."); throw new Error("textureLoader cannot be null.");
var reader = new TextureAtlasReader(atlasText); var reader = new TextureAtlasReader(atlasText);
var tuple = new Array(4); var entry = new Array(4);
var page = null; var page = null;
var region = null;
var pageFields = {};
pageFields["size"] = function () {
page.width = parseInt(entry[1]);
page.height = parseInt(entry[2]);
};
pageFields["format"] = function () {
};
pageFields["filter"] = function () {
page.minFilter = spine.Texture.filterFromString(entry[1]);
page.magFilter = spine.Texture.filterFromString(entry[2]);
};
pageFields["repeat"] = function () {
if (entry[1].indexOf('x') != -1)
page.uWrap = spine.TextureWrap.Repeat;
if (entry[1].indexOf('y') != -1)
page.vWrap = spine.TextureWrap.Repeat;
};
pageFields["pma"] = function () {
page.pma = entry[1] == "true";
};
var regionFields = {};
regionFields["xy"] = function () {
region.x = parseInt(entry[1]);
region.y = parseInt(entry[2]);
};
regionFields["size"] = function () {
region.width = parseInt(entry[1]);
region.height = parseInt(entry[2]);
};
regionFields["bounds"] = function () {
region.x = parseInt(entry[1]);
region.y = parseInt(entry[2]);
region.width = parseInt(entry[3]);
region.height = parseInt(entry[4]);
};
regionFields["offset"] = function () {
region.offsetX = parseInt(entry[1]);
region.offsetY = parseInt(entry[2]);
};
regionFields["orig"] = function () {
region.originalWidth = parseInt(entry[1]);
region.originalHeight = parseInt(entry[2]);
};
regionFields["offsets"] = function () {
region.offsetX = parseInt(entry[1]);
region.offsetY = parseInt(entry[2]);
region.originalWidth = parseInt(entry[3]);
region.originalHeight = parseInt(entry[4]);
};
regionFields["rotate"] = function () {
var value = entry[1];
if (value == "true")
region.degrees = 90;
else if (value != "false")
region.degrees = parseInt(value);
};
regionFields["index"] = function () {
region.index = parseInt(entry[1]);
};
var line = reader.readLine();
while (line != null && line.trim().length == 0)
line = reader.readLine();
while (true) {
if (line == null || line.trim().length == 0)
break;
if (reader.readEntry(entry, line) == 0)
break;
line = reader.readLine();
}
var names = null;
var values = null;
while (true) { while (true) {
var line = reader.readLine();
if (line == null) if (line == null)
break; break;
line = line.trim(); if (line.trim().length == 0) {
if (line.length == 0)
page = null; page = null;
else if (!page) { line = reader.readLine();
}
else if (page == null) {
page = new TextureAtlasPage(); page = new TextureAtlasPage();
page.name = line; page.name = line.trim();
if (reader.readTuple(tuple) == 2) { while (true) {
page.width = parseInt(tuple[0]); if (reader.readEntry(entry, line = reader.readLine()) == 0)
page.height = parseInt(tuple[1]); break;
reader.readTuple(tuple); var field = pageFields[entry[0]];
if (field)
field();
} }
reader.readTuple(tuple); page.texture = textureLoader(page.name);
page.minFilter = spine.Texture.filterFromString(tuple[0]);
page.magFilter = spine.Texture.filterFromString(tuple[1]);
var direction = reader.readValue();
page.uWrap = spine.TextureWrap.ClampToEdge;
page.vWrap = spine.TextureWrap.ClampToEdge;
if (direction == "x")
page.uWrap = spine.TextureWrap.Repeat;
else if (direction == "y")
page.vWrap = spine.TextureWrap.Repeat;
else if (direction == "xy")
page.uWrap = page.vWrap = spine.TextureWrap.Repeat;
page.texture = textureLoader(line);
page.texture.setFilters(page.minFilter, page.magFilter); page.texture.setFilters(page.minFilter, page.magFilter);
page.texture.setWraps(page.uWrap, page.vWrap); page.texture.setWraps(page.uWrap, page.vWrap);
page.width = page.texture.getImage().width;
page.height = page.texture.getImage().height;
this.pages.push(page); this.pages.push(page);
} }
else { else {
var region = new TextureAtlasRegion(); region = new TextureAtlasRegion();
region.name = line;
region.page = page; region.page = page;
var rotateValue = reader.readValue(); region.name = line;
if (rotateValue.toLocaleLowerCase() == "true") { while (true) {
region.degrees = 90; var count = reader.readEntry(entry, line = reader.readLine());
} if (count == 0)
else if (rotateValue.toLocaleLowerCase() == "false") { break;
region.degrees = 0; var field = regionFields[entry[0]];
} if (field)
else { field();
region.degrees = parseFloat(rotateValue); else {
} if (names == null) {
region.rotate = region.degrees == 90; names = [];
reader.readTuple(tuple); values = [];
var x = parseInt(tuple[0]); }
var y = parseInt(tuple[1]); names.push(entry[0]);
reader.readTuple(tuple); var entryValues = [];
var width = parseInt(tuple[0]); for (var i = 0; i < count; i++)
var height = parseInt(tuple[1]); entryValues.push(parseInt(entry[i + 1]));
region.u = x / page.width; values.push(entryValues);
region.v = y / page.height;
if (region.rotate) {
region.u2 = (x + height) / page.width;
region.v2 = (y + width) / page.height;
}
else {
region.u2 = (x + width) / page.width;
region.v2 = (y + height) / page.height;
}
region.x = x;
region.y = y;
region.width = Math.abs(width);
region.height = Math.abs(height);
if (reader.readTuple(tuple) == 4) {
if (reader.readTuple(tuple) == 4) {
reader.readTuple(tuple);
} }
} }
region.originalWidth = parseInt(tuple[0]); if (region.originalWidth == 0 && region.originalHeight == 0) {
region.originalHeight = parseInt(tuple[1]); region.originalWidth = region.width;
reader.readTuple(tuple); region.originalHeight = region.height;
region.offsetX = parseInt(tuple[0]); }
region.offsetY = parseInt(tuple[1]); if (names != null && names.length > 0) {
region.index = parseInt(reader.readValue()); region.names = names;
region.values = values;
names = null;
values = null;
}
region.u = region.x / page.width;
region.v = region.y / page.height;
if (region.degrees == 90) {
region.u2 = (region.x + region.height) / page.width;
region.v2 = (region.y + region.width) / page.height;
}
else {
region.u2 = (region.x + region.width) / page.width;
region.v2 = (region.y + region.height) / page.height;
}
region.texture = page.texture; region.texture = page.texture;
this.regions.push(region); this.regions.push(region);
} }
@ -7896,33 +7953,36 @@ var spine;
return null; return null;
return this.lines[this.index++]; return this.lines[this.index++];
}; };
TextureAtlasReader.prototype.readValue = function () { TextureAtlasReader.prototype.readEntry = function (entry, line) {
var line = this.readLine(); if (line == null)
var colon = line.indexOf(":"); return 0;
line = line.trim();
if (line.length == 0)
return 0;
var colon = line.indexOf(':');
if (colon == -1) if (colon == -1)
throw new Error("Invalid line: " + line); return 0;
return line.substring(colon + 1).trim(); entry[0] = line.substr(0, colon).trim();
}; for (var i = 1, lastMatch = colon + 1;; i++) {
TextureAtlasReader.prototype.readTuple = function (tuple) { var comma = line.indexOf(',', lastMatch);
var line = this.readLine(); if (comma == -1) {
var colon = line.indexOf(":"); entry[i] = line.substr(lastMatch).trim();
if (colon == -1) return i;
throw new Error("Invalid line: " + line); }
var i = 0, lastMatch = colon + 1; entry[i] = line.substr(lastMatch, comma - lastMatch).trim();
for (; i < 3; i++) {
var comma = line.indexOf(",", lastMatch);
if (comma == -1)
break;
tuple[i] = line.substr(lastMatch, comma - lastMatch).trim();
lastMatch = comma + 1; lastMatch = comma + 1;
if (i == 4)
return 4;
} }
tuple[i] = line.substring(lastMatch).trim();
return i + 1;
}; };
return TextureAtlasReader; return TextureAtlasReader;
}()); }());
var TextureAtlasPage = (function () { var TextureAtlasPage = (function () {
function TextureAtlasPage() { function TextureAtlasPage() {
this.minFilter = spine.TextureFilter.Nearest;
this.magFilter = spine.TextureFilter.Nearest;
this.uWrap = spine.TextureWrap.ClampToEdge;
this.vWrap = spine.TextureWrap.ClampToEdge;
} }
return TextureAtlasPage; return TextureAtlasPage;
}()); }());
@ -9208,7 +9268,7 @@ var spine;
RegionAttachment.prototype.setRegion = function (region) { RegionAttachment.prototype.setRegion = function (region) {
this.region = region; this.region = region;
var uvs = this.uvs; var uvs = this.uvs;
if (region.rotate) { if (region.degrees == 90) {
uvs[2] = region.u; uvs[2] = region.u;
uvs[3] = region.v2; uvs[3] = region.v2;
uvs[4] = region.u; uvs[4] = region.u;

File diff suppressed because one or more lines are too long

View File

@ -982,7 +982,7 @@ declare module spine {
v2: number; v2: number;
width: number; width: number;
height: number; height: number;
rotate: boolean; degrees: number;
offsetX: number; offsetX: number;
offsetY: number; offsetY: number;
originalWidth: number; originalWidth: number;
@ -1012,6 +1012,7 @@ declare module spine {
texture: Texture; texture: Texture;
width: number; width: number;
height: number; height: number;
pma: boolean;
} }
class TextureAtlasRegion extends TextureRegion { class TextureAtlasRegion extends TextureRegion {
page: TextureAtlasPage; page: TextureAtlasPage;
@ -1022,6 +1023,8 @@ declare module spine {
rotate: boolean; rotate: boolean;
degrees: number; degrees: number;
texture: Texture; texture: Texture;
names: string[];
values: number[][];
} }
} }
declare module spine { declare module spine {

View File

@ -7750,7 +7750,7 @@ var spine;
this.v2 = 0; this.v2 = 0;
this.width = 0; this.width = 0;
this.height = 0; this.height = 0;
this.rotate = false; this.degrees = 0;
this.offsetX = 0; this.offsetX = 0;
this.offsetY = 0; this.offsetY = 0;
this.originalWidth = 0; this.originalWidth = 0;
@ -7783,88 +7783,145 @@ var spine;
if (textureLoader == null) if (textureLoader == null)
throw new Error("textureLoader cannot be null."); throw new Error("textureLoader cannot be null.");
var reader = new TextureAtlasReader(atlasText); var reader = new TextureAtlasReader(atlasText);
var tuple = new Array(4); var entry = new Array(4);
var page = null; var page = null;
var region = null;
var pageFields = {};
pageFields["size"] = function () {
page.width = parseInt(entry[1]);
page.height = parseInt(entry[2]);
};
pageFields["format"] = function () {
};
pageFields["filter"] = function () {
page.minFilter = spine.Texture.filterFromString(entry[1]);
page.magFilter = spine.Texture.filterFromString(entry[2]);
};
pageFields["repeat"] = function () {
if (entry[1].indexOf('x') != -1)
page.uWrap = spine.TextureWrap.Repeat;
if (entry[1].indexOf('y') != -1)
page.vWrap = spine.TextureWrap.Repeat;
};
pageFields["pma"] = function () {
page.pma = entry[1] == "true";
};
var regionFields = {};
regionFields["xy"] = function () {
region.x = parseInt(entry[1]);
region.y = parseInt(entry[2]);
};
regionFields["size"] = function () {
region.width = parseInt(entry[1]);
region.height = parseInt(entry[2]);
};
regionFields["bounds"] = function () {
region.x = parseInt(entry[1]);
region.y = parseInt(entry[2]);
region.width = parseInt(entry[3]);
region.height = parseInt(entry[4]);
};
regionFields["offset"] = function () {
region.offsetX = parseInt(entry[1]);
region.offsetY = parseInt(entry[2]);
};
regionFields["orig"] = function () {
region.originalWidth = parseInt(entry[1]);
region.originalHeight = parseInt(entry[2]);
};
regionFields["offsets"] = function () {
region.offsetX = parseInt(entry[1]);
region.offsetY = parseInt(entry[2]);
region.originalWidth = parseInt(entry[3]);
region.originalHeight = parseInt(entry[4]);
};
regionFields["rotate"] = function () {
var value = entry[1];
if (value == "true")
region.degrees = 90;
else if (value != "false")
region.degrees = parseInt(value);
};
regionFields["index"] = function () {
region.index = parseInt(entry[1]);
};
var line = reader.readLine();
while (line != null && line.trim().length == 0)
line = reader.readLine();
while (true) {
if (line == null || line.trim().length == 0)
break;
if (reader.readEntry(entry, line) == 0)
break;
line = reader.readLine();
}
var names = null;
var values = null;
while (true) { while (true) {
var line = reader.readLine();
if (line == null) if (line == null)
break; break;
line = line.trim(); if (line.trim().length == 0) {
if (line.length == 0)
page = null; page = null;
else if (!page) { line = reader.readLine();
}
else if (page == null) {
page = new TextureAtlasPage(); page = new TextureAtlasPage();
page.name = line; page.name = line.trim();
if (reader.readTuple(tuple) == 2) { while (true) {
page.width = parseInt(tuple[0]); if (reader.readEntry(entry, line = reader.readLine()) == 0)
page.height = parseInt(tuple[1]); break;
reader.readTuple(tuple); var field = pageFields[entry[0]];
if (field)
field();
} }
reader.readTuple(tuple); page.texture = textureLoader(page.name);
page.minFilter = spine.Texture.filterFromString(tuple[0]);
page.magFilter = spine.Texture.filterFromString(tuple[1]);
var direction = reader.readValue();
page.uWrap = spine.TextureWrap.ClampToEdge;
page.vWrap = spine.TextureWrap.ClampToEdge;
if (direction == "x")
page.uWrap = spine.TextureWrap.Repeat;
else if (direction == "y")
page.vWrap = spine.TextureWrap.Repeat;
else if (direction == "xy")
page.uWrap = page.vWrap = spine.TextureWrap.Repeat;
page.texture = textureLoader(line);
page.texture.setFilters(page.minFilter, page.magFilter); page.texture.setFilters(page.minFilter, page.magFilter);
page.texture.setWraps(page.uWrap, page.vWrap); page.texture.setWraps(page.uWrap, page.vWrap);
page.width = page.texture.getImage().width;
page.height = page.texture.getImage().height;
this.pages.push(page); this.pages.push(page);
} }
else { else {
var region = new TextureAtlasRegion(); region = new TextureAtlasRegion();
region.name = line;
region.page = page; region.page = page;
var rotateValue = reader.readValue(); region.name = line;
if (rotateValue.toLocaleLowerCase() == "true") { while (true) {
region.degrees = 90; var count = reader.readEntry(entry, line = reader.readLine());
} if (count == 0)
else if (rotateValue.toLocaleLowerCase() == "false") { break;
region.degrees = 0; var field = regionFields[entry[0]];
} if (field)
else { field();
region.degrees = parseFloat(rotateValue); else {
} if (names == null) {
region.rotate = region.degrees == 90; names = [];
reader.readTuple(tuple); values = [];
var x = parseInt(tuple[0]); }
var y = parseInt(tuple[1]); names.push(entry[0]);
reader.readTuple(tuple); var entryValues = [];
var width = parseInt(tuple[0]); for (var i = 0; i < count; i++)
var height = parseInt(tuple[1]); entryValues.push(parseInt(entry[i + 1]));
region.u = x / page.width; values.push(entryValues);
region.v = y / page.height;
if (region.rotate) {
region.u2 = (x + height) / page.width;
region.v2 = (y + width) / page.height;
}
else {
region.u2 = (x + width) / page.width;
region.v2 = (y + height) / page.height;
}
region.x = x;
region.y = y;
region.width = Math.abs(width);
region.height = Math.abs(height);
if (reader.readTuple(tuple) == 4) {
if (reader.readTuple(tuple) == 4) {
reader.readTuple(tuple);
} }
} }
region.originalWidth = parseInt(tuple[0]); if (region.originalWidth == 0 && region.originalHeight == 0) {
region.originalHeight = parseInt(tuple[1]); region.originalWidth = region.width;
reader.readTuple(tuple); region.originalHeight = region.height;
region.offsetX = parseInt(tuple[0]); }
region.offsetY = parseInt(tuple[1]); if (names != null && names.length > 0) {
region.index = parseInt(reader.readValue()); region.names = names;
region.values = values;
names = null;
values = null;
}
region.u = region.x / page.width;
region.v = region.y / page.height;
if (region.degrees == 90) {
region.u2 = (region.x + region.height) / page.width;
region.v2 = (region.y + region.width) / page.height;
}
else {
region.u2 = (region.x + region.width) / page.width;
region.v2 = (region.y + region.height) / page.height;
}
region.texture = page.texture; region.texture = page.texture;
this.regions.push(region); this.regions.push(region);
} }
@ -7896,33 +7953,36 @@ var spine;
return null; return null;
return this.lines[this.index++]; return this.lines[this.index++];
}; };
TextureAtlasReader.prototype.readValue = function () { TextureAtlasReader.prototype.readEntry = function (entry, line) {
var line = this.readLine(); if (line == null)
var colon = line.indexOf(":"); return 0;
line = line.trim();
if (line.length == 0)
return 0;
var colon = line.indexOf(':');
if (colon == -1) if (colon == -1)
throw new Error("Invalid line: " + line); return 0;
return line.substring(colon + 1).trim(); entry[0] = line.substr(0, colon).trim();
}; for (var i = 1, lastMatch = colon + 1;; i++) {
TextureAtlasReader.prototype.readTuple = function (tuple) { var comma = line.indexOf(',', lastMatch);
var line = this.readLine(); if (comma == -1) {
var colon = line.indexOf(":"); entry[i] = line.substr(lastMatch).trim();
if (colon == -1) return i;
throw new Error("Invalid line: " + line); }
var i = 0, lastMatch = colon + 1; entry[i] = line.substr(lastMatch, comma - lastMatch).trim();
for (; i < 3; i++) {
var comma = line.indexOf(",", lastMatch);
if (comma == -1)
break;
tuple[i] = line.substr(lastMatch, comma - lastMatch).trim();
lastMatch = comma + 1; lastMatch = comma + 1;
if (i == 4)
return 4;
} }
tuple[i] = line.substring(lastMatch).trim();
return i + 1;
}; };
return TextureAtlasReader; return TextureAtlasReader;
}()); }());
var TextureAtlasPage = (function () { var TextureAtlasPage = (function () {
function TextureAtlasPage() { function TextureAtlasPage() {
this.minFilter = spine.TextureFilter.Nearest;
this.magFilter = spine.TextureFilter.Nearest;
this.uWrap = spine.TextureWrap.ClampToEdge;
this.vWrap = spine.TextureWrap.ClampToEdge;
} }
return TextureAtlasPage; return TextureAtlasPage;
}()); }());
@ -9208,7 +9268,7 @@ var spine;
RegionAttachment.prototype.setRegion = function (region) { RegionAttachment.prototype.setRegion = function (region) {
this.region = region; this.region = region;
var uvs = this.uvs; var uvs = this.uvs;
if (region.rotate) { if (region.degrees == 90) {
uvs[2] = region.u; uvs[2] = region.u;
uvs[3] = region.v2; uvs[3] = region.v2;
uvs[4] = region.u; uvs[4] = region.u;

File diff suppressed because one or more lines are too long

View File

@ -982,7 +982,7 @@ declare module spine {
v2: number; v2: number;
width: number; width: number;
height: number; height: number;
rotate: boolean; degrees: number;
offsetX: number; offsetX: number;
offsetY: number; offsetY: number;
originalWidth: number; originalWidth: number;
@ -1012,6 +1012,7 @@ declare module spine {
texture: Texture; texture: Texture;
width: number; width: number;
height: number; height: number;
pma: boolean;
} }
class TextureAtlasRegion extends TextureRegion { class TextureAtlasRegion extends TextureRegion {
page: TextureAtlasPage; page: TextureAtlasPage;
@ -1022,6 +1023,8 @@ declare module spine {
rotate: boolean; rotate: boolean;
degrees: number; degrees: number;
texture: Texture; texture: Texture;
names: string[];
values: number[][];
} }
} }
declare module spine { declare module spine {

View File

@ -7750,7 +7750,7 @@ var spine;
this.v2 = 0; this.v2 = 0;
this.width = 0; this.width = 0;
this.height = 0; this.height = 0;
this.rotate = false; this.degrees = 0;
this.offsetX = 0; this.offsetX = 0;
this.offsetY = 0; this.offsetY = 0;
this.originalWidth = 0; this.originalWidth = 0;
@ -7783,88 +7783,145 @@ var spine;
if (textureLoader == null) if (textureLoader == null)
throw new Error("textureLoader cannot be null."); throw new Error("textureLoader cannot be null.");
var reader = new TextureAtlasReader(atlasText); var reader = new TextureAtlasReader(atlasText);
var tuple = new Array(4); var entry = new Array(4);
var page = null; var page = null;
var region = null;
var pageFields = {};
pageFields["size"] = function () {
page.width = parseInt(entry[1]);
page.height = parseInt(entry[2]);
};
pageFields["format"] = function () {
};
pageFields["filter"] = function () {
page.minFilter = spine.Texture.filterFromString(entry[1]);
page.magFilter = spine.Texture.filterFromString(entry[2]);
};
pageFields["repeat"] = function () {
if (entry[1].indexOf('x') != -1)
page.uWrap = spine.TextureWrap.Repeat;
if (entry[1].indexOf('y') != -1)
page.vWrap = spine.TextureWrap.Repeat;
};
pageFields["pma"] = function () {
page.pma = entry[1] == "true";
};
var regionFields = {};
regionFields["xy"] = function () {
region.x = parseInt(entry[1]);
region.y = parseInt(entry[2]);
};
regionFields["size"] = function () {
region.width = parseInt(entry[1]);
region.height = parseInt(entry[2]);
};
regionFields["bounds"] = function () {
region.x = parseInt(entry[1]);
region.y = parseInt(entry[2]);
region.width = parseInt(entry[3]);
region.height = parseInt(entry[4]);
};
regionFields["offset"] = function () {
region.offsetX = parseInt(entry[1]);
region.offsetY = parseInt(entry[2]);
};
regionFields["orig"] = function () {
region.originalWidth = parseInt(entry[1]);
region.originalHeight = parseInt(entry[2]);
};
regionFields["offsets"] = function () {
region.offsetX = parseInt(entry[1]);
region.offsetY = parseInt(entry[2]);
region.originalWidth = parseInt(entry[3]);
region.originalHeight = parseInt(entry[4]);
};
regionFields["rotate"] = function () {
var value = entry[1];
if (value == "true")
region.degrees = 90;
else if (value != "false")
region.degrees = parseInt(value);
};
regionFields["index"] = function () {
region.index = parseInt(entry[1]);
};
var line = reader.readLine();
while (line != null && line.trim().length == 0)
line = reader.readLine();
while (true) {
if (line == null || line.trim().length == 0)
break;
if (reader.readEntry(entry, line) == 0)
break;
line = reader.readLine();
}
var names = null;
var values = null;
while (true) { while (true) {
var line = reader.readLine();
if (line == null) if (line == null)
break; break;
line = line.trim(); if (line.trim().length == 0) {
if (line.length == 0)
page = null; page = null;
else if (!page) { line = reader.readLine();
}
else if (page == null) {
page = new TextureAtlasPage(); page = new TextureAtlasPage();
page.name = line; page.name = line.trim();
if (reader.readTuple(tuple) == 2) { while (true) {
page.width = parseInt(tuple[0]); if (reader.readEntry(entry, line = reader.readLine()) == 0)
page.height = parseInt(tuple[1]); break;
reader.readTuple(tuple); var field = pageFields[entry[0]];
if (field)
field();
} }
reader.readTuple(tuple); page.texture = textureLoader(page.name);
page.minFilter = spine.Texture.filterFromString(tuple[0]);
page.magFilter = spine.Texture.filterFromString(tuple[1]);
var direction = reader.readValue();
page.uWrap = spine.TextureWrap.ClampToEdge;
page.vWrap = spine.TextureWrap.ClampToEdge;
if (direction == "x")
page.uWrap = spine.TextureWrap.Repeat;
else if (direction == "y")
page.vWrap = spine.TextureWrap.Repeat;
else if (direction == "xy")
page.uWrap = page.vWrap = spine.TextureWrap.Repeat;
page.texture = textureLoader(line);
page.texture.setFilters(page.minFilter, page.magFilter); page.texture.setFilters(page.minFilter, page.magFilter);
page.texture.setWraps(page.uWrap, page.vWrap); page.texture.setWraps(page.uWrap, page.vWrap);
page.width = page.texture.getImage().width;
page.height = page.texture.getImage().height;
this.pages.push(page); this.pages.push(page);
} }
else { else {
var region = new TextureAtlasRegion(); region = new TextureAtlasRegion();
region.name = line;
region.page = page; region.page = page;
var rotateValue = reader.readValue(); region.name = line;
if (rotateValue.toLocaleLowerCase() == "true") { while (true) {
region.degrees = 90; var count = reader.readEntry(entry, line = reader.readLine());
} if (count == 0)
else if (rotateValue.toLocaleLowerCase() == "false") { break;
region.degrees = 0; var field = regionFields[entry[0]];
} if (field)
else { field();
region.degrees = parseFloat(rotateValue); else {
} if (names == null) {
region.rotate = region.degrees == 90; names = [];
reader.readTuple(tuple); values = [];
var x = parseInt(tuple[0]); }
var y = parseInt(tuple[1]); names.push(entry[0]);
reader.readTuple(tuple); var entryValues = [];
var width = parseInt(tuple[0]); for (var i = 0; i < count; i++)
var height = parseInt(tuple[1]); entryValues.push(parseInt(entry[i + 1]));
region.u = x / page.width; values.push(entryValues);
region.v = y / page.height;
if (region.rotate) {
region.u2 = (x + height) / page.width;
region.v2 = (y + width) / page.height;
}
else {
region.u2 = (x + width) / page.width;
region.v2 = (y + height) / page.height;
}
region.x = x;
region.y = y;
region.width = Math.abs(width);
region.height = Math.abs(height);
if (reader.readTuple(tuple) == 4) {
if (reader.readTuple(tuple) == 4) {
reader.readTuple(tuple);
} }
} }
region.originalWidth = parseInt(tuple[0]); if (region.originalWidth == 0 && region.originalHeight == 0) {
region.originalHeight = parseInt(tuple[1]); region.originalWidth = region.width;
reader.readTuple(tuple); region.originalHeight = region.height;
region.offsetX = parseInt(tuple[0]); }
region.offsetY = parseInt(tuple[1]); if (names != null && names.length > 0) {
region.index = parseInt(reader.readValue()); region.names = names;
region.values = values;
names = null;
values = null;
}
region.u = region.x / page.width;
region.v = region.y / page.height;
if (region.degrees == 90) {
region.u2 = (region.x + region.height) / page.width;
region.v2 = (region.y + region.width) / page.height;
}
else {
region.u2 = (region.x + region.width) / page.width;
region.v2 = (region.y + region.height) / page.height;
}
region.texture = page.texture; region.texture = page.texture;
this.regions.push(region); this.regions.push(region);
} }
@ -7896,33 +7953,36 @@ var spine;
return null; return null;
return this.lines[this.index++]; return this.lines[this.index++];
}; };
TextureAtlasReader.prototype.readValue = function () { TextureAtlasReader.prototype.readEntry = function (entry, line) {
var line = this.readLine(); if (line == null)
var colon = line.indexOf(":"); return 0;
line = line.trim();
if (line.length == 0)
return 0;
var colon = line.indexOf(':');
if (colon == -1) if (colon == -1)
throw new Error("Invalid line: " + line); return 0;
return line.substring(colon + 1).trim(); entry[0] = line.substr(0, colon).trim();
}; for (var i = 1, lastMatch = colon + 1;; i++) {
TextureAtlasReader.prototype.readTuple = function (tuple) { var comma = line.indexOf(',', lastMatch);
var line = this.readLine(); if (comma == -1) {
var colon = line.indexOf(":"); entry[i] = line.substr(lastMatch).trim();
if (colon == -1) return i;
throw new Error("Invalid line: " + line); }
var i = 0, lastMatch = colon + 1; entry[i] = line.substr(lastMatch, comma - lastMatch).trim();
for (; i < 3; i++) {
var comma = line.indexOf(",", lastMatch);
if (comma == -1)
break;
tuple[i] = line.substr(lastMatch, comma - lastMatch).trim();
lastMatch = comma + 1; lastMatch = comma + 1;
if (i == 4)
return 4;
} }
tuple[i] = line.substring(lastMatch).trim();
return i + 1;
}; };
return TextureAtlasReader; return TextureAtlasReader;
}()); }());
var TextureAtlasPage = (function () { var TextureAtlasPage = (function () {
function TextureAtlasPage() { function TextureAtlasPage() {
this.minFilter = spine.TextureFilter.Nearest;
this.magFilter = spine.TextureFilter.Nearest;
this.uWrap = spine.TextureWrap.ClampToEdge;
this.vWrap = spine.TextureWrap.ClampToEdge;
} }
return TextureAtlasPage; return TextureAtlasPage;
}()); }());
@ -9208,7 +9268,7 @@ var spine;
RegionAttachment.prototype.setRegion = function (region) { RegionAttachment.prototype.setRegion = function (region) {
this.region = region; this.region = region;
var uvs = this.uvs; var uvs = this.uvs;
if (region.rotate) { if (region.degrees == 90) {
uvs[2] = region.u; uvs[2] = region.u;
uvs[3] = region.v2; uvs[3] = region.v2;
uvs[4] = region.u; uvs[4] = region.u;

File diff suppressed because one or more lines are too long

View File

@ -91,7 +91,7 @@ module spine.canvas {
let atlasScale = att.width / w; let atlasScale = att.width / w;
ctx.scale(atlasScale * attachment.scaleX, atlasScale * attachment.scaleY); ctx.scale(atlasScale * attachment.scaleX, atlasScale * attachment.scaleY);
ctx.translate(w / 2, h / 2); ctx.translate(w / 2, h / 2);
if (attachment.region.rotate) { if (attachment.region.degrees == 90) {
let t = w; let t = w;
w = h; w = h;
h = t; h = t;

View File

@ -87,7 +87,7 @@ module spine {
u = 0; v = 0; u = 0; v = 0;
u2 = 0; v2 = 0; u2 = 0; v2 = 0;
width = 0; height = 0; width = 0; height = 0;
degrees = 90; degrees = 0;
offsetX = 0; offsetY = 0; offsetX = 0; offsetY = 0;
originalWidth = 0; originalHeight = 0; originalWidth = 0; originalHeight = 0;
} }