1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-03-30 11:06:43 +00:00

Add and use an MWWorld::isFlying method

This commit is contained in:
Chris Robinson 2013-02-18 22:39:43 -08:00
parent 17200cb226
commit 5a1a0b7338
6 changed files with 19 additions and 7 deletions

View file

@ -286,6 +286,7 @@ namespace MWBase
virtual void processChangedSettings (const Settings::CategorySettingVector& settings) = 0; virtual void processChangedSettings (const Settings::CategorySettingVector& settings) = 0;
virtual bool isFlying(const MWWorld::Ptr &ptr) const = 0;
virtual bool isSwimming(const MWWorld::Ptr &object) const = 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 isUnderwater(const ESM::Cell &cell, const Ogre::Vector3 &pos) const = 0;
virtual bool isOnGround(const MWWorld::Ptr &ptr) const = 0; virtual bool isOnGround(const MWWorld::Ptr &ptr) const = 0;

View file

@ -336,7 +336,7 @@ namespace MWClass
float moveSpeed; float moveSpeed;
if(normalizedEncumbrance > 1.0f) if(normalizedEncumbrance > 1.0f)
moveSpeed = 0.0f; moveSpeed = 0.0f;
else if(0/*world->isFlying(ptr)*/) else if(world->isFlying(ptr))
{ {
float flySpeed = 0.01f*(npcdata->mCreatureStats.getAttribute(ESM::Attribute::Speed).getModified() + float flySpeed = 0.01f*(npcdata->mCreatureStats.getAttribute(ESM::Attribute::Speed).getModified() +
0.0f/*levitationBonus*/); 0.0f/*levitationBonus*/);

View file

@ -1382,6 +1382,17 @@ namespace MWWorld
mRendering->getTriangleBatchCount(triangles, batches); mRendering->getTriangleBatchCount(triangles, batches);
} }
bool
World::isFlying(const MWWorld::Ptr &ptr) const
{
RefData &refdata = ptr.getRefData();
/// \todo check for levitation effects
const OEngine::Physic::PhysicActor *physactor = mPhysEngine->getCharacter(refdata.getHandle());
if(physactor && physactor->getCollisionMode())
return false;
return true;
}
bool bool
World::isSwimming(const MWWorld::Ptr &object) const World::isSwimming(const MWWorld::Ptr &object) const
{ {

View file

@ -314,6 +314,7 @@ namespace MWWorld
virtual void processChangedSettings(const Settings::CategorySettingVector& settings); virtual void processChangedSettings(const Settings::CategorySettingVector& settings);
virtual bool isFlying(const MWWorld::Ptr &ptr) const;
virtual bool isSwimming(const MWWorld::Ptr &object) const; virtual bool isSwimming(const MWWorld::Ptr &object) const;
virtual bool isUnderwater(const ESM::Cell &cell, const Ogre::Vector3 &pos) const; virtual bool isUnderwater(const ESM::Cell &cell, const Ogre::Vector3 &pos) const;
virtual bool isOnGround(const MWWorld::Ptr &ptr) const; virtual bool isOnGround(const MWWorld::Ptr &ptr) const;

View file

@ -54,11 +54,6 @@ namespace Physic
collisionMode = collision; collisionMode = collision;
} }
bool PhysicActor::getCollisionMode()
{
return collisionMode;
}
void PhysicActor::setRotation(const Ogre::Quaternion &quat) void PhysicActor::setRotation(const Ogre::Quaternion &quat)
{ {

View file

@ -78,7 +78,11 @@ namespace Physic
void enableCollisions(bool collision); void enableCollisions(bool collision);
bool getCollisionMode(); bool getCollisionMode() const
{
return collisionMode;
}
/** /**
* This returns the visual position of the PhysicActor (used to position a scenenode). * This returns the visual position of the PhysicActor (used to position a scenenode).