mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-26 09:35:28 +00:00
39cf7b0b42
This prevents having to store another copy of it, which risks getting out of sync.
46 lines
1.2 KiB
C++
46 lines
1.2 KiB
C++
#ifndef GAME_MWMECHANICS_MOVEMENTSOLVER_H
|
|
#define GAME_MWMECHANICS_MOVEMENTSOLVER_H
|
|
|
|
#include <OgreVector3.h>
|
|
|
|
namespace MWWorld
|
|
{
|
|
class Ptr;
|
|
}
|
|
|
|
namespace OEngine
|
|
{
|
|
namespace Physic
|
|
{
|
|
class PhysicEngine;
|
|
class PhysicActor;
|
|
}
|
|
}
|
|
|
|
namespace MWMechanics
|
|
{
|
|
class MovementSolver
|
|
{
|
|
public:
|
|
MovementSolver();
|
|
virtual ~MovementSolver();
|
|
|
|
Ogre::Vector3 move(const MWWorld::Ptr &ptr, const Ogre::Vector3 &movement, float time, const Ogre::Vector3 &halfExtents);
|
|
|
|
private:
|
|
bool stepMove(Ogre::Vector3& position, const Ogre::Vector3 &velocity, float remainingTime, float verticalRotation, const Ogre::Vector3 &halfExtents, bool isInterior);
|
|
|
|
void clipVelocity(const Ogre::Vector3& in, const Ogre::Vector3& normal, Ogre::Vector3& out, const float overbounce);
|
|
void projectVelocity(Ogre::Vector3& velocity, const Ogre::Vector3& direction);
|
|
|
|
float getSlope(const Ogre::Vector3 &normal);
|
|
|
|
OEngine::Physic::PhysicEngine *mEngine;
|
|
OEngine::Physic::PhysicActor *mPhysicActor;
|
|
|
|
float verticalVelocity;
|
|
};
|
|
}
|
|
|
|
#endif /* GAME_MWMECHANICS_MOVEMENTSOLVER_H */
|