mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-03-11 10:14:05 +00:00
Merge remote-tracking branch 'scrawl/master'
This commit is contained in:
commit
9f0ccdc37a
@ -147,7 +147,7 @@ namespace MWClass
|
|||||||
|
|
||||||
if (ptr.getCellRef().getTeleport())
|
if (ptr.getCellRef().getTeleport())
|
||||||
{
|
{
|
||||||
boost::shared_ptr<MWWorld::Action> action(new MWWorld::ActionTeleport (ptr.getCellRef().getDestCell(), ptr.getCellRef().getDoorDest()));
|
boost::shared_ptr<MWWorld::Action> action(new MWWorld::ActionTeleport (ptr.getCellRef().getDestCell(), ptr.getCellRef().getDoorDest(), true));
|
||||||
|
|
||||||
action->setSound(openSound);
|
action->setSound(openSound);
|
||||||
|
|
||||||
|
@ -183,7 +183,7 @@ namespace MWGui
|
|||||||
MWBase::Environment::get().getDialogueManager()->goodbyeSelected();
|
MWBase::Environment::get().getDialogueManager()->goodbyeSelected();
|
||||||
|
|
||||||
// Teleports any followers, too.
|
// Teleports any followers, too.
|
||||||
MWWorld::ActionTeleport action(interior ? cellname : "", pos);
|
MWWorld::ActionTeleport action(interior ? cellname : "", pos, true);
|
||||||
action.execute(player);
|
action.execute(player);
|
||||||
|
|
||||||
MWBase::Environment::get().getWindowManager()->fadeScreenOut(0);
|
MWBase::Environment::get().getWindowManager()->fadeScreenOut(0);
|
||||||
|
@ -679,7 +679,7 @@ namespace MWMechanics
|
|||||||
if (markedCell)
|
if (markedCell)
|
||||||
{
|
{
|
||||||
MWWorld::ActionTeleport action(markedCell->isExterior() ? "" : markedCell->getCell()->mName,
|
MWWorld::ActionTeleport action(markedCell->isExterior() ? "" : markedCell->getCell()->mName,
|
||||||
markedPosition);
|
markedPosition, false);
|
||||||
action.execute(target);
|
action.execute(target);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -196,7 +196,11 @@ const NpcAnimation::PartBoneMap NpcAnimation::sPartList = createPartListMap();
|
|||||||
|
|
||||||
NpcAnimation::~NpcAnimation()
|
NpcAnimation::~NpcAnimation()
|
||||||
{
|
{
|
||||||
if (!mListenerDisabled)
|
if (!mListenerDisabled
|
||||||
|
// No need to getInventoryStore() to reset, if none exists
|
||||||
|
// This is to avoid triggering the listener via ensureCustomData()->autoEquip()->fireEquipmentChanged()
|
||||||
|
// all from within this destructor. ouch!
|
||||||
|
&& mPtr.getRefData().getCustomData())
|
||||||
mPtr.getClass().getInventoryStore(mPtr).setListener(NULL, mPtr);
|
mPtr.getClass().getInventoryStore(mPtr).setListener(NULL, mPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,23 +25,26 @@ namespace
|
|||||||
namespace MWWorld
|
namespace MWWorld
|
||||||
{
|
{
|
||||||
ActionTeleport::ActionTeleport (const std::string& cellName,
|
ActionTeleport::ActionTeleport (const std::string& cellName,
|
||||||
const ESM::Position& position)
|
const ESM::Position& position, bool teleportFollowers)
|
||||||
: Action (true), mCellName (cellName), mPosition (position)
|
: Action (true), mCellName (cellName), mPosition (position), mTeleportFollowers(teleportFollowers)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActionTeleport::executeImp (const Ptr& actor)
|
void ActionTeleport::executeImp (const Ptr& actor)
|
||||||
{
|
{
|
||||||
//find any NPC that is following the actor and teleport him too
|
if (mTeleportFollowers)
|
||||||
std::set<MWWorld::Ptr> followers;
|
|
||||||
getFollowers(actor, followers);
|
|
||||||
for(std::set<MWWorld::Ptr>::iterator it = followers.begin();it != followers.end();++it)
|
|
||||||
{
|
{
|
||||||
MWWorld::Ptr follower = *it;
|
//find any NPC that is following the actor and teleport him too
|
||||||
if (Ogre::Vector3(follower.getRefData().getPosition().pos).squaredDistance(
|
std::set<MWWorld::Ptr> followers;
|
||||||
Ogre::Vector3( actor.getRefData().getPosition().pos))
|
getFollowers(actor, followers);
|
||||||
<= 800*800)
|
for(std::set<MWWorld::Ptr>::iterator it = followers.begin();it != followers.end();++it)
|
||||||
teleport(*it);
|
{
|
||||||
|
MWWorld::Ptr follower = *it;
|
||||||
|
if (Ogre::Vector3(follower.getRefData().getPosition().pos).squaredDistance(
|
||||||
|
Ogre::Vector3( actor.getRefData().getPosition().pos))
|
||||||
|
<= 800*800)
|
||||||
|
teleport(*it);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
teleport(actor);
|
teleport(actor);
|
||||||
|
@ -13,6 +13,7 @@ namespace MWWorld
|
|||||||
{
|
{
|
||||||
std::string mCellName;
|
std::string mCellName;
|
||||||
ESM::Position mPosition;
|
ESM::Position mPosition;
|
||||||
|
bool mTeleportFollowers;
|
||||||
|
|
||||||
/// Teleports this actor and also teleports anyone following that actor.
|
/// Teleports this actor and also teleports anyone following that actor.
|
||||||
virtual void executeImp (const Ptr& actor);
|
virtual void executeImp (const Ptr& actor);
|
||||||
@ -22,8 +23,9 @@ namespace MWWorld
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
ActionTeleport (const std::string& cellName, const ESM::Position& position);
|
ActionTeleport (const std::string& cellName, const ESM::Position& position, bool teleportFollowers);
|
||||||
///< If cellName is empty, an exterior cell is assumed.
|
///< If cellName is empty, an exterior cell is assumed.
|
||||||
|
/// @param teleportFollowers Whether to teleport any following actors of the target actor as well.
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -366,6 +366,19 @@ namespace MWWorld
|
|||||||
inserted.first->second = scpt;
|
inserted.first->second = scpt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
inline void Store<ESM::StartScript>::load(ESM::ESMReader &esm, const std::string &id)
|
||||||
|
{
|
||||||
|
ESM::StartScript s;
|
||||||
|
s.load(esm);
|
||||||
|
s.mId = Misc::StringUtils::toLower(s.mId);
|
||||||
|
std::pair<typename Static::iterator, bool> inserted = mStatic.insert(std::make_pair(s.mId, s));
|
||||||
|
if (inserted.second)
|
||||||
|
mShared.push_back(&inserted.first->second);
|
||||||
|
else
|
||||||
|
inserted.first->second = s;
|
||||||
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
class Store<ESM::LandTexture> : public StoreBase
|
class Store<ESM::LandTexture> : public StoreBase
|
||||||
{
|
{
|
||||||
|
@ -2919,7 +2919,7 @@ namespace MWWorld
|
|||||||
if ( !closestMarker.mCell->isExterior() )
|
if ( !closestMarker.mCell->isExterior() )
|
||||||
cellName = closestMarker.mCell->getCell()->mName;
|
cellName = closestMarker.mCell->getCell()->mName;
|
||||||
|
|
||||||
MWWorld::ActionTeleport action(cellName, closestMarker.getRefData().getPosition());
|
MWWorld::ActionTeleport action(cellName, closestMarker.getRefData().getPosition(), false);
|
||||||
action.execute(ptr);
|
action.execute(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user