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); }