Browse Source

error string interpreter, example of usage in shapebase::preload, plus flips the datablock filter back on to save some network bandwidth.

AzaezelX 4 years ago
parent
commit
8bb43dd5ae

+ 9 - 0
Engine/source/T3D/assets/ShapeAsset.cpp

@@ -113,6 +113,15 @@ ConsoleSetType(TypeShapeAssetId)
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 
+const String ShapeAsset::mErrCodeStrings[] =
+{
+   "TooManyVerts",
+   "TooManyBones",
+   "MissingAnimatons",
+   "UnKnown"
+};
+//-----------------------------------------------------------------------------
+
 ShapeAsset::ShapeAsset()
 ShapeAsset::ShapeAsset()
 {
 {
    mFileName = StringTable->EmptyString();
    mFileName = StringTable->EmptyString();

+ 10 - 1
Engine/source/T3D/assets/ShapeAsset.h

@@ -87,7 +87,16 @@ public:
    {
    {
       TooManyVerts = AssetErrCode::Extended,
       TooManyVerts = AssetErrCode::Extended,
       TooManyBones,
       TooManyBones,
-      MissingAnimatons
+      MissingAnimatons,
+      Extended
+   };
+
+   static const String mErrCodeStrings[ShapeAssetErrCode::Extended - Parent::Extended + 1];
+   static String getAssetErrstrn(U32 errCode)
+   {
+      if (errCode < Parent::Extended) return Parent::getAssetErrstrn(errCode);
+      if (errCode > ShapeAssetErrCode::Extended) return "undefined error";
+      return mErrCodeStrings[errCode];
    };
    };
 
 
    ShapeAsset();
    ShapeAsset();

+ 17 - 7
Engine/source/T3D/shapeBase.cpp

@@ -366,14 +366,14 @@ bool ShapeBaseData::preload(bool server, String &errorStr)
       shapeAssetId = ShapeAsset::getAssetIdByFilename(shapeName);
       shapeAssetId = ShapeAsset::getAssetIdByFilename(shapeName);
    }
    }
    U32 assetState = ShapeAsset::getAssetById(shapeAssetId, &shapeAsset);
    U32 assetState = ShapeAsset::getAssetById(shapeAssetId, &shapeAsset);
-   if (AssetErrCode::Failed != assetState)
+   if (ShapeAsset::Failed != assetState)
    {
    {
       //only clear the legacy direct file reference if everything checks out fully
       //only clear the legacy direct file reference if everything checks out fully
-      if (assetState == AssetErrCode::Ok)
+      if (assetState == ShapeAsset::Ok)
       {
       {
          shapeName = StringTable->EmptyString();
          shapeName = StringTable->EmptyString();
       }
       }
-   
+      else Con::warnf("Warning: ShapeBaseData::preload-%s", ShapeAsset::getAssetErrstrn(assetState).c_str());
       S32 i;
       S32 i;
 
 
       // Resolve shapename
       // Resolve shapename
@@ -798,10 +798,14 @@ void ShapeBaseData::packData(BitStream* stream)
    stream->write(shadowSphereAdjust);
    stream->write(shadowSphereAdjust);
 
 
 
 
-   //if (stream->writeFlag(shapeAsset.notNull()))
+   if (stream->writeFlag(shapeAsset.notNull()))
+   {
       stream->writeString(shapeAsset.getAssetId());
       stream->writeString(shapeAsset.getAssetId());
-   //else
+   }
+   else
+   {
       stream->writeString(shapeName);
       stream->writeString(shapeName);
+   }
 
 
    stream->writeString(cloakTexName);
    stream->writeString(cloakTexName);
    if(stream->writeFlag(mass != gShapeBaseDataProto.mass))
    if(stream->writeFlag(mass != gShapeBaseDataProto.mass))
@@ -880,10 +884,16 @@ void ShapeBaseData::unpackData(BitStream* stream)
    stream->read(&shadowSphereAdjust);
    stream->read(&shadowSphereAdjust);
 
 
 
 
-   //if (stream->readFlag())
+   if (stream->readFlag())
+   {
       shapeAssetId = stream->readSTString();
       shapeAssetId = stream->readSTString();
-   //else
+      ShapeAsset::getAssetById(shapeAssetId, &shapeAsset);
+      shapeName = shapeAsset->getShapeFilename();
+   }
+   else
+   {
       shapeName = stream->readSTString();
       shapeName = stream->readSTString();
+   }
 
 
    cloakTexName = stream->readSTString();
    cloakTexName = stream->readSTString();
    if(stream->readFlag())
    if(stream->readFlag())

+ 12 - 0
Engine/source/assets/assetBase.cpp

@@ -52,6 +52,18 @@ StringTableEntry assetInternalField = StringTable->insert("AssetInternal");
 StringTableEntry assetPrivateField = StringTable->insert("AssetPrivate");
 StringTableEntry assetPrivateField = StringTable->insert("AssetPrivate");
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
+const String AssetBase::mErrCodeStrings[] =
+{
+   "Failed",
+   "Ok",
+   "NotLoaded",
+   "BadFileReference",
+   "InvalidFormat",
+   "DependencyNotFound",
+   "FileTooLarge",
+   "UsingFallback",
+   "UnKnown"
+};
 
 
 AssetBase::AssetBase() :
 AssetBase::AssetBase() :
 mpOwningAssetManager(NULL),
 mpOwningAssetManager(NULL),

+ 20 - 14
Engine/source/assets/assetBase.h

@@ -55,20 +55,6 @@ extern StringTableEntry assetAutoUnloadField;
 //#define ASSET_BASE_AUTOUNLOAD_FIELD        "AssetAutoUnload"
 //#define ASSET_BASE_AUTOUNLOAD_FIELD        "AssetAutoUnload"
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
-
-enum AssetErrCode
-{
-   Failed,
-   Ok,
-   NotLoaded,
-   BadFileReference,
-   InvalidFormat,
-   DependencyNotFound,
-   FileTooLarge,
-   UsingFallback,
-   Extended
-};
-
 class AssetBase : public SimObject
 class AssetBase : public SimObject
 {
 {
    friend class AssetManager;
    friend class AssetManager;
@@ -82,6 +68,26 @@ protected:
    U32                     mAcquireReferenceCount;
    U32                     mAcquireReferenceCount;
 
 
 public:
 public:
+   enum AssetErrCode
+   {
+      Failed,
+      Ok,
+      NotLoaded,
+      BadFileReference,
+      InvalidFormat,
+      DependencyNotFound,
+      FileTooLarge,
+      UsingFallback,
+      Extended
+   };
+
+   static const String mErrCodeStrings[AssetErrCode::Extended + 1];
+   static String getAssetErrstrn(U32 errCode)
+   {
+      if (errCode > AssetErrCode::Extended) return "undefined error";
+      return mErrCodeStrings[errCode];
+   };
+
    AssetBase();
    AssetBase();
    virtual ~AssetBase();
    virtual ~AssetBase();