From 4265dddc40923d1fbcdbb848a0e06a5df4e66308 Mon Sep 17 00:00:00 2001
From: Emanuel Guevel <guevel.emanuel@gmail.com>
Date: Wed, 2 Oct 2013 22:53:29 +0200
Subject: [PATCH] Add MWWorld::isSlowFalling(Ptr)

---
 apps/openmw/mwbase/world.hpp     |  1 +
 apps/openmw/mwworld/worldimp.cpp | 13 +++++++++++++
 apps/openmw/mwworld/worldimp.hpp |  1 +
 3 files changed, 15 insertions(+)

diff --git a/apps/openmw/mwbase/world.hpp b/apps/openmw/mwbase/world.hpp
index f8453afed..db03cb7bf 100644
--- a/apps/openmw/mwbase/world.hpp
+++ b/apps/openmw/mwbase/world.hpp
@@ -324,6 +324,7 @@ namespace MWBase
             virtual void processChangedSettings (const Settings::CategorySettingVector& settings) = 0;
 
             virtual bool isFlying(const MWWorld::Ptr &ptr) const = 0;
+            virtual bool isSlowFalling(const MWWorld::Ptr &ptr) const = 0;
             virtual bool isSwimming(const MWWorld::Ptr &object) const = 0;
             ///Is the head of the creature underwater?
             virtual bool isSubmerged(const MWWorld::Ptr &object) const = 0;
diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp
index f3d4c81b7..34ac01102 100644
--- a/apps/openmw/mwworld/worldimp.cpp
+++ b/apps/openmw/mwworld/worldimp.cpp
@@ -1582,6 +1582,19 @@ namespace MWWorld
         return false;
     }
 
+    bool
+    World::isSlowFalling(const MWWorld::Ptr &ptr) const
+    {
+        if(!ptr.getClass().isActor())
+            return false;
+
+        const MWMechanics::CreatureStats &stats = ptr.getClass().getCreatureStats(ptr);
+        if(stats.getMagicEffects().get(MWMechanics::EffectKey(ESM::MagicEffect::SlowFall)).mMagnitude > 0)
+            return true;
+
+        return false;
+    }
+
     bool World::isSubmerged(const MWWorld::Ptr &object) const
     {
         float *fpos = object.getRefData().getPosition().pos;
diff --git a/apps/openmw/mwworld/worldimp.hpp b/apps/openmw/mwworld/worldimp.hpp
index 53b01f1ab..333beb831 100644
--- a/apps/openmw/mwworld/worldimp.hpp
+++ b/apps/openmw/mwworld/worldimp.hpp
@@ -355,6 +355,7 @@ namespace MWWorld
             virtual void processChangedSettings(const Settings::CategorySettingVector& settings);
 
             virtual bool isFlying(const MWWorld::Ptr &ptr) const;
+            virtual bool isSlowFalling(const MWWorld::Ptr &ptr) const;
             ///Is the head of the creature underwater?
             virtual bool isSubmerged(const MWWorld::Ptr &object) const;
             virtual bool isSwimming(const MWWorld::Ptr &object) const;