Jelajahi Sumber

Update ImageAsset.h

update macros to share target functionality
add extra check to see if image asset exists.
marauder2k7 6 bulan lalu
induk
melakukan
465c79f39d
1 mengubah file dengan 37 tambahan dan 11 penghapusan
  1. 37 11
      Engine/source/T3D/assets/ImageAsset.h

+ 37 - 11
Engine/source/T3D/assets/ImageAsset.h

@@ -614,11 +614,15 @@ public:
          {                                                                                                                                                                    \
             imageAssetId = query.mAssetList[0];                                                                                                                               \
          }                                                                                                                                                                    \
-         else if(Torque::FS::IsFile(_in))                                                                                                                                     \
+         else if(Torque::FS::IsFile(_in) || (_in[0] == '$' || _in[0] == '#'))                                                                                                 \
          {                                                                                                                                                                    \
-            ImageAsset* privateImage = new ImageAsset();                                                                                                                      \
-            privateImage->setImageFile(_in);                                                                                                                                  \
-            imageAssetId = AssetDatabase.addPrivateAsset(privateImage);                                                                                                       \
+            imageAssetId = ImageAsset::getAssetIdByFilename(_in);                                                                                                             \
+            if (imageAssetId == ImageAsset::smNoImageAssetFallback)                                                                                                           \
+            {                                                                                                                                                                 \
+               ImageAsset* privateImage = new ImageAsset();                                                                                                                   \
+               privateImage->setImageFile(_in);                                                                                                                               \
+               imageAssetId = AssetDatabase.addPrivateAsset(privateImage);                                                                                                    \
+            }                                                                                                                                                                 \
          }                                                                                                                                                                    \
          m##name##Asset = imageAssetId;                                                                                                                                       \
       }                                                                                                                                                                       \
@@ -641,7 +645,6 @@ public:
    void _set##name(StringTableEntry _in){                                                                                                                                     \
       if(m##name##Asset.getAssetId() == _in)                                                                                                                                  \
          return;                                                                                                                                                              \
-                                                                                                                                                                              \
       if(!AssetDatabase.isDeclaredAsset(_in))                                                                                                                                 \
       {                                                                                                                                                                       \
          StringTableEntry imageAssetId = StringTable->EmptyString();                                                                                                          \
@@ -651,11 +654,21 @@ public:
          {                                                                                                                                                                    \
             imageAssetId = query.mAssetList[0];                                                                                                                               \
          }                                                                                                                                                                    \
-         m##name##Asset = imageAssetId;                                                                                                                                       \
+         else if(Torque::FS::IsFile(_in) || (_in[0] == '$' || _in[0] == '#'))                                                                                                 \
+         {                                                                                                                                                                    \
+            imageAssetId = ImageAsset::getAssetIdByFilename(_in);                                                                                                             \
+            if (imageAssetId == ImageAsset::smNoImageAssetFallback)                                                                                                           \
+            {                                                                                                                                                                 \
+               ImageAsset* privateImage = new ImageAsset();                                                                                                                   \
+               privateImage->setImageFile(_in);                                                                                                                               \
+               imageAssetId = AssetDatabase.addPrivateAsset(privateImage);                                                                                                    \
+            }                                                                                                                                                                 \
+         }                                                                                                                                                                    \
+         m##name##Asset[index] = imageAssetId;                                                                                                                                \
       }                                                                                                                                                                       \
       else                                                                                                                                                                    \
       {                                                                                                                                                                       \
-         m##name##Asset = _in;                                                                                                                                                \
+         m##name##Asset[index] = _in;                                                                                                                                         \
       }                                                                                                                                                                       \
       setMaskBits(mask);                                                                                                                                                      \
    };                                                                                                                                                                         \
@@ -688,9 +701,13 @@ public:
          }                                                                                                                                                                    \
          else if(Torque::FS::IsFile(_in) || (_in[0] == '$' || _in[0] == '#'))                                                                                                 \
          {                                                                                                                                                                    \
-            ImageAsset* privateImage = new ImageAsset();                                                                                                                      \
-            privateImage->setImageFile(_in);                                                                                                                                  \
-            imageAssetId = AssetDatabase.addPrivateAsset(privateImage);                                                                                                       \
+            imageAssetId = ImageAsset::getAssetIdByFilename(_in);                                                                                                             \
+            if (imageAssetId == ImageAsset::smNoImageAssetFallback)                                                                                                           \
+            {                                                                                                                                                                 \
+               ImageAsset* privateImage = new ImageAsset();                                                                                                                   \
+               privateImage->setImageFile(_in);                                                                                                                               \
+               imageAssetId = AssetDatabase.addPrivateAsset(privateImage);                                                                                                    \
+            }                                                                                                                                                                 \
          }                                                                                                                                                                    \
          m##name##Asset[index] = imageAssetId;                                                                                                                                \
       }                                                                                                                                                                       \
@@ -714,7 +731,6 @@ public:
    void _set##name(StringTableEntry _in, const U32& index){                                                                                                                   \
       if(m##name##Asset[index].getAssetId() == _in)                                                                                                                           \
          return;                                                                                                                                                              \
-                                                                                                                                                                              \
       if(!AssetDatabase.isDeclaredAsset(_in))                                                                                                                                 \
       {                                                                                                                                                                       \
          StringTableEntry imageAssetId = StringTable->EmptyString();                                                                                                          \
@@ -724,6 +740,16 @@ public:
          {                                                                                                                                                                    \
             imageAssetId = query.mAssetList[0];                                                                                                                               \
          }                                                                                                                                                                    \
+         else if(Torque::FS::IsFile(_in) || (_in[0] == '$' || _in[0] == '#'))                                                                                                 \
+         {                                                                                                                                                                    \
+            imageAssetId = ImageAsset::getAssetIdByFilename(_in);                                                                                                             \
+            if (imageAssetId == ImageAsset::smNoImageAssetFallback)                                                                                                           \
+            {                                                                                                                                                                 \
+               ImageAsset* privateImage = new ImageAsset();                                                                                                                   \
+               privateImage->setImageFile(_in);                                                                                                                               \
+               imageAssetId = AssetDatabase.addPrivateAsset(privateImage);                                                                                                    \
+            }                                                                                                                                                                 \
+         }                                                                                                                                                                    \
          m##name##Asset[index] = imageAssetId;                                                                                                                                \
       }                                                                                                                                                                       \
       else                                                                                                                                                                    \