1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-10-16 10:16:33 +00:00

Unify focus object terminology

This commit is contained in:
Andrei Kortunov 2025-10-11 12:54:07 +04:00
parent 98973426a4
commit 48e1ee3ac7
10 changed files with 41 additions and 41 deletions

View file

@ -342,10 +342,10 @@ bool OMW::Engine::frame(unsigned frameNumber, float frametime)
mViewer->eventTraversal();
mViewer->updateTraversal();
// update GUI by world data
// update focus object for GUI
{
ScopedProfile<UserStatsType::WindowManager> profile(frameStart, frameNumber, *timer, *stats);
mWorld->updateWindowManager();
ScopedProfile<UserStatsType::Focus> profile(frameStart, frameNumber, *timer, *stats);
mWorld->updateFocusObject();
}
// if there is a separate Lua thread, it starts the update now

View file

@ -257,10 +257,10 @@ namespace MWBase
= 0;
///< @param changeEvent If false, do not trigger cell change flag or detect worldspace changes
virtual MWWorld::Ptr getFacedObject() = 0;
virtual MWWorld::Ptr getFocusObject() = 0;
///< Return pointer to the object the player is looking at, if it is within activation range
virtual float getDistanceToFacedObject() = 0;
virtual float getDistanceToFocusObject() = 0;
virtual float getMaxActivationDistance() const = 0;

View file

@ -124,7 +124,7 @@ namespace MWClass
// make door glow if player activates it with telekinesis
if (actor == MWMechanics::getPlayer()
&& MWBase::Environment::get().getWorld()->getDistanceToFacedObject()
&& MWBase::Environment::get().getWorld()->getDistanceToFocusObject()
> MWBase::Environment::get().getWorld()->getMaxActivationDistance())
{
MWRender::Animation* animation = MWBase::Environment::get().getWorld()->getAnimation(ptr);
@ -184,7 +184,7 @@ namespace MWClass
if (ptr.getCellRef().getTeleport())
{
if (actor == MWMechanics::getPlayer()
&& MWBase::Environment::get().getWorld()->getDistanceToFacedObject()
&& MWBase::Environment::get().getWorld()->getDistanceToFocusObject()
> MWBase::Environment::get().getWorld()->getMaxActivationDistance())
{
// player activated teleport door with telekinesis

View file

@ -225,7 +225,7 @@ namespace MWGui
if (!winMgr->isConsoleMode() && (mode != GM_Container) && (mode != GM_Inventory))
return;
MWWorld::Ptr object = MWBase::Environment::get().getWorld()->getFacedObject();
MWWorld::Ptr object = MWBase::Environment::get().getWorld()->getFocusObject();
if (winMgr->isConsoleMode())
winMgr->setConsoleSelectedObject(object);

View file

@ -1745,7 +1745,7 @@ namespace MWMechanics
{
// TODO: this will only work for the player, and needs to be fixed if NPCs should ever use
// lockpicks/probes.
MWWorld::Ptr target = world->getFacedObject();
MWWorld::Ptr target = world->getFocusObject();
if (!target.isEmpty())
{

View file

@ -18,7 +18,7 @@ namespace MWWorld
// Using activation distance as the trap range.
if (actor == MWBase::Environment::get().getWorld()->getPlayerPtr()
&& MWBase::Environment::get().getWorld()->getDistanceToFacedObject()
&& MWBase::Environment::get().getWorld()->getDistanceToFocusObject()
> trapRange) // player activated object outside range of trap
{
MWMechanics::CastSpell cast(mTrapSource, mTrapSource);

View file

@ -193,7 +193,7 @@ namespace MWWorld
if (playerStats.isParalyzed() || playerStats.getKnockedDown() || playerStats.isDead())
return;
MWWorld::Ptr toActivate = MWBase::Environment::get().getWorld()->getFacedObject();
MWWorld::Ptr toActivate = MWBase::Environment::get().getWorld()->getFocusObject();
if (toActivate.isEmpty())
return;

View file

@ -261,7 +261,7 @@ namespace MWWorld
, mActivationDistanceOverride(activationDistanceOverride)
, mStartCell(startCell)
, mSwimHeightScale(0.f)
, mDistanceToFacedObject(-1.f)
, mDistanceToFocusObject(-1.f)
, mTeleportEnabled(true)
, mLevitationEnabled(true)
, mGoToJail(false)
@ -999,33 +999,33 @@ namespace MWWorld
return static_cast<float>(iMaxActivateDist);
}
MWWorld::Ptr World::getFacedObject()
MWWorld::Ptr World::getFocusObject()
{
MWWorld::Ptr facedObject;
MWWorld::Ptr focusObject;
if (MWBase::Environment::get().getStateManager()->getState() == MWBase::StateManager::State_NoGame)
return facedObject;
return focusObject;
if (MWBase::Environment::get().getWindowManager()->isGuiMode()
&& MWBase::Environment::get().getWindowManager()->isConsoleMode())
facedObject = getFacedObject(getMaxActivationDistance() * 50, false);
focusObject = getFocusObject(getMaxActivationDistance() * 50, false);
else
{
float activationDistance = getActivationDistancePlusTelekinesis();
facedObject = getFacedObject(activationDistance, true);
focusObject = getFocusObject(activationDistance, true);
if (!facedObject.isEmpty() && !facedObject.getClass().allowTelekinesis(facedObject)
&& mDistanceToFacedObject > getMaxActivationDistance()
if (!focusObject.isEmpty() && !focusObject.getClass().allowTelekinesis(focusObject)
&& mDistanceToFocusObject > getMaxActivationDistance()
&& !MWBase::Environment::get().getWindowManager()->isGuiMode())
return nullptr;
}
return facedObject;
return focusObject;
}
float World::getDistanceToFacedObject()
float World::getDistanceToFocusObject()
{
return mDistanceToFacedObject;
return mDistanceToFocusObject;
}
osg::Matrixf World::getActorHeadTransform(const MWWorld::ConstPtr& actor) const
@ -1772,12 +1772,12 @@ namespace MWWorld
MWBase::Environment::get().getSoundManager()->setListenerPosDir(listenerPos, forward, up, underwater);
}
void World::updateWindowManager()
void World::updateFocusObject()
{
try
{
// inform the GUI about focused object
MWWorld::Ptr object = getFacedObject();
MWWorld::Ptr object = getFocusObject();
// retrieve the object's top point's screen position so we know where to place the floating label
if (!object.isEmpty())
@ -1798,15 +1798,15 @@ namespace MWWorld
}
catch (std::exception& e)
{
Log(Debug::Error) << "Error updating window manager: " << e.what();
Log(Debug::Error) << "Error updating focus object: " << e.what();
}
}
MWWorld::Ptr World::getFacedObject(float maxDistance, bool ignorePlayer)
MWWorld::Ptr World::getFocusObject(float maxDistance, bool ignorePlayer)
{
const float camDist = mRendering->getCamera()->getCameraDistance();
maxDistance += camDist;
MWWorld::Ptr facedObject;
MWWorld::Ptr focusObject;
MWRender::RenderingManager::RayResult rayToObject;
if (MWBase::Environment::get().getWindowManager()->isGuiMode())
@ -1818,14 +1818,14 @@ namespace MWWorld
else
rayToObject = mRendering->castCameraToViewportRay(0.5f, 0.5f, maxDistance, ignorePlayer);
facedObject = rayToObject.mHitObject;
if (facedObject.isEmpty() && rayToObject.mHitRefnum.isSet())
facedObject = MWBase::Environment::get().getWorldModel()->getPtr(rayToObject.mHitRefnum);
focusObject = rayToObject.mHitObject;
if (focusObject.isEmpty() && rayToObject.mHitRefnum.isSet())
focusObject = MWBase::Environment::get().getWorldModel()->getPtr(rayToObject.mHitRefnum);
if (rayToObject.mHit)
mDistanceToFacedObject = (rayToObject.mRatio * maxDistance) - camDist;
mDistanceToFocusObject = (rayToObject.mRatio * maxDistance) - camDist;
else
mDistanceToFacedObject = -1;
return facedObject;
mDistanceToFocusObject = -1;
return focusObject;
}
bool World::castRenderingRay(MWPhysics::RayCastingResult& res, const osg::Vec3f& from, const osg::Vec3f& to,
@ -2997,7 +2997,7 @@ namespace MWWorld
else
{
if (casterIsPlayer)
target = getFacedObject();
target = getFocusObject();
if (target.isEmpty() || !target.getClass().hasToolTip(target))
{

View file

@ -121,7 +121,7 @@ namespace MWWorld
float mSwimHeightScale;
float mDistanceToFacedObject;
float mDistanceToFocusObject;
bool mTeleportEnabled;
bool mLevitationEnabled;
@ -152,7 +152,7 @@ namespace MWWorld
void preloadSpells();
MWWorld::Ptr getFacedObject(float maxDistance, bool ignorePlayer = true);
MWWorld::Ptr getFocusObject(float maxDistance, bool ignorePlayer = true);
void PCDropped(const Ptr& item);
@ -349,10 +349,10 @@ namespace MWWorld
bool changeEvent = true) override;
///< @param changeEvent If false, do not trigger cell change flag or detect worldspace changes
MWWorld::Ptr getFacedObject() override;
MWWorld::Ptr getFocusObject() override;
///< Return pointer to the object the player is looking at, if it is within activation range
float getDistanceToFacedObject() override;
float getDistanceToFocusObject() override;
/// @note No-op for items in containers. Use ContainerStore::removeItem instead.
void deleteObject(const Ptr& ptr) override;
@ -419,7 +419,7 @@ namespace MWWorld
void updatePhysics(
float duration, bool paused, osg::Timer_t frameStart, unsigned int frameNumber, osg::Stats& stats);
void updateWindowManager();
void updateFocusObject();
MWWorld::Ptr placeObject(
const MWWorld::Ptr& object, float cursorX, float cursorY, int amount, bool copy = true) override;

View file

@ -37,7 +37,7 @@ namespace OMW
PhysicsWorker,
World,
Gui,
WindowManager,
Focus,
Lua,
Number,
};
@ -82,7 +82,7 @@ namespace OMW
inline const UserStats UserStatsValue<UserStatsType::LuaSyncUpdate>::sValue{ "LuaSync", "luasyncupdate" };
template <>
inline const UserStats UserStatsValue<UserStatsType::WindowManager>::sValue{ "WindowManager", "windowmanager" };
inline const UserStats UserStatsValue<UserStatsType::Focus>::sValue{ "Focus", "focusobject" };
template <UserStatsType type>
struct ForEachUserStatsValue