mirror of
https://github.com/OpenMW/openmw.git
synced 2025-04-24 01:36:47 +00:00
Merge branch 'unpack_position' into 'master'
Make ESM::Position not packed (should fix #6566) Closes #6566 See merge request OpenMW/openmw!1600
This commit is contained in:
commit
cb4c96b155
2 changed files with 15 additions and 7 deletions
|
@ -41,9 +41,6 @@ enum RangeType
|
||||||
RT_Target = 2
|
RT_Target = 2
|
||||||
};
|
};
|
||||||
|
|
||||||
#pragma pack(push)
|
|
||||||
#pragma pack(1)
|
|
||||||
|
|
||||||
// Position and rotation
|
// Position and rotation
|
||||||
struct Position
|
struct Position
|
||||||
{
|
{
|
||||||
|
@ -68,7 +65,6 @@ struct Position
|
||||||
return tuple(l) < tuple(r);
|
return tuple(l) < tuple(r);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
#pragma pack(pop)
|
|
||||||
|
|
||||||
bool inline operator== (const Position& left, const Position& right) noexcept
|
bool inline operator== (const Position& left, const Position& right) noexcept
|
||||||
{
|
{
|
||||||
|
|
|
@ -28,8 +28,15 @@ void ESM::ObjectState::load (ESMReader &esm)
|
||||||
mCount = 1;
|
mCount = 1;
|
||||||
esm.getHNOT (mCount, "COUN");
|
esm.getHNOT (mCount, "COUN");
|
||||||
|
|
||||||
|
if(esm.isNextSub("POS_"))
|
||||||
|
{
|
||||||
|
std::array<float, 6> pos;
|
||||||
|
esm.getHT(pos);
|
||||||
|
memcpy(mPosition.pos, pos.data(), sizeof(float) * 3);
|
||||||
|
memcpy(mPosition.rot, pos.data() + 3, sizeof(float) * 3);
|
||||||
|
}
|
||||||
|
else
|
||||||
mPosition = mRef.mPos;
|
mPosition = mRef.mPos;
|
||||||
esm.getHNOT (mPosition, "POS_", 24);
|
|
||||||
|
|
||||||
if (esm.isNextSub("LROT"))
|
if (esm.isNextSub("LROT"))
|
||||||
esm.skipHSub(); // local rotation, no longer used
|
esm.skipHSub(); // local rotation, no longer used
|
||||||
|
@ -67,7 +74,12 @@ void ESM::ObjectState::save (ESMWriter &esm, bool inInventory) const
|
||||||
esm.writeHNT ("COUN", mCount);
|
esm.writeHNT ("COUN", mCount);
|
||||||
|
|
||||||
if (!inInventory && mPosition != mRef.mPos)
|
if (!inInventory && mPosition != mRef.mPos)
|
||||||
esm.writeHNT ("POS_", mPosition, 24);
|
{
|
||||||
|
std::array<float, 6> pos;
|
||||||
|
memcpy(pos.data(), mPosition.pos, sizeof(float) * 3);
|
||||||
|
memcpy(pos.data() + 3, mPosition.rot, sizeof(float) * 3);
|
||||||
|
esm.writeHNT ("POS_", pos.data(), 24);
|
||||||
|
}
|
||||||
|
|
||||||
if (mFlags != 0)
|
if (mFlags != 0)
|
||||||
esm.writeHNT ("FLAG", mFlags);
|
esm.writeHNT ("FLAG", mFlags);
|
||||||
|
|
Loading…
Reference in a new issue