#include <spine/PointAttachment.h>
#include <spine/extension.h>
void _spPointAttachment_dispose (spAttachment* attachment) {
spPointAttachment* self = SUB_CAST(spPointAttachment, attachment);
_spAttachment_deinit(attachment);
FREE(self);
}
spAttachment* _spPointAttachment_copy (spAttachment* attachment) {
spPointAttachment* self = SUB_CAST(spPointAttachment, attachment);
spPointAttachment* copy = spPointAttachment_create(attachment->name);
copy->x = self->x;
copy->y = self->y;
copy->rotation = self->rotation;
spColor_setFromColor(©->color, &self->color);
return SUPER(copy);
}
spPointAttachment* spPointAttachment_create (const char* name) {
spPointAttachment* self = NEW(spPointAttachment);
_spAttachment_init(SUPER(self), name, SP_ATTACHMENT_POINT, _spPointAttachment_dispose, _spPointAttachment_copy);
return self;
}
void spPointAttachment_computeWorldPosition (spPointAttachment* self, spBone* bone, float* x, float* y) {
*x = self->x * bone->a + self->y * bone->b + bone->worldX;
*y = self->x * bone->c + self->y * bone->d + bone->worldY;
}
float spPointAttachment_computeWorldRotation (spPointAttachment* self, spBone* bone) {
float cosine, sine, x, y;
cosine = COS_DEG(self->rotation);
sine = SIN_DEG(self->rotation);
x = cosine * bone->a + sine * bone->b;
y = cosine * bone->c + sine * bone->d;
return ATAN2(y, x) * RAD_DEG;
}