Example #1
0
RegionAttachment* RegionAttachment_create (const char* name, AtlasRegion* region) {
	ExampleRegionAttachment* self = CALLOC(ExampleRegionAttachment, 1)
	_RegionAttachment_init(&self->super, name);
	self->super.super._dispose = _ExampleRegionAttachment_dispose;
	self->super.super._draw = _ExampleRegionAttachment_draw;

	self->extraData = 456;

	return &self->super;
}
RegionAttachment* RegionAttachment_create (const char* name, AtlasRegion* region) {
	Cocos2dxRegionAttachment* self = NEW(Cocos2dxRegionAttachment);
	_RegionAttachment_init(SUPER(self), name);
	VTABLE(Attachment, self) ->dispose = _Cocos2dxRegionAttachment_dispose;
	VTABLE(Attachment, self) ->draw = _Cocos2dxRegionAttachment_draw;

	Cocos2dxAtlasPage* page = SUB_CAST(Cocos2dxAtlasPage, region->page);
	self->atlas = page->atlas;
	const CCSize& size = page->texture->getContentSizeInPixels();
	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);
}