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 void processChangedSettings (const Settings::CategorySettingVector& settings) = 0;
virtual bool isSwimming(const MWWorld::Ptr &object) = 0; virtual bool isSwimming(const MWWorld::Ptr &object) const = 0;
virtual bool isUnderwater(const ESM::Cell &cell, const Ogre::Vector3 &pos) = 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 togglePOV() = 0;
virtual void togglePreviewMode(bool enable) = 0; virtual void togglePreviewMode(bool enable) = 0;

View file

@ -1379,7 +1379,7 @@ namespace MWWorld
} }
bool bool
World::isSwimming(const MWWorld::Ptr &object) World::isSwimming(const MWWorld::Ptr &object) const
{ {
/// \todo add check ifActor() - only actors can swim /// \todo add check ifActor() - only actors can swim
float *fpos = object.getRefData().getPosition().pos; float *fpos = object.getRefData().getPosition().pos;
@ -1393,7 +1393,7 @@ namespace MWWorld
} }
bool 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)) { if (!(cell.mData.mFlags & ESM::Cell::HasWater)) {
return false; return false;
@ -1401,6 +1401,13 @@ namespace MWWorld
return pos.z < cell.mWater; 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() void World::renderPlayer()
{ {
mRendering->renderPlayer(mPlayer->getPlayer()); mRendering->renderPlayer(mPlayer->getPlayer());

View file

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