forked from teamnwah/openmw-tes3coop
Implement movement for creatures (formula is a stub)
This commit is contained in:
parent
bd6d54cc8f
commit
0c7f48ec8a
2 changed files with 68 additions and 0 deletions
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
#include "../mwmechanics/creaturestats.hpp"
|
#include "../mwmechanics/creaturestats.hpp"
|
||||||
#include "../mwmechanics/magiceffects.hpp"
|
#include "../mwmechanics/magiceffects.hpp"
|
||||||
|
#include "../mwmechanics/movement.hpp"
|
||||||
|
|
||||||
#include "../mwbase/environment.hpp"
|
#include "../mwbase/environment.hpp"
|
||||||
#include "../mwbase/mechanicsmanager.hpp"
|
#include "../mwbase/mechanicsmanager.hpp"
|
||||||
|
@ -29,6 +30,7 @@ namespace
|
||||||
{
|
{
|
||||||
MWMechanics::CreatureStats mCreatureStats;
|
MWMechanics::CreatureStats mCreatureStats;
|
||||||
MWWorld::ContainerStore mContainerStore;
|
MWWorld::ContainerStore mContainerStore;
|
||||||
|
MWMechanics::Movement mMovement;
|
||||||
|
|
||||||
virtual MWWorld::CustomData *clone() const;
|
virtual MWWorld::CustomData *clone() const;
|
||||||
};
|
};
|
||||||
|
@ -47,6 +49,18 @@ namespace MWClass
|
||||||
{
|
{
|
||||||
std::auto_ptr<CustomData> data (new CustomData);
|
std::auto_ptr<CustomData> data (new CustomData);
|
||||||
|
|
||||||
|
static bool inited = false;
|
||||||
|
if(!inited)
|
||||||
|
{
|
||||||
|
const MWBase::World *world = MWBase::Environment::get().getWorld();
|
||||||
|
const MWWorld::Store<ESM::GameSetting> &gmst = world->getStore().get<ESM::GameSetting>();
|
||||||
|
|
||||||
|
fMinWalkSpeedCreature = gmst.find("fMinWalkSpeedCreature");
|
||||||
|
fMaxWalkSpeedCreature = gmst.find("fMaxWalkSpeedCreature");
|
||||||
|
|
||||||
|
inited = true;
|
||||||
|
}
|
||||||
|
|
||||||
MWWorld::LiveCellRef<ESM::Creature> *ref = ptr.get<ESM::Creature>();
|
MWWorld::LiveCellRef<ESM::Creature> *ref = ptr.get<ESM::Creature>();
|
||||||
|
|
||||||
// creature stats
|
// creature stats
|
||||||
|
@ -181,6 +195,42 @@ namespace MWClass
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float Creature::getSpeed(const MWWorld::Ptr &ptr) const
|
||||||
|
{
|
||||||
|
MWMechanics::CreatureStats& stats = getCreatureStats(ptr);
|
||||||
|
float walkSpeed = fMinWalkSpeedCreature->getFloat() + 0.01 * stats.getAttribute(ESM::Attribute::Speed).getModified()
|
||||||
|
* (fMaxWalkSpeedCreature->getFloat() - fMinWalkSpeedCreature->getFloat());
|
||||||
|
/// \todo what about the rest?
|
||||||
|
return walkSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
|
MWMechanics::Movement& Creature::getMovementSettings (const MWWorld::Ptr& ptr) const
|
||||||
|
{
|
||||||
|
ensureCustomData (ptr);
|
||||||
|
|
||||||
|
return dynamic_cast<CustomData&> (*ptr.getRefData().getCustomData()).mMovement;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ogre::Vector3 Creature::getMovementVector (const MWWorld::Ptr& ptr) const
|
||||||
|
{
|
||||||
|
MWMechanics::Movement &movement = getMovementSettings(ptr);
|
||||||
|
Ogre::Vector3 vec(movement.mPosition);
|
||||||
|
movement.mPosition[0] = 0.0f;
|
||||||
|
movement.mPosition[1] = 0.0f;
|
||||||
|
movement.mPosition[2] = 0.0f;
|
||||||
|
return vec;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ogre::Vector3 Creature::getRotationVector (const MWWorld::Ptr& ptr) const
|
||||||
|
{
|
||||||
|
MWMechanics::Movement &movement = getMovementSettings(ptr);
|
||||||
|
Ogre::Vector3 vec(movement.mRotation);
|
||||||
|
movement.mRotation[0] = 0.0f;
|
||||||
|
movement.mRotation[1] = 0.0f;
|
||||||
|
movement.mRotation[2] = 0.0f;
|
||||||
|
return vec;
|
||||||
|
}
|
||||||
|
|
||||||
MWGui::ToolTipInfo Creature::getToolTipInfo (const MWWorld::Ptr& ptr) const
|
MWGui::ToolTipInfo Creature::getToolTipInfo (const MWWorld::Ptr& ptr) const
|
||||||
{
|
{
|
||||||
MWWorld::LiveCellRef<ESM::Creature> *ref =
|
MWWorld::LiveCellRef<ESM::Creature> *ref =
|
||||||
|
@ -249,4 +299,7 @@ namespace MWClass
|
||||||
|
|
||||||
return MWWorld::Ptr(&cell.mCreatures.insert(*ref), &cell);
|
return MWWorld::Ptr(&cell.mCreatures.insert(*ref), &cell);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ESM::GameSetting* Creature::fMinWalkSpeedCreature;
|
||||||
|
const ESM::GameSetting* Creature::fMaxWalkSpeedCreature;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,9 @@ namespace MWClass
|
||||||
virtual MWWorld::Ptr
|
virtual MWWorld::Ptr
|
||||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||||
|
|
||||||
|
static const ESM::GameSetting *fMinWalkSpeedCreature;
|
||||||
|
static const ESM::GameSetting *fMaxWalkSpeedCreature;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
virtual std::string getId (const MWWorld::Ptr& ptr) const;
|
virtual std::string getId (const MWWorld::Ptr& ptr) const;
|
||||||
|
@ -66,6 +69,18 @@ namespace MWClass
|
||||||
|
|
||||||
virtual bool isPersistent (const MWWorld::Ptr& ptr) const;
|
virtual bool isPersistent (const MWWorld::Ptr& ptr) const;
|
||||||
|
|
||||||
|
virtual MWMechanics::Movement& getMovementSettings (const MWWorld::Ptr& ptr) const;
|
||||||
|
///< Return desired movement.
|
||||||
|
|
||||||
|
virtual Ogre::Vector3 getMovementVector (const MWWorld::Ptr& ptr) const;
|
||||||
|
///< Return desired movement vector (determined based on movement settings,
|
||||||
|
/// stance and stats).
|
||||||
|
|
||||||
|
virtual Ogre::Vector3 getRotationVector (const MWWorld::Ptr& ptr) const;
|
||||||
|
///< Return desired rotations, as euler angles.
|
||||||
|
|
||||||
|
float getSpeed (const MWWorld::Ptr& ptr) const;
|
||||||
|
|
||||||
static void registerSelf();
|
static void registerSelf();
|
||||||
|
|
||||||
virtual std::string getModel(const MWWorld::Ptr &ptr) const;
|
virtual std::string getModel(const MWWorld::Ptr &ptr) const;
|
||||||
|
|
Loading…
Reference in a new issue