Ver Fonte

Fixed a problem with uniform sprite sheet grids not generating properly

Ivan Safrin há 10 anos atrás
pai
commit
c970884edd

+ 1 - 1
Core/Contents/Include/PolySceneSprite.h

@@ -146,7 +146,7 @@ namespace Polycode {
         void clearFrames();
         void clearFrames();
         
         
         // automatic frame generation
         // automatic frame generation
-        void createGridFrames(Number width, Number height, const Vector2 &defaultAnchor);
+        void createGridFrames(unsigned int xCount, unsigned int yCount, const Vector2 &defaultAnchor);
         void createFramesFromIslands(unsigned int minDistance, const Vector2 &defaultAnchor);
         void createFramesFromIslands(unsigned int minDistance, const Vector2 &defaultAnchor);
         
         
         Sprite *getSpriteByName(String spriteName);
         Sprite *getSpriteByName(String spriteName);

+ 7 - 4
Core/Contents/Source/PolySceneSprite.cpp

@@ -787,12 +787,15 @@ void SpriteSet::clearFrames() {
     nextFrameIDIndex = 0;
     nextFrameIDIndex = 0;
 }
 }
 
 
-void SpriteSet::createGridFrames(Number width, Number height, const Vector2 &defaultAnchor) {
+void SpriteSet::createGridFrames(unsigned int xCount, unsigned int yCount, const Vector2 &defaultAnchor) {
     
     
-    for(Number y = 0.0; y+height <= 1.0; y += height) {
-        for(Number x = 0.0; x+width <= 1.0; x += width) {
+    Number frameWidth = 1.0/(Number)xCount;
+    Number frameHeight = 1.0/(Number)yCount;
+    
+    for(int y = 0; y < yCount; y++) {
+        for(Number x = 0; x < xCount; x++) {
             SpriteFrame frame;
             SpriteFrame frame;
-            frame.coordinates = Polycode::Rectangle(x, y, width, height);
+            frame.coordinates = Polycode::Rectangle(x * frameWidth, y * frameHeight, frameWidth, frameHeight);
             frame.anchorPoint = defaultAnchor;
             frame.anchorPoint = defaultAnchor;
             addSpriteFrame(frame);
             addSpriteFrame(frame);
         }
         }

+ 3 - 3
IDE/Contents/Source/PolycodeSpriteEditor.cpp

@@ -292,9 +292,9 @@ void SpriteSheetEditor::handleEvent(Event *event) {
         globalFrame->showAssetBrowser(extensions);
         globalFrame->showAssetBrowser(extensions);
     } else if(event->getDispatcher() == generateFramesButton) {
     } else if(event->getDispatcher() == generateFramesButton) {
         if(generateTypeDropdown->getSelectedIndex() == 0) {
         if(generateTypeDropdown->getSelectedIndex() == 0) {
-            Number frameWidth = uniformGridWidthInput->getText().toNumber() / ((Number)sprite->getTexture()->getWidth());
-            Number frameHeight = uniformGridHeightInput->getText().toNumber() / ((Number)sprite->getTexture()->getHeight());
-            sprite->createGridFrames(frameWidth, frameHeight, defaultAnchors[defaultAnchorCombo->getSelectedIndex()]);
+            int numX = floor(sprite->getTexture()->getWidth() / uniformGridWidthInput->getText().toNumber());
+            int numY = floor(sprite->getTexture()->getHeight() / uniformGridHeightInput->getText().toNumber());
+            sprite->createGridFrames(numX, numY, defaultAnchors[defaultAnchorCombo->getSelectedIndex()]);
         } else {
         } else {
             sprite->createFramesFromIslands(minimumDistanceInput->getText().toInteger(), defaultAnchors[defaultAnchorCombo->getSelectedIndex()]);
             sprite->createFramesFromIslands(minimumDistanceInput->getText().toInteger(), defaultAnchors[defaultAnchorCombo->getSelectedIndex()]);
         }
         }