synched with trunk at revision 36569
[blender.git] / source / blender / makesrna / intern / rna_actuator.c
index 2afba95..be5f6c4 100644 (file)
@@ -62,6 +62,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
@@ -109,6 +110,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;
        }
@@ -443,6 +446,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){
@@ -494,6 +498,18 @@ static void rna_Actuator_Armature_update(Main *bmain, Scene *scene, PointerRNA *
        constraint[0] = 0;
 }
 
+static void rna_SteeringActuator_navmesh_set(PointerRNA *ptr, PointerRNA value)
+{
+       bActuator *act = (bActuator*)ptr->data;
+       bSteeringActuator *sa = (bSteeringActuator*) act->data;
+
+       Object* obj = value.data;
+       if (obj && obj->body_type==OB_BODY_TYPE_NAVMESH)
+               sa->navmesh = obj;
+       else
+               sa->navmesh = NULL;
+}
+
 /* note: the following set functions exists only to avoid id refcounting */
 static void rna_Actuator_editobject_mesh_set(PointerRNA *ptr, PointerRNA value)
 {
@@ -1944,6 +1960,108 @@ 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}};
+
+       static EnumPropertyItem facingaxis_items[] ={
+               {1, "X", 0, "X", ""},
+               {2, "Y", 0, "Y", ""},
+               {3, "Z", 0, "Z", ""},
+               {4, "-X", 0, "-X", ""},
+               {5, "-Y", 0, "-Y", ""},
+               {6, "-Z", 0, "-Z", ""},
+               {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, "turn_speed", 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, "self_terminated", 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, "show_visualization", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_STEERING_ENABLEVISUALIZATION);
+       RNA_def_property_ui_text(prop, "Visualize", "Enable debug visualization");
+       RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+       prop= RNA_def_property(srna, "update_period", 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_pointer_funcs(prop, NULL, "rna_SteeringActuator_navmesh_set", NULL, NULL);
+       RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+       prop= RNA_def_property(srna, "facing", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_STEERING_AUTOMATICFACING);
+       RNA_def_property_ui_text(prop, "Facing", "Enable automatic facing");
+       RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+       prop= RNA_def_property(srna, "facing_axis", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "facingaxis");
+       RNA_def_property_enum_items(prop, facingaxis_items);
+       RNA_def_property_ui_text(prop, "Axis", "Axis for automatic facing");
+       RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+       prop= RNA_def_property(srna, "normal_up", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_STEERING_NORMALUP);
+       RNA_def_property_ui_text(prop, "N", "Use normal of the navmesh to set \"UP\" vector");
+       RNA_def_property_update(prop, NC_LOGIC, NULL);
+}
+
 void RNA_def_actuator(BlenderRNA *brna)
 {
        rna_def_actuator(brna);
@@ -1966,6 +2084,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