diff --git a/spine-c/Spine-C.sln b/spine-c/Spine-C.sln new file mode 100644 index 000000000..e57cd6a2a --- /dev/null +++ b/spine-c/Spine-C.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C++ Express 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spine-C", "Spine-C.vcxproj", "{5D74934A-7512-45EE-8402-7B95D3642E85}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5D74934A-7512-45EE-8402-7B95D3642E85}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D74934A-7512-45EE-8402-7B95D3642E85}.Debug|Win32.Build.0 = Debug|Win32 + {5D74934A-7512-45EE-8402-7B95D3642E85}.Release|Win32.ActiveCfg = Release|Win32 + {5D74934A-7512-45EE-8402-7B95D3642E85}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/spine-c/Spine-C.vcxproj b/spine-c/Spine-C.vcxproj new file mode 100644 index 000000000..2aff7615f --- /dev/null +++ b/spine-c/Spine-C.vcxproj @@ -0,0 +1,120 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {5D74934A-7512-45EE-8402-7B95D3642E85} + Win32Proj + SpineC + + + + StaticLibrary + true + Unicode + + + StaticLibrary + false + true + Unicode + + + + + + + + + + + + + + + + + Level3 + Disabled + _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + .\include;%(AdditionalIncludeDirectories) + + + Windows + true + + + + + Level3 + + + MaxSpeed + true + true + _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + .\include + + + Windows + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spine-c/Spine-C.vcxproj.filters b/spine-c/Spine-C.vcxproj.filters new file mode 100644 index 000000000..f8edaeae9 --- /dev/null +++ b/spine-c/Spine-C.vcxproj.filters @@ -0,0 +1,135 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/spine-c/src/spine/Animation.c b/spine-c/src/spine/Animation.c index b7cfe48ae..98d352897 100644 --- a/spine-c/src/spine/Animation.c +++ b/spine-c/src/spine/Animation.c @@ -49,17 +49,19 @@ void Animation_dispose (Animation* self) { } void Animation_apply (const Animation* self, Skeleton* skeleton, float time, int/*bool*/loop) { + int i, n = self->timelineCount; + if (loop && self->duration) time = fmodf(time, self->duration); - int i, n = self->timelineCount; for (i = 0; i < n; ++i) Timeline_apply(self->timelines[i], skeleton, time, 1); } void Animation_mix (const Animation* self, Skeleton* skeleton, float time, int/*bool*/loop, float alpha) { + int i, n = self->timelineCount; + if (loop && self->duration) time = fmodf(time, self->duration); - int i, n = self->timelineCount; for (i = 0; i < n; ++i) Timeline_apply(self->timelines[i], skeleton, time, alpha); } @@ -139,17 +141,24 @@ void CurveTimeline_setCurve (CurveTimeline* self, int frameIndex, float cx1, flo } float CurveTimeline_getCurvePercent (const CurveTimeline* self, int frameIndex, float percent) { + float dfy; + float ddfx; + float ddfy; + float dddfx; + float dddfy; + float x, y; + int i; int curveIndex = frameIndex * 6; float dfx = self->curves[curveIndex]; if (dfx == CURVE_LINEAR) return percent; if (dfx == CURVE_STEPPED) return 0; - float dfy = self->curves[curveIndex + 1]; - float ddfx = self->curves[curveIndex + 2]; - float ddfy = self->curves[curveIndex + 3]; - float dddfx = self->curves[curveIndex + 4]; - float dddfy = self->curves[curveIndex + 5]; - float x = dfx, y = dfy; - int i = CURVE_SEGMENTS - 2; + dfy = self->curves[curveIndex + 1]; + ddfx = self->curves[curveIndex + 2]; + ddfy = self->curves[curveIndex + 3]; + dddfx = self->curves[curveIndex + 4]; + dddfy = self->curves[curveIndex + 5]; + x = dfx, y = dfy; + i = CURVE_SEGMENTS - 2; while (1) { if (x >= percent) { float lastX = x - dfx; @@ -170,10 +179,10 @@ float CurveTimeline_getCurvePercent (const CurveTimeline* self, int frameIndex, /* @param target After the first and before the last entry. */ static int binarySearch (float *values, int valuesLength, float target, int step) { - int low = 0; + int low = 0, current; int high = valuesLength / step - 2; if (high == 0) return step; - int current = high >> 1; + current = high >> 1; while (1) { if (values[(current + 1) * step] <= target) low = current + 1; @@ -222,11 +231,15 @@ static const int ROTATE_LAST_FRAME_TIME = -2; static const int ROTATE_FRAME_VALUE = 1; void _RotateTimeline_apply (const Timeline* timeline, Skeleton* skeleton, float time, float alpha) { + Bone *bone; + int frameIndex; + float lastFrameValue, frameTime, percent, amount; + RotateTimeline* self = SUB_CAST(RotateTimeline, timeline); if (time < self->frames[0]) return; /* Time is before first frame. */ - Bone *bone = skeleton->bones[self->boneIndex]; + bone = skeleton->bones[self->boneIndex]; if (time >= self->frames[self->framesLength - 2]) { /* Time is after last frame. */ float amount = bone->data->rotation + self->frames[self->framesLength - 1] - bone->rotation; @@ -239,13 +252,13 @@ void _RotateTimeline_apply (const Timeline* timeline, Skeleton* skeleton, float } /* Interpolate between the last frame and the current frame. */ - int frameIndex = binarySearch(self->frames, self->framesLength, time, 2); - float lastFrameValue = self->frames[frameIndex - 1]; - float frameTime = self->frames[frameIndex]; - float percent = 1 - (time - frameTime) / (self->frames[frameIndex + ROTATE_LAST_FRAME_TIME] - frameTime); + frameIndex = binarySearch(self->frames, self->framesLength, time, 2); + lastFrameValue = self->frames[frameIndex - 1]; + frameTime = self->frames[frameIndex]; + percent = 1 - (time - frameTime) / (self->frames[frameIndex + ROTATE_LAST_FRAME_TIME] - frameTime); percent = CurveTimeline_getCurvePercent(SUPER(self), frameIndex / 2 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - float amount = self->frames[frameIndex + ROTATE_FRAME_VALUE] - lastFrameValue; + amount = self->frames[frameIndex + ROTATE_FRAME_VALUE] - lastFrameValue; while (amount > 180) amount -= 360; while (amount < -180) @@ -275,11 +288,15 @@ static const int TRANSLATE_FRAME_X = 1; static const int TRANSLATE_FRAME_Y = 2; void _TranslateTimeline_apply (const Timeline* timeline, Skeleton* skeleton, float time, float alpha) { + Bone *bone; + int frameIndex; + float lastFrameX, lastFrameY, frameTime, percent; + TranslateTimeline* self = SUB_CAST(TranslateTimeline, timeline); if (time < self->frames[0]) return; /* Time is before first frame. */ - Bone *bone = skeleton->bones[self->boneIndex]; + bone = skeleton->bones[self->boneIndex]; if (time >= self->frames[self->framesLength - 3]) { /* Time is after last frame. */ bone->x += (bone->data->x + self->frames[self->framesLength - 2] - bone->x) * alpha; @@ -288,11 +305,11 @@ void _TranslateTimeline_apply (const Timeline* timeline, Skeleton* skeleton, flo } /* Interpolate between the last frame and the current frame. */ - int frameIndex = binarySearch(self->frames, self->framesLength, time, 3); - float lastFrameX = self->frames[frameIndex - 2]; - float lastFrameY = self->frames[frameIndex - 1]; - float frameTime = self->frames[frameIndex]; - float percent = 1 - (time - frameTime) / (self->frames[frameIndex + TRANSLATE_LAST_FRAME_TIME] - frameTime); + frameIndex = binarySearch(self->frames, self->framesLength, time, 3); + lastFrameX = self->frames[frameIndex - 2]; + lastFrameY = self->frames[frameIndex - 1]; + frameTime = self->frames[frameIndex]; + percent = 1 - (time - frameTime) / (self->frames[frameIndex + TRANSLATE_LAST_FRAME_TIME] - frameTime); percent = CurveTimeline_getCurvePercent(SUPER(self), frameIndex / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); bone->x += (bone->data->x + lastFrameX + (self->frames[frameIndex + TRANSLATE_FRAME_X] - lastFrameX) * percent - bone->x) @@ -315,11 +332,15 @@ void TranslateTimeline_setFrame (TranslateTimeline* self, int frameIndex, float /**/ void _ScaleTimeline_apply (const Timeline* timeline, Skeleton* skeleton, float time, float alpha) { - ScaleTimeline* self = SUB_CAST(ScaleTimeline, timeline); + Bone *bone; + int frameIndex; + float lastFrameX, lastFrameY, frameTime, percent; + ScaleTimeline* self = SUB_CAST(ScaleTimeline, timeline); + if (time < self->frames[0]) return; /* Time is before first frame. */ - Bone *bone = skeleton->bones[self->boneIndex]; + bone = skeleton->bones[self->boneIndex]; if (time >= self->frames[self->framesLength - 3]) { /* Time is after last frame. */ bone->scaleX += (bone->data->scaleX - 1 + self->frames[self->framesLength - 2] - bone->scaleX) * alpha; bone->scaleY += (bone->data->scaleY - 1 + self->frames[self->framesLength - 1] - bone->scaleY) * alpha; @@ -327,11 +348,11 @@ void _ScaleTimeline_apply (const Timeline* timeline, Skeleton* skeleton, float t } /* Interpolate between the last frame and the current frame. */ - int frameIndex = binarySearch(self->frames, self->framesLength, time, 3); - float lastFrameX = self->frames[frameIndex - 2]; - float lastFrameY = self->frames[frameIndex - 1]; - float frameTime = self->frames[frameIndex]; - float percent = 1 - (time - frameTime) / (self->frames[frameIndex + TRANSLATE_LAST_FRAME_TIME] - frameTime); + frameIndex = binarySearch(self->frames, self->framesLength, time, 3); + lastFrameX = self->frames[frameIndex - 2]; + lastFrameY = self->frames[frameIndex - 1]; + frameTime = self->frames[frameIndex]; + percent = 1 - (time - frameTime) / (self->frames[frameIndex + TRANSLATE_LAST_FRAME_TIME] - frameTime); percent = CurveTimeline_getCurvePercent(SUPER(self), frameIndex / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); bone->scaleX += (bone->data->scaleX - 1 + lastFrameX + (self->frames[frameIndex + TRANSLATE_FRAME_X] - lastFrameX) * percent @@ -357,11 +378,15 @@ static const int COLOR_FRAME_B = 3; static const int COLOR_FRAME_A = 4; void _ColorTimeline_apply (const Timeline* timeline, Skeleton* skeleton, float time, float alpha) { + Slot *slot; + int frameIndex; + float lastFrameR, lastFrameG, lastFrameB, lastFrameA, percent, frameTime; + float r, g, b, a; ColorTimeline* self = (ColorTimeline*)timeline; if (time < self->frames[0]) return; /* Time is before first frame. */ - Slot *slot = skeleton->slots[self->slotIndex]; + slot = skeleton->slots[self->slotIndex]; if (time >= self->frames[self->framesLength - 5]) { /* Time is after last frame. */ int i = self->framesLength - 1; @@ -373,19 +398,19 @@ void _ColorTimeline_apply (const Timeline* timeline, Skeleton* skeleton, float t } /* Interpolate between the last frame and the current frame. */ - int frameIndex = binarySearch(self->frames, self->framesLength, time, 5); - float lastFrameR = self->frames[frameIndex - 4]; - float lastFrameG = self->frames[frameIndex - 3]; - float lastFrameB = self->frames[frameIndex - 2]; - float lastFrameA = self->frames[frameIndex - 1]; - float frameTime = self->frames[frameIndex]; - float percent = 1 - (time - frameTime) / (self->frames[frameIndex + COLOR_LAST_FRAME_TIME] - frameTime); + frameIndex = binarySearch(self->frames, self->framesLength, time, 5); + lastFrameR = self->frames[frameIndex - 4]; + lastFrameG = self->frames[frameIndex - 3]; + lastFrameB = self->frames[frameIndex - 2]; + lastFrameA = self->frames[frameIndex - 1]; + frameTime = self->frames[frameIndex]; + percent = 1 - (time - frameTime) / (self->frames[frameIndex + COLOR_LAST_FRAME_TIME] - frameTime); percent = CurveTimeline_getCurvePercent(SUPER(self), frameIndex / 5 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - float r = lastFrameR + (self->frames[frameIndex + COLOR_FRAME_R] - lastFrameR) * percent; - float g = lastFrameG + (self->frames[frameIndex + COLOR_FRAME_G] - lastFrameG) * percent; - float b = lastFrameB + (self->frames[frameIndex + COLOR_FRAME_B] - lastFrameB) * percent; - float a = lastFrameA + (self->frames[frameIndex + COLOR_FRAME_A] - lastFrameA) * percent; + r = lastFrameR + (self->frames[frameIndex + COLOR_FRAME_R] - lastFrameR) * percent; + g = lastFrameG + (self->frames[frameIndex + COLOR_FRAME_G] - lastFrameG) * percent; + b = lastFrameB + (self->frames[frameIndex + COLOR_FRAME_B] - lastFrameB) * percent; + a = lastFrameA + (self->frames[frameIndex + COLOR_FRAME_A] - lastFrameA) * percent; if (alpha < 1) { slot->r += (r - slot->r) * alpha; slot->g += (g - slot->g) * alpha; @@ -415,26 +440,30 @@ void ColorTimeline_setFrame (ColorTimeline* self, int frameIndex, float time, fl /**/ void _AttachmentTimeline_apply (const Timeline* timeline, Skeleton* skeleton, float time, float alpha) { + int frameIndex; + const char* attachmentName; AttachmentTimeline* self = (AttachmentTimeline*)timeline; if (time < self->frames[0]) return; /* Time is before first frame. */ - int frameIndex; + frameIndex; if (time >= self->frames[self->framesLength - 1]) /* Time is after last frame. */ frameIndex = self->framesLength - 1; else frameIndex = binarySearch(self->frames, self->framesLength, time, 1) - 1; - const char* attachmentName = self->attachmentNames[frameIndex]; + attachmentName = self->attachmentNames[frameIndex]; Slot_setAttachment(skeleton->slots[self->slotIndex], attachmentName ? Skeleton_getAttachmentForSlotIndex(skeleton, self->slotIndex, attachmentName) : 0); } void _AttachmentTimeline_dispose (Timeline* timeline) { - _Timeline_deinit(timeline); - AttachmentTimeline* self = (AttachmentTimeline*)timeline; - + AttachmentTimeline* self; int i; + + _Timeline_deinit(timeline); + self = (AttachmentTimeline*)timeline; + for (i = 0; i < self->framesLength; ++i) FREE(self->attachmentNames[i]); FREE(self->attachmentNames); diff --git a/spine-c/src/spine/AnimationState.c b/spine-c/src/spine/AnimationState.c index 0ed90eda6..d095cb4f5 100644 --- a/spine-c/src/spine/AnimationState.c +++ b/spine-c/src/spine/AnimationState.c @@ -56,11 +56,14 @@ void AnimationState_update (AnimationState* self, float delta) { } void AnimationState_apply (AnimationState* self, Skeleton* skeleton) { + _Internal* internal; + float alpha; + if (!self->animation) return; - _Internal* internal = SUB_CAST(_Internal, self); + internal = SUB_CAST(_Internal, self); if (internal->previous) { Animation_apply(internal->previous, skeleton, internal->previousTime, internal->previousLoop); - float alpha = internal->mixTime / internal->mixDuration; + alpha = internal->mixTime / internal->mixDuration; if (alpha >= 1) { alpha = 1; internal->previous = 0; diff --git a/spine-c/src/spine/AnimationStateData.c b/spine-c/src/spine/AnimationStateData.c index a07cc9125..905639f7f 100644 --- a/spine-c/src/spine/AnimationStateData.c +++ b/spine-c/src/spine/AnimationStateData.c @@ -76,37 +76,43 @@ AnimationStateData* AnimationStateData_create (SkeletonData* skeletonData) { } void AnimationStateData_dispose (AnimationStateData* self) { + _ToEntry* toEntry; + _ToEntry* nextToEntry; + _FromEntry* nextFromEntry; + _FromEntry* fromEntry = (_FromEntry*)self->entries; while (fromEntry) { - _ToEntry* toEntry = fromEntry->toEntries; + toEntry = fromEntry->toEntries; while (toEntry) { - _ToEntry* next = toEntry->next; + nextToEntry = toEntry->next; _ToEntry_dispose(toEntry); - toEntry = next; + toEntry = nextToEntry; } - _FromEntry* next = fromEntry->next; + nextFromEntry = fromEntry->next; _FromEntry_dispose(fromEntry); - fromEntry = next; + fromEntry = nextFromEntry; } FREE(self); } void AnimationStateData_setMixByName (AnimationStateData* self, const char* fromName, const char* toName, float duration) { + Animation* to; Animation* from = SkeletonData_findAnimation(self->skeletonData, fromName); if (!from) return; - Animation* to = SkeletonData_findAnimation(self->skeletonData, toName); + to = SkeletonData_findAnimation(self->skeletonData, toName); if (!to) return; AnimationStateData_setMix(self, from, to, duration); } void AnimationStateData_setMix (AnimationStateData* self, Animation* from, Animation* to, float duration) { /* Find existing FromEntry. */ + _ToEntry* toEntry; _FromEntry* fromEntry = (_FromEntry*)self->entries; while (fromEntry) { if (fromEntry->animation == from) { /* Find existing ToEntry. */ - _ToEntry* toEntry = fromEntry->toEntries; + toEntry = fromEntry->toEntries; while (toEntry) { if (toEntry->animation == to) { toEntry->duration = duration; @@ -123,7 +129,7 @@ void AnimationStateData_setMix (AnimationStateData* self, Animation* from, Anima fromEntry->next = (_FromEntry*)self->entries; CONST_CAST(_FromEntry*, self->entries) = fromEntry; } - _ToEntry* toEntry = _ToEntry_create(to, duration); + toEntry = _ToEntry_create(to, duration); toEntry->next = fromEntry->toEntries; fromEntry->toEntries = toEntry; } diff --git a/spine-c/src/spine/Atlas.c b/spine-c/src/spine/Atlas.c index 32529a1c0..34677ab33 100644 --- a/spine-c/src/spine/Atlas.c +++ b/spine-c/src/spine/Atlas.c @@ -116,10 +116,11 @@ static int readValue (const char* end, Str* str) { /* Returns the number of tuple values read (2, 4, or 0 for failure). */ static int readTuple (const char* end, Str tuple[]) { + int i; Str str; readLine(0, end, &str); if (!beginPast(&str, ':')) return 0; - int i = 0; + for (i = 0; i < 3; ++i) { tuple[i].begin = str.begin; if (!beginPast(&str, ',')) { @@ -169,6 +170,7 @@ static const char* textureFilterNames[] = {"Nearest", "Linear", "MipMap", "MipMa "MipMapNearestLinear", "MipMapLinearLinear"}; Atlas* Atlas_readAtlas (const char* begin, int length, const char* dir) { + int count; const char* end = begin + length; int dirLength = strlen(dir); int needsSlash = dirLength > 0 && dir[dirLength - 1] != '/' && dir[dirLength - 1] != '\\'; @@ -246,7 +248,6 @@ Atlas* Atlas_readAtlas (const char* begin, int length, const char* dir) { region->v2 = (region->y + region->height) / (float)page->height; } - int count; if (!(count = readTuple(end, tuple))) return abortAtlas(self); if (count == 4) { /* split is optional */ region->splits = MALLOC(int, 4); @@ -283,6 +284,11 @@ Atlas* Atlas_readAtlas (const char* begin, int length, const char* dir) { } Atlas* Atlas_readAtlasFile (const char* path) { + int dirLength; + char *dir; + int length; + const char* data; + Atlas* atlas = 0; /* Get directory from atlas path. */ @@ -290,13 +296,12 @@ Atlas* Atlas_readAtlasFile (const char* path) { const char* lastBackwardSlash = strrchr(path, '\\'); const char* lastSlash = lastForwardSlash > lastBackwardSlash ? lastForwardSlash : lastBackwardSlash; if (lastSlash == path) lastSlash++; /* Never drop starting slash. */ - int dirLength = lastSlash ? lastSlash - path : 0; - char* dir = MALLOC(char, dirLength + 1); + dirLength = lastSlash ? lastSlash - path : 0; + dir = MALLOC(char, dirLength + 1); memcpy(dir, path, dirLength); dir[dirLength] = '\0'; - int length; - const char* data = _Util_readFile(path, &length); + data = _Util_readFile(path, &length); if (data) atlas = Atlas_readAtlas(data, length, dir); FREE(data); @@ -305,6 +310,7 @@ Atlas* Atlas_readAtlasFile (const char* path) { } void Atlas_dispose (Atlas* self) { + AtlasRegion* region, *nextRegion; AtlasPage* page = self->pages; while (page) { AtlasPage* nextPage = page->next; @@ -312,9 +318,9 @@ void Atlas_dispose (Atlas* self) { page = nextPage; } - AtlasRegion* region = self->regions; + region = self->regions; while (region) { - AtlasRegion* nextRegion = region->next; + nextRegion = region->next; AtlasRegion_dispose(region); region = nextRegion; } diff --git a/spine-c/src/spine/AtlasAttachmentLoader.c b/spine-c/src/spine/AtlasAttachmentLoader.c index f481aeceb..f15753a86 100644 --- a/spine-c/src/spine/AtlasAttachmentLoader.c +++ b/spine-c/src/spine/AtlasAttachmentLoader.c @@ -34,12 +34,13 @@ Attachment* _AtlasAttachmentLoader_newAttachment (AttachmentLoader* loader, Skin AtlasAttachmentLoader* self = SUB_CAST(AtlasAttachmentLoader, loader); switch (type) { case ATTACHMENT_REGION: { + RegionAttachment* attachment; AtlasRegion* region = Atlas_findRegion(self->atlas, name); if (!region) { _AttachmentLoader_setError(loader, "Region not found: ", name); return 0; } - RegionAttachment* attachment = RegionAttachment_create(name); + attachment = RegionAttachment_create(name); attachment->texture = region->page->texture; RegionAttachment_setUVs(attachment, region->u, region->v, region->u2, region->v2, region->rotate); attachment->regionOffsetX = region->offsetX; @@ -65,4 +66,4 @@ AtlasAttachmentLoader* AtlasAttachmentLoader_create (Atlas* atlas) { #ifdef __cplusplus } -#endif +#endif \ No newline at end of file diff --git a/spine-c/src/spine/Bone.c b/spine-c/src/spine/Bone.c index 90047463d..8a7b27f42 100644 --- a/spine-c/src/spine/Bone.c +++ b/spine-c/src/spine/Bone.c @@ -58,6 +58,7 @@ void Bone_setToBindPose (Bone* self) { } void Bone_updateWorldTransform (Bone* self, int flipX, int flipY) { + float radians, cosine, sine; if (self->parent) { CONST_CAST(float, self->worldX) = self->x * self->parent->m00 + self->y * self->parent->m01 + self->parent->worldX; CONST_CAST(float, self->worldY) = self->x * self->parent->m10 + self->y * self->parent->m11 + self->parent->worldY; @@ -71,9 +72,9 @@ void Bone_updateWorldTransform (Bone* self, int flipX, int flipY) { CONST_CAST(float, self->worldScaleY) = self->scaleY; CONST_CAST(float, self->worldRotation) = self->rotation; } - float radians = (float)(self->worldRotation * 3.1415926535897932385 / 180); - float cosine = cosf(radians); - float sine = sinf(radians); + radians = (float)(self->worldRotation * 3.1415926535897932385 / 180); + cosine = cosf(radians); + sine = sinf(radians); CONST_CAST(float, self->m00) = cosine * self->worldScaleX; CONST_CAST(float, self->m10) = sine * self->worldScaleX; CONST_CAST(float, self->m01) = -sine * self->worldScaleY; diff --git a/spine-c/src/spine/RegionAttachment.c b/spine-c/src/spine/RegionAttachment.c index de87a464f..1b97d948c 100644 --- a/spine-c/src/spine/RegionAttachment.c +++ b/spine-c/src/spine/RegionAttachment.c @@ -63,9 +63,9 @@ void RegionAttachment_setUVs (RegionAttachment* self, float u, float v, float u2 void RegionAttachment_updateOffset (RegionAttachment* self) { float regionScaleX = self->width / self->regionOriginalWidth * self->scaleX; - float regionScaleY = self->height / self->regionOriginalHeight * self->scaleX; + float regionScaleY = self->height / self->regionOriginalHeight * self->scaleY; float localX = -self->width / 2 * self->scaleX + self->regionOffsetX * regionScaleX; - float localY = -self->height / 2 * self->scaleX + self->regionOffsetY * regionScaleY; + float localY = -self->height / 2 * self->scaleY + self->regionOffsetY * regionScaleY; float localX2 = localX + self->regionWidth * regionScaleX; float localY2 = localY + self->regionHeight * regionScaleY; float radians = (float)(self->rotation * 3.1415926535897932385 / 180); @@ -104,4 +104,4 @@ void RegionAttachment_updateVertices (RegionAttachment* self, Slot* slot) { #ifdef __cplusplus } -#endif +#endif \ No newline at end of file diff --git a/spine-c/src/spine/Skeleton.c b/spine-c/src/spine/Skeleton.c index 14380bc6e..72ed37e39 100644 --- a/spine-c/src/spine/Skeleton.c +++ b/spine-c/src/spine/Skeleton.c @@ -32,12 +32,14 @@ namespace spine { #endif Skeleton* Skeleton_create (SkeletonData* data) { + int i, ii; + Skeleton* self = NEW(Skeleton); CONST_CAST(SkeletonData*, self->data) = data; self->boneCount = self->data->boneCount; self->bones = MALLOC(Bone*, self->boneCount); - int i, ii; + for (i = 0; i < self->boneCount; ++i) { BoneData* boneData = self->data->bones[i]; Bone* parent = 0; @@ -147,11 +149,12 @@ int Skeleton_findSlotIndex (const Skeleton* self, const char* slotName) { } int Skeleton_setSkinByName (Skeleton* self, const char* skinName) { + Skin *skin; if (!skinName) { Skeleton_setSkin(self, 0); return 1; } - Skin *skin = SkeletonData_findSkin(self->data, skinName); + skin = SkeletonData_findSkin(self->data, skinName); if (!skin) return 0; Skeleton_setSkin(self, skin); return 1; diff --git a/spine-c/src/spine/SkeletonJson.c b/spine-c/src/spine/SkeletonJson.c index cf05b47f3..ad3256aa8 100644 --- a/spine-c/src/spine/SkeletonJson.c +++ b/spine-c/src/spine/SkeletonJson.c @@ -62,24 +62,28 @@ void SkeletonJson_dispose (SkeletonJson* self) { } void _SkeletonJson_setError (SkeletonJson* self, Json* root, const char* value1, const char* value2) { - FREE(self->error); char message[256]; + int length; + FREE(self->error); strcpy(message, value1); - int length = strlen(value1); + length = strlen(value1); if (value2) strncat(message + length, value2, 256 - length); MALLOC_STR(self->error, message); if (root) Json_dispose(root); } static float toColor (const char* value, int index) { + char digits[3]; + char *error; + int color; + if (strlen(value) != 8) return -1; value += index * 2; - char digits[3]; + digits[0] = *value; digits[1] = *(value + 1); digits[2] = '\0'; - char* error; - int color = strtoul(digits, &error, 16); + color = strtoul(digits, &error, 16); if (*error != 0) return -1; return color / (float)255; } @@ -96,6 +100,8 @@ static void readCurve (CurveTimeline* timeline, int frameIndex, Json* frame) { } static Animation* _SkeletonJson_readAnimation (SkeletonJson* self, Json* root, SkeletonData *skeletonData) { + Animation* animation; + Json* bones = Json_getItem(root, "bones"); int boneCount = bones ? Json_getSize(bones) : 0; @@ -108,12 +114,13 @@ static Animation* _SkeletonJson_readAnimation (SkeletonJson* self, Json* root, S timelineCount += Json_getSize(Json_getItemAt(bones, i)); for (i = 0; i < slotCount; ++i) timelineCount += Json_getSize(Json_getItemAt(slots, i)); - Animation* animation = Animation_create(root->name, timelineCount); + animation = Animation_create(root->name, timelineCount); animation->timelineCount = 0; skeletonData->animations[skeletonData->animationCount] = animation; skeletonData->animationCount++; for (i = 0; i < boneCount; ++i) { + int timelineCount; Json* boneMap = Json_getItemAt(bones, i); const char* boneName = boneMap->name; @@ -125,13 +132,15 @@ static Animation* _SkeletonJson_readAnimation (SkeletonJson* self, Json* root, S return 0; } - int timelineCount = Json_getSize(boneMap); + timelineCount = Json_getSize(boneMap); for (ii = 0; ii < timelineCount; ++ii) { + float duration; Json* timelineArray = Json_getItemAt(boneMap, ii); int frameCount = Json_getSize(timelineArray); const char* timelineType = timelineArray->name; if (strcmp(timelineType, "rotate") == 0) { + RotateTimeline *timeline = RotateTimeline_create(frameCount); timeline->boneIndex = boneIndex; for (iii = 0; iii < frameCount; ++iii) { @@ -140,14 +149,14 @@ static Animation* _SkeletonJson_readAnimation (SkeletonJson* self, Json* root, S readCurve(SUPER(timeline), iii, frame); } animation->timelines[animation->timelineCount++] = (Timeline*)timeline; - float duration = timeline->frames[frameCount * 2 - 2]; + duration = timeline->frames[frameCount * 2 - 2]; if (duration > animation->duration) animation->duration = duration; } else { int isScale = strcmp(timelineType, "scale") == 0; if (isScale || strcmp(timelineType, "translate") == 0) { - TranslateTimeline *timeline = isScale ? ScaleTimeline_create(frameCount) : TranslateTimeline_create(frameCount); float scale = isScale ? 1 : self->scale; + TranslateTimeline *timeline = isScale ? ScaleTimeline_create(frameCount) : TranslateTimeline_create(frameCount); timeline->boneIndex = boneIndex; for (iii = 0; iii < frameCount; ++iii) { Json* frame = Json_getItemAt(timelineArray, iii); @@ -156,7 +165,7 @@ static Animation* _SkeletonJson_readAnimation (SkeletonJson* self, Json* root, S readCurve(SUPER(timeline), iii, frame); } animation->timelines[animation->timelineCount++] = (Timeline*)timeline; - float duration = timeline->frames[frameCount * 3 - 3]; + duration = timeline->frames[frameCount * 3 - 3]; if (duration > animation->duration) animation->duration = duration; } else { Animation_dispose(animation); @@ -168,6 +177,7 @@ static Animation* _SkeletonJson_readAnimation (SkeletonJson* self, Json* root, S } for (i = 0; i < slotCount; ++i) { + int timelineCount; Json* slotMap = Json_getItemAt(slots, i); const char* slotName = slotMap->name; @@ -178,8 +188,9 @@ static Animation* _SkeletonJson_readAnimation (SkeletonJson* self, Json* root, S return 0; } - int timelineCount = Json_getSize(slotMap); + timelineCount = Json_getSize(slotMap); for (ii = 0; ii < timelineCount; ++ii) { + float duration; Json* timelineArray = Json_getItemAt(slotMap, ii); int frameCount = Json_getSize(timelineArray); const char* timelineType = timelineArray->name; @@ -195,7 +206,7 @@ static Animation* _SkeletonJson_readAnimation (SkeletonJson* self, Json* root, S readCurve(SUPER(timeline), iii, frame); } animation->timelines[animation->timelineCount++] = (Timeline*)timeline; - float duration = timeline->frames[frameCount * 5 - 5]; + duration = timeline->frames[frameCount * 5 - 5]; if (duration > animation->duration) animation->duration = duration; } else if (strcmp(timelineType, "attachment") == 0) { @@ -208,7 +219,7 @@ static Animation* _SkeletonJson_readAnimation (SkeletonJson* self, Json* root, S name->type == Json_NULL ? 0 : name->valuestring); } animation->timelines[animation->timelineCount++] = (Timeline*)timeline; - float duration = timeline->frames[frameCount - 1]; + duration = timeline->frames[frameCount - 1]; if (duration > animation->duration) animation->duration = duration; } else { @@ -224,34 +235,42 @@ static Animation* _SkeletonJson_readAnimation (SkeletonJson* self, Json* root, S SkeletonData* SkeletonJson_readSkeletonDataFile (SkeletonJson* self, const char* path) { int length; + SkeletonData* skeletonData; const char* json = _Util_readFile(path, &length); if (!json) { _SkeletonJson_setError(self, 0, "Unable to read skeleton file: ", path); return 0; } - SkeletonData* skeletonData = SkeletonJson_readSkeletonData(self, json); + skeletonData = SkeletonJson_readSkeletonData(self, json); FREE(json); return skeletonData; } SkeletonData* SkeletonJson_readSkeletonData (SkeletonJson* self, const char* json) { + SkeletonData* skeletonData; + Json *root, *bones; + int i, ii, iii, boneCount; + Json* slots; + Json* skinsMap; + Json* animations; + FREE(self->error); CONST_CAST(char*, self->error) = 0; - Json* root = Json_create(json); + root = Json_create(json); if (!root) { _SkeletonJson_setError(self, 0, "Invalid skeleton JSON: ", Json_getError()); return 0; } - SkeletonData* skeletonData = SkeletonData_create(); - int i, ii, iii; + skeletonData = SkeletonData_create(); - Json* bones = Json_getItem(root, "bones"); - int boneCount = Json_getSize(bones); + bones = Json_getItem(root, "bones"); + boneCount = Json_getSize(bones); skeletonData->bones = MALLOC(BoneData*, boneCount); for (i = 0; i < boneCount; ++i) { Json* boneMap = Json_getItemAt(bones, i); + BoneData* boneData; const char* boneName = Json_getString(boneMap, "name", 0); @@ -266,7 +285,7 @@ SkeletonData* SkeletonJson_readSkeletonData (SkeletonJson* self, const char* jso } } - BoneData* boneData = BoneData_create(boneName, parent); + boneData = BoneData_create(boneName, parent); boneData->length = Json_getFloat(boneMap, "length", 0) * self->scale; boneData->x = Json_getFloat(boneMap, "x", 0) * self->scale; boneData->y = Json_getFloat(boneMap, "y", 0) * self->scale; @@ -278,11 +297,14 @@ SkeletonData* SkeletonJson_readSkeletonData (SkeletonJson* self, const char* jso skeletonData->boneCount++; } - Json* slots = Json_getItem(root, "slots"); + slots = Json_getItem(root, "slots"); if (slots) { int slotCount = Json_getSize(slots); skeletonData->slots = MALLOC(SlotData*, slotCount); for (i = 0; i < slotCount; ++i) { + SlotData* slotData; + const char* color; + Json *attachmentItem; Json* slotMap = Json_getItemAt(slots, i); const char* slotName = Json_getString(slotMap, "name", 0); @@ -295,9 +317,9 @@ SkeletonData* SkeletonJson_readSkeletonData (SkeletonJson* self, const char* jso return 0; } - SlotData* slotData = SlotData_create(slotName, boneData); + slotData = SlotData_create(slotName, boneData); - const char* color = Json_getString(slotMap, "color", 0); + color = Json_getString(slotMap, "color", 0); if (color) { slotData->r = toColor(color, 0); slotData->g = toColor(color, 1); @@ -305,7 +327,7 @@ SkeletonData* SkeletonJson_readSkeletonData (SkeletonJson* self, const char* jso slotData->a = toColor(color, 3); } - Json *attachmentItem = Json_getItem(slotMap, "attachment"); + attachmentItem = Json_getItem(slotMap, "attachment"); if (attachmentItem) SlotData_setAttachmentName(slotData, attachmentItem->valuestring); skeletonData->slots[i] = slotData; @@ -313,7 +335,7 @@ SkeletonData* SkeletonJson_readSkeletonData (SkeletonJson* self, const char* jso } } - Json* skinsMap = Json_getItem(root, "skins"); + skinsMap = Json_getItem(root, "skins"); if (skinsMap) { int skinCount = Json_getSize(skinsMap); skeletonData->skins = MALLOC(Skin*, skinCount); @@ -321,11 +343,13 @@ SkeletonData* SkeletonJson_readSkeletonData (SkeletonJson* self, const char* jso Json* slotMap = Json_getItemAt(skinsMap, i); const char* skinName = slotMap->name; Skin *skin = Skin_create(skinName); + int slotNameCount; + skeletonData->skins[i] = skin; skeletonData->skinCount++; if (strcmp(skinName, "default") == 0) skeletonData->defaultSkin = skin; - int slotNameCount = Json_getSize(slotMap); + slotNameCount = Json_getSize(slotMap); for (ii = 0; ii < slotNameCount; ++ii) { Json* attachmentsMap = Json_getItemAt(slotMap, ii); const char* slotName = attachmentsMap->name; @@ -333,6 +357,7 @@ SkeletonData* SkeletonJson_readSkeletonData (SkeletonJson* self, const char* jso int attachmentCount = Json_getSize(attachmentsMap); for (iii = 0; iii < attachmentCount; ++iii) { + Attachment* attachment; Json* attachmentMap = Json_getItemAt(attachmentsMap, iii); const char* skinAttachmentName = attachmentMap->name; const char* attachmentName = Json_getString(attachmentMap, "name", skinAttachmentName); @@ -349,7 +374,7 @@ SkeletonData* SkeletonJson_readSkeletonData (SkeletonJson* self, const char* jso return 0; } - Attachment* attachment = AttachmentLoader_newAttachment(self->attachmentLoader, skin, type, attachmentName); + attachment = AttachmentLoader_newAttachment(self->attachmentLoader, skin, type, attachmentName); if (!attachment) { if (self->attachmentLoader->error1) { SkeletonData_dispose(skeletonData); @@ -377,7 +402,7 @@ SkeletonData* SkeletonJson_readSkeletonData (SkeletonJson* self, const char* jso } } - Json* animations = Json_getItem(root, "animations"); + animations = Json_getItem(root, "animations"); if (animations) { int animationCount = Json_getSize(animations); skeletonData->animations = MALLOC(Animation*, animationCount); diff --git a/spine-c/src/spine/Slot.c b/spine-c/src/spine/Slot.c index b36d03990..72c36284b 100644 --- a/spine-c/src/spine/Slot.c +++ b/spine-c/src/spine/Slot.c @@ -63,12 +63,12 @@ float Slot_getAttachmentTime (const Slot* self) { } void Slot_setToBindPose (Slot* self) { + Attachment* attachment = 0; self->r = self->data->r; self->g = self->data->g; self->b = self->data->b; self->a = self->data->a; - Attachment* attachment = 0; if (self->data->attachmentName) { /* Find slot index. */ int i; diff --git a/spine-c/src/spine/extension.c b/spine-c/src/spine/extension.c index 65fce73df..7cb633476 100644 --- a/spine-c/src/spine/extension.c +++ b/spine-c/src/spine/extension.c @@ -53,6 +53,7 @@ void _setFree (void (*free) (void* ptr)) { } char* _readFile (const char* path, int* length) { + char *data; FILE *file = fopen(path, "rb"); if (!file) return 0; @@ -60,7 +61,7 @@ char* _readFile (const char* path, int* length) { *length = ftell(file); fseek(file, 0, SEEK_SET); - char* data = MALLOC(char, *length); + data = MALLOC(char, *length); fread(data, 1, *length, file); fclose(file);