Przeglądaj źródła

Added support for frame ranges and frame repeats in sprite frame syntax

Ivan Safrin 12 lat temu
rodzic
commit
06a6c50423
1 zmienionych plików z 37 dodań i 5 usunięć
  1. 37 5
      Core/Contents/Source/PolyScreenSprite.cpp

+ 37 - 5
Core/Contents/Source/PolyScreenSprite.cpp

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