Slightly better boundingBox.

This commit is contained in:
NathanSweet 2013-05-10 13:55:01 +02:00
parent 567c7110b1
commit bcc0b60050
2 changed files with 36 additions and 36 deletions

View File

@ -208,28 +208,28 @@
float minX = FLT_MAX, minY = FLT_MAX, maxX = FLT_MIN, maxY = FLT_MIN;
float scaleX = self.scaleX;
float scaleY = self.scaleY;
ccV3F_C4B_T2F_Quad quad;
float vertices[8];
for (int i = 0; i < _skeleton->slotCount; ++i) {
Slot* slot = _skeleton->slots[i];
if (!slot->attachment || slot->attachment->type != ATTACHMENT_REGION) continue;
RegionAttachment* attachment = (RegionAttachment*)slot->attachment;
RegionAttachment_updateQuad(attachment, slot, &quad);
minX = fmin(minX, quad.bl.vertices.x * scaleX);
minY = fmin(minY, quad.bl.vertices.y * scaleY);
maxX = fmax(maxX, quad.bl.vertices.x * scaleX);
maxY = fmax(maxY, quad.bl.vertices.y * scaleY);
minX = fmin(minX, quad.br.vertices.x * scaleX);
minY = fmin(minY, quad.br.vertices.y * scaleY);
maxX = fmax(maxX, quad.br.vertices.x * scaleX);
maxY = fmax(maxY, quad.br.vertices.y * scaleY);
minX = fmin(minX, quad.tl.vertices.x * scaleX);
minY = fmin(minY, quad.tl.vertices.y * scaleY);
maxX = fmax(maxX, quad.tl.vertices.x * scaleX);
maxY = fmax(maxY, quad.tl.vertices.y * scaleY);
minX = fmin(minX, quad.tr.vertices.x * scaleX);
minY = fmin(minY, quad.tr.vertices.y * scaleY);
maxX = fmax(maxX, quad.tr.vertices.x * scaleX);
maxY = fmax(maxY, quad.tr.vertices.y * scaleY);
RegionAttachment_computeVertices(attachment, slot, vertices);
minX = fmin(minX, vertices[VERTEX_X1] * scaleX);
minY = fmin(minY, vertices[VERTEX_Y1] * scaleY);
maxX = fmax(maxX, vertices[VERTEX_X1] * scaleX);
maxY = fmax(maxY, vertices[VERTEX_Y1] * scaleY);
minX = fmin(minX, vertices[VERTEX_X4] * scaleX);
minY = fmin(minY, vertices[VERTEX_Y4] * scaleY);
maxX = fmax(maxX, vertices[VERTEX_X4] * scaleX);
maxY = fmax(maxY, vertices[VERTEX_Y4] * scaleY);
minX = fmin(minX, vertices[VERTEX_X2] * scaleX);
minY = fmin(minY, vertices[VERTEX_Y2] * scaleY);
maxX = fmax(maxX, vertices[VERTEX_X2] * scaleX);
maxY = fmax(maxY, vertices[VERTEX_Y2] * scaleY);
minX = fmin(minX, vertices[VERTEX_X3] * scaleX);
minY = fmin(minY, vertices[VERTEX_Y3] * scaleY);
maxX = fmax(maxX, vertices[VERTEX_X3] * scaleX);
maxY = fmax(maxY, vertices[VERTEX_Y3] * scaleY);
}
minX = self.position.x + minX;
minY = self.position.y + minY;

View File

@ -200,28 +200,28 @@ CCRect CCSkeleton::boundingBox () {
float minX = FLT_MAX, minY = FLT_MAX, maxX = FLT_MIN, maxY = FLT_MIN;
float scaleX = getScaleX();
float scaleY = getScaleY();
ccV3F_C4B_T2F_Quad quad;
float vertices[8];
for (int i = 0; i < skeleton->slotCount; ++i) {
Slot* slot = skeleton->slots[i];
if (!slot->attachment || slot->attachment->type != ATTACHMENT_REGION) continue;
RegionAttachment* attachment = (RegionAttachment*)slot->attachment;
RegionAttachment_updateQuad(attachment, slot, &quad);
minX = min(minX, quad.bl.vertices.x * scaleX);
minY = min(minY, quad.bl.vertices.y * scaleY);
maxX = max(maxX, quad.bl.vertices.x * scaleX);
maxY = max(maxY, quad.bl.vertices.y * scaleY);
minX = min(minX, quad.br.vertices.x * scaleX);
minY = min(minY, quad.br.vertices.y * scaleY);
maxX = max(maxX, quad.br.vertices.x * scaleX);
maxY = max(maxY, quad.br.vertices.y * scaleY);
minX = min(minX, quad.tl.vertices.x * scaleX);
minY = min(minY, quad.tl.vertices.y * scaleY);
maxX = max(maxX, quad.tl.vertices.x * scaleX);
maxY = max(maxY, quad.tl.vertices.y * scaleY);
minX = min(minX, quad.tr.vertices.x * scaleX);
minY = min(minY, quad.tr.vertices.y * scaleY);
maxX = max(maxX, quad.tr.vertices.x * scaleX);
maxY = max(maxY, quad.tr.vertices.y * scaleY);
RegionAttachment_computeVertices(attachment, slot, vertices);
minX = min(minX, vertices[VERTEX_X1] * scaleX);
minY = min(minY, vertices[VERTEX_Y1] * scaleY);
maxX = max(maxX, vertices[VERTEX_X1] * scaleX);
maxY = max(maxY, vertices[VERTEX_Y1] * scaleY);
minX = min(minX, vertices[VERTEX_X4] * scaleX);
minY = min(minY, vertices[VERTEX_Y4] * scaleY);
maxX = max(maxX, vertices[VERTEX_X4] * scaleX);
maxY = max(maxY, vertices[VERTEX_Y4] * scaleY);
minX = min(minX, vertices[VERTEX_X2] * scaleX);
minY = min(minY, vertices[VERTEX_Y2] * scaleY);
maxX = max(maxX, vertices[VERTEX_X2] * scaleX);
maxY = max(maxY, vertices[VERTEX_Y2] * scaleY);
minX = min(minX, vertices[VERTEX_X3] * scaleX);
minY = min(minY, vertices[VERTEX_Y3] * scaleY);
maxX = max(maxX, vertices[VERTEX_X3] * scaleX);
maxY = max(maxY, vertices[VERTEX_Y3] * scaleY);
}
CCPoint position = getPosition();
return CCRectMake(position.x + minX, position.y + minY, maxX - minX, maxY - minY);