From b32a787cd86f054ba5a601797af51c786d9c7975 Mon Sep 17 00:00:00 2001 From: elsid Date: Fri, 6 May 2022 21:03:02 +0200 Subject: [PATCH] Add explicit dependency to World from Scene To avoid redundant MWBase::Environment::get().getWorld() calls and virtual calls. --- apps/openmw/mwbase/world.hpp | 4 +- apps/openmw/mwworld/scene.cpp | 129 +++++++++++++++---------------- apps/openmw/mwworld/scene.hpp | 4 +- apps/openmw/mwworld/worldimp.cpp | 6 +- apps/openmw/mwworld/worldimp.hpp | 4 +- 5 files changed, 74 insertions(+), 73 deletions(-) diff --git a/apps/openmw/mwbase/world.hpp b/apps/openmw/mwbase/world.hpp index 4aaf84c126..f78befe470 100644 --- a/apps/openmw/mwbase/world.hpp +++ b/apps/openmw/mwbase/world.hpp @@ -273,7 +273,7 @@ namespace MWBase virtual float getDistanceToFacedObject() = 0; - virtual float getMaxActivationDistance() = 0; + virtual float getMaxActivationDistance() const = 0; /// Returns a pointer to the object the provided object would hit (if within the /// specified distance), and the point where the hit occurs. This will attempt to @@ -548,7 +548,7 @@ namespace MWBase const osg::Vec3f& worldPos, const osg::Quat& orient, MWWorld::Ptr& bow, float speed, float attackStrength) = 0; virtual void updateProjectilesCasters() = 0; - virtual void applyLoopingParticles(const MWWorld::Ptr& ptr) = 0; + virtual void applyLoopingParticles(const MWWorld::Ptr& ptr) const = 0; virtual const std::vector& getContentFiles() const = 0; diff --git a/apps/openmw/mwworld/scene.cpp b/apps/openmw/mwworld/scene.cpp index 98bfc514ed..0da47a9a74 100644 --- a/apps/openmw/mwworld/scene.cpp +++ b/apps/openmw/mwworld/scene.cpp @@ -40,6 +40,7 @@ #include "cellvisitors.hpp" #include "cellstore.hpp" #include "cellpreloader.hpp" +#include "worldimp.hpp" namespace { @@ -97,7 +98,7 @@ namespace return model; } - void addObject(const MWWorld::Ptr& ptr, MWPhysics::PhysicsSystem& physics, + void addObject(const MWWorld::Ptr& ptr, const MWWorld::World& world, MWPhysics::PhysicsSystem& physics, MWRender::RenderingManager& rendering, std::set& pagedRefs) { if (ptr.getRefData().getBaseNode() || physics.getActor(ptr)) @@ -123,7 +124,7 @@ namespace rendering.addWaterRippleEmitter(ptr); // Restore effect particles - MWBase::Environment::get().getWorld()->applyLoopingParticles(ptr); + world.applyLoopingParticles(ptr); if (!model.empty()) ptr.getClass().insertObject(ptr, model, rotation, physics); @@ -131,7 +132,8 @@ namespace MWBase::Environment::get().getLuaManager()->objectAddedToScene(ptr); } - void addObject(const MWWorld::Ptr& ptr, const MWPhysics::PhysicsSystem& physics, DetourNavigator::Navigator& navigator) + void addObject(const MWWorld::Ptr& ptr, const MWWorld::World& world, const MWPhysics::PhysicsSystem& physics, + DetourNavigator::Navigator& navigator) { if (const auto object = physics.getObject(ptr)) { @@ -145,7 +147,7 @@ namespace const auto center = (aabbMax + aabbMin) * 0.5f; - const auto distanceFromDoor = MWBase::Environment::get().getWorld()->getMaxActivationDistance() * 0.5f; + const auto distanceFromDoor = world.getMaxActivationDistance() * 0.5f; const auto toPoint = aabbMax.x() - aabbMin.x() < aabbMax.y() - aabbMin.y() ? btVector3(distanceFromDoor, 0, 0) : btVector3(0, distanceFromDoor, 0); @@ -183,7 +185,7 @@ namespace } else if (physics.getActor(ptr)) { - navigator.addAgent(MWBase::Environment::get().getWorld()->getPathfindingHalfExtents(ptr)); + navigator.addAgent(world.getPathfindingHalfExtents(ptr)); } } @@ -318,7 +320,6 @@ namespace MWWorld ListAndResetObjectsVisitor visitor; cell->forEach(visitor); - const auto world = MWBase::Environment::get().getWorld(); for (const auto& ptr : visitor.mObjects) { if (const auto object = mPhysics->getObject(ptr)) @@ -329,7 +330,7 @@ namespace MWWorld } else if (mPhysics->getActor(ptr)) { - mNavigator.removeAgent(world->getPathfindingHalfExtents(ptr)); + mNavigator.removeAgent(mWorld.getPathfindingHalfExtents(ptr)); mRendering.removeActorPath(ptr); mPhysics->remove(ptr); } @@ -350,17 +351,17 @@ namespace MWWorld if (cell->getCell()->hasWater()) mNavigator.removeWater(osg::Vec2i(cellX, cellY)); - if (const auto pathgrid = world->getStore().get().search(*cell->getCell())) + if (const auto pathgrid = mWorld.getStore().get().search(*cell->getCell())) mNavigator.removePathgrid(*pathgrid); - mNavigator.update(world->getPlayerPtr().getRefData().getPosition().asVec3()); + mNavigator.update(mWorld.getPlayerPtr().getRefData().getPosition().asVec3()); MWBase::Environment::get().getMechanicsManager()->drop (cell); mRendering.removeCell(cell); MWBase::Environment::get().getWindowManager()->removeCell(cell); - MWBase::Environment::get().getWorld()->getLocalScripts().clearCell (cell); + mWorld.getLocalScripts().clearCell (cell); MWBase::Environment::get().getSoundManager()->stopSound (cell); mActiveCells.erase(cell); @@ -375,8 +376,6 @@ namespace MWWorld Log(Debug::Info) << "Loading cell " << cell->getCell()->getDescription(); - const auto world = MWBase::Environment::get().getWorld(); - const int cellX = cell->getCell()->getGridX(); const int cellY = cell->getCell()->getGridY(); @@ -423,12 +422,12 @@ namespace MWWorld } } - if (const auto pathgrid = world->getStore().get().search(*cell->getCell())) + if (const auto pathgrid = mWorld.getStore().get().search(*cell->getCell())) mNavigator.addPathgrid(*cell->getCell(), *pathgrid); // register local scripts // do this before insertCell, to make sure we don't add scripts from levelled creature spawning twice - MWBase::Environment::get().getWorld()->getLocalScripts().addCell (cell); + mWorld.getLocalScripts().addCell (cell); if (respawn) cell->respawn(); @@ -459,7 +458,7 @@ namespace MWWorld else mPhysics->disableWater(); - const auto player = MWBase::Environment::get().getWorld()->getPlayerPtr(); + const auto player = mWorld.getPlayerPtr(); // The player is loaded before the scene and by default it is grounded, with the scene fully loaded, we validate and correct this. if (player.mCell == cell) // Only run once, during initial cell load. @@ -498,14 +497,14 @@ namespace MWWorld if (currentGridCenter) { float centerX, centerY; - MWBase::Environment::get().getWorld()->indexToPosition(currentGridCenter->x(), currentGridCenter->y(), centerX, centerY, true); + mWorld.indexToPosition(currentGridCenter->x(), currentGridCenter->y(), centerX, centerY, true); float distance = std::max(std::abs(centerX-pos.x()), std::abs(centerY-pos.y())); const float maxDistance = Constants::CellSizeInUnits / 2 + mCellLoadingThreshold; // 1/2 cell size + threshold if (distance <= maxDistance) return *currentGridCenter; } osg::Vec2i newCenter; - MWBase::Environment::get().getWorld()->positionToIndex(pos.x(), pos.y(), newCenter.x(), newCenter.y()); + mWorld.positionToIndex(pos.x(), pos.y(), newCenter.x(), newCenter.y()); return newCenter; } @@ -559,7 +558,7 @@ namespace MWWorld mRendering.getPagedRefnums(newGrid, mPagedRefs); std::size_t refsToLoad = 0; - const auto cellsToLoad = [&playerCellX,&playerCellY,&refsToLoad](CellStoreCollection& collection, int range) -> std::vector> + const auto cellsToLoad = [&] (CellStoreCollection& collection, int range) -> std::vector> { std::vector> cellsPositionsToLoad; for (int x = playerCellX - range; x <= playerCellX + range; ++x) @@ -568,7 +567,7 @@ namespace MWWorld { if (!isCellInCollection(x, y, collection)) { - refsToLoad += MWBase::Environment::get().getWorld()->getExterior(x, y)->count(); + refsToLoad += mWorld.getExterior(x, y)->count(); cellsPositionsToLoad.emplace_back(x, y); } } @@ -624,12 +623,12 @@ namespace MWWorld { if (!isCellInCollection(x, y, mActiveCells)) { - CellStore *cell = MWBase::Environment::get().getWorld()->getExterior(x, y); + CellStore *cell = mWorld.getExterior(x, y); loadCell(cell, loadingListener, changeEvent, pos); } } - CellStore* current = MWBase::Environment::get().getWorld()->getExterior(playerCellX, playerCellY); + CellStore* current = mWorld.getExterior(playerCellX, playerCellY); MWBase::Environment::get().getWindowManager()->changeCell(current); if (changeEvent) @@ -645,7 +644,7 @@ namespace MWWorld mRendering.getResourceSystem()->setExpiryDelay(1.f); - const MWWorld::Store &cells = MWBase::Environment::get().getWorld()->getStore().get(); + const MWWorld::Store &cells = mWorld.getStore().get(); Loading::Listener* loadingListener = MWBase::Environment::get().getWindowManager()->getLoadingScreen(); Loading::ScopedLoad load(loadingListener); @@ -657,7 +656,7 @@ namespace MWWorld { loadingListener->setLabel("Testing exterior cells ("+std::to_string(i)+"/"+std::to_string(cells.getExtSize())+")..."); - CellStore *cell = MWBase::Environment::get().getWorld()->getExterior(it->mData.mX, it->mData.mY); + CellStore *cell = mWorld.getExterior(it->mData.mX, it->mData.mY); loadCell(cell, nullptr, false, osg::Vec3f(it->mData.mX + 0.5f, it->mData.mY + 0.5f, 0) * Constants::CellSizeInUnits); auto iter = mActiveCells.begin(); @@ -690,7 +689,7 @@ namespace MWWorld mRendering.getResourceSystem()->setExpiryDelay(1.f); - const MWWorld::Store &cells = MWBase::Environment::get().getWorld()->getStore().get(); + const MWWorld::Store &cells = mWorld.getStore().get(); Loading::Listener* loadingListener = MWBase::Environment::get().getWindowManager()->getLoadingScreen(); Loading::ScopedLoad load(loadingListener); @@ -702,9 +701,9 @@ namespace MWWorld { loadingListener->setLabel("Testing interior cells ("+std::to_string(i)+"/"+std::to_string(cells.getIntSize())+")..."); - CellStore *cell = MWBase::Environment::get().getWorld()->getInterior(it->mName); + CellStore *cell = mWorld.getInterior(it->mName); ESM::Position position; - MWBase::Environment::get().getWorld()->findInteriorPosition(it->mName, position); + mWorld.findInteriorPosition(it->mName, position); loadCell(cell, nullptr, false, position.asVec3()); auto iter = mActiveCells.begin(); @@ -737,16 +736,16 @@ namespace MWWorld mRendering.enableTerrain(cell->isExterior()); - MWBase::World *world = MWBase::Environment::get().getWorld(); - MWWorld::Ptr old = world->getPlayerPtr(); - world->getPlayer().setCell(cell); + MWWorld::Ptr old = mWorld.getPlayerPtr(); + mWorld.getPlayer().setCell(cell); - MWWorld::Ptr player = world->getPlayerPtr(); + MWWorld::Ptr player = mWorld.getPlayerPtr(); mRendering.updatePlayerPtr(player); - if (adjustPlayerPos) { - world->moveObject(player, pos.asVec3()); - world->rotateObject(player, pos.asRotationVec3()); + if (adjustPlayerPos) + { + mWorld.moveObject(player, pos.asVec3()); + mWorld.rotateObject(player, pos.asRotationVec3()); player.getClass().adjustPosition(player, true); } @@ -756,14 +755,15 @@ namespace MWWorld mPhysics->updatePtr(old, player); - world->adjustSky(); + mWorld.adjustSky(); mLastPlayerPos = player.getRefData().getPosition().asVec3(); } - Scene::Scene (MWRender::RenderingManager& rendering, MWPhysics::PhysicsSystem *physics, + Scene::Scene(MWWorld::World& world, MWRender::RenderingManager& rendering, MWPhysics::PhysicsSystem *physics, DetourNavigator::Navigator& navigator) - : mCurrentCell (nullptr), mCellChanged (false), mPhysics(physics), mRendering(rendering), mNavigator(navigator) + : mCurrentCell (nullptr), mCellChanged (false) + , mWorld(world), mPhysics(physics), mRendering(rendering), mNavigator(navigator) , mCellLoadingThreshold(1024.f) , mPreloadDistance(Settings::Manager::getInt("preload distance", "Cells")) , mPreloadEnabled(Settings::Manager::getBool("preload enabled", "Cells")) @@ -804,7 +804,7 @@ namespace MWWorld void Scene::changeToInteriorCell (const std::string& cellName, const ESM::Position& position, bool adjustPlayerPos, bool changeEvent) { - CellStore *cell = MWBase::Environment::get().getWorld()->getInterior(cellName); + CellStore *cell = mWorld.getInterior(cellName); bool useFading = (mCurrentCell != nullptr); if (useFading) MWBase::Environment::get().getWindowManager()->fadeScreenOut(0.5); @@ -816,12 +816,11 @@ namespace MWWorld if(mCurrentCell != nullptr && *mCurrentCell == *cell) { - MWBase::World *world = MWBase::Environment::get().getWorld(); - world->moveObject(world->getPlayerPtr(), position.asVec3()); - world->rotateObject(world->getPlayerPtr(), position.asRotationVec3()); + mWorld.moveObject(mWorld.getPlayerPtr(), position.asVec3()); + mWorld.rotateObject(mWorld.getPlayerPtr(), position.asRotationVec3()); if (adjustPlayerPos) - world->getPlayerPtr().getClass().adjustPosition(world->getPlayerPtr(), true); + mWorld.getPlayerPtr().getClass().adjustPosition(mWorld.getPlayerPtr(), true); MWBase::Environment::get().getWindowManager()->fadeScreenIn(0.5); return; } @@ -850,7 +849,7 @@ namespace MWWorld mRendering.configureFog(mCurrentCell->getCell()); // Sky system - MWBase::Environment::get().getWorld()->adjustSky(); + mWorld.adjustSky(); if (changeEvent) mCellChanged = true; @@ -868,14 +867,14 @@ namespace MWWorld int x = 0; int y = 0; - MWBase::Environment::get().getWorld()->positionToIndex (position.pos[0], position.pos[1], x, y); + mWorld.positionToIndex (position.pos[0], position.pos[1], x, y); if (changeEvent) MWBase::Environment::get().getWindowManager()->fadeScreenOut(0.5); changeCellGrid(position.asVec3(), x, y, changeEvent); - CellStore* current = MWBase::Environment::get().getWorld()->getExterior(x, y); + CellStore* current = mWorld.getExterior(x, y); changePlayerCell(current, position, adjustPlayerPos); if (changeEvent) @@ -896,20 +895,20 @@ namespace MWWorld { InsertVisitor insertVisitor(cell, loadingListener); cell.forEach (insertVisitor); - insertVisitor.insert([&] (const MWWorld::Ptr& ptr) { addObject(ptr, *mPhysics, mRendering, mPagedRefs); }); - insertVisitor.insert([&] (const MWWorld::Ptr& ptr) { addObject(ptr, *mPhysics, mNavigator); }); + insertVisitor.insert([&] (const MWWorld::Ptr& ptr) { addObject(ptr, mWorld, *mPhysics, mRendering, mPagedRefs); }); + insertVisitor.insert([&] (const MWWorld::Ptr& ptr) { addObject(ptr, mWorld, *mPhysics, mNavigator); }); } void Scene::addObjectToScene (const Ptr& ptr) { try { - addObject(ptr, *mPhysics, mRendering, mPagedRefs); - addObject(ptr, *mPhysics, mNavigator); - MWBase::Environment::get().getWorld()->scaleObject(ptr, ptr.getCellRef().getScale()); + addObject(ptr, mWorld, *mPhysics, mRendering, mPagedRefs); + addObject(ptr, mWorld, *mPhysics, mNavigator); + mWorld.scaleObject(ptr, ptr.getCellRef().getScale()); if (mCurrentCell != nullptr) { - const auto player = MWBase::Environment::get().getWorld()->getPlayerPtr(); + const auto player = mWorld.getPlayerPtr(); mNavigator.update(player.getRefData().getPosition().asVec3()); } } @@ -929,13 +928,13 @@ namespace MWWorld mNavigator.removeObject(DetourNavigator::ObjectId(object)); if (mCurrentCell != nullptr) { - const auto player = MWBase::Environment::get().getWorld()->getPlayerPtr(); + const auto player = mWorld.getPlayerPtr(); mNavigator.update(player.getRefData().getPosition().asVec3()); } } else if (mPhysics->getActor(ptr)) { - mNavigator.removeAgent(MWBase::Environment::get().getWorld()->getPathfindingHalfExtents(ptr)); + mNavigator.removeAgent(mWorld.getPathfindingHalfExtents(ptr)); } mPhysics->remove(ptr); mRendering.removeObject (ptr); @@ -1020,7 +1019,7 @@ namespace MWWorld if (dt<=1e-06) return; std::vector exteriorPositions; - const MWWorld::ConstPtr player = MWBase::Environment::get().getWorld()->getPlayerPtr(); + const MWWorld::ConstPtr player = mWorld.getPlayerPtr(); osg::Vec3f playerPos = player.getRefData().getPosition().asVec3(); osg::Vec3f moved = playerPos - mLastPlayerPos; osg::Vec3f predictedPos = playerPos + moved / dt * mPredictionTime; @@ -1070,13 +1069,13 @@ namespace MWWorld try { if (!door.getCellRef().getDestCell().empty()) - preloadCell(MWBase::Environment::get().getWorld()->getInterior(door.getCellRef().getDestCell())); + preloadCell(mWorld.getInterior(door.getCellRef().getDestCell())); else { osg::Vec3f pos = door.getCellRef().getDoorDest().asVec3(); int x,y; - MWBase::Environment::get().getWorld()->positionToIndex (pos.x(), pos.y(), x, y); - preloadCell(MWBase::Environment::get().getWorld()->getExterior(x,y), true); + mWorld.positionToIndex (pos.x(), pos.y(), x, y); + preloadCell(mWorld.getExterior(x,y), true); exteriorPositions.emplace_back(pos, gridCenterToBounds(getNewGridCenter(pos))); } } @@ -1090,7 +1089,7 @@ namespace MWWorld void Scene::preloadExteriorGrid(const osg::Vec3f& playerPos, const osg::Vec3f& predictedPos) { - if (!MWBase::Environment::get().getWorld()->isCellExterior()) + if (!mWorld.isCellExterior()) return; int halfGridSizePlusOne = mHalfGridSize + 1; @@ -1100,7 +1099,7 @@ namespace MWWorld cellX = mCurrentGridCenter.x(); cellY = mCurrentGridCenter.y(); float centerX, centerY; - MWBase::Environment::get().getWorld()->indexToPosition(cellX, cellY, centerX, centerY, true); + mWorld.indexToPosition(cellX, cellY, centerX, centerY, true); for (int dx = -halfGridSizePlusOne; dx <= halfGridSizePlusOne; ++dx) { @@ -1110,14 +1109,14 @@ namespace MWWorld continue; // only care about the outer (not yet loaded) part of the grid float thisCellCenterX, thisCellCenterY; - MWBase::Environment::get().getWorld()->indexToPosition(cellX+dx, cellY+dy, thisCellCenterX, thisCellCenterY, true); + mWorld.indexToPosition(cellX+dx, cellY+dy, thisCellCenterX, thisCellCenterY, true); float dist = std::max(std::abs(thisCellCenterX - playerPos.x()), std::abs(thisCellCenterY - playerPos.y())); dist = std::min(dist,std::max(std::abs(thisCellCenterX - predictedPos.x()), std::abs(thisCellCenterY - predictedPos.y()))); float loadDist = Constants::CellSizeInUnits / 2 + Constants::CellSizeInUnits - mCellLoadingThreshold + mPreloadDistance; if (dist < loadDist) - preloadCell(MWBase::Environment::get().getWorld()->getExterior(cellX+dx, cellY+dy)); + preloadCell(mWorld.getExterior(cellX+dx, cellY+dy)); } } } @@ -1133,7 +1132,7 @@ namespace MWWorld { for (int dy = -mHalfGridSize; dy <= mHalfGridSize; ++dy) { - mPreloader->preload(MWBase::Environment::get().getWorld()->getExterior(x+dx, y+dy), mRendering.getReferenceTime()); + mPreloader->preload(mWorld.getExterior(x+dx, y+dy), mRendering.getReferenceTime()); if (++numpreloaded >= mPreloader->getMaxCacheSize()) break; } @@ -1196,7 +1195,7 @@ namespace MWWorld void Scene::preloadFastTravelDestinations(const osg::Vec3f& playerPos, const osg::Vec3f& /*predictedPos*/, std::vector& exteriorPositions) // ignore predictedPos here since opening dialogue with travel service takes extra time { - const MWWorld::ConstPtr player = MWBase::Environment::get().getWorld()->getPlayerPtr(); + const MWWorld::ConstPtr player = mWorld.getPlayerPtr(); ListFastTravelDestinationsVisitor listVisitor(mPreloadDistance, player.getRefData().getPosition().asVec3()); for (MWWorld::CellStore* cellStore : mActiveCells) @@ -1208,13 +1207,13 @@ namespace MWWorld for (ESM::Transport::Dest& dest : listVisitor.mList) { if (!dest.mCellName.empty()) - preloadCell(MWBase::Environment::get().getWorld()->getInterior(dest.mCellName)); + preloadCell(mWorld.getInterior(dest.mCellName)); else { osg::Vec3f pos = dest.mPos.asVec3(); int x,y; - MWBase::Environment::get().getWorld()->positionToIndex( pos.x(), pos.y(), x, y); - preloadCell(MWBase::Environment::get().getWorld()->getExterior(x,y), true); + mWorld.positionToIndex( pos.x(), pos.y(), x, y); + preloadCell(mWorld.getExterior(x,y), true); exteriorPositions.emplace_back(pos, gridCenterToBounds(getNewGridCenter(pos))); } } diff --git a/apps/openmw/mwworld/scene.hpp b/apps/openmw/mwworld/scene.hpp index 371c3cbbc5..fd66d71cf2 100644 --- a/apps/openmw/mwworld/scene.hpp +++ b/apps/openmw/mwworld/scene.hpp @@ -62,6 +62,7 @@ namespace MWWorld class Player; class CellStore; class CellPreloader; + class World; enum class RotationOrder { @@ -85,6 +86,7 @@ namespace MWWorld CellStore* mCurrentCell; // the cell the player is in CellStoreCollection mActiveCells; bool mCellChanged; + MWWorld::World& mWorld; MWPhysics::PhysicsSystem *mPhysics; MWRender::RenderingManager& mRendering; DetourNavigator::Navigator& mNavigator; @@ -131,7 +133,7 @@ namespace MWWorld public: - Scene (MWRender::RenderingManager& rendering, MWPhysics::PhysicsSystem *physics, + Scene(MWWorld::World& world, MWRender::RenderingManager& rendering, MWPhysics::PhysicsSystem *physics, DetourNavigator::Navigator& navigator); ~Scene(); diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index c7d253b4c5..851ba2daf4 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -201,7 +201,7 @@ namespace MWWorld mWeatherManager.reset(new MWWorld::WeatherManager(*mRendering, mStore)); - mWorldScene.reset(new Scene(*mRendering.get(), mPhysics.get(), *mNavigator)); + mWorldScene.reset(new Scene(*this, *mRendering.get(), mPhysics.get(), *mNavigator)); } void World::fillGlobalVariables() @@ -1035,7 +1035,7 @@ namespace MWWorld return mWorldScene->markCellAsUnchanged(); } - float World::getMaxActivationDistance () + float World::getMaxActivationDistance() const { if (mActivationDistanceOverride >= 0) return static_cast(mActivationDistanceOverride); @@ -3175,7 +3175,7 @@ namespace MWWorld mProjectileManager->updateCasters(); } - void World::applyLoopingParticles(const MWWorld::Ptr& ptr) + void World::applyLoopingParticles(const MWWorld::Ptr& ptr) const { const MWWorld::Class &cls = ptr.getClass(); if (cls.isActor()) diff --git a/apps/openmw/mwworld/worldimp.hpp b/apps/openmw/mwworld/worldimp.hpp index d5ff82f52d..02d6d4afb7 100644 --- a/apps/openmw/mwworld/worldimp.hpp +++ b/apps/openmw/mwworld/worldimp.hpp @@ -396,7 +396,7 @@ namespace MWWorld ///< Place an object in a safe place next to \a referenceObject. \a direction and \a distance specify the wanted placement /// relative to \a referenceObject (but the object may be placed somewhere else if the wanted location is obstructed). - float getMaxActivationDistance() override; + float getMaxActivationDistance() const override; void indexToPosition (int cellX, int cellY, float &x, float &y, bool centre = false) const override; @@ -643,7 +643,7 @@ namespace MWWorld const osg::Vec3f& worldPos, const osg::Quat& orient, MWWorld::Ptr& bow, float speed, float attackStrength) override; void updateProjectilesCasters() override; - void applyLoopingParticles(const MWWorld::Ptr& ptr) override; + void applyLoopingParticles(const MWWorld::Ptr& ptr) const override; const std::vector& getContentFiles() const override; void breakInvisibility (const MWWorld::Ptr& actor) override;