1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-02-21 18:09:39 +00:00

Fix moving object from an inactive to another inactive cell

This commit is contained in:
scrawl 2014-06-24 15:29:36 +02:00
parent b52977e44c
commit 36135293e8

View file

@ -967,7 +967,7 @@ namespace MWWorld
Ogre::Vector3 vec(x, y, z); Ogre::Vector3 vec(x, y, z);
CellStore *currCell = ptr.isInCell() ? ptr.getCell() : NULL; CellStore *currCell = ptr.isInCell() ? ptr.getCell() : NULL; // currCell == NULL should only happen for player, during initial startup
bool isPlayer = ptr == mPlayer->getPlayer(); bool isPlayer = ptr == mPlayer->getPlayer();
bool haveToMove = isPlayer || mWorldScene->isCellActive(*currCell); bool haveToMove = isPlayer || mWorldScene->isCellActive(*currCell);
@ -989,7 +989,9 @@ namespace MWWorld
} }
else else
{ {
if (!mWorldScene->isCellActive(*currCell) && mWorldScene->isCellActive(*newCell)) bool currCellActive = mWorldScene->isCellActive(*currCell);
bool newCellActive = mWorldScene->isCellActive(*newCell);
if (!currCellActive && newCellActive)
{ {
MWWorld::Ptr newPtr = ptr.getClass().copyToCell(ptr, *newCell, pos); MWWorld::Ptr newPtr = ptr.getClass().copyToCell(ptr, *newCell, pos);
mWorldScene->addObjectToScene(newPtr); mWorldScene->addObjectToScene(newPtr);
@ -1000,7 +1002,7 @@ namespace MWWorld
} }
addContainerScripts(newPtr, newCell); addContainerScripts(newPtr, newCell);
} }
else if (!mWorldScene->isCellActive(*newCell) && mWorldScene->isCellActive(*currCell)) else if (!newCellActive && currCellActive)
{ {
mWorldScene->removeObjectFromScene(ptr); mWorldScene->removeObjectFromScene(ptr);
mLocalScripts.remove(ptr); mLocalScripts.remove(ptr);
@ -1011,7 +1013,9 @@ namespace MWWorld
.copyToCell(ptr, *newCell); .copyToCell(ptr, *newCell);
newPtr.getRefData().setBaseNode(0); newPtr.getRefData().setBaseNode(0);
} }
else else if (!currCellActive && !newCellActive)
ptr.getClass().copyToCell(ptr, *newCell);
else // both cells active
{ {
MWWorld::Ptr copy = MWWorld::Ptr copy =
ptr.getClass().copyToCell(ptr, *newCell, pos); ptr.getClass().copyToCell(ptr, *newCell, pos);