diff --git a/spine-cpp/spine-cpp/include/spine/SpineString.h b/spine-cpp/spine-cpp/include/spine/SpineString.h index 7bba40dad..f60cd9209 100644 --- a/spine-cpp/spine-cpp/include/spine/SpineString.h +++ b/spine-cpp/spine-cpp/include/spine/SpineString.h @@ -187,6 +187,34 @@ namespace spine { return true; } + int lastIndexOf(const char c) { + for (int i = length() - 1; i >= 0; i--) { + if (buffer()[i] == c) return i; + } + return -1; + } + + String substring(int startIndex, int length) const { + if (startIndex < 0 || startIndex >= _length || length < 0 || startIndex + length > _length) { + return String(); + } + char* subStr = SpineExtension::calloc(length + 1, __FILE__, __LINE__); + memcpy(subStr, _buffer + startIndex, length); + subStr[length] = '\0'; + return String(subStr, true, true); + } + + String substring(int startIndex) const { + if (startIndex < 0 || startIndex >= _length) { + return String(); + } + int length = _length - startIndex; + char* subStr = SpineExtension::calloc(length + 1, __FILE__, __LINE__); + memcpy(subStr, _buffer + startIndex, length); + subStr[length] = '\0'; + return String(subStr, true, true); + } + friend bool operator==(const String &a, const String &b) { if (a._buffer == b._buffer) return true; if (a._length != b._length) return false; diff --git a/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp b/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp index c1eb5a2a7..64bad8377 100644 --- a/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp +++ b/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp @@ -161,7 +161,8 @@ SkeletonData *SkeletonJson::readSkeletonData(const char *json) { skeletonData->_y = Json::getFloat(skeleton, "y", 0); skeletonData->_width = Json::getFloat(skeleton, "width", 0); skeletonData->_height = Json::getFloat(skeleton, "height", 0); - skeletonData->_fps = Json::getFloat(skeleton, "fps", 30); + skeletonData->_referenceScale = Json::getFloat(skeleton, "referenceScale", 100) * _scale; + skeletonData->_fps = Json::getFloat(skeleton, "fps", 30); skeletonData->_audioPath = Json::getString(skeleton, "audio", 0); skeletonData->_imagesPath = Json::getString(skeleton, "images", 0); } @@ -211,6 +212,9 @@ SkeletonData *SkeletonJson::readSkeletonData(const char *json) { const char *color = Json::getString(boneMap, "color", NULL); if (color) toColor(data->getColor(), color, true); + data->_icon = Json::getString(boneMap, "icon", ""); + data->_visible = Json::getBoolean(boneMap, "visible", true); + skeletonData->_bones[i] = data; bonesCount++; } @@ -235,7 +239,14 @@ SkeletonData *SkeletonJson::readSkeletonData(const char *json) { return NULL; } - data = new (__FILE__, __LINE__) SlotData(i, Json::getString(slotMap, "name", 0), *boneData); + String pathName = ""; + String slotName = String(Json::getString(slotMap, "name", 0)); + int slash = slotName.lastIndexOf('/'); + if (slash != -1) { + pathName = slotName.substring(0, slash); + slotName = slotName.substring(slash + 1); + } + data = new (__FILE__, __LINE__) SlotData(i, slotName, *boneData); color = Json::getString(slotMap, "color", 0); if (color) { @@ -267,7 +278,8 @@ SkeletonData *SkeletonJson::readSkeletonData(const char *json) { else if (strcmp(item->_valueString, "screen") == 0) data->_blendMode = BlendMode_Screen; } - + data->_visible = Json::getBoolean(slotMap, "visible", true); + data->_path = pathName; skeletonData->_slots[i] = data; } }