1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-03-30 09:36:43 +00:00

Factored faced object lookups into MWRender::World

* Renamed MWWorld::World::getFacedHandle to getFacedObject.
 * Changed it to return an object pointer
 * Updated clients to use return object directly.
This commit is contained in:
Nathan Jeffords 2013-01-07 23:27:37 -08:00
parent 05dad29005
commit b9fbd6ae4b
6 changed files with 22 additions and 31 deletions

View file

@ -427,12 +427,7 @@ void OMW::Engine::activate()
if (MWBase::Environment::get().getWindowManager()->isGuiMode()) if (MWBase::Environment::get().getWindowManager()->isGuiMode())
return; return;
std::string handle = MWBase::Environment::get().getWorld()->getFacedHandle(); MWWorld::Ptr ptr = MWBase::Environment::get().getWorld()->getFacedObject();
if (handle.empty())
return;
MWWorld::Ptr ptr = MWBase::Environment::get().getWorld()->searchPtrViaHandle (handle);
if (ptr.isEmpty()) if (ptr.isEmpty())
return; return;

View file

@ -199,8 +199,8 @@ namespace MWBase
virtual void markCellAsUnchanged() = 0; virtual void markCellAsUnchanged() = 0;
virtual std::string getFacedHandle() = 0; virtual MWWorld::Ptr getFacedObject() = 0;
///< Return handle of the object the player is looking at ///< Return pointer to the object the player is looking at, if it is within activation range
virtual void deleteObject (const MWWorld::Ptr& ptr) = 0; virtual void deleteObject (const MWWorld::Ptr& ptr) = 0;

View file

@ -244,8 +244,7 @@ void HUD::onWorldClicked(MyGUI::Widget* _sender)
if ( (mode != GM_Console) && (mode != GM_Container) && (mode != GM_Inventory) ) if ( (mode != GM_Console) && (mode != GM_Container) && (mode != GM_Inventory) )
return; return;
std::string handle = MWBase::Environment::get().getWorld()->getFacedHandle(); MWWorld::Ptr object = MWBase::Environment::get().getWorld()->getFacedObject();
MWWorld::Ptr object = MWBase::Environment::get().getWorld()->searchPtrViaHandle(handle);
if (mode == GM_Console) if (mode == GM_Console)
MWBase::Environment::get().getWindowManager()->getConsole()->setSelectedObject(object); MWBase::Environment::get().getWindowManager()->getConsole()->setSelectedObject(object);

View file

@ -80,9 +80,8 @@ void ToolTips::onFrame(float frameDuration)
|| (mWindowManager->getMode() == GM_Container) || (mWindowManager->getMode() == GM_Container)
|| (mWindowManager->getMode() == GM_Inventory))) || (mWindowManager->getMode() == GM_Inventory)))
{ {
std::string handle = MWBase::Environment::get().getWorld()->getFacedHandle(); mFocusObject = MWBase::Environment::get().getWorld()->getFacedObject();
mFocusObject = MWBase::Environment::get().getWorld()->searchPtrViaHandle(handle);
if (mFocusObject.isEmpty ()) if (mFocusObject.isEmpty ())
return; return;

View file

@ -573,26 +573,24 @@ namespace MWWorld
return mWorldScene->markCellAsUnchanged(); return mWorldScene->markCellAsUnchanged();
} }
std::string World::getFacedHandle() MWWorld::Ptr World::getFacedObject()
{ {
std::pair<float, std::string> result;
if (!mRendering->occlusionQuerySupported()) if (!mRendering->occlusionQuerySupported())
{ result = mPhysics->getFacedHandle (*this, 500);
std::pair<float, std::string> result = mPhysics->getFacedHandle (*this, 500);
if (result.second.empty() ||
result.first>getStore().get<ESM::GameSetting>().find ("iMaxActivateDist")->getInt())
return "";
return result.second;
}
else else
{ result = std::make_pair (mFacedDistance, mFacedHandle);
if (mFacedDistance > result.first>getStore().get<ESM::GameSetting>().find ("iMaxActivateDist")->getInt())
return "";
// updated every few frames in update() if (result.second.empty())
return mFacedHandle; return MWWorld::Ptr ();
}
float ActivationDistance = getStore().get<ESM::GameSetting>().find ("iMaxActivateDist")->getInt();
if (result.first > ActivationDistance)
return MWWorld::Ptr ();
return searchPtrViaHandle (result.second);
} }
void World::deleteObject (const Ptr& ptr) void World::deleteObject (const Ptr& ptr)
@ -904,7 +902,7 @@ namespace MWWorld
void World::updateWindowManager () void World::updateWindowManager ()
{ {
// inform the GUI about focused object // inform the GUI about focused object
MWWorld::Ptr object = searchPtrViaHandle(mFacedHandle); MWWorld::Ptr object = getFacedObject ();
MWBase::Environment::get().getWindowManager()->setFocusObject(object); MWBase::Environment::get().getWindowManager()->setFocusObject(object);

View file

@ -227,8 +227,8 @@ namespace MWWorld
virtual void markCellAsUnchanged(); virtual void markCellAsUnchanged();
virtual std::string getFacedHandle(); virtual MWWorld::Ptr getFacedObject();
///< Return handle of the object the player is looking at ///< Return pointer to the object the player is looking at, if it is within activation range
virtual void deleteObject (const Ptr& ptr); virtual void deleteObject (const Ptr& ptr);