mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-08-13 07:29:07 +00:00
Added support for DKCR collision
This commit is contained in:
parent
21ebfe96af
commit
a284cebe64
@ -507,7 +507,7 @@ CGameArea* CAreaLoader::LoadMREA(CInputStream& MREA)
|
|||||||
Loader.ReadHeaderCorruption();
|
Loader.ReadHeaderCorruption();
|
||||||
Loader.ReadGeometryCorruption();
|
Loader.ReadGeometryCorruption();
|
||||||
Loader.ReadSCLYEchoes();
|
Loader.ReadSCLYEchoes();
|
||||||
if (Loader.mVersion != eReturns) Loader.ReadCollision();
|
Loader.ReadCollision();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log::FileError(MREA.GetSourceString(), "Unsupported MREA version: " + StringUtil::ToHexString(version));
|
Log::FileError(MREA.GetSourceString(), "Unsupported MREA version: " + StringUtil::ToHexString(version));
|
||||||
|
@ -49,12 +49,18 @@ void CCollisionLoader::ReadPropertyFlags(CInputStream& src)
|
|||||||
property.Invert = (flag >> 25) & 0x1;
|
property.Invert = (flag >> 25) & 0x1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mVersion == eEchoes)
|
else if (mVersion == eEchoes)
|
||||||
{
|
{
|
||||||
u64 flag = src.ReadLongLong();
|
u64 flag = src.ReadLongLong();
|
||||||
property.Invert = (flag >> 24) & 0x1;
|
property.Invert = (flag >> 24) & 0x1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if (mVersion == eReturns)
|
||||||
|
{
|
||||||
|
u64 flag = src.ReadLongLong();
|
||||||
|
property.Invert = (flag >> 28) & 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
mProperties.push_back(property);
|
mProperties.push_back(property);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,7 +109,7 @@ void CCollisionLoader::LoadCollisionIndices(CInputStream &file, bool buildAABox)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Echoes introduces a new data chunk; don't know what it is yet, skipping for now
|
// Echoes introduces a new data chunk; don't know what it is yet, skipping for now
|
||||||
if (mVersion == eEchoes)
|
if (mVersion >= eEchoes)
|
||||||
{
|
{
|
||||||
u32 unknownCount = file.ReadLong();
|
u32 unknownCount = file.ReadLong();
|
||||||
file.Seek(unknownCount * 2, SEEK_CUR);
|
file.Seek(unknownCount * 2, SEEK_CUR);
|
||||||
@ -138,13 +144,7 @@ CCollisionMeshGroup* CCollisionLoader::LoadAreaCollision(CInputStream& MREA)
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 version = MREA.ReadLong();
|
loader.mVersion = GetFormatVersion(MREA.ReadLong());
|
||||||
loader.mVersion = GetFormatVersion(version);
|
|
||||||
if ((loader.mVersion != ePrime) && (loader.mVersion != eEchoes))
|
|
||||||
{
|
|
||||||
Log::FileError(MREA.GetSourceString(), MREA.Tell() - 4, "Unsupported collision version: " + StringUtil::ToHexString(version));
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
loader.mpGroup = new CCollisionMeshGroup;
|
loader.mpGroup = new CCollisionMeshGroup;
|
||||||
loader.mpMesh = new CCollisionMesh;
|
loader.mpMesh = new CCollisionMesh;
|
||||||
@ -182,21 +182,17 @@ CCollisionMeshGroup* CCollisionLoader::LoadDCLN(CInputStream &DCLN)
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 version = DCLN.ReadLong();
|
loader.mVersion = GetFormatVersion(DCLN.ReadLong());
|
||||||
loader.mVersion = GetFormatVersion(version);
|
|
||||||
|
|
||||||
if ((loader.mVersion != ePrime) && (loader.mVersion != eEchoes))
|
|
||||||
{
|
|
||||||
Log::FileError(DCLN.GetSourceString(), DCLN.Tell() - 4, "Unsupported collision version: " + StringUtil::ToHexString(version));
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
loader.mpMesh = new CCollisionMesh;
|
loader.mpMesh = new CCollisionMesh;
|
||||||
loader.mpMesh->mOctreeLoaded = false;
|
loader.mpMesh->mOctreeLoaded = false;
|
||||||
|
|
||||||
|
if (loader.mVersion == eReturns)
|
||||||
|
loader.mpMesh->mAABox = CAABox(DCLN);
|
||||||
|
|
||||||
// Read indices and return
|
// Read indices and return
|
||||||
DCLN.Seek(0x4, SEEK_CUR);
|
DCLN.Seek(0x4, SEEK_CUR);
|
||||||
loader.LoadCollisionIndices(DCLN, true);
|
loader.LoadCollisionIndices(DCLN, loader.mVersion != eReturns);
|
||||||
loader.mpGroup->AddMesh(loader.mpMesh);
|
loader.mpGroup->AddMesh(loader.mpMesh);
|
||||||
|
|
||||||
// Parse OBB tree
|
// Parse OBB tree
|
||||||
|
Loading…
x
Reference in New Issue
Block a user