Просмотр исходного кода

Sprites are now previewed in the asset browser

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

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

@@ -104,9 +104,7 @@ void SceneSprite::setSpriteByName(String spriteName) {
 }
 
 void SceneSprite::setSprite(Sprite *spriteEntry) {
-    if(spriteEntry->getParentSpriteSet() != spriteSet) {
-        setSpriteSet(spriteEntry->getParentSpriteSet());
-    }
+    setSpriteSet(spriteEntry->getParentSpriteSet());
     currentSprite = spriteEntry;
     currentSpriteState = NULL;
 }
@@ -114,6 +112,12 @@ void SceneSprite::setSprite(Sprite *spriteEntry) {
 void SceneSprite::setSpriteSet(SpriteSet *spriteSet) {
     this->spriteSet = spriteSet;
     setTexture(spriteSet->getTexture());
+    
+    if(getLocalShaderOptions()) {
+        getLocalShaderOptions()->clearTexture("diffuse");
+        getLocalShaderOptions()->addTexture("diffuse", getTexture());
+    }
+    
     currentSprite = NULL;
     currentSpriteState = NULL;
 }

+ 1 - 0
IDE/Contents/Include/TextureBrowser.h

@@ -42,6 +42,7 @@ class AssetEntry : public UIElement {
 		~AssetEntry();
 		
 		UIRect *imageShape;
+        SceneSprite *spritePreview;
 		UILabel *nameLabel;
 		
 		String assetPath;

+ 31 - 2
IDE/Contents/Source/TextureBrowser.cpp

@@ -43,6 +43,8 @@ AssetEntry::AssetEntry(String assetPath, String assetName, String extension, Res
 	imageShape->setAnchorPoint(-1.0, -1.0, 0.0);
 	addChild(imageShape);
 	
+    spritePreview = NULL;
+    
 	extension = extension.toLowerCase();
 	
 	if(extension == "png") {
@@ -64,7 +66,31 @@ AssetEntry::AssetEntry(String assetPath, String assetName, String extension, Res
     } else if(extension == "material_resource") {
 		imageShape->loadTexture("browserIcons/material_resource_icon.png");
     } else if(extension == "sprite_resource") {
-		imageShape->loadTexture("browserIcons/sprite_icon.png");
+		imageShape->visible = false;
+        
+        SpriteSet *spriteSet = (SpriteSet*) CoreServices::getInstance()->getResourceManager()->getResourcePoolByName(assetPath);
+        if(spriteSet) {
+            spritePreview = new SceneSprite(spriteSet);
+            spritePreview->setSpriteByName(assetName);
+            if(spritePreview->getCurrentSprite()) {
+                if(spritePreview->getCurrentSprite()->getNumStates() > 0) {
+                    spritePreview->setSpriteState(spritePreview->getCurrentSprite()->getState(0), 0, false);
+                }
+            }
+            addChild(spritePreview);
+            spritePreview->setBlendingMode(Renderer::BLEND_MODE_NORMAL);
+            
+            spritePreview->setPosition(28+32, 10+32);
+            
+            Number spriteScale = 1.0;
+            if(spritePreview->getHeight() > spritePreview->getWidth()) {
+                spriteScale = 64.0 / spritePreview->getHeight();
+            } else {
+                spriteScale = 64.0 / spritePreview->getWidth();
+            }
+            spritePreview->setScale(spriteScale, spriteScale, 1.0);
+            
+        }
     }
 
 	
@@ -85,6 +111,9 @@ AssetEntry::~AssetEntry() {
 	delete imageShape;
 	delete nameLabel;
 	delete selectShape;
+    if(spritePreview) {
+        delete spritePreview;
+    }
 }
 
 AssetList::AssetList() : UIElement() {
@@ -138,7 +167,7 @@ void AssetList::showResourcePool(ResourcePool *pool, int resourceFilter) {
     }
     
 	for(int i=0; i < resources.size(); i++) {
-        AssetEntry *newEntry = new AssetEntry("", resources[i]->getResourceName(), extension, resources[i]);
+        AssetEntry *newEntry = new AssetEntry(pool->getName(), resources[i]->getResourceName(), extension, resources[i]);
         newEntry->selectShape->addEventListener(this, InputEvent::EVENT_MOUSEDOWN);
         assetEntries.push_back(newEntry);
         newEntry->setPosition(xPos, yPos);