From f2a6395e21c723843c0e44bba22de0c7aa1a3d08 Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Fri, 4 Feb 2011 21:25:57 +0000 Subject: Logic UI: multiple fixes on Constraint Actuator 1) damping factor is not percentage (it's in frames, who would know that) 2) angles as degrees (cleaning the tooltips for those too) 3) setting Direction to None when changing from Loc and Fh Consts to Ori - negative axis is not supported in Ori Const. Buggy since ever (2.49). --- source/blender/makesrna/intern/rna_actuator.c | 58 ++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 9 deletions(-) (limited to 'source/blender/makesrna/intern/rna_actuator.c') diff --git a/source/blender/makesrna/intern/rna_actuator.c b/source/blender/makesrna/intern/rna_actuator.c index b17e1f14740..46230815178 100644 --- a/source/blender/makesrna/intern/rna_actuator.c +++ b/source/blender/makesrna/intern/rna_actuator.c @@ -35,6 +35,8 @@ #include "WM_types.h" +#include "BLI_utildefines.h" + /* Always keep in alphabetical order */ EnumPropertyItem actuator_type_items[] ={ {ACT_ACTION, "ACTION", 0, "Action", ""}, @@ -117,6 +119,29 @@ static void rna_Actuator_type_set(struct PointerRNA *ptr, int value) } } +static void rna_ConstraintActuator_type_set(struct PointerRNA *ptr, int value) +{ + bActuator *act= (bActuator *)ptr->data; + bConstraintActuator *ca= act->data; + if (value != ca->type) + { + ca->type = value; + switch (ca->type) { + case ACT_CONST_TYPE_ORI: + /* negative axis not supported in the orientation mode */ + if (ELEM3(ca->mode, ACT_CONST_DIRNX,ACT_CONST_DIRNY, ACT_CONST_DIRNZ)) + ca->mode = ACT_CONST_NONE; + break; + + case ACT_CONST_TYPE_LOC: + case ACT_CONST_TYPE_DIST: + case ACT_CONST_TYPE_FH: + default: + break; + } + } +} + static float rna_ConstraintActuator_limitmin_get(struct PointerRNA *ptr) { bActuator *act = (bActuator*)ptr->data; @@ -1076,6 +1101,14 @@ static void rna_def_constraint_actuator(BlenderRNA *brna) {0, NULL, 0, NULL, NULL} }; + static EnumPropertyItem prop_direction_pos_items[] ={ + {ACT_CONST_NONE, "NONE", 0, "None", ""}, + {ACT_CONST_DIRPX, "DIRPX", 0, "X axis", ""}, + {ACT_CONST_DIRPY, "DIRPY", 0, "Y axis", ""}, + {ACT_CONST_DIRPZ, "DIRPZ", 0, "Z axis", ""}, + {0, NULL, 0, NULL, NULL} + }; + srna= RNA_def_struct(brna, "ConstraintActuator", "Actuator"); RNA_def_struct_ui_text(srna, "Constraint Actuator", "Actuator to handle Constraints"); RNA_def_struct_sdna_from(srna, "bConstraintActuator", "data"); @@ -1083,6 +1116,7 @@ static void rna_def_constraint_actuator(BlenderRNA *brna) 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_enum_funcs(prop, NULL, "rna_ConstraintActuator_type_set", NULL); RNA_def_property_ui_text(prop, "Constraints Mode", "The type of the constraint"); RNA_def_property_update(prop, NC_LOGIC, NULL); @@ -1117,7 +1151,7 @@ static void rna_def_constraint_actuator(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Max", ""); RNA_def_property_update(prop, NC_LOGIC, NULL); - prop= RNA_def_property(srna, "damping", PROP_INT, PROP_PERCENTAGE); + prop= RNA_def_property(srna, "damping", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "damp"); RNA_def_property_ui_range(prop, 0, 100, 1, 1); RNA_def_property_ui_text(prop, "Damping", "Damping factor: time constant (in frame) of low pass filter"); @@ -1154,13 +1188,19 @@ static void rna_def_constraint_actuator(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Time", "Maximum activation time in frame, 0 for unlimited"); RNA_def_property_update(prop, NC_LOGIC, NULL); - prop= RNA_def_property(srna, "damping_rotation", PROP_INT, PROP_PERCENTAGE); + prop= RNA_def_property(srna, "damping_rotation", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "rotdamp"); RNA_def_property_ui_range(prop, 0, 100, 1, 1); RNA_def_property_ui_text(prop, "rotDamp", "Use a different damping for orientation"); RNA_def_property_update(prop, NC_LOGIC, NULL); /* ACT_CONST_TYPE_ORI */ + prop= RNA_def_property(srna, "direction_axis_pos", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "mode"); + RNA_def_property_enum_items(prop, prop_direction_pos_items); + RNA_def_property_ui_text(prop, "Direction", "Select the axis to be aligned along the reference direction"); + RNA_def_property_update(prop, NC_LOGIC, NULL); + prop= RNA_def_property(srna, "rotation_max", PROP_FLOAT, PROP_XYZ); RNA_def_property_float_sdna(prop, NULL, "maxrot"); RNA_def_property_array(prop, 3); @@ -1168,16 +1208,16 @@ static void rna_def_constraint_actuator(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Reference Direction", "Reference Direction"); RNA_def_property_update(prop, NC_LOGIC, NULL); - prop= RNA_def_property(srna, "angle_min", PROP_FLOAT, PROP_NONE); + prop= RNA_def_property(srna, "angle_min", PROP_FLOAT, PROP_ANGLE); RNA_def_property_float_sdna(prop, NULL, "minloc[0]"); - RNA_def_property_ui_range(prop, 0.0, 180.0, 10, 2); - RNA_def_property_ui_text(prop, "Min Angle", "Minimum angle (in degree) to maintain with target direction. No correction is done if angle with target direction is between min and max"); + RNA_def_property_range(prop, 0.0, 180.0); + RNA_def_property_ui_text(prop, "Min Angle", "Minimum angle to maintain with target direction. No correction is done if angle with target direction is between min and max"); RNA_def_property_update(prop, NC_LOGIC, NULL); - prop= RNA_def_property(srna, "angle_max", PROP_FLOAT, PROP_NONE); + prop= RNA_def_property(srna, "angle_max", PROP_FLOAT, PROP_ANGLE); RNA_def_property_float_sdna(prop, NULL, "maxloc[0]"); - RNA_def_property_ui_range(prop, 0.0, 180.0, 10, 2); - RNA_def_property_ui_text(prop, "Max Angle", "Maximum angle (in degree) allowed with target direction. No correction is done if angle with target direction is between min and max"); + RNA_def_property_range(prop, 0.0, 180.0); + RNA_def_property_ui_text(prop, "Max Angle", "Maximum angle allowed with target direction. No correction is done if angle with target direction is between min and max"); RNA_def_property_update(prop, NC_LOGIC, NULL); /* ACT_CONST_TYPE_FH */ @@ -1187,7 +1227,7 @@ static void rna_def_constraint_actuator(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Distance", "Height of the Fh area"); RNA_def_property_update(prop, NC_LOGIC, NULL); - prop= RNA_def_property(srna, "spring", PROP_FLOAT, PROP_NONE); + prop= RNA_def_property(srna, "spring", PROP_FLOAT, PROP_PERCENTAGE); RNA_def_property_float_funcs(prop, "rna_ConstraintActuator_spring_get", "rna_ConstraintActuator_spring_set", NULL); RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 2); RNA_def_property_ui_text(prop, "Fh", "Spring force within the Fh area"); -- cgit v1.2.3