synched with trunk at revision 30243
[blender-staging.git] / source / blender / makesrna / intern / rna_actuator.c
index e38c69dfcd548e98fe4b3585e34a2e8c35fbb899..b78eb766151ecc75aaf27208bfce06be08f0978a 100644 (file)
@@ -54,6 +54,7 @@ EnumPropertyItem actuator_type_items[] ={
        {ACT_SOUND, "SOUND", 0, "Sound", ""},
        {ACT_STATE, "STATE", 0, "State", ""},
        {ACT_VISIBILITY, "VISIBILITY", 0, "Visibility", ""},
+       {ACT_STEERING, "STEERING", 0, "Steering", ""},
        {0, NULL, 0, NULL, NULL}};
 
 #ifdef RNA_RUNTIME
@@ -101,6 +102,8 @@ static StructRNA* rna_Actuator_refine(struct PointerRNA *ptr)
                        return &RNA_StateActuator;
                case ACT_ARMATURE:
                        return &RNA_ArmatureActuator;
+               case ACT_STEERING:
+                       return &RNA_SteeringActuator;
                default:
                        return &RNA_Actuator;
        }
@@ -284,6 +287,21 @@ static void rna_ConstraintActuator_spring_set(struct PointerRNA *ptr, float valu
        *fp = value;
 }
 
+/* ConstraintActuator uses the same property for Material and Property.
+   Therefore we need to clear the property when "detect_material" mode changes */
+static void rna_Actuator_constraint_detect_material_set(struct PointerRNA *ptr, int value)
+{
+       bActuator *act = (bActuator*)ptr->data;
+       bConstraintActuator *ca = act->data;
+
+       short old_value = (ca->flag & ACT_CONST_MATERIAL? 1:0);
+
+       if (old_value != value) {
+               ca->flag ^= ACT_CONST_MATERIAL;
+               ca->matprop[0] = '\0';
+       }
+}
+
 static void rna_FcurveActuator_add_set(struct PointerRNA *ptr, int value)
 {
        bActuator *act = (bActuator *)ptr->data;
@@ -371,6 +389,7 @@ EnumPropertyItem *rna_Actuator_type_itemf(bContext *C, PointerRNA *ptr, int *fre
        RNA_enum_items_add_value(&item, &totitem, actuator_type_items, ACT_PROPERTY);
        RNA_enum_items_add_value(&item, &totitem, actuator_type_items, ACT_RANDOM);
        RNA_enum_items_add_value(&item, &totitem, actuator_type_items, ACT_SCENE);
+       RNA_enum_items_add_value(&item, &totitem, actuator_type_items, ACT_STEERING);
 
        if (ob != NULL) {
                if (ob->type==OB_MESH){
@@ -461,10 +480,18 @@ void rna_def_actuator(BlenderRNA *brna)
        RNA_def_property_enum_funcs(prop, NULL, "rna_Actuator_type_set", "rna_Actuator_type_itemf");
        RNA_def_property_ui_text(prop, "Type", "");
 
+       prop= RNA_def_property(srna, "pinned", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_PIN);
+       RNA_def_property_ui_text(prop, "Pinned", "Display when not linked to a visible states controller");
+       RNA_def_property_ui_icon(prop, ICON_UNPINNED, 1);
+       RNA_def_property_update(prop, NC_LOGIC, NULL);
+
        prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_SHOW);
        RNA_def_property_ui_text(prop, "Expanded", "Set actuator expanded in the user interface");
        RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
+
+       RNA_api_actuator(srna);
 }
 
 static void rna_def_action_actuator(BlenderRNA *brna)
@@ -899,7 +926,7 @@ static void rna_def_sound_actuator(BlenderRNA *brna)
        prop= RNA_def_property(srna, "maximum_gain_3d", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "sound3D.max_gain");
        RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 0.01);
-       RNA_def_property_ui_text(prop, "Minimum Gain", "The maximum gain of the sound, no matter how near it is");
+       RNA_def_property_ui_text(prop, "Maximum Gain", "The maximum gain of the sound, no matter how near it is");
        RNA_def_property_update(prop, NC_LOGIC, NULL);
 
        prop= RNA_def_property(srna, "reference_distance_3d", PROP_FLOAT, PROP_NONE);
@@ -1172,6 +1199,7 @@ static void rna_def_constraint_actuator(BlenderRNA *brna)
        prop= RNA_def_property(srna, "detect_material", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_CONST_MATERIAL);
        RNA_def_property_ui_text(prop, "M/P", "Detect material instead of property");
+       RNA_def_property_boolean_funcs(prop, NULL, "rna_Actuator_constraint_detect_material_set");
        RNA_def_property_update(prop, NC_LOGIC, NULL);
 
        prop= RNA_def_property(srna, "fh_paralel_axis", PROP_BOOLEAN, PROP_NONE);
@@ -1841,6 +1869,77 @@ static void rna_def_armature_actuator(BlenderRNA *brna)
        RNA_def_property_update(prop, NC_LOGIC, NULL);
 }
 
+static void rna_def_steering_actuator(BlenderRNA *brna)
+{
+       StructRNA *srna;
+       PropertyRNA *prop;
+
+       static EnumPropertyItem prop_type_items[] ={
+               {ACT_STEERING_SEEK, "SEEK", 0, "Seek", ""},
+               {ACT_STEERING_FLEE, "FLEE", 0, "Flee", ""},
+               {ACT_STEERING_PATHFOLLOWING, "PATHFOLLOWING", 0, "Path following", ""},
+               {0, NULL, 0, NULL, NULL}};
+
+       srna= RNA_def_struct(brna, "SteeringActuator", "Actuator");
+       RNA_def_struct_ui_text(srna, "Steering Actuator", "");
+       RNA_def_struct_sdna_from(srna, "bSteeringActuator", "data");
+
+       prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "type");
+       RNA_def_property_enum_items(prop, prop_type_items);
+       RNA_def_property_ui_text(prop, "Behavior", "");
+       RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+       prop= RNA_def_property(srna, "velocity", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "velocity");
+       RNA_def_property_range(prop, 0.0, 1000.0);
+       RNA_def_property_ui_text(prop, "Velocity", "Velocity magnitude");
+       RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+       prop= RNA_def_property(srna, "acceleration", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "acceleration");
+       RNA_def_property_range(prop, 0.0, 1000.0);
+       RNA_def_property_ui_text(prop, "Acceleration", "Max acceleration");
+       RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+       prop= RNA_def_property(srna, "turnspeed", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "turnspeed");
+       RNA_def_property_range(prop, 0.0, 720.0);
+       RNA_def_property_ui_text(prop, "Turn speed", "Max turn speed");
+       RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+       prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "dist");
+       RNA_def_property_range(prop, 0.0, 1000.0);
+       RNA_def_property_ui_text(prop, "Dist", "Relax distance");
+       RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+       prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
+       RNA_def_property_struct_type(prop, "Object");
+       RNA_def_property_pointer_sdna(prop, NULL, "target");
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_ui_text(prop, "Target Object", "Set target object");
+       RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+       prop= RNA_def_property(srna, "selfterminated", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_STEERING_SELFTERMINATED);
+       RNA_def_property_ui_text(prop, "Self terminated", "Terminate when target is reached");
+       RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+       prop= RNA_def_property(srna, "updateperiod", PROP_INT, PROP_NONE);
+       RNA_def_property_int_sdna(prop, NULL, "updateTime");
+       RNA_def_property_ui_range(prop, -1, 100000, 1, 1);
+       RNA_def_property_ui_text(prop, "Update period", "Path update period");
+       RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+       prop= RNA_def_property(srna, "navmesh", PROP_POINTER, PROP_NONE);
+       RNA_def_property_struct_type(prop, "Object");
+       RNA_def_property_pointer_sdna(prop, NULL, "navmesh");
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_ui_text(prop, "NavMesh Object", "Navigation mesh");
+       RNA_def_property_update(prop, NC_LOGIC, NULL);
+}
+
 void RNA_def_actuator(BlenderRNA *brna)
 {
        rna_def_actuator(brna);
@@ -1863,6 +1962,7 @@ void RNA_def_actuator(BlenderRNA *brna)
        rna_def_shape_action_actuator(brna);
        rna_def_state_actuator(brna);
        rna_def_armature_actuator(brna);
+       rna_def_steering_actuator(brna);
 }
 
 #endif