Merge pull request #52 from Azaezel/Alpha40ReskinRevamp

reskinning fixes
This commit is contained in:
Areloch 2019-05-25 03:34:54 -05:00 committed by GitHub
commit 882a0d5380
2 changed files with 58 additions and 36 deletions

View file

@ -3694,29 +3694,40 @@ void ShapeBase::setSkinName(const char* name)
void ShapeBase::reSkin() void ShapeBase::reSkin()
{ {
if ( isGhost() && mShapeInstance && mSkinNameHandle.isValidString() ) if (isGhost() && mShapeInstance)
{ {
mShapeInstance->resetMaterialList(); if (mSkinNameHandle.isValidString())
Vector<String> skins;
String(mSkinNameHandle.getString()).split( ";", skins );
for (S32 i = 0; i < skins.size(); i++)
{ {
String oldSkin( mAppliedSkinName.c_str() ); mShapeInstance->resetMaterialList();
String newSkin( skins[i] ); Vector<String> skins;
String(mSkinNameHandle.getString()).split(";", skins);
// Check if the skin handle contains an explicit "old" base string. This for (S32 i = 0; i < skins.size(); i++)
// allows all models to support skinning, even if they don't follow the
// "base_xxx" material naming convention.
S32 split = newSkin.find( '=' ); // "old=new" format skin?
if ( split != String::NPos )
{ {
oldSkin = newSkin.substr( 0, split ); String oldSkin(mAppliedSkinName.c_str());
newSkin = newSkin.erase( 0, split+1 ); String newSkin(skins[i]);
}
mShapeInstance->reSkin( newSkin, oldSkin ); // Check if the skin handle contains an explicit "old" base string. This
mAppliedSkinName = newSkin; // allows all models to support skinning, even if they don't follow the
// "base_xxx" material naming convention.
S32 split = newSkin.find('='); // "old=new" format skin?
if (split != String::NPos)
{
oldSkin = newSkin.substr(0, split);
newSkin = newSkin.erase(0, split + 1);
}
else
{
oldSkin = "";
}
mShapeInstance->reSkin(newSkin, oldSkin);
mAppliedSkinName = newSkin;
}
}
else
{
mShapeInstance->reSkin("", mAppliedSkinName);
mAppliedSkinName = "";
} }
} }
} }

View file

@ -542,29 +542,40 @@ void TSStatic::setSkinName( const char *name )
void TSStatic::reSkin() void TSStatic::reSkin()
{ {
if ( isGhost() && mShapeInstance && mSkinNameHandle.isValidString() ) if (isGhost() && mShapeInstance)
{ {
mShapeInstance->resetMaterialList(); if (mSkinNameHandle.isValidString())
Vector<String> skins;
String(mSkinNameHandle.getString()).split( ";", skins );
for (S32 i = 0; i < skins.size(); i++)
{ {
String oldSkin( mAppliedSkinName.c_str() ); mShapeInstance->resetMaterialList();
String newSkin( skins[i] ); Vector<String> skins;
String(mSkinNameHandle.getString()).split(";", skins);
// Check if the skin handle contains an explicit "old" base string. This for (S32 i = 0; i < skins.size(); i++)
// allows all models to support skinning, even if they don't follow the
// "base_xxx" material naming convention.
S32 split = newSkin.find( '=' ); // "old=new" format skin?
if ( split != String::NPos )
{ {
oldSkin = newSkin.substr( 0, split ); String oldSkin(mAppliedSkinName.c_str());
newSkin = newSkin.erase( 0, split+1 ); String newSkin(skins[i]);
}
mShapeInstance->reSkin( newSkin, oldSkin ); // Check if the skin handle contains an explicit "old" base string. This
mAppliedSkinName = newSkin; // allows all models to support skinning, even if they don't follow the
// "base_xxx" material naming convention.
S32 split = newSkin.find('='); // "old=new" format skin?
if (split != String::NPos)
{
oldSkin = newSkin.substr(0, split);
newSkin = newSkin.erase(0, split + 1);
}
else
{
oldSkin = "";
}
mShapeInstance->reSkin(newSkin, oldSkin);
mAppliedSkinName = newSkin;
}
}
else
{
mShapeInstance->reSkin("", mAppliedSkinName);
mAppliedSkinName = "";
} }
} }
} }