MBall cleanup: remove unused F_ERROR references, als fix/enhance BKE_mball_basis_find()
[blender.git] / source / blender / makesdna / DNA_rigidbody_types.h
index e24b24deeceb99501a26bb8859e00fa21f3e91a0..5d76ffe57b5d4cd882d4741d1930f34aa3fb92a4 100644 (file)
@@ -76,11 +76,11 @@ typedef struct RigidBodyWorld {
 /* Flags for RigidBodyWorld */
 typedef enum eRigidBodyWorld_Flag {
        /* should sim world be skipped when evaluating (user setting) */
-       RBW_FLAG_MUTED                          = (1<<0),
+       RBW_FLAG_MUTED                          = (1 << 0),
        /* sim data needs to be rebuilt */
-       RBW_FLAG_NEEDS_REBUILD          = (1<<1),
+       RBW_FLAG_NEEDS_REBUILD          = (1 << 1),
        /* usse split impulse when stepping the simulation */
-       RBW_FLAG_USE_SPLIT_IMPULSE      = (1<<2)
+       RBW_FLAG_USE_SPLIT_IMPULSE      = (1 << 2)
 } eRigidBodyWorld_Flag;
 
 /* ******************************** */
@@ -103,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) */
@@ -136,19 +137,21 @@ typedef enum eRigidBodyOb_Type {
 /* Flags for RigidBodyOb */
 typedef enum eRigidBodyOb_Flag {
        /* rigidbody is kinematic (controlled by the animation system) */
-       RBO_FLAG_KINEMATIC                      = (1<<0),
+       RBO_FLAG_KINEMATIC                      = (1 << 0),
        /* rigidbody needs to be validated (usually set after duplicating and not hooked up yet) */
-       RBO_FLAG_NEEDS_VALIDATE         = (1<<1),
+       RBO_FLAG_NEEDS_VALIDATE         = (1 << 1),
        /* rigidbody shape needs refreshing (usually after exiting editmode) */
-       RBO_FLAG_NEEDS_RESHAPE          = (1<<2),
+       RBO_FLAG_NEEDS_RESHAPE          = (1 << 2),
        /* rigidbody can be deactivated */
-       RBO_FLAG_USE_DEACTIVATION       = (1<<3),
+       RBO_FLAG_USE_DEACTIVATION       = (1 << 3),
        /* rigidbody is deactivated at the beginning of simulation */
-       RBO_FLAG_START_DEACTIVATED      = (1<<4),
+       RBO_FLAG_START_DEACTIVATED      = (1 << 4),
        /* rigidbody is not dynamically simulated */
-       RBO_FLAG_DISABLED                       = (1<<5),
+       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 */
@@ -173,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 */
 
@@ -194,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;
@@ -244,32 +265,37 @@ 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 */
 typedef enum eRigidBodyCon_Flag {
        /* constraint influences rigid body motion */
-       RBC_FLAG_ENABLED                                        = (1<<0),
+       RBC_FLAG_ENABLED                                        = (1 << 0),
        /* constraint needs to be validated */
-       RBC_FLAG_NEEDS_VALIDATE                         = (1<<1),
+       RBC_FLAG_NEEDS_VALIDATE                         = (1 << 1),
        /* allow constrained bodies to collide */
-       RBC_FLAG_DISABLE_COLLISIONS                     = (1<<2),
+       RBC_FLAG_DISABLE_COLLISIONS                     = (1 << 2),
        /* constraint can break */
-       RBC_FLAG_USE_BREAKING                           = (1<<3),
+       RBC_FLAG_USE_BREAKING                           = (1 << 3),
        /* constraint use custom number of constraint solver iterations */
-       RBC_FLAG_OVERRIDE_SOLVER_ITERATIONS     = (1<<4),
+       RBC_FLAG_OVERRIDE_SOLVER_ITERATIONS     = (1 << 4),
        /* limits */
-       RBC_FLAG_USE_LIMIT_LIN_X                        = (1<<5),
-       RBC_FLAG_USE_LIMIT_LIN_Y                        = (1<<6),
-       RBC_FLAG_USE_LIMIT_LIN_Z                        = (1<<7),
-       RBC_FLAG_USE_LIMIT_ANG_X                        = (1<<8),
-       RBC_FLAG_USE_LIMIT_ANG_Y                        = (1<<9),
-       RBC_FLAG_USE_LIMIT_ANG_Z                        = (1<<10),
+       RBC_FLAG_USE_LIMIT_LIN_X                        = (1 << 5),
+       RBC_FLAG_USE_LIMIT_LIN_Y                        = (1 << 6),
+       RBC_FLAG_USE_LIMIT_LIN_Z                        = (1 << 7),
+       RBC_FLAG_USE_LIMIT_ANG_X                        = (1 << 8),
+       RBC_FLAG_USE_LIMIT_ANG_Y                        = (1 << 9),
+       RBC_FLAG_USE_LIMIT_ANG_Z                        = (1 << 10),
        /* 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_X                           = (1 << 11),
+       RBC_FLAG_USE_SPRING_Y                           = (1 << 12),
+       RBC_FLAG_USE_SPRING_Z                           = (1 << 13),
+       /* motors */
+       RBC_FLAG_USE_MOTOR_LIN                          = (1 << 14),
+       RBC_FLAG_USE_MOTOR_ANG                          = (1 << 15)
 } eRigidBodyCon_Flag;
 
 /* ******************************** */