MBall cleanup: remove unused F_ERROR references, als fix/enhance BKE_mball_basis_find()
[blender.git] / source / blender / makesdna / DNA_rigidbody_types.h
index 1636f2f4e4b9c69058f0308537075b2808a4ca36..5d76ffe57b5d4cd882d4741d1930f34aa3fb92a4 100644 (file)
@@ -80,9 +80,7 @@ typedef enum eRigidBodyWorld_Flag {
        /* sim data needs to be rebuilt */
        RBW_FLAG_NEEDS_REBUILD          = (1 << 1),
        /* usse split impulse when stepping the simulation */
-       RBW_FLAG_USE_SPLIT_IMPULSE      = (1 << 2),
-       /* need to step simulation after frame update */
-       RBW_FLAG_FRAME_UPDATE           = (1 << 3)
+       RBW_FLAG_USE_SPLIT_IMPULSE      = (1 << 2)
 } eRigidBodyWorld_Flag;
 
 /* ******************************** */
@@ -105,7 +103,8 @@ typedef struct RigidBodyOb {
        
        int flag;                               /* (eRigidBodyOb_Flag) */
        int col_groups;                 /* Collision groups that determines wich rigid bodies can collide with each other */
-       int pad;
+       short mesh_source;              /* (eRigidBody_MeshSource) mesh source for mesh based collision shapes */
+       short pad;
        
        /* Physics Parameters */
        float mass;                             /* how much object 'weighs' (i.e. absolute 'amount of stuff' it holds) */
@@ -150,7 +149,9 @@ typedef enum eRigidBodyOb_Flag {
        /* rigidbody is not dynamically simulated */
        RBO_FLAG_DISABLED                       = (1 << 5),
        /* collision margin is not embedded (only used by convex hull shapes for now) */
-       RBO_FLAG_USE_MARGIN                     = (1 << 6)
+       RBO_FLAG_USE_MARGIN                     = (1 << 6),
+       /* collision shape deforms during simulation (only for passive triangle mesh shapes) */
+       RBO_FLAG_USE_DEFORM                     = (1 << 7)
 } eRigidBodyOb_Flag;
 
 /* RigidBody Collision Shape */
@@ -175,6 +176,15 @@ typedef enum eRigidBody_Shape {
        //RB_SHAPE_COMPOUND,
 } eRigidBody_Shape;
 
+typedef enum eRigidBody_MeshSource {
+       /* base mesh */
+       RBO_MESH_BASE = 0,
+       /* only deformations */
+       RBO_MESH_DEFORM,
+       /* final derived mesh */
+       RBO_MESH_FINAL
+} eRigidBody_MeshSource;
+
 /* ******************************** */
 /* RigidBody Constraint */
 
@@ -196,28 +206,37 @@ typedef struct RigidBodyCon {
        float pad;
 
        /* limits */
-       float limit_lin_x_lower;        /* lower limit for x axis translation */
-       float limit_lin_x_upper;        /* upper limit for x axis translation */
-       float limit_lin_y_lower;        /* lower limit for y axis translation */
-       float limit_lin_y_upper;        /* upper limit for y axis translation */
-       float limit_lin_z_lower;        /* lower limit for z axis translation */
-       float limit_lin_z_upper;        /* upper limit for z axis translation */
-       float limit_ang_x_lower;        /* lower limit for x axis rotation */
-       float limit_ang_x_upper;        /* upper limit for x axis rotation */
-       float limit_ang_y_lower;        /* lower limit for y axis rotation */
-       float limit_ang_y_upper;        /* upper limit for y axis rotation */
-       float limit_ang_z_lower;        /* lower limit for z axis rotation */
-       float limit_ang_z_upper;        /* upper limit for z axis rotation */
+       /* translation limits */
+       float limit_lin_x_lower;
+       float limit_lin_x_upper;
+       float limit_lin_y_lower;
+       float limit_lin_y_upper;
+       float limit_lin_z_lower;
+       float limit_lin_z_upper;
+       /* rotation limits */
+       float limit_ang_x_lower;
+       float limit_ang_x_upper;
+       float limit_ang_y_lower;
+       float limit_ang_y_upper;
+       float limit_ang_z_lower;
+       float limit_ang_z_upper;
 
        /* spring settings */
-       /* RB_TODO document spring properties */
+       /* resistance to deformation */
        float spring_stiffness_x;
        float spring_stiffness_y;
        float spring_stiffness_z;
+       /* amount of velocity lost over time */
        float spring_damping_x;
        float spring_damping_y;
        float spring_damping_z;
 
+       /* motor settings */
+       float motor_lin_target_velocity;        /* linear velocity the motor tries to hold */
+       float motor_ang_target_velocity;        /* angular velocity the motor tries to hold */
+       float motor_lin_max_impulse;            /* maximum force used to reach linear target velocity */
+       float motor_ang_max_impulse;            /* maximum force used to reach angular target velocity */
+
        /* References to Physics Sim object. Exist at runtime only */
        void *physics_constraint;       /* Physics object representation (i.e. btTypedConstraint) */
 } RigidBodyCon;
@@ -246,7 +265,9 @@ typedef enum eRigidBodyCon_Type {
        /* similar to slider but also allows rotation around slider axis */
        RBC_TYPE_PISTON,
        /* Simplified spring constraint with only once axis that's automatically placed between the connected bodies */
-       RBC_TYPE_SPRING
+       RBC_TYPE_SPRING,
+       /* dirves bodies by applying linear and angular forces */
+       RBC_TYPE_MOTOR
 } eRigidBodyCon_Type;
 
 /* Flags for RigidBodyCon */
@@ -271,7 +292,10 @@ typedef enum eRigidBodyCon_Flag {
        /* springs */
        RBC_FLAG_USE_SPRING_X                           = (1 << 11),
        RBC_FLAG_USE_SPRING_Y                           = (1 << 12),
-       RBC_FLAG_USE_SPRING_Z                           = (1 << 13)
+       RBC_FLAG_USE_SPRING_Z                           = (1 << 13),
+       /* motors */
+       RBC_FLAG_USE_MOTOR_LIN                          = (1 << 14),
+       RBC_FLAG_USE_MOTOR_ANG                          = (1 << 15)
 } eRigidBodyCon_Flag;
 
 /* ******************************** */