Browse Source

Fixed for C++.

NathanSweet 12 years ago
parent
commit
fa53aad63f

+ 15 - 13
spine-cocos2d-iphone/src/spine/spine-cocos2d-iphone.h

@@ -49,6 +49,21 @@ typedef struct {
 	CCSkeleton* node;
 } Cocos2dSkeleton;
 
+/**/
+
+typedef struct {
+	RegionAttachment super;
+	ccV3F_C4B_T2F_Quad quad;
+	CCTextureAtlas* atlas;
+} Cocos2dRegionAttachment;
+
+#ifdef __cplusplus
+}
+}
+#endif
+
+/**/
+
 @interface CCSkeleton : CCNodeRGBA<CCBlendProtocol> {
 @private
 	bool ownsAtlas;
@@ -113,17 +128,4 @@ typedef struct {
 
 @end
 
-/**/
-
-typedef struct {
-	RegionAttachment super;
-	ccV3F_C4B_T2F_Quad quad;
-	CCTextureAtlas* atlas;
-} Cocos2dRegionAttachment;
-
-#ifdef __cplusplus
-}
-}
-#endif
-
 #endif /* SPINE_COCOS2D_H_ */

+ 105 - 103
spine-cocos2d-iphone/src/spine/spine-cocos2d-iphone.m

@@ -70,6 +70,111 @@ Skeleton* _Cocos2dSkeleton_create (SkeletonData* data, CCSkeleton* node) {
 	return SUPER(self);
 }
 
+/**/
+
+void _Cocos2dRegionAttachment_dispose (Attachment* self) {
+	_RegionAttachment_deinit(SUB_CAST(RegionAttachment, self) );
+	FREE(self);
+}
+
+void _Cocos2dRegionAttachment_draw (Attachment* attachment, Slot* slot) {
+	Cocos2dRegionAttachment* self = SUB_CAST(Cocos2dRegionAttachment, attachment);
+	Cocos2dSkeleton* skeleton = SUB_CAST(Cocos2dSkeleton, slot->skeleton);
+
+	GLubyte r = SUPER(skeleton)->r * slot->r * 255;
+	GLubyte g = SUPER(skeleton)->g * slot->g * 255;
+	GLubyte b = SUPER(skeleton)->b * slot->b * 255;
+	GLubyte a = SUPER(skeleton)->a * slot->a * 255;
+	ccV3F_C4B_T2F_Quad* quad = &self->quad;
+	quad->bl.colors.r = r;
+	quad->bl.colors.g = g;
+	quad->bl.colors.b = b;
+	quad->bl.colors.a = a;
+	quad->tl.colors.r = r;
+	quad->tl.colors.g = g;
+	quad->tl.colors.b = b;
+	quad->tl.colors.a = a;
+	quad->tr.colors.r = r;
+	quad->tr.colors.g = g;
+	quad->tr.colors.b = b;
+	quad->tr.colors.a = a;
+	quad->br.colors.r = r;
+	quad->br.colors.g = g;
+	quad->br.colors.b = b;
+	quad->br.colors.a = a;
+
+	float* offset = SUPER(self)->offset;
+	quad->bl.vertices.x = offset[0] * slot->bone->m00 + offset[1] * slot->bone->m01 + slot->bone->worldX;
+	quad->bl.vertices.y = offset[0] * slot->bone->m10 + offset[1] * slot->bone->m11 + slot->bone->worldY;
+	quad->tl.vertices.x = offset[2] * slot->bone->m00 + offset[3] * slot->bone->m01 + slot->bone->worldX;
+	quad->tl.vertices.y = offset[2] * slot->bone->m10 + offset[3] * slot->bone->m11 + slot->bone->worldY;
+	quad->tr.vertices.x = offset[4] * slot->bone->m00 + offset[5] * slot->bone->m01 + slot->bone->worldX;
+	quad->tr.vertices.y = offset[4] * slot->bone->m10 + offset[5] * slot->bone->m11 + slot->bone->worldY;
+	quad->br.vertices.x = offset[6] * slot->bone->m00 + offset[7] * slot->bone->m01 + slot->bone->worldX;
+	quad->br.vertices.y = offset[6] * slot->bone->m10 + offset[7] * slot->bone->m11 + slot->bone->worldY;
+
+	// Cocos2d doesn't handle batching for us, so we'll just force a single texture per skeleton.
+	skeleton->node->atlas = self->atlas;
+	if (self->atlas.capacity <= skeleton->node->quadCount) {
+		if (![self->atlas resizeCapacity:self->atlas.capacity * 2]) return;
+	}
+	[self->atlas updateQuad:quad atIndex:skeleton->node->quadCount++];
+}
+
+RegionAttachment* RegionAttachment_create (const char* name, AtlasRegion* region) {
+	Cocos2dRegionAttachment* self = NEW(Cocos2dRegionAttachment);
+	_RegionAttachment_init(SUPER(self), name);
+	VTABLE(Attachment, self) ->dispose = _Cocos2dRegionAttachment_dispose;
+	VTABLE(Attachment, self) ->draw = _Cocos2dRegionAttachment_draw;
+
+	Cocos2dAtlasPage* page = SUB_CAST(Cocos2dAtlasPage, region->page);
+	self->atlas = page->atlas;
+	CGSize size = page->texture.contentSizeInPixels;
+	float u = region->x / size.width;
+	float u2 = (region->x + region->width) / size.width;
+	float v = region->y / size.height;
+	float v2 = (region->y + region->height) / size.height;
+	ccV3F_C4B_T2F_Quad* quad = &self->quad;
+	if (region->rotate) {
+		quad->tl.texCoords.u = u;
+		quad->tl.texCoords.v = v2;
+		quad->tr.texCoords.u = u;
+		quad->tr.texCoords.v = v;
+		quad->br.texCoords.u = u2;
+		quad->br.texCoords.v = v;
+		quad->bl.texCoords.u = u2;
+		quad->bl.texCoords.v = v2;
+	} else {
+		quad->bl.texCoords.u = u;
+		quad->bl.texCoords.v = v2;
+		quad->tl.texCoords.u = u;
+		quad->tl.texCoords.v = v;
+		quad->tr.texCoords.u = u2;
+		quad->tr.texCoords.v = v;
+		quad->br.texCoords.u = u2;
+		quad->br.texCoords.v = v2;
+	}
+
+	quad->bl.vertices.z = 0;
+	quad->tl.vertices.z = 0;
+	quad->tr.vertices.z = 0;
+	quad->br.vertices.z = 0;
+
+	return SUPER(self);
+}
+
+/**/
+
+char* _Util_readFile (const char* path, int* length) {
+	return _readFile([[[CCFileUtils sharedFileUtils] fullPathForFilename:@(path)] UTF8String], length);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+/**/
+
 @implementation CCSkeleton
 
 + (CCSkeleton*) create:(NSString*)skeletonDataFile atlas:(Atlas*)atlas {
@@ -278,106 +383,3 @@ Skeleton* _Cocos2dSkeleton_create (SkeletonData* data, CCSkeleton* node) {
 }
 
 @end
-
-/**/
-
-void _Cocos2dRegionAttachment_dispose (Attachment* self) {
-	_RegionAttachment_deinit(SUB_CAST(RegionAttachment, self) );
-	FREE(self);
-}
-
-void _Cocos2dRegionAttachment_draw (Attachment* attachment, Slot* slot) {
-	Cocos2dRegionAttachment* self = SUB_CAST(Cocos2dRegionAttachment, attachment);
-	Cocos2dSkeleton* skeleton = SUB_CAST(Cocos2dSkeleton, slot->skeleton);
-
-	GLubyte r = SUPER(skeleton)->r * slot->r * 255;
-	GLubyte g = SUPER(skeleton)->g * slot->g * 255;
-	GLubyte b = SUPER(skeleton)->b * slot->b * 255;
-	GLubyte a = SUPER(skeleton)->a * slot->a * 255;
-	ccV3F_C4B_T2F_Quad* quad = &self->quad;
-	quad->bl.colors.r = r;
-	quad->bl.colors.g = g;
-	quad->bl.colors.b = b;
-	quad->bl.colors.a = a;
-	quad->tl.colors.r = r;
-	quad->tl.colors.g = g;
-	quad->tl.colors.b = b;
-	quad->tl.colors.a = a;
-	quad->tr.colors.r = r;
-	quad->tr.colors.g = g;
-	quad->tr.colors.b = b;
-	quad->tr.colors.a = a;
-	quad->br.colors.r = r;
-	quad->br.colors.g = g;
-	quad->br.colors.b = b;
-	quad->br.colors.a = a;
-
-	float* offset = SUPER(self)->offset;
-	quad->bl.vertices.x = offset[0] * slot->bone->m00 + offset[1] * slot->bone->m01 + slot->bone->worldX;
-	quad->bl.vertices.y = offset[0] * slot->bone->m10 + offset[1] * slot->bone->m11 + slot->bone->worldY;
-	quad->tl.vertices.x = offset[2] * slot->bone->m00 + offset[3] * slot->bone->m01 + slot->bone->worldX;
-	quad->tl.vertices.y = offset[2] * slot->bone->m10 + offset[3] * slot->bone->m11 + slot->bone->worldY;
-	quad->tr.vertices.x = offset[4] * slot->bone->m00 + offset[5] * slot->bone->m01 + slot->bone->worldX;
-	quad->tr.vertices.y = offset[4] * slot->bone->m10 + offset[5] * slot->bone->m11 + slot->bone->worldY;
-	quad->br.vertices.x = offset[6] * slot->bone->m00 + offset[7] * slot->bone->m01 + slot->bone->worldX;
-	quad->br.vertices.y = offset[6] * slot->bone->m10 + offset[7] * slot->bone->m11 + slot->bone->worldY;
-
-	// Cocos2d doesn't handle batching for us, so we'll just force a single texture per skeleton.
-	skeleton->node->atlas = self->atlas;
-	if (self->atlas.capacity <= skeleton->node->quadCount) {
-		if (![self->atlas resizeCapacity:self->atlas.capacity * 2]) return;
-	}
-	[self->atlas updateQuad:quad atIndex:skeleton->node->quadCount++];
-}
-
-RegionAttachment* RegionAttachment_create (const char* name, AtlasRegion* region) {
-	Cocos2dRegionAttachment* self = NEW(Cocos2dRegionAttachment);
-	_RegionAttachment_init(SUPER(self), name);
-	VTABLE(Attachment, self) ->dispose = _Cocos2dRegionAttachment_dispose;
-	VTABLE(Attachment, self) ->draw = _Cocos2dRegionAttachment_draw;
-
-	Cocos2dAtlasPage* page = SUB_CAST(Cocos2dAtlasPage, region->page);
-	self->atlas = page->atlas;
-	CGSize size = page->texture.contentSizeInPixels;
-	float u = region->x / size.width;
-	float u2 = (region->x + region->width) / size.width;
-	float v = region->y / size.height;
-	float v2 = (region->y + region->height) / size.height;
-	ccV3F_C4B_T2F_Quad* quad = &self->quad;
-	if (region->rotate) {
-		quad->tl.texCoords.u = u;
-		quad->tl.texCoords.v = v2;
-		quad->tr.texCoords.u = u;
-		quad->tr.texCoords.v = v;
-		quad->br.texCoords.u = u2;
-		quad->br.texCoords.v = v;
-		quad->bl.texCoords.u = u2;
-		quad->bl.texCoords.v = v2;
-	} else {
-		quad->bl.texCoords.u = u;
-		quad->bl.texCoords.v = v2;
-		quad->tl.texCoords.u = u;
-		quad->tl.texCoords.v = v;
-		quad->tr.texCoords.u = u2;
-		quad->tr.texCoords.v = v;
-		quad->br.texCoords.u = u2;
-		quad->br.texCoords.v = v2;
-	}
-
-	quad->bl.vertices.z = 0;
-	quad->tl.vertices.z = 0;
-	quad->tr.vertices.z = 0;
-	quad->br.vertices.z = 0;
-
-	return SUPER(self);
-}
-
-/**/
-
-char* _Util_readFile (const char* path, int* length) {
-	return _readFile([[[CCFileUtils sharedFileUtils] fullPathForFilename:@(path)] UTF8String], length);
-}
-
-#ifdef __cplusplus
-}
-#endif