forked from mirror/openmw-tes3mp
Feature #1545: Allow to select the player in the console
This commit is contained in:
parent
21eb25706c
commit
5ac2788a15
2 changed files with 17 additions and 27 deletions
|
@ -1507,7 +1507,7 @@ namespace MWWorld
|
||||||
updateFacedHandle ();
|
updateFacedHandle ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::getFacedHandle(std::string& facedHandle, float maxDistance)
|
void World::getFacedHandle(std::string& facedHandle, float maxDistance, bool ignorePlayer)
|
||||||
{
|
{
|
||||||
maxDistance += mRendering->getCameraDistance();
|
maxDistance += mRendering->getCameraDistance();
|
||||||
|
|
||||||
|
@ -1517,31 +1517,15 @@ namespace MWWorld
|
||||||
float x, y;
|
float x, y;
|
||||||
MWBase::Environment::get().getWindowManager()->getMousePosition(x, y);
|
MWBase::Environment::get().getWindowManager()->getMousePosition(x, y);
|
||||||
results = mPhysics->getFacedHandles(x, y, maxDistance);
|
results = mPhysics->getFacedHandles(x, y, maxDistance);
|
||||||
if (MWBase::Environment::get().getWindowManager()->isConsoleMode())
|
|
||||||
results = mPhysics->getFacedHandles(x, y, getMaxActivationDistance ()*50);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
results = mPhysics->getFacedHandles(maxDistance);
|
results = mPhysics->getFacedHandles(maxDistance);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ignore the player and other things we're not interested in
|
if (ignorePlayer &&
|
||||||
std::vector < std::pair < float, std::string > >::iterator it = results.begin();
|
!results.empty() && results.front().second == "player")
|
||||||
while (it != results.end())
|
results.erase(results.begin());
|
||||||
{
|
|
||||||
if ((*it).second.find("HeightField") != std::string::npos) // Don't attempt to getPtrViaHandle on terrain
|
|
||||||
{
|
|
||||||
++it;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getPtrViaHandle((*it).second) == mPlayer->getPlayer() ) // not interested in player (unless you want to talk to yourself)
|
|
||||||
{
|
|
||||||
it = results.erase(it);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
++it;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (results.empty()
|
if (results.empty()
|
||||||
|| results.front().second.find("HeightField") != std::string::npos) // Blocked by terrain
|
|| results.front().second.find("HeightField") != std::string::npos) // Blocked by terrain
|
||||||
|
@ -1552,14 +1536,20 @@ namespace MWWorld
|
||||||
|
|
||||||
void World::updateFacedHandle ()
|
void World::updateFacedHandle ()
|
||||||
{
|
{
|
||||||
float telekinesisRangeBonus =
|
if (MWBase::Environment::get().getWindowManager()->isGuiMode() &&
|
||||||
mPlayer->getPlayer().getClass().getCreatureStats(mPlayer->getPlayer()).getMagicEffects()
|
MWBase::Environment::get().getWindowManager()->isConsoleMode())
|
||||||
.get(ESM::MagicEffect::Telekinesis).getMagnitude();
|
getFacedHandle(mFacedHandle, getMaxActivationDistance() * 50, false);
|
||||||
telekinesisRangeBonus = feetToGameUnits(telekinesisRangeBonus);
|
else
|
||||||
|
{
|
||||||
|
float telekinesisRangeBonus =
|
||||||
|
mPlayer->getPlayer().getClass().getCreatureStats(mPlayer->getPlayer()).getMagicEffects()
|
||||||
|
.get(ESM::MagicEffect::Telekinesis).getMagnitude();
|
||||||
|
telekinesisRangeBonus = feetToGameUnits(telekinesisRangeBonus);
|
||||||
|
|
||||||
float activationDistance = getMaxActivationDistance() + telekinesisRangeBonus;
|
float activationDistance = getMaxActivationDistance() + telekinesisRangeBonus;
|
||||||
|
|
||||||
getFacedHandle(mFacedHandle, activationDistance);
|
getFacedHandle(mFacedHandle, activationDistance);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool World::isCellExterior() const
|
bool World::isCellExterior() const
|
||||||
|
|
|
@ -113,7 +113,7 @@ namespace MWWorld
|
||||||
void updateWindowManager ();
|
void updateWindowManager ();
|
||||||
void performUpdateSceneQueries ();
|
void performUpdateSceneQueries ();
|
||||||
void updateFacedHandle ();
|
void updateFacedHandle ();
|
||||||
void getFacedHandle(std::string& facedHandle, float maxDistance);
|
void getFacedHandle(std::string& facedHandle, float maxDistance, bool ignorePlayer=true);
|
||||||
|
|
||||||
float getMaxActivationDistance ();
|
float getMaxActivationDistance ();
|
||||||
float getNpcActivationDistance ();
|
float getNpcActivationDistance ();
|
||||||
|
|
Loading…
Reference in a new issue