1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-02-02 22:45:33 +00:00

Add a method to check if an object is on the ground

This commit is contained in:
Chris Robinson 2013-02-14 22:35:15 -08:00
parent 18b606fddf
commit ac717373b1
3 changed files with 15 additions and 6 deletions

View file

@ -286,8 +286,9 @@ namespace MWBase
virtual void processChangedSettings (const Settings::CategorySettingVector& settings) = 0;
virtual bool isSwimming(const MWWorld::Ptr &object) = 0;
virtual bool isUnderwater(const ESM::Cell &cell, const Ogre::Vector3 &pos) = 0;
virtual bool isSwimming(const MWWorld::Ptr &object) const = 0;
virtual bool isUnderwater(const ESM::Cell &cell, const Ogre::Vector3 &pos) const = 0;
virtual bool isOnGround(const MWWorld::Ptr &ptr) const = 0;
virtual void togglePOV() = 0;
virtual void togglePreviewMode(bool enable) = 0;

View file

@ -1379,7 +1379,7 @@ namespace MWWorld
}
bool
World::isSwimming(const MWWorld::Ptr &object)
World::isSwimming(const MWWorld::Ptr &object) const
{
/// \todo add check ifActor() - only actors can swim
float *fpos = object.getRefData().getPosition().pos;
@ -1393,7 +1393,7 @@ namespace MWWorld
}
bool
World::isUnderwater(const ESM::Cell &cell, const Ogre::Vector3 &pos)
World::isUnderwater(const ESM::Cell &cell, const Ogre::Vector3 &pos) const
{
if (!(cell.mData.mFlags & ESM::Cell::HasWater)) {
return false;
@ -1401,6 +1401,13 @@ namespace MWWorld
return pos.z < cell.mWater;
}
bool World::isOnGround(const MWWorld::Ptr &ptr) const
{
RefData &refdata = ptr.getRefData();
const OEngine::Physic::PhysicActor *physactor = mPhysEngine->getCharacter(refdata.getHandle());
return physactor && physactor->getOnGround();
}
void World::renderPlayer()
{
mRendering->renderPlayer(mPlayer->getPlayer());

View file

@ -314,8 +314,9 @@ namespace MWWorld
virtual void processChangedSettings(const Settings::CategorySettingVector& settings);
virtual bool isSwimming(const MWWorld::Ptr &object);
virtual bool isUnderwater(const ESM::Cell &cell, const Ogre::Vector3 &pos);
virtual bool isSwimming(const MWWorld::Ptr &object) const;
virtual bool isUnderwater(const ESM::Cell &cell, const Ogre::Vector3 &pos) const;
virtual bool isOnGround(const MWWorld::Ptr &ptr) const;
virtual void togglePOV() {
mRendering->togglePOV();