diff --git a/Engine/source/T3D/assets/ImageAsset.h b/Engine/source/T3D/assets/ImageAsset.h index c584b5b8d..0021b4e0d 100644 --- a/Engine/source/T3D/assets/ImageAsset.h +++ b/Engine/source/T3D/assets/ImageAsset.h @@ -244,7 +244,8 @@ DefineEnumType(ImageAssetType); #define DECLARE_IMAGEASSET(className, name, profile) \ private: \ - AssetPtr m##name##Asset; \ + AssetPtr m##name##Asset;\ + String m##name##File;\ public: \ void _set##name(StringTableEntry _in){ \ if(m##name##Asset.getAssetId() == _in) \ @@ -263,7 +264,7 @@ public: { \ imageAssetId = query.mAssetList[0]; \ } \ - else if(Torque::FS::IsFile(_in) || (_in[0] == '$' || _in[0] == '#')) \ + else if(Torque::FS::IsFile(_in)) \ { \ imageAssetId = ImageAsset::getAssetIdByFilename(_in); \ if (imageAssetId == ImageAsset::smNoImageAssetFallback) \ @@ -296,6 +297,7 @@ public: #define DECLARE_IMAGEASSET_NET(className, name, profile, mask) \ private: \ AssetPtr m##name##Asset; \ + String m##name##File;\ public: \ void _set##name(StringTableEntry _in){ \ if(m##name##Asset.getAssetId() == _in) \ @@ -347,12 +349,14 @@ public: #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, 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) \ private: \ AssetPtr m##name##Asset[max]; \ + String m##name##File[max];\ public: \ void _set##name(StringTableEntry _in, const U32& index){ \ if(m##name##Asset[index].getAssetId() == _in) \ @@ -405,6 +409,7 @@ public: #define DECLARE_IMAGEASSET_ARRAY_NET(className, name, profile, max, mask) \ private: \ AssetPtr m##name##Asset[max]; \ + String m##name##File[max];\ public: \ void _set##name(StringTableEntry _in, const U32& index){ \ if(m##name##Asset[index].getAssetId() == _in) \ diff --git a/Engine/source/gui/buttons/guiBitmapButtonCtrl.h b/Engine/source/gui/buttons/guiBitmapButtonCtrl.h index a4d9351e4..773f7eb2c 100644 --- a/Engine/source/gui/buttons/guiBitmapButtonCtrl.h +++ b/Engine/source/gui/buttons/guiBitmapButtonCtrl.h @@ -118,7 +118,11 @@ class GuiBitmapButtonCtrl : public GuiButtonCtrl, protected AssetPtrCallback /// BitmapMode mBitmapMode; -private: AssetPtr mBitmapAsset; public: void _setBitmap(StringTableEntry _in) { +private: + AssetPtr mBitmapAsset; + String mBitmapFile; +public: + void _setBitmap(StringTableEntry _in) { if (mBitmapAsset.getAssetId() == _in) return; if (!AssetDatabase.isDeclaredAsset(_in)) { StringTableEntry imageAssetId = ImageAsset::smNoImageAssetFallback; AssetQuery query; S32 foundAssetcount = AssetDatabase.findAssetLooseFile(&query, _in); if (foundAssetcount != 0) { imageAssetId = query.mAssetList[0]; diff --git a/Engine/source/gui/controls/guiBitmapCtrl.cpp b/Engine/source/gui/controls/guiBitmapCtrl.cpp index bcf667361..b169d0ba8 100644 --- a/Engine/source/gui/controls/guiBitmapCtrl.cpp +++ b/Engine/source/gui/controls/guiBitmapCtrl.cpp @@ -121,7 +121,7 @@ void GuiBitmapCtrl::setBitmap(const char* name, bool resize) if (assetId != StringTable->EmptyString()) _setBitmap(assetId); else - return; + _setBitmap(name); } mBitmap = mBitmapAsset->getTexture(&GFXDefaultGUIProfile); diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript index 9dcd48e63..a1e95cfcf 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript @@ -740,7 +740,7 @@ function AssetBrowser::buildAssetPreview( %this, %asset, %moduleName ) %previewButton.assetType = %assetType; %previewButton.assetBrowser = %this; - %previewButton.bitmapAsset = %this.previewData.previewImage; + %previewButton.setBitmap(%this.previewData.previewImage); %previewButton.profile = "AssetBrowserPreview" @ %previewButton.assetType; %previewButton.tooltip = %this.previewData.tooltip; @@ -789,21 +789,15 @@ function AssetBrowser::doRefresh(%this) function AssetBrowser::populatePreviewImages(%this) { - if (AssetPreviewArray.count()>0) - echo("AssetBrowser::populatePreviewImages() - Previews to generate: " @ AssetPreviewArray.count()); - for(%i=0; %i < AssetPreviewArray.count(); %i++) { %previewButton = AssetPreviewArray.getKey(%i); %assetType = %previewButton.assetType; - echo(" - Generating preview for asset: " @ %previewButton.moduleName @ ":" @ %previewButton.assetName); - %this.callAssetTypeFunc(%assetType, "generatePreviewImage", %previewButton.moduleName, %previewButton.assetName, %previewButton); AssetPreviewArray.erase(%i); - - echo(" - done, scheduling another pass"); + %this.schedule(32, "populatePreviewImages"); return; } @@ -2764,12 +2758,13 @@ function getAssetPreviewImage(%asset) { %moduleName = AssetDatabase.getAssetModule(%asset).ModuleId; %assetName = AssetDatabase.getAssetName(%asset); - %previewAssetName = "ToolsModule:" @ %moduleName @ "_" @ %assetName @ "_PreviewImage"; - if(AssetDatabase.isDeclaredAsset(%previewAssetName)) + + %previewPath = "tools/resources/previewCache/" @ %moduleName @ "/"; + %previewFilePath = %previewPath @ %assetName @ ".png"; + + if(isFile(%previewFilePath)) { - %previewDef = AssetDatabase.acquireAsset(%previewAssetName); - %previewPath = %previewDef.getImagePath(); - AssetDatabase.releaseAsset(%previewAssetName); + %previewPath = %previewFilePath; } else { diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript index 3f938f78b..cce914b8e 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript @@ -4,7 +4,17 @@ function ImageAsset::buildBrowserElement(%this, %previewData) { //%module = %this.dirHandler.getModuleFromAddress(makeRelativePath(filePath(%assetDef.getImagePath()))); - %previewData.previewImage = %this.isNamedTarget() ? "Core_Rendering:namedTarget_image" : "ToolsModule:genericAssetIcon_image"; + if( %this.isNamedTarget()) + %previewImage = "Core_Rendering:namedTarget_image"; + else + { + %previewImage = getAssetPreviewImage(%this.getAssetId()); + if(!isFile(%previewImage)) + %previewImage = "ToolsModule:genericAssetIcon_image"; + } + + %previewData.previewImage = %previewImage; + %previewData.previewLoaded = %this.isNamedTarget() ? true : false;//this marks it for loading progressively later %previewData.assetName = %this.assetName; @@ -39,55 +49,20 @@ function ImageAsset::generatePreviewImage(%this, %previewButton, %forceRegenerat $CurrentAssetBrowser.dirHandler.createFolder(%previewPath); } - %previewFilePath = %previewPath @ %this.assetName @ "_Preview.png"; + %previewFilePath = %previewPath @ %this.assetName @ ".png"; if(!isFile(%previewFilePath) || (compareFileTimes(%this.getImagePath(), %previewFilePath) == 1)) { %generatePreview = true; } - - %previewAssetName = %previewButton.moduleName @ "_" @ %this.assetName @ "_PreviewImage"; - + if(%generatePreview || %forceRegenerate) { %success = saveScaledImage(%this.getImagePath(), %previewFilePath, EditorSettings.value("Assets/Browser/PreviewImageSize")); if(%success) - { - if(!AssetDatabase.isDeclaredAsset("ToolsModule:" @ %previewAssetName)) - { - %previewAsset = new ImageAsset() - { - assetName = %previewAssetName; - versionId = 1; - imageFile = makeFullPath(%previewFilePath); - }; - - %previewAssetName = "ToolsModule:" @ %previewAssetName; - %previewImgAssetPath = %previewPath @ %previewAsset.assetName @ ".asset.taml"; - %assetImportSuccessful = TAMLWrite(%previewAsset, %previewImgAssetPath); - - %toolsModuleDef = ModuleDatabase.findModule("ToolsModule",1); - - %success = AssetDatabase.addDeclaredAsset(%toolsModuleDef, %previewImgAssetPath); - - if(!%success) - { - return false; //failed to register the preview image for some reason? - } - } - - %previewButton.bitmapAsset = %previewAssetName; - return true; - } - } - else - { - //just map the existing one then - if(AssetDatabase.isDeclaredAsset("ToolsModule:" @ %previewAssetName)) - { - %previewButton.bitmapAsset = "ToolsModule:" @ %previewAssetName; - return true; - } + %previewButton.setBitmap(%previewFilePath); + + return %success; } return false; diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript index 05cada34d..420ca2b1b 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript @@ -64,7 +64,9 @@ function AssetBrowser::renameMaterialAsset(%this, %assetDef, %newAssetName) function MaterialAsset::buildBrowserElement(%this, %previewData) { - %previewData.previewImage = "ToolsModule:genericAssetIcon_image"; + %previewImage = getAssetPreviewImage(%this.getAssetId()); + + %previewData.previewImage = isFile(%previewImage) ? %previewImage : "ToolsModule:genericAssetIcon_image"; %previewData.previewLoaded = false; //this marks it for loading progressively later %previewData.assetName = %this.assetName; @@ -108,7 +110,7 @@ function MaterialAsset::generatePreviewImage(%this, %previewButton, %forceRegene %generatePreview = false; - %previewFilePath = %previewPath @ %this.assetName @ "_Preview.dds"; + %previewFilePath = %previewPath @ %this.assetName @ ".png"; if(!isFile(%previewFilePath)) { %generatePreview = true; @@ -123,8 +125,6 @@ function MaterialAsset::generatePreviewImage(%this, %previewButton, %forceRegene } } - %previewAssetName = %module.moduleId @ "_" @ %this.assetName @ "_PreviewImage"; - if(%generatePreview || %forceRegenerate) { if(isObject(%this.materialDefinitionName)) @@ -142,39 +142,13 @@ function MaterialAsset::generatePreviewImage(%this, %previewButton, %forceRegene pathCopy(%generatedFilePath, %previewFilePath, false); fileDelete(%generatedFilePath); - if(!AssetDatabase.isDeclaredAsset("ToolsModule:" @ %previewAssetName)) + if(isFile(%previewFilePath)) { - %previewAsset = new ImageAsset() - { - assetName = %previewAssetName; - versionId = 1; - imageFile = makeFullPath(%previewFilePath); - }; - - %previewImgAssetPath = %previewPath @ %previewAsset.assetName @ ".asset.taml"; - - %assetImportSuccessful = TAMLWrite(%previewAsset, %previewImgAssetPath); - %toolsModuleDef = ModuleDatabase.findModule("ToolsModule",1); - - %success = AssetDatabase.addDeclaredAsset(%toolsModuleDef, %previewImgAssetPath); - - if(!%success) - { - return false; //failed to register the preview image for some reason? - } + %previewButton.setBitmap(%previewFilePath); + return true; } - - %previewButton.bitmapAsset = "ToolsModule:" @ %previewAssetName; - return true; - } - } - else - { - //just map the existing one then - if(AssetDatabase.isDeclaredAsset("ToolsModule:" @ %previewAssetName)) - { - %previewButton.bitmapAsset = "ToolsModule:" @ %previewAssetName; - return true; + + return false; } } diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript index 6749c688f..dd337ecb6 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript @@ -28,7 +28,7 @@ function ShapeAsset::onDelete(%this) { //Special handle the cache preview image %module = $CurrentAssetBrowser.dirHandler.getModuleFromAddress(makeRelativePath(filePath(%this.getShapePath()))); - %previewPath = "tools/resources/previewCache/" @ %module.moduleId @ "/" @ %this.assetName @ "_Preview.dds"; + %previewPath = "tools/resources/previewCache/" @ %module.moduleId @ "/" @ %this.assetName @ ".png"; if(isFile(%previewPath)) { @@ -41,7 +41,9 @@ function ShapeAsset::onDelete(%this) function ShapeAsset::buildBrowserElement(%this, %previewData) { - %previewData.previewImage = "ToolsModule:genericAssetIcon_image"; + %previewImage = getAssetPreviewImage(%this.getAssetId()); + + %previewData.previewImage = isFile(%previewImage) ? %previewImage : "ToolsModule:genericAssetIcon_image"; %previewData.previewLoaded = false; //this marks it for loading progressively later %previewData.assetName = %this.assetName; @@ -88,18 +90,15 @@ function ShapeAsset::generatePreviewImage(%this, %previewButton, %forceRegenerat %generatePreview = false; - %previewFilePath = %previewPath @ %this.assetName @ "_Preview.dds"; + %previewFilePath = %previewPath @ %this.assetName @ ".png"; if(!isFile(%previewFilePath) || (compareFileTimes(%this.getShapePath(), %previewFilePath) == 1)) { %generatePreview = true; } - %previewAssetName = %module.moduleId @ "_" @ %this.assetName @ "_PreviewImage"; - if(%generatePreview || %forceRegenerate) { //real fast, we'll be 100% sure that the image resource we need is loaded - %matSlot0AssetId = %this.materialSlot0; if(AssetDatabase.isDeclaredAsset(%matSlot0AssetId)) { @@ -115,39 +114,13 @@ function ShapeAsset::generatePreviewImage(%this, %previewButton, %forceRegenerat pathCopy(%filePath, %previewFilePath, false); fileDelete(%filePath); //cleanup - if(!AssetDatabase.isDeclaredAsset("ToolsModule:" @ %previewAssetName)) + if(isFile(%previewFilePath)) { - %previewAsset = new ImageAsset() - { - assetName = %previewAssetName; - versionId = 1; - imageFile = makeFullPath(%previewFilePath); - }; - - %previewImgAssetPath = %previewPath @ %previewAsset.assetName @ ".asset.taml"; - - %assetImportSuccessful = TAMLWrite(%previewAsset, %previewImgAssetPath); - %toolsModuleDef = ModuleDatabase.findModule("ToolsModule",1); - - %success = AssetDatabase.addDeclaredAsset(%toolsModuleDef, %previewImgAssetPath); - - if(!%success) - { - return false; //failed to register the preview image for some reason? - } - } - - %previewButton.bitmapAsset = "ToolsModule:" @ %previewAssetName; - return true; - } - else - { - //just map the existing one then - if(AssetDatabase.isDeclaredAsset("ToolsModule:" @ %previewAssetName)) - { - %previewButton.bitmapAsset = "ToolsModule:" @ %previewAssetName; + %previewButton.setBitmap(%previewFilePath); return true; } + + return false; } return false;