Browse Source

various fixes around preview assets and imageassets text field

Imageasset text field now displays correctly in inspector
previews now use assets again
assetBrowser hides previewCache folder
marauder2k7 6 months ago
parent
commit
50f74368b3

+ 22 - 10
Engine/source/T3D/assets/ImageAsset.h

@@ -233,10 +233,10 @@ DefineEnumType(ImageAssetType);
 
 #pragma region Refactor Asset Macros
 
-#define DECLARE_IMAGEASSET(className, name, profile)                                                                                                                 \
+#define DECLARE_IMAGEASSET(className, name, profile)                                                                                                                          \
 private:                                                                                                                                                                      \
-   AssetPtr<ImageAsset> m##name##Asset;\
-   String               m##name##File;\
+   AssetPtr<ImageAsset> m##name##Asset;                                                                                                                                       \
+   StringTableEntry     m##name##File  = StringTable->EmptyString();                                                                                                          \
 public:                                                                                                                                                                       \
    void _set##name(StringTableEntry _in){                                                                                                                                     \
       if(m##name##Asset.getAssetId() == _in)                                                                                                                                  \
@@ -244,6 +244,7 @@ public:
       if(_in == NULL || _in == StringTable->EmptyString())                                                                                                                    \
       {                                                                                                                                                                       \
          m##name##Asset = NULL;                                                                                                                                               \
+         m##name##File = "";                                                                                                                                                  \
          return;                                                                                                                                                              \
       }                                                                                                                                                                       \
       if(!AssetDatabase.isDeclaredAsset(_in))                                                                                                                                 \
@@ -271,10 +272,12 @@ public:
             imageAssetId = ImageAsset::smNoImageAssetFallback;                                                                                                                \
          }                                                                                                                                                                    \
          m##name##Asset = imageAssetId;                                                                                                                                       \
+         m##name##File = _in;                                                                                                                                                 \
       }                                                                                                                                                                       \
       else                                                                                                                                                                    \
       {                                                                                                                                                                       \
          m##name##Asset = _in;                                                                                                                                                \
+         m##name##File = get##name##File();                                                                                                                                   \
       }                                                                                                                                                                       \
    };                                                                                                                                                                         \
                                                                                                                                                                               \
@@ -285,10 +288,10 @@ public:
    StringTableEntry get##name##File(){ return m##name##Asset.notNull() ? m##name##Asset->getImageFile() : ""; }
 
 
-#define DECLARE_IMAGEASSET_NET(className, name, profile, mask)                                                                                                       \
+#define DECLARE_IMAGEASSET_NET(className, name, profile, mask)                                                                                                                \
 private:                                                                                                                                                                      \
    AssetPtr<ImageAsset> m##name##Asset;                                                                                                                                       \
-   String               m##name##File;\
+   StringTableEntry     m##name##File  = StringTable->EmptyString();                                                                                                          \
 public:                                                                                                                                                                       \
    void _set##name(StringTableEntry _in){                                                                                                                                     \
       if(m##name##Asset.getAssetId() == _in)                                                                                                                                  \
@@ -296,6 +299,7 @@ public:
       if(_in == NULL || _in == StringTable->EmptyString())                                                                                                                    \
       {                                                                                                                                                                       \
          m##name##Asset = NULL;                                                                                                                                               \
+         m##name##File = "";                                                                                                                                                  \
          setMaskBits(mask);                                                                                                                                                   \
          return;                                                                                                                                                              \
       }                                                                                                                                                                       \
@@ -324,10 +328,12 @@ public:
             imageAssetId = ImageAsset::smNoImageAssetFallback;                                                                                                                \
          }                                                                                                                                                                    \
          m##name##Asset = imageAssetId;                                                                                                                                       \
+         m##name##File = _in;                                                                                                                                                 \
       }                                                                                                                                                                       \
       else                                                                                                                                                                    \
       {                                                                                                                                                                       \
          m##name##Asset = _in;                                                                                                                                                \
+         m##name##File = get##name##File();                                                                                                                                   \
       }                                                                                                                                                                       \
       setMaskBits(mask);                                                                                                                                                      \
    };                                                                                                                                                                         \
@@ -339,15 +345,15 @@ public:
    StringTableEntry get##name##File(){ return m##name##Asset.notNull() ? m##name##Asset->getImageFile() : ""; }
 
 
-#define INITPERSISTFIELD_IMAGEASSET(name, consoleClass, docs)                                                                                                        \
+#define INITPERSISTFIELD_IMAGEASSET(name, consoleClass, docs)                                                                                                                 \
    addProtectedField(assetText(name, Asset), TypeImageAssetPtr, Offset(m##name##Asset, consoleClass), _set##name##Data, &defaultProtectedGetFn, assetDoc(name, asset docs.)); \
    addProtectedField(assetText(name, File), TypeFilename, Offset(m##name##File, consoleClass), _set##name##Data, &defaultProtectedGetFn, assetDoc(name, file docs.));
 
 
-#define DECLARE_IMAGEASSET_ARRAY(className, name, profile, max)                                                                                                      \
+#define DECLARE_IMAGEASSET_ARRAY(className, name, profile, max)                                                                                                               \
 private:                                                                                                                                                                      \
    AssetPtr<ImageAsset> m##name##Asset[max];                                                                                                                                  \
-   String               m##name##File[max];\
+   StringTableEntry     m##name##File[max] = {StringTable->EmptyString() };                                                                                                   \
 public:                                                                                                                                                                       \
    void _set##name(StringTableEntry _in, const U32& index){                                                                                                                   \
       if(m##name##Asset[index].getAssetId() == _in)                                                                                                                           \
@@ -355,6 +361,7 @@ public:
       if(_in == NULL || _in == StringTable->EmptyString())                                                                                                                    \
       {                                                                                                                                                                       \
          m##name##Asset[index] = NULL;                                                                                                                                        \
+         m##name##File[index] = "";                                                                                                                                           \
          return;                                                                                                                                                              \
       }                                                                                                                                                                       \
       if(!AssetDatabase.isDeclaredAsset(_in))                                                                                                                                 \
@@ -382,10 +389,12 @@ public:
             imageAssetId = ImageAsset::smNoImageAssetFallback;                                                                                                                \
          }                                                                                                                                                                    \
          m##name##Asset[index] = imageAssetId;                                                                                                                                \
+         m##name##File[index] = _in;                                                                                                                                          \
       }                                                                                                                                                                       \
       else                                                                                                                                                                    \
       {                                                                                                                                                                       \
          m##name##Asset[index] = _in;                                                                                                                                         \
+         m##name##File[index] = get##name##File(index);                                                                                                                       \
       }                                                                                                                                                                       \
    };                                                                                                                                                                         \
                                                                                                                                                                               \
@@ -397,10 +406,10 @@ public:
    StringTableEntry get##name##File(const U32& idx){ return m##name##Asset[idx].notNull() ? m##name##Asset[idx]->getImageFile() : ""; }
 
 
-#define DECLARE_IMAGEASSET_ARRAY_NET(className, name, profile, max, mask)                                                                                            \
+#define DECLARE_IMAGEASSET_ARRAY_NET(className, name, profile, max, mask)                                                                                                     \
 private:                                                                                                                                                                      \
    AssetPtr<ImageAsset> m##name##Asset[max];                                                                                                                                  \
-   String               m##name##File[max];\
+   StringTableEntry     m##name##File[max] = {StringTable->EmptyString() };                                                                                                   \
 public:                                                                                                                                                                       \
    void _set##name(StringTableEntry _in, const U32& index){                                                                                                                   \
       if(m##name##Asset[index].getAssetId() == _in)                                                                                                                           \
@@ -408,6 +417,7 @@ public:
       if(_in == NULL || _in == StringTable->EmptyString())                                                                                                                    \
       {                                                                                                                                                                       \
          m##name##Asset[index] = NULL;                                                                                                                                        \
+         m##name##File[index] = "";                                                                                                                                           \
          setMaskBits(mask);                                                                                                                                                   \
          return;                                                                                                                                                              \
       }                                                                                                                                                                       \
@@ -436,10 +446,12 @@ public:
             imageAssetId = ImageAsset::smNoImageAssetFallback;                                                                                                                \
          }                                                                                                                                                                    \
          m##name##Asset[index] = imageAssetId;                                                                                                                                \
+         m##name##File[index] = _in;                                                                                                                                          \
       }                                                                                                                                                                       \
       else                                                                                                                                                                    \
       {                                                                                                                                                                       \
          m##name##Asset[index] = _in;                                                                                                                                         \
+         m##name##File[index] = get##name##File(index);                                                                                                                       \
       }                                                                                                                                                                       \
       setMaskBits(mask);                                                                                                                                                      \
    };                                                                                                                                                                         \

+ 17 - 0
Engine/source/console/console.cpp

@@ -2226,6 +2226,23 @@ bool stripRepeatSlashes(char* pDstPath, const char* pSrcPath, S32 dstSize)
 
 //-----------------------------------------------------------------------------
 
+DefineEngineFunction(expandPath, const char*, (const char* path),, "(string path) - Expands an expando or relative path into a full path.")
+{
+   char* ret = Con::getReturnBuffer(1024);
+   Con::expandPath(ret, 1024, path);
+   return ret;
+}
+
+//-----------------------------------------------------------------------------
+
+DefineEngineFunction(collapsePath, const char*, (const char* path), , "(string path) - Collapses a path into either an expando path or a relative path.")
+{
+   char* ret = Con::getReturnBuffer(1024);
+   Con::collapsePath(ret, 1024, path);
+   return ret;
+}
+
+
 DefineEngineFunction( log, void, ( const char* message ),,
    "@brief Logs a message to the console.\n\n"
    "@param message The message text.\n"

+ 2 - 2
Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript

@@ -258,7 +258,7 @@ function AssetBrowser::initialize(%this)
       
    if(!isObject(%this.dirHandler))
    {
-      %this.dirHandler = makedirectoryHandler(%this-->filterTree, "cache,shaderCache", ""); 
+      %this.dirHandler = makedirectoryHandler(%this-->filterTree, "cache,shaderCache,previewCache", ""); 
       %this.dirHandler.currentAddress = "data/";
    }
       
@@ -1613,7 +1613,7 @@ function AssetBrowser::doRebuildAssetArray(%this)
             else
             {
                //got it.	
-               if(%folderName $= "shaderCache" || %folderName $= "cache" || %folderName $= ".git")
+               if(%folderName $= "shaderCache" || %folderName $= "cache" || %folderName $= ".git" || %folderName $= "previewCache")
                   continue;
                   
                if(!%this.coreModulesFilter && %folderName $= "core" && %breadcrumbPath $= "")

+ 28 - 4
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript

@@ -42,29 +42,53 @@ function ImageAsset::generatePreviewImage(%this, %previewButton, %forceRegenerat
    if(%forceRegenerate $= "")
       %forceRegenerate = false;
       
-   %previewPath = "tools/resources/previewCache/" @ %previewButton.moduleName @ "/";
+   %previewPath =  "tools/resources/previewCache/" @ %previewButton.moduleName @ "/";
    
    if(!IsDirectory(%previewPath))
    {
       $CurrentAssetBrowser.dirHandler.createFolder(%previewPath);
    }
    
-   %previewFilePath = %previewPath @ %this.assetName @ ".png";
+   %previewFilePath = %previewPath @ %this.assetName @ "_Preview.png";
    
    if(!isFile(%previewFilePath) || (compareFileTimes(%this.getImagePath(), %previewFilePath) == 1))
    {
       %generatePreview = true;
    }
 
+   %previewAssetName = "ToolsModule:" @ %this.assetName @ "_Preview";
+
    if(%generatePreview || %forceRegenerate)
    {
       %success = saveScaledImage(%this.getImagePath(), %previewFilePath, EditorSettings.value("Assets/Browser/PreviewImageSize"));
       
       if(%success)
-         %previewButton.setBitmap(%previewFilePath);
-      
+      {
+         
+         if(!AssetDatabase.isDeclaredAsset(%previewAssetName))
+         {
+            %preview_Asset = new ImageAsset()
+            {
+               assetName = %this.assetName @ "_Preview";
+               versionId = 1;
+               imageFile = makeFullPath(%previewFilePath);
+            };
+
+            TamlWrite(%preview_Asset, expandPath("^ToolsModule/resources/previewCache/" @ %previewButton.moduleName @ "/" @ %preview_Asset.AssetName @ ".asset.taml"));
+            %toolsModuleDef = ModuleDatabase.findModule("ToolsModule",1);
+            AssetDatabase.addDeclaredAsset(%toolsModuleDef, expandPath("^ToolsModule/resources/previewCache/" @ %previewButton.moduleName @ "/" @ %preview_Asset.AssetName @ ".asset.taml"));
+         }
+
+         %previewButton.bitmapAsset = %previewAssetName;
+      }
+
       return %success;
    }
+   else
+   {
+      %previewButton.bitmapAsset = %previewAssetName;
+      return true;
+   }
    
    return false;
 }

+ 28 - 7
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript

@@ -101,8 +101,7 @@ function MaterialAsset::generatePreviewImage(%this, %previewButton, %forceRegene
    if(%forceRegenerate $= "")
       %forceRegenerate = false;
       
-   %module = $CurrentAssetBrowser.dirHandler.getModuleFromAddress(makeRelativePath(filePath(AssetDatabase.getAssetFilePath(%this.getAssetId()))));
-   %previewPath = "tools/resources/previewCache/" @ %module.moduleId @ "/";
+   %previewPath =  "tools/resources/previewCache/" @ %previewButton.moduleName @ "/";
 
    if(!IsDirectory(%previewPath))
    {
@@ -111,7 +110,8 @@ function MaterialAsset::generatePreviewImage(%this, %previewButton, %forceRegene
 
    %generatePreview = false;
 
-   %previewFilePath = %previewPath @ %this.assetName @ ".png";
+   %previewFilePath = %previewPath @ %this.assetName @ "_Preview.png";
+   
    if(!isFile(%previewFilePath))
    {
       %generatePreview = true;
@@ -126,6 +126,8 @@ function MaterialAsset::generatePreviewImage(%this, %previewButton, %forceRegene
       }
    }
 
+   %previewAssetName = "ToolsModule:" @ %this.assetName @ "_Preview";
+
    if(%generatePreview || %forceRegenerate)
    {
       if(isObject(%this.materialDefinitionName))
@@ -137,22 +139,41 @@ function MaterialAsset::generatePreviewImage(%this, %previewButton, %forceRegene
             %diffuseMapAsset = AssetDatabase.acquireAsset(%diffuseMapAssetId);
             AssetDatabase.releaseAsset(%diffuseMapAssetId);
          }
+
          %previewShapeDef = AssetDatabase.acquireAsset("ToolsModule:previewSphereShape");
          %generatedFilePath = %previewShapeDef.generateCachedPreviewImage(256, %this.materialDefinitionName);
       
          pathCopy(%generatedFilePath, %previewFilePath, false);
          fileDelete(%generatedFilePath);
 
-         if(isFile(%previewFilePath))
+         if(!AssetDatabase.isDeclaredAsset(%previewAssetName))
          {
-            %previewButton.setBitmap(%previewFilePath);
-            return true;
+            %preview_Asset = new ImageAsset()
+            {
+               assetName = %this.assetName @ "_Preview";
+               versionId = 1;
+               imageFile = makeFullPath(%previewFilePath);
+            };
+
+            TamlWrite(%preview_Asset, expandPath("^ToolsModule/resources/previewCache/" @ %previewButton.moduleName @ "/" @ %preview_Asset.AssetName @ ".asset.taml"));
+            %toolsModuleDef = ModuleDatabase.findModule("ToolsModule",1);
+            AssetDatabase.addDeclaredAsset(%toolsModuleDef, expandPath("^ToolsModule/resources/previewCache/" @ %previewButton.moduleName @ "/" @ %preview_Asset.AssetName @ ".asset.taml"));
          }
 
+         %previewButton.bitmapAsset = %previewAssetName;
+         return true;
+      }
+      else
+      {
          return false;
       }
    }
-      
+   else
+   {
+      %previewButton.bitmapAsset = %previewAssetName;
+      return true;
+   }
+   
    return false;
 }
 

+ 24 - 12
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript

@@ -111,23 +111,21 @@ function ShapeAsset::generatePreviewImage(%this, %previewButton, %forceRegenerat
    if(%forceRegenerate $= "")
       %forceRegenerate = false;
       
-   %assetId = %this.getAssetId();
-
-   %module = %previewButton.assetBrowser.dirHandler.getModuleFromAddress(makeRelativePath(filePath(%this.getShapePath())));
-   %previewPath = "tools/resources/previewCache/" @ %module.moduleId @ "/";
+   %previewPath =  "tools/resources/previewCache/" @ %previewButton.moduleName @ "/";
    
    if(!IsDirectory(%previewPath))
    {
-      %previewButton.assetBrowser.dirHandler.createFolder(%previewPath);
+      $CurrentAssetBrowser.dirHandler.createFolder(%previewPath);
    }
    
-   %generatePreview = false;
+   %previewFilePath = %previewPath @ %this.assetName @ "_Preview.png";
    
-   %previewFilePath = %previewPath @ %this.assetName @ ".png";
    if(!isFile(%previewFilePath) || (compareFileTimes(%this.getShapePath(), %previewFilePath) == 1))
    {
       %generatePreview = true;
    }
+
+   %previewAssetName = "ToolsModule:" @ %this.assetName @ "_Preview";
    
    if(%generatePreview || %forceRegenerate)
    {
@@ -146,14 +144,28 @@ function ShapeAsset::generatePreviewImage(%this, %previewButton, %forceRegenerat
       
       pathCopy(%filePath, %previewFilePath, false);
       fileDelete(%filePath); //cleanup
-      
-      if(isFile(%previewFilePath))
+
+      if(!AssetDatabase.isDeclaredAsset(%previewAssetName))
       {
-         %previewButton.setBitmap(%previewFilePath);
-         return true;
+         %preview_Asset = new ImageAsset()
+         {
+            assetName = %this.assetName @ "_Preview";
+            versionId = 1;
+            imageFile = makeFullPath(%previewFilePath);
+         };
+
+         TamlWrite(%preview_Asset, expandPath("^ToolsModule/resources/previewCache/" @ %previewButton.moduleName @ "/" @ %preview_Asset.AssetName @ ".asset.taml"));
+         %toolsModuleDef = ModuleDatabase.findModule("ToolsModule",1);
+         AssetDatabase.addDeclaredAsset(%toolsModuleDef, expandPath("^ToolsModule/resources/previewCache/" @ %previewButton.moduleName @ "/" @ %preview_Asset.AssetName @ ".asset.taml"));
       }
 
-      return false;
+      %previewButton.bitmapAsset = %previewAssetName;
+      return true;
+   }
+   else
+   {
+      %previewButton.bitmapAsset = %previewAssetName;
+      return true;
    }
    
    return false;