1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-03-31 01:20:23 +00:00

Change moveObject() to take a osg::Vec3f argument instead of 3 floats

for readability.
This commit is contained in:
fredzio 2021-04-11 18:18:10 +02:00
parent b1a3fc9399
commit 88a5ca440b
13 changed files with 38 additions and 44 deletions

View File

@ -283,10 +283,10 @@ namespace MWBase
virtual void deleteObject (const MWWorld::Ptr& ptr) = 0; virtual void deleteObject (const MWWorld::Ptr& ptr) = 0;
virtual void undeleteObject (const MWWorld::Ptr& ptr) = 0; virtual void undeleteObject (const MWWorld::Ptr& ptr) = 0;
virtual MWWorld::Ptr moveObject (const MWWorld::Ptr& ptr, float x, float y, float z, bool movePhysics=true, bool moveToActive=false) = 0; virtual MWWorld::Ptr moveObject (const MWWorld::Ptr& ptr, const osg::Vec3f& position, bool movePhysics=true, bool moveToActive=false) = 0;
///< @return an updated Ptr in case the Ptr's cell changes ///< @return an updated Ptr in case the Ptr's cell changes
virtual MWWorld::Ptr moveObject(const MWWorld::Ptr &ptr, MWWorld::CellStore* newCell, float x, float y, float z, bool movePhysics=true) = 0; virtual MWWorld::Ptr moveObject(const MWWorld::Ptr &ptr, MWWorld::CellStore* newCell, const osg::Vec3f& position, bool movePhysics=true) = 0;
///< @return an updated Ptr ///< @return an updated Ptr
virtual MWWorld::Ptr moveObjectBy(const MWWorld::Ptr &ptr, osg::Vec3f vec, bool moveToActive, bool ignoreCollisions) = 0; virtual MWWorld::Ptr moveObjectBy(const MWWorld::Ptr &ptr, osg::Vec3f vec, bool moveToActive, bool ignoreCollisions) = 0;

View File

@ -834,9 +834,7 @@ namespace MWClass
ptr.getRefData().setCustomData(nullptr); ptr.getRefData().setCustomData(nullptr);
// Reset to original position // Reset to original position
MWBase::Environment::get().getWorld()->moveObject(ptr, ptr.getCellRef().getPosition().pos[0], MWBase::Environment::get().getWorld()->moveObject(ptr, ptr.getCellRef().getPosition().asVec3());
ptr.getCellRef().getPosition().pos[1],
ptr.getCellRef().getPosition().pos[2]);
} }
} }
} }

View File

@ -1388,9 +1388,7 @@ namespace MWClass
ptr.getRefData().setCustomData(nullptr); ptr.getRefData().setCustomData(nullptr);
// Reset to original position // Reset to original position
MWBase::Environment::get().getWorld()->moveObject(ptr, ptr.getCellRef().getPosition().pos[0], MWBase::Environment::get().getWorld()->moveObject(ptr, ptr.getCellRef().getPosition().asVec3());
ptr.getCellRef().getPosition().pos[1],
ptr.getCellRef().getPosition().pos[2]);
} }
} }
} }

View File

@ -39,7 +39,7 @@ namespace MWLua
} }
else else
{ {
MWWorld::Ptr newObj = world->moveObject(obj, cell, mPos.x(), mPos.y(), mPos.z()); MWWorld::Ptr newObj = world->moveObject(obj, cell, mPos);
world->rotateObject(newObj, mRot.x(), mRot.y(), mRot.z()); world->rotateObject(newObj, mRot.x(), mRot.y(), mRot.z());
} }
} }

View File

@ -93,11 +93,12 @@ namespace MWMechanics
void AiTravel::fastForward(const MWWorld::Ptr& actor, AiState& state) void AiTravel::fastForward(const MWWorld::Ptr& actor, AiState& state)
{ {
if (!isWithinMaxRange(osg::Vec3f(mX, mY, mZ), actor.getRefData().getPosition().asVec3())) osg::Vec3f pos(mX, mY, mZ);
if (!isWithinMaxRange(pos, actor.getRefData().getPosition().asVec3()))
return; return;
// does not do any validation on the travel target (whether it's in air, inside collision geometry, etc), // does not do any validation on the travel target (whether it's in air, inside collision geometry, etc),
// that is the user's responsibility // that is the user's responsibility
MWBase::Environment::get().getWorld()->moveObject(actor, mX, mY, mZ); MWBase::Environment::get().getWorld()->moveObject(actor, pos);
actor.getClass().adjustPosition(actor, false); actor.getClass().adjustPosition(actor, false);
reset(); reset();
} }

View File

@ -744,8 +744,8 @@ namespace MWMechanics
state.moveIn(new AiWanderStorage()); state.moveIn(new AiWanderStorage());
MWBase::Environment::get().getWorld()->moveObject(actor, static_cast<float>(dest.mX), osg::Vec3f pos(static_cast<float>(dest.mX), static_cast<float>(dest.mY), static_cast<float>(dest.mZ));
static_cast<float>(dest.mY), static_cast<float>(dest.mZ)); MWBase::Environment::get().getWorld()->moveObject(actor, pos);
actor.getClass().adjustPosition(actor, false); actor.getClass().adjustPosition(actor, false);
} }

View File

@ -958,7 +958,7 @@ namespace MWPhysics
if (mWaterCollision && mPosition.z() < mWaterlevel && canMoveToWaterSurface(mActorRaw, mWaterlevel, world)) if (mWaterCollision && mPosition.z() < mWaterlevel && canMoveToWaterSurface(mActorRaw, mWaterlevel, world))
{ {
mPosition.z() = mWaterlevel; mPosition.z() = mWaterlevel;
MWBase::Environment::get().getWorld()->moveObject(mActorRaw->getPtr(), mPosition.x(), mPosition.y(), mPosition.z(), false); MWBase::Environment::get().getWorld()->moveObject(mActorRaw->getPtr(), mPosition, false);
} }
mOldHeight = mPosition.z(); mOldHeight = mPosition.z();
mRefpos = mActorRaw->getPtr().getRefData().getPosition(); mRefpos = mActorRaw->getPtr().getRefData().getPosition();

View File

@ -393,7 +393,7 @@ namespace MWScript
if(store) if(store)
{ {
MWWorld::Ptr base = ptr; MWWorld::Ptr base = ptr;
ptr = MWBase::Environment::get().getWorld()->moveObject(ptr,store,x,y,z); ptr = MWBase::Environment::get().getWorld()->moveObject(ptr,store,osg::Vec3f(x,y,z));
dynamic_cast<MWScript::InterpreterContext&>(runtime.getContext()).updatePtr(base,ptr); dynamic_cast<MWScript::InterpreterContext&>(runtime.getContext()).updatePtr(base,ptr);
float ax = ptr.getRefData().getPosition().rot[0]; float ax = ptr.getRefData().getPosition().rot[0];
@ -444,11 +444,11 @@ namespace MWScript
if (ptr == MWMechanics::getPlayer()) if (ptr == MWMechanics::getPlayer())
{ {
MWWorld::CellStore* cell = MWBase::Environment::get().getWorld()->getExterior(cx,cy); MWWorld::CellStore* cell = MWBase::Environment::get().getWorld()->getExterior(cx,cy);
ptr = MWBase::Environment::get().getWorld()->moveObject(ptr,cell,x,y,z); ptr = MWBase::Environment::get().getWorld()->moveObject(ptr, cell, osg::Vec3(x, y, z));
} }
else else
{ {
ptr = MWBase::Environment::get().getWorld()->moveObject(ptr, x, y, z, true, true); ptr = MWBase::Environment::get().getWorld()->moveObject(ptr, osg::Vec3f(x, y, z), true, true);
} }
dynamic_cast<MWScript::InterpreterContext&>(runtime.getContext()).updatePtr(base,ptr); dynamic_cast<MWScript::InterpreterContext&>(runtime.getContext()).updatePtr(base,ptr);
@ -689,8 +689,7 @@ namespace MWScript
MWBase::Environment::get().getWorld()->rotateObject(ptr, xr, yr, zr); MWBase::Environment::get().getWorld()->rotateObject(ptr, xr, yr, zr);
dynamic_cast<MWScript::InterpreterContext&>(runtime.getContext()).updatePtr(ptr, dynamic_cast<MWScript::InterpreterContext&>(runtime.getContext()).updatePtr(ptr,
MWBase::Environment::get().getWorld()->moveObject(ptr, ptr.getCellRef().getPosition().pos[0], MWBase::Environment::get().getWorld()->moveObject(ptr, ptr.getCellRef().getPosition().asVec3()));
ptr.getCellRef().getPosition().pos[1], ptr.getCellRef().getPosition().pos[2]));
} }
}; };

View File

@ -55,10 +55,10 @@ namespace MWWorld
int cellY; int cellY;
world->positionToIndex(mPosition.pos[0],mPosition.pos[1],cellX,cellY); world->positionToIndex(mPosition.pos[0],mPosition.pos[1],cellX,cellY);
world->moveObject(actor,world->getExterior(cellX,cellY), world->moveObject(actor,world->getExterior(cellX,cellY),
mPosition.pos[0],mPosition.pos[1],mPosition.pos[2]); mPosition.asVec3());
} }
else else
world->moveObject(actor,world->getInterior(mCellName),mPosition.pos[0],mPosition.pos[1],mPosition.pos[2]); world->moveObject(actor,world->getInterior(mCellName),mPosition.asVec3());
} }
} }

View File

@ -190,7 +190,7 @@ namespace
const ESM::Position & newpos = iter->mData.getPosition(); const ESM::Position & newpos = iter->mData.getPosition();
const MWWorld::Ptr ptr(&*iter, cellstore); const MWWorld::Ptr ptr(&*iter, cellstore);
if ((oldscale != iter->mRef.getScale() || oldpos.asVec3() != newpos.asVec3() || oldpos.rot[0] != newpos.rot[0] || oldpos.rot[1] != newpos.rot[1] || oldpos.rot[2] != newpos.rot[2]) && !ptr.getClass().isActor()) if ((oldscale != iter->mRef.getScale() || oldpos.asVec3() != newpos.asVec3() || oldpos.rot[0] != newpos.rot[0] || oldpos.rot[1] != newpos.rot[1] || oldpos.rot[2] != newpos.rot[2]) && !ptr.getClass().isActor())
MWBase::Environment::get().getWorld()->moveObject(ptr, newpos.pos[0], newpos.pos[1], newpos.pos[2]); MWBase::Environment::get().getWorld()->moveObject(ptr, newpos.asVec3());
if (!iter->mData.isEnabled()) if (!iter->mData.isEnabled())
{ {
iter->mData.enable(); iter->mData.enable();

View File

@ -842,7 +842,7 @@ namespace MWWorld
mRendering.updatePlayerPtr(player); mRendering.updatePlayerPtr(player);
if (adjustPlayerPos) { if (adjustPlayerPos) {
world->moveObject(player, pos.pos[0], pos.pos[1], pos.pos[2]); world->moveObject(player, pos.asVec3());
float x = pos.rot[0]; float x = pos.rot[0];
float y = pos.rot[1]; float y = pos.rot[1];
@ -921,7 +921,7 @@ namespace MWWorld
if(mCurrentCell != nullptr && *mCurrentCell == *cell) if(mCurrentCell != nullptr && *mCurrentCell == *cell)
{ {
MWBase::World *world = MWBase::Environment::get().getWorld(); MWBase::World *world = MWBase::Environment::get().getWorld();
world->moveObject(world->getPlayerPtr(), position.pos[0], position.pos[1], position.pos[2]); world->moveObject(world->getPlayerPtr(), position.asVec3());
float x = position.rot[0]; float x = position.rot[0];
float y = position.rot[1]; float y = position.rot[1];

View File

@ -1128,18 +1128,16 @@ namespace MWWorld
} }
} }
MWWorld::Ptr World::moveObject(const Ptr &ptr, CellStore* newCell, float x, float y, float z, bool movePhysics) MWWorld::Ptr World::moveObject(const Ptr &ptr, CellStore* newCell, const osg::Vec3f& position, bool movePhysics)
{ {
ESM::Position pos = ptr.getRefData().getPosition(); ESM::Position pos = ptr.getRefData().getPosition();
pos.pos[0] = x; pos.pos[0] = position.x();
pos.pos[1] = y; pos.pos[1] = position.y();
pos.pos[2] = z; pos.pos[2] = position.z();
ptr.getRefData().setPosition(pos); ptr.getRefData().setPosition(pos);
osg::Vec3f vec(x, y, z);
CellStore *currCell = ptr.isInCell() ? ptr.getCell() : nullptr; // currCell == nullptr should only happen for player, during initial startup CellStore *currCell = ptr.isInCell() ? ptr.getCell() : nullptr; // currCell == nullptr should only happen for player, during initial startup
bool isPlayer = ptr == mPlayer->getPlayer(); bool isPlayer = ptr == mPlayer->getPlayer();
bool haveToMove = isPlayer || (currCell && mWorldScene->isCellActive(*currCell)); bool haveToMove = isPlayer || (currCell && mWorldScene->isCellActive(*currCell));
@ -1228,7 +1226,7 @@ namespace MWWorld
} }
if (haveToMove && newPtr.getRefData().getBaseNode()) if (haveToMove && newPtr.getRefData().getBaseNode())
{ {
mWorldScene->updateObjectPosition(newPtr, vec, movePhysics); mWorldScene->updateObjectPosition(newPtr, position, movePhysics);
if (movePhysics) if (movePhysics)
{ {
if (const auto object = mPhysics->getObject(ptr)) if (const auto object = mPhysics->getObject(ptr))
@ -1237,7 +1235,7 @@ namespace MWWorld
} }
if (isPlayer) if (isPlayer)
mWorldScene->playerMoved(vec); mWorldScene->playerMoved(position);
else else
{ {
mRendering->pagingBlacklistObject(mStore.find(ptr.getCellRef().getRefId()), ptr); mRendering->pagingBlacklistObject(mStore.find(ptr.getCellRef().getRefId()), ptr);
@ -1247,10 +1245,10 @@ namespace MWWorld
return newPtr; return newPtr;
} }
MWWorld::Ptr World::moveObject (const Ptr& ptr, float x, float y, float z, bool movePhysics, bool moveToActive) MWWorld::Ptr World::moveObject(const Ptr& ptr, const osg::Vec3f& position, bool movePhysics, bool moveToActive)
{ {
int cellX, cellY; int cellX, cellY;
positionToIndex(x, y, cellX, cellY); positionToIndex(position.x(), position.y(), cellX, cellY);
CellStore* cell = ptr.getCell(); CellStore* cell = ptr.getCell();
CellStore* newCell = getExterior(cellX, cellY); CellStore* newCell = getExterior(cellX, cellY);
@ -1259,7 +1257,7 @@ namespace MWWorld
if (cell->isExterior() || (moveToActive && isCellActive && ptr.getClass().isActor())) if (cell->isExterior() || (moveToActive && isCellActive && ptr.getClass().isActor()))
cell = newCell; cell = newCell;
return moveObject(ptr, cell, x, y, z, movePhysics); return moveObject(ptr, cell, position, movePhysics);
} }
MWWorld::Ptr World::moveObjectBy(const Ptr& ptr, osg::Vec3f vec, bool moveToActive, bool ignoreCollisions) MWWorld::Ptr World::moveObjectBy(const Ptr& ptr, osg::Vec3f vec, bool moveToActive, bool ignoreCollisions)
@ -1269,8 +1267,8 @@ namespace MWWorld
if (actor) if (actor)
actor->adjustPosition(vec, ignoreCollisions); actor->adjustPosition(vec, ignoreCollisions);
if (ptr.getClass().isActor()) if (ptr.getClass().isActor())
return moveObject(ptr, newpos.x(), newpos.y(), newpos.z(), false, moveToActive && ptr != getPlayerPtr()); return moveObject(ptr, newpos, false, moveToActive && ptr != getPlayerPtr());
return moveObject(ptr, newpos.x(), newpos.y(), newpos.z()); return moveObject(ptr, newpos);
} }
void World::scaleObject (const Ptr& ptr, float scale) void World::scaleObject (const Ptr& ptr, float scale)
@ -1377,7 +1375,7 @@ namespace MWWorld
pos.z() = std::min(pos.z(), traced.z()); pos.z() = std::min(pos.z(), traced.z());
} }
moveObject(ptr, ptr.getCell(), pos.x(), pos.y(), pos.z()); moveObject(ptr, ptr.getCell(), pos);
} }
void World::fixPosition() void World::fixPosition()
@ -1536,7 +1534,7 @@ namespace MWWorld
auto* physactor = mPhysics->getActor(actor); auto* physactor = mPhysics->getActor(actor);
assert(physactor); assert(physactor);
const auto position = physactor->getSimulationPosition(); const auto position = physactor->getSimulationPosition();
moveObject(actor, position.x(), position.y(), position.z(), false, false); moveObject(actor, position, false, false);
} }
} }
@ -1546,7 +1544,7 @@ namespace MWWorld
auto* physactor = mPhysics->getActor(*player); auto* physactor = mPhysics->getActor(*player);
assert(physactor); assert(physactor);
const auto position = physactor->getSimulationPosition(); const auto position = physactor->getSimulationPosition();
moveObject(*player, position.x(), position.y(), position.z(), false, false); moveObject(*player, position, false, false);
} }
} }
@ -2279,7 +2277,7 @@ namespace MWWorld
pos.pos[0] -= adjust.x(); pos.pos[0] -= adjust.x();
pos.pos[1] -= adjust.y(); pos.pos[1] -= adjust.y();
pos.pos[2] -= adjust.z(); pos.pos[2] -= adjust.z();
moveObject(dropped, pos.pos[0], pos.pos[1], pos.pos[2]); moveObject(dropped, pos.asVec3());
} }
} }
@ -3859,7 +3857,7 @@ namespace MWWorld
return true; return true;
const ESM::Position& origPos = ptr.getCellRef().getPosition(); const ESM::Position& origPos = ptr.getCellRef().getPosition();
MWBase::Environment::get().getWorld()->moveObject(ptr, origPos.pos[0], origPos.pos[1], origPos.pos[2]); MWBase::Environment::get().getWorld()->moveObject(ptr, origPos.asVec3());
MWBase::Environment::get().getWorld()->rotateObject(ptr, origPos.rot[0], origPos.rot[1], origPos.rot[2]); MWBase::Environment::get().getWorld()->rotateObject(ptr, origPos.rot[0], origPos.rot[1], origPos.rot[2]);
ptr.getClass().adjustPosition(ptr, true); ptr.getClass().adjustPosition(ptr, true);
} }

View File

@ -372,10 +372,10 @@ namespace MWWorld
void undeleteObject (const Ptr& ptr) override; void undeleteObject (const Ptr& ptr) override;
MWWorld::Ptr moveObject (const Ptr& ptr, float x, float y, float z, bool movePhysics=true, bool moveToActive=false) override; MWWorld::Ptr moveObject (const Ptr& ptr, const osg::Vec3f& position, bool movePhysics=true, bool moveToActive=false) override;
///< @return an updated Ptr in case the Ptr's cell changes ///< @return an updated Ptr in case the Ptr's cell changes
MWWorld::Ptr moveObject (const Ptr& ptr, CellStore* newCell, float x, float y, float z, bool movePhysics=true) override; MWWorld::Ptr moveObject (const Ptr& ptr, CellStore* newCell, const osg::Vec3f& position, bool movePhysics=true) override;
///< @return an updated Ptr ///< @return an updated Ptr
MWWorld::Ptr moveObjectBy(const Ptr& ptr, osg::Vec3f vec, bool moveToActive, bool ignoreCollisions) override; MWWorld::Ptr moveObjectBy(const Ptr& ptr, osg::Vec3f vec, bool moveToActive, bool ignoreCollisions) override;