1 #ifndef UGDK_ACTION_3D_COMPONENT_BODY_H
2 #define UGDK_ACTION_3D_COMPONENT_BODY_H
5 #include <OgreVector3.h>
6 #include <LinearMath/btVector3.h>
16 class btManifoldPoint;
29 ContactPoint(
const btVector3& posA,
const btVector3& posB,
double impulse,
double dist)
30 : world_positionA(posA), world_positionB(posB), applied_impulse(impulse), distance(dist) {}
34 using CollisionAction = std::function < void(const ElementPtr&, const ElementPtr&, const ContactPointVector&) >;
40 std::type_index
type()
const override;
42 virtual double mass()
const = 0;
45 virtual void set_angular_factor(
double x_factor,
double y_factor,
double z_factor) = 0;
48 virtual void set_damping(
double linear,
double angular) = 0;
52 virtual Ogre::Vector3
position()
const = 0;
60 void Translate(
const Ogre::Vector3& move);
63 virtual void Translate(
double move_x,
double move_y,
double move_z) = 0;
64 virtual void ApplyImpulse(
double imp_x,
double imp_y,
double imp_z) = 0;
65 virtual void ApplyImpulse(
const Ogre::Vector3& imp,
const Ogre::Vector3& relative_pos) = 0;
66 virtual void Rotate(
double yaw,
double pitch,
double roll) = 0;
67 virtual void Scale(
double factor_x,
double factor_y,
double factor_z) = 0;
96 virtual void Translate(
double move_x,
double move_y,
double move_z)
override {}
97 virtual void ApplyImpulse(
double delta_x,
double delta_y,
double delta_z)
override {}
98 virtual void Rotate(
double yaw,
double pitch,
double roll)
override {}
99 virtual void Scale(
double factor_x,
double factor_y,
double factor_z)
override {}
107 #endif // UGDK_ACTION_3D_COMPONENT_BODY_H
std::vector< ContactPoint > ContactPointVector
Definition: body.h:33
virtual short collision_group() const =0
virtual Ogre::Quaternion orientation() const =0
virtual void AddCollisionAction(short target_mask, const CollisionAction &action)=0
virtual void set_friction(double frict)=0
void ApplyImpulse(const Ogre::Vector3 &imp)
Definition: body.h:86
Definition: animation.h:11
virtual void set_linear_velocity(const Ogre::Vector3 &velocity)=0
std::shared_ptr< Element > ElementPtr
Definition: body.h:32
void OnTaken() override
TODO: Make this not accessible from Object.
Definition: body.h:90
Definition: component.h:14
virtual double mass() const =0
virtual void Scale(double factor_x, double factor_y, double factor_z) override
Definition: body.h:99
Body()
Definition: body.h:73
virtual void SetContinuousCollisionDetection(double speed_threshold, double sphere_radius)=0
virtual void Rotate(double yaw, double pitch, double roll) override
Definition: body.h:98
std::type_index type() const override
Definition: body.h:78
virtual Ogre::Vector3 GetVelocityInPoint(const Ogre::Vector3 &point) const =0
virtual void set_restitution(double factor)=0
virtual void ApplyImpulse(double delta_x, double delta_y, double delta_z) override
Definition: body.h:97
std::function< void(const ElementPtr &, const ElementPtr &, const ContactPointVector &) > CollisionAction
Definition: body.h:34
virtual void Translate(double move_x, double move_y, double move_z) override
Definition: body.h:96
virtual void Scale(double factor_x, double factor_y, double factor_z)=0
Definition: component.h:36
virtual void set_angular_factor(double x_factor, double y_factor, double z_factor)=0
virtual Ogre::Vector3 position() const =0
void Translate(const Ogre::Vector3 &move)
Definition: body.h:82
virtual Ogre::Vector3 angular_velocity() const =0
virtual void Rotate(double yaw, double pitch, double roll)=0
virtual short collides_with() const =0
virtual Ogre::Vector3 linear_velocity() const =0
virtual void SetRespondsOnContact(bool has_response)=0
static const bool is_valid
Definition: component.h:38
virtual void set_damping(double linear, double angular)=0
virtual void set_orientation(const Ogre::Vector3 &dir)=0