|
|
@@ -200,15 +200,47 @@ void SpriteAnimation::setOffsetsFromFrameString(const String& frames) {
|
|
|
int frameX;
|
|
|
int frameY;
|
|
|
|
|
|
+ numFrames = 0;
|
|
|
+
|
|
|
for(int i=0; i < frameNumbers.size(); i++) {
|
|
|
- frameNumber = atoi(frameNumbers[i].c_str());
|
|
|
- frameX = frameNumber % numFramesX;
|
|
|
- frameY = frameNumber/numFramesX;
|
|
|
- framesOffsets.push_back(Vector2(spriteUVWidth * frameX, spriteUVHeight * frameY));
|
|
|
+ if(frameNumbers[i].find_first_of("-") != -1) {
|
|
|
+ vector<String> _frameNumbers = frameNumbers[i].split("-");
|
|
|
+ if(_frameNumbers.size() > 1) {
|
|
|
+ int frameNumberStart = atoi(_frameNumbers[0].c_str());
|
|
|
+ int frameNumberEnd = atoi(_frameNumbers[1].c_str());
|
|
|
+ int dir = 1;
|
|
|
+ if(frameNumberEnd < frameNumberStart) {
|
|
|
+ dir = -1;
|
|
|
+ }
|
|
|
+ for(int j=frameNumberStart; j != frameNumberEnd + dir; j += dir) {
|
|
|
+ frameX = j % numFramesX;
|
|
|
+ frameY = j/numFramesX;
|
|
|
+ framesOffsets.push_back(Vector2(spriteUVWidth * frameX, spriteUVHeight * frameY));
|
|
|
+ numFrames++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if(frameNumbers[i].find_first_of("x") != -1) {
|
|
|
+ vector<String> _frameNumbers = frameNumbers[i].split("x");
|
|
|
+ if(_frameNumbers.size() > 1) {
|
|
|
+ int _frameNumber = atoi(_frameNumbers[0].c_str());
|
|
|
+ int frameNumberCount = atoi(_frameNumbers[1].c_str());
|
|
|
+ for(int j=0; j < frameNumberCount; j++) {
|
|
|
+ frameX = _frameNumber % numFramesX;
|
|
|
+ frameY = _frameNumber/numFramesX;
|
|
|
+ framesOffsets.push_back(Vector2(spriteUVWidth * frameX, spriteUVHeight * frameY));
|
|
|
+ numFrames++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ frameNumber = atoi(frameNumbers[i].c_str());
|
|
|
+ frameX = frameNumber % numFramesX;
|
|
|
+ frameY = frameNumber/numFramesX;
|
|
|
+ framesOffsets.push_back(Vector2(spriteUVWidth * frameX, spriteUVHeight * frameY));
|
|
|
+ numFrames++;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
this->frames = frames;
|
|
|
- numFrames = frameNumbers.size();
|
|
|
|
|
|
}
|
|
|
|