diff --git a/Engine/source/T3D/assets/ShapeAsset.cpp b/Engine/source/T3D/assets/ShapeAsset.cpp index 0c89ae5b1..1f667fb6f 100644 --- a/Engine/source/T3D/assets/ShapeAsset.cpp +++ b/Engine/source/T3D/assets/ShapeAsset.cpp @@ -113,6 +113,15 @@ ConsoleSetType(TypeShapeAssetId) //----------------------------------------------------------------------------- +const String ShapeAsset::mErrCodeStrings[] = +{ + "TooManyVerts", + "TooManyBones", + "MissingAnimatons", + "UnKnown" +}; +//----------------------------------------------------------------------------- + ShapeAsset::ShapeAsset() { mFileName = StringTable->EmptyString(); diff --git a/Engine/source/T3D/assets/ShapeAsset.h b/Engine/source/T3D/assets/ShapeAsset.h index 3843379e7..5db8837af 100644 --- a/Engine/source/T3D/assets/ShapeAsset.h +++ b/Engine/source/T3D/assets/ShapeAsset.h @@ -87,7 +87,16 @@ public: { TooManyVerts = AssetErrCode::Extended, 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(); diff --git a/Engine/source/T3D/shapeBase.cpp b/Engine/source/T3D/shapeBase.cpp index 29c5b8b8c..72f537141 100644 --- a/Engine/source/T3D/shapeBase.cpp +++ b/Engine/source/T3D/shapeBase.cpp @@ -366,14 +366,14 @@ bool ShapeBaseData::preload(bool server, String &errorStr) shapeAssetId = ShapeAsset::getAssetIdByFilename(shapeName); } 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 - if (assetState == AssetErrCode::Ok) + if (assetState == ShapeAsset::Ok) { shapeName = StringTable->EmptyString(); } - + else Con::warnf("Warning: ShapeBaseData::preload-%s", ShapeAsset::getAssetErrstrn(assetState).c_str()); S32 i; // Resolve shapename @@ -798,10 +798,14 @@ void ShapeBaseData::packData(BitStream* stream) stream->write(shadowSphereAdjust); - //if (stream->writeFlag(shapeAsset.notNull())) + if (stream->writeFlag(shapeAsset.notNull())) + { stream->writeString(shapeAsset.getAssetId()); - //else + } + else + { stream->writeString(shapeName); + } stream->writeString(cloakTexName); if(stream->writeFlag(mass != gShapeBaseDataProto.mass)) @@ -880,10 +884,16 @@ void ShapeBaseData::unpackData(BitStream* stream) stream->read(&shadowSphereAdjust); - //if (stream->readFlag()) + if (stream->readFlag()) + { shapeAssetId = stream->readSTString(); - //else + ShapeAsset::getAssetById(shapeAssetId, &shapeAsset); + shapeName = shapeAsset->getShapeFilename(); + } + else + { shapeName = stream->readSTString(); + } cloakTexName = stream->readSTString(); if(stream->readFlag()) diff --git a/Engine/source/assets/assetBase.cpp b/Engine/source/assets/assetBase.cpp index 2eb33a299..14bc3026e 100644 --- a/Engine/source/assets/assetBase.cpp +++ b/Engine/source/assets/assetBase.cpp @@ -52,6 +52,18 @@ StringTableEntry assetInternalField = StringTable->insert("AssetInternal"); StringTableEntry assetPrivateField = StringTable->insert("AssetPrivate"); //----------------------------------------------------------------------------- +const String AssetBase::mErrCodeStrings[] = +{ + "Failed", + "Ok", + "NotLoaded", + "BadFileReference", + "InvalidFormat", + "DependencyNotFound", + "FileTooLarge", + "UsingFallback", + "UnKnown" +}; AssetBase::AssetBase() : mpOwningAssetManager(NULL), diff --git a/Engine/source/assets/assetBase.h b/Engine/source/assets/assetBase.h index cdffbc14e..b6480f0b1 100644 --- a/Engine/source/assets/assetBase.h +++ b/Engine/source/assets/assetBase.h @@ -55,20 +55,6 @@ extern StringTableEntry assetAutoUnloadField; //#define ASSET_BASE_AUTOUNLOAD_FIELD "AssetAutoUnload" //----------------------------------------------------------------------------- - -enum AssetErrCode -{ - Failed, - Ok, - NotLoaded, - BadFileReference, - InvalidFormat, - DependencyNotFound, - FileTooLarge, - UsingFallback, - Extended -}; - class AssetBase : public SimObject { friend class AssetManager; @@ -82,6 +68,26 @@ protected: U32 mAcquireReferenceCount; 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(); virtual ~AssetBase();