Ivan Safrin 11 лет назад
Родитель
Сommit
c33e3fe4b0

+ 2 - 1
IDE/Contents/Include/PolycodeSpriteEditor.h

@@ -57,6 +57,7 @@ class SpriteState {
     
     
         void removeFrameByIndex(unsigned int frameIndex);
         void removeFrameByIndex(unsigned int frameIndex);
         void removeFrameIndices(std::vector<unsigned int> indices);
         void removeFrameIndices(std::vector<unsigned int> indices);
+        void clearFrames();
     
     
         void setPixelsPerUnit(Number ppu);
         void setPixelsPerUnit(Number ppu);
         Number getPixelsPerUnit();
         Number getPixelsPerUnit();
@@ -197,7 +198,7 @@ class SpritePreview : public UIElement {
     
     
         UIIconSelector *bgSelector;
         UIIconSelector *bgSelector;
     
     
-        ScenePrimitive *boundingBoxPreview;
+        SceneMesh *boundingBoxPreview;
     
     
 };
 };
 
 

BIN
IDE/Contents/Resources/ImagesRetina/main/stipple_small.png


+ 53 - 9
IDE/Contents/Source/PolycodeSpriteEditor.cpp

@@ -44,6 +44,10 @@ SpriteState *SceneSpriteRewrite::getCurrentSpriteState() {
     return currentSpriteState;
     return currentSpriteState;
 }
 }
 
 
+SpriteSet *SceneSpriteRewrite::getSpriteSet() {
+    return spriteSet;
+}
+
 void SceneSpriteRewrite::setPaused(bool val) {
 void SceneSpriteRewrite::setPaused(bool val) {
     paused = val;
     paused = val;
 }
 }
@@ -132,6 +136,11 @@ void SpriteState::setBoundingBox(Vector2 boundingBox) {
     rebuildStateMeshes();
     rebuildStateMeshes();
 }
 }
 
 
+void SpriteState::clearFrames() {
+    frameIDs.clear();
+    rebuildStateMeshes();
+}
+
 Vector2 SpriteState::getBoundingBox() {
 Vector2 SpriteState::getBoundingBox() {
     return boundingBox;
     return boundingBox;
 }
 }
@@ -1564,6 +1573,10 @@ void SpriteStateEditorDetails::handleEvent(Event *event) {
         sceneSprite->setPaused(false);
         sceneSprite->setPaused(false);
     }  else if(event->getDispatcher() == pauseButton) {
     }  else if(event->getDispatcher() == pauseButton) {
         sceneSprite->setPaused(true);
         sceneSprite->setPaused(true);
+    } else if(event->getDispatcher() == clearFramesButton) {
+        spriteState->clearFrames();
+    } else if(event->getDispatcher() == removeFramesButton) {
+        editBar->deleteSelectedFrames();
     }
     }
 }
 }
 
 
@@ -2318,12 +2331,12 @@ SpritePreview::SpritePreview(SpriteSet *spriteSet) : UIElement() {
 	addChild(label);
 	addChild(label);
 	label->setPosition(10, 3);
 	label->setPosition(10, 3);
     
     
-    boundingBoxPreview = new ScenePrimitive(ScenePrimitive::TYPE_VPLANE, 1.0, 1.0);
+    boundingBoxPreview = new SceneMesh(Mesh::LINE_MESH);
     addChild(boundingBoxPreview);
     addChild(boundingBoxPreview);
-    boundingBoxPreview->overlayWireframe = true;
-    boundingBoxPreview->wireFrameColor = Color(0.0, 0.5, 1.0, 1.0);
-    boundingBoxPreview->setBlendingMode(Renderer::BLEND_MODE_NORMAL);
-    boundingBoxPreview->color.a = 0.0;
+    boundingBoxPreview->loadTexture("main/stipple_small.png");
+    boundingBoxPreview->lineWidth = 1;
+    
+    
     
     
     bgSelector = new UIIconSelector();
     bgSelector = new UIIconSelector();
     bgSelector->addIcon("spriteEditor/grid_icon_dark.png");
     bgSelector->addIcon("spriteEditor/grid_icon_dark.png");
@@ -2359,13 +2372,39 @@ void SpritePreview::Update() {
     
     
     SpriteState  *state = sprite->getCurrentSpriteState();
     SpriteState  *state = sprite->getCurrentSpriteState();
     
     
-    Vector2 bBox;
     if(state) {
     if(state) {
-        bBox = state->getBoundingBox();
+        Vector2 bBox = state->getBoundingBox();
         sprite->setLocalBoundingBox(bBox.x / state->getPixelsPerUnit(), bBox.y / state->getPixelsPerUnit(), 0.001);
         sprite->setLocalBoundingBox(bBox.x / state->getPixelsPerUnit(), bBox.y / state->getPixelsPerUnit(), 0.001);
     }
     }
     
     
-    boundingBoxPreview->setPrimitiveOptions(ScenePrimitive::TYPE_VPLANE, sprite->getLocalBoundingBox().x, sprite->getLocalBoundingBox().y);
+    //boundingBoxPreview->setPrimitiveOptions(ScenePrimitive::TYPE_VPLANE, sprite->getLocalBoundingBox().x, sprite->getLocalBoundingBox().y);
+    
+    Mesh *bbBoxMesh = boundingBoxPreview->getMesh();
+    bbBoxMesh->clearMesh();
+    bbBoxMesh->indexedMesh = true;
+    
+    Vector3 bBox = sprite->getLocalBoundingBox();
+    
+    SpriteFrame frame;
+    
+    frame.coordinates.x = 0.0;
+    frame.coordinates.y = 0.0;
+    Vector3 bBoxNorm = bBox;
+    bBoxNorm.Normalize();
+    frame.coordinates.w = bBoxNorm.x;
+    frame.coordinates.h = bBoxNorm.y;
+    
+    bbBoxMesh->addVertex(-bBox.x * 0.5, bBox.y * 0.5, 0.0, frame.coordinates.x, frame.coordinates.y);
+    bbBoxMesh->addVertex((-bBox.x * 0.5)+bBox.x, bBox.y * 0.5, 0.0, frame.coordinates.x+frame.coordinates.w, frame.coordinates.y);
+    bbBoxMesh->addVertex((-bBox.x * 0.5)+bBox.x, bBox.y * 0.5 - bBox.y, 0.0, frame.coordinates.x+frame.coordinates.w, frame.coordinates.y + frame.coordinates.h);
+    bbBoxMesh->addVertex(-bBox.x * 0.5, bBox.y * 0.5 - bBox.y, 0.0, frame.coordinates.x, frame.coordinates.y + frame.coordinates.h);
+    
+    bbBoxMesh->addIndexedFace(0,1);
+    bbBoxMesh->addIndexedFace(1,2);
+    bbBoxMesh->addIndexedFace(2,3);
+    bbBoxMesh->addIndexedFace(3,0);
+    
+    bbBoxMesh->dirtyArrays();
 
 
 }
 }
 
 
@@ -2468,7 +2507,12 @@ bool PolycodeSpriteEditor::openFile(OSFileEntry filePath) {
 }
 }
 
 
 void PolycodeSpriteEditor::saveFile() {
 void PolycodeSpriteEditor::saveFile() {
-
+    Object fileObject;
+    
+    
+    
+    
+    fileObject.saveToXML(filePath);
 }
 }
 
 
 void PolycodeSpriteEditor::Resize(int x, int y) {
 void PolycodeSpriteEditor::Resize(int x, int y) {