BGE Logic UI: more actuators + almost all sensors

* Matt, I'm marking some "property" rna properties that will need some speacial lookup.
Talking with Campbell we thought that it will be nice to have the lookup with autocomplete for the properties, but giving you the freedom to type whatever prop_name you want (so you can use python created properties).
That way we would still store it as a string.

Whenever the property doesn't exist (or was renamed, therefore can't be found) the property name tints in red ...
Is that possible?

* Matt: in draw_actuator_random I used a uiItemL for one of the modes. Is there another way to do that (having the label in the rna file?). I noticed draw_nodes has some cases of that as well.

* Andrea, the actuator_game property filename (in rna_actuator) is the one that needs to open the filebrowser but saving the result as relative path (or to have relative path as the default in this case)
This commit is contained in:
Dalai Felinto
2010-05-04 21:31:46 +00:00
parent f721447f22
commit 74f5a0928f
4 changed files with 171 additions and 14 deletions

View File

@@ -3554,7 +3554,7 @@ static void draw_actuator_camera(uiLayout *layout, PointerRNA *ptr)
static void draw_actuator_constraint(uiLayout *layout, PointerRNA *ptr)
{
//XXXACTUATOR
//XXXACTUATOR STILL HAVE TO DO THE RNA
}
static void draw_actuator_edit_object(uiLayout *layout, PointerRNA *ptr)
@@ -3569,17 +3569,52 @@ static void draw_actuator_filter_2d(uiLayout *layout, PointerRNA *ptr)
static void draw_actuator_game(uiLayout *layout, PointerRNA *ptr)
{
//XXXACTUATOR
uiItemR(layout, ptr, "mode", 0, NULL, 0);
if (RNA_enum_get(ptr, "mode") == ACT_GAME_LOAD)
uiItemR(layout, ptr, "filename", 0, NULL, 0);
}
static void draw_actuator_ipo(uiLayout *layout, PointerRNA *ptr)
{
//XXXACTUATOR
uiLayout *row, *col;
row= uiLayoutRow(layout, 0);
uiItemR(row, ptr, "play_type", 0, NULL, 0);
uiItemR(row, ptr, "force", 0, NULL, 0);
uiItemR(row, ptr, "add", 0, NULL, 0);
col = uiLayoutColumn(row, 0);
uiLayoutSetActive(col, RNA_boolean_get(ptr, "add"));
uiItemR(col, ptr, "local", 0, NULL, 0);
row= uiLayoutRow(layout, 0);
if((RNA_enum_get(ptr, "play_type") == ACT_IPO_FROM_PROP))
uiItemR(row, ptr, "property", 0, NULL, 0);
else {
uiItemR(row, ptr, "frame_start", 0, NULL, 0);
uiItemR(row, ptr, "frame_end", 0, NULL, 0);
}
uiItemR(row, ptr, "child", 0, NULL, 0);
row= uiLayoutRow(layout, 0);
uiItemR(row, ptr, "frame_property", 0, NULL, 0);
}
static void draw_actuator_message(uiLayout *layout, PointerRNA *ptr)
{
//XXXACTUATOR
uiLayout *row;
uiItemR(layout, ptr, "to_property", 0, NULL, 0);
uiItemR(layout, ptr, "subject", 0, NULL, 0);
row= uiLayoutRow(layout, 0);
uiItemR(row, ptr, "body_type", 0, NULL, 0);
if(RNA_enum_get(ptr, "body_type") == ACT_MESG_MESG)
uiItemR(row, ptr, "body_message", 0, NULL, 0);
else // mode == ACT_MESG_PROP
uiItemR(row, ptr, "body_property", 0, NULL, 0);
}
static void draw_actuator_motion(uiLayout *layout, PointerRNA *ptr)
@@ -3601,12 +3636,85 @@ static void draw_actuator_parent(uiLayout *layout, PointerRNA *ptr)
static void draw_actuator_property(uiLayout *layout, PointerRNA *ptr)
{
//XXXACTUATOR
uiLayout *row;
uiItemR(layout, ptr, "mode", 0, NULL, 0);
uiItemR(layout, ptr, "prop_name", 0, NULL, 0);
switch(RNA_enum_get(ptr, "mode"))
{
case ACT_PROP_TOGGLE:
break;
case ACT_PROP_ADD:
uiItemR(layout, ptr, "value", 0, NULL, 0);
break;
case ACT_PROP_ASSIGN:
uiItemR(layout, ptr, "value", 0, NULL, 0);
break;
case ACT_PROP_COPY:
row = uiLayoutRow(layout, 0);
uiItemR(row, ptr, "object", 0, NULL, 0);
uiItemR(row, ptr, "object_prop_name", 0, NULL, 0);
}
}
static void draw_actuator_random(uiLayout *layout, PointerRNA *ptr)
{
//XXXACTUATOR
uiLayout *row;
row = uiLayoutRow(layout, 0);
uiItemR(row, ptr, "seed", 0, NULL, 0);
uiItemR(row, ptr, "distribution", 0, NULL, 0);
row = uiLayoutRow(layout, 0);
uiItemR(row, ptr, "property", 0, NULL, 0);
row = uiLayoutRow(layout, 0);
switch (RNA_enum_get(ptr, "distribution")){
case ACT_RANDOM_BOOL_CONST:
uiItemR(row, ptr, "always_true", 0, NULL, 0);
break;
case ACT_RANDOM_BOOL_UNIFORM:
uiItemL(row, "Choose between true and false, 50% chance each", 0);
break;
case ACT_RANDOM_BOOL_BERNOUILLI:
uiItemR(row, ptr, "chance", 0, NULL, 0);
break;
case ACT_RANDOM_INT_CONST:
uiItemR(row, ptr, "int_value", 0, NULL, 0);
break;
case ACT_RANDOM_INT_UNIFORM:
uiItemR(row, ptr, "int_min", 0, NULL, 0);
uiItemR(row, ptr, "int_max", 0, NULL, 0);
break;
case ACT_RANDOM_INT_POISSON:
uiItemR(row, ptr, "int_mean", 0, NULL, 0);
break;
case ACT_RANDOM_FLOAT_CONST:
uiItemR(row, ptr, "float_value", 0, NULL, 0);
break;
case ACT_RANDOM_FLOAT_UNIFORM:
uiItemR(row, ptr, "float_min", 0, NULL, 0);
uiItemR(row, ptr, "float_max", 0, NULL, 0);
break;
case ACT_RANDOM_FLOAT_NORMAL:
uiItemR(row, ptr, "float_mean", 0, NULL, 0);
uiItemR(row, ptr, "standard_derivation", 0, NULL, 0);
break;
case ACT_RANDOM_FLOAT_NEGATIVE_EXPONENTIAL:
uiItemR(row, ptr, "half_life_time", 0, NULL, 0);
break;
}
}
static void draw_actuator_scene(uiLayout *layout, PointerRNA *ptr)
@@ -3618,7 +3726,32 @@ static void draw_actuator_scene(uiLayout *layout, PointerRNA *ptr)
static void draw_actuator_shape_action(uiLayout *layout, PointerRNA *ptr)
{
//XXXACTUATOR
uiLayout *row;
row= uiLayoutRow(layout, 0);
uiItemR(row, ptr, "mode", 0, NULL, 0);
uiItemR(row, ptr, "action", 0, NULL, 0);
uiItemR(row, ptr, "continue_last_frame", 0, NULL, 0);
row= uiLayoutRow(layout, 0);
if((RNA_enum_get(ptr, "mode") == ACT_ACTION_FROM_PROP))
uiItemR(row, ptr, "property", 0, NULL, 0);
else {
uiItemR(row, ptr, "frame_start", 0, NULL, 0);
uiItemR(row, ptr, "frame_end", 0, NULL, 0);
}
row= uiLayoutRow(layout, 0);
uiItemR(row, ptr, "blendin", 0, NULL, 0);
uiItemR(row, ptr, "priority", 0, NULL, 0);
row= uiLayoutRow(layout, 0);
uiItemR(row, ptr, "frame_property", 0, NULL, 0);
#ifdef __NLA_ACTION_BY_MOTION_ACTUATOR
uiItemR(row, "stride_length", 0, NULL, 0);
#endif
}
static void draw_actuator_sound(uiLayout *layout, PointerRNA *ptr)
@@ -3633,7 +3766,12 @@ static void draw_actuator_state(uiLayout *layout, PointerRNA *ptr)
static void draw_actuator_visibility(uiLayout *layout, PointerRNA *ptr)
{
//XXXACTUATOR
uiLayout *row;
row = uiLayoutRow(layout, 0);
uiItemR(row, ptr, "visible", 0, NULL, 0);
uiItemR(row, ptr, "occlusion", 0, NULL, 0);
uiItemR(row, ptr, "children", 0, NULL, 0);
}
void draw_brick_actuator(uiLayout *layout, PointerRNA *ptr)

View File

@@ -95,7 +95,7 @@ typedef struct bSceneActuator {
typedef struct bPropertyActuator {
int pad, type;
char name[32], value[32];
struct Object *ob; // not in use anymore
struct Object *ob;
} bPropertyActuator;
typedef struct bObjectActuator {

View File

@@ -358,7 +358,7 @@ static void rna_def_ipo_actuator(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOFORCE);
RNA_def_property_ui_text(prop, "Force", "Apply IPO as a global or local force depending on the local option (dynamic objects only)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
// logic_window::change_ipo_actuator
//XXX logic_window::change_ipo_actuator
// RNA_def_property_boolean_funcs(prop, "rna_Actuator_Ipo_get", "rna_Actuator_Ipo_get", "rna_Actuator_Ipo_range");
prop= RNA_def_property(srna, "local", PROP_BOOLEAN, PROP_NONE);
@@ -375,7 +375,7 @@ static void rna_def_ipo_actuator(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOADD);
RNA_def_property_ui_text(prop, "Add", "Ipo is added to the current loc/rot/scale in global or local coordinate according to Local flag");
RNA_def_property_update(prop, NC_LOGIC, NULL);
// logic_window::change_ipo_actuator
//XXX logic_window::change_ipo_actuator
// RNA_def_property_boolean_funcs(prop, "rna_Actuator_Ipo_get", "rna_Actuator_Ipo_get", "rna_Actuator_Ipo_range");
}
@@ -548,6 +548,7 @@ static void rna_def_property_actuator(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Mode", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
//XXX add magic property lookup
prop= RNA_def_property(srna, "prop_name", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "name");
RNA_def_property_ui_text(prop, "Property", "The name of the property");
@@ -556,6 +557,20 @@ static void rna_def_property_actuator(BlenderRNA *brna)
prop= RNA_def_property(srna, "value", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Value", "The value to use, use \"\" around strings");
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* Copy Mode */
prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Object");
RNA_def_property_pointer_sdna(prop, NULL, "ob");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Object", "Copy from this Object");
RNA_def_property_update(prop, NC_LOGIC, NULL);
//XXX add even magic'er property lookup (need to look for the property list of the target object)
prop= RNA_def_property(srna, "object_prop_name", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "value");
RNA_def_property_ui_text(prop, "Property Name", "Copy this property");
RNA_def_property_update(prop, NC_LOGIC, NULL);
}
static void rna_def_constraint_actuator(BlenderRNA *brna)
@@ -771,6 +786,7 @@ static void rna_def_random_actuator(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Seed", "Initial seed of the random generator. Use Python for more freedom (choose 0 for not random)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
//XXX add magic property lookup
prop= RNA_def_property(srna, "property", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "propname");
RNA_def_property_ui_text(prop, "Property", "Assign the random value to this property");
@@ -937,7 +953,8 @@ static void rna_def_game_actuator(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Game", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_NONE);
/* ACT_GAME_LOAD */
prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_DIRPATH);
RNA_def_property_ui_text(prop, "File", "Load this blend file, use the \"//\" prefix for a path relative to the current blend file");
RNA_def_property_update(prop, NC_LOGIC, NULL);
}

View File

@@ -407,7 +407,8 @@ static void rna_def_collision_sensor(BlenderRNA *brna)
RNA_def_property_string_sdna(prop, NULL, "materialName");
RNA_def_property_ui_text(prop, "Material Name", "Only look for Objects with this material");
/*
/*//XXX either use a datablock look up to store the string name (material)
// or to do a doversion and use a material pointer.
prop= RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Material");
RNA_def_property_flag(prop, PROP_EDITABLE);
@@ -494,7 +495,8 @@ static void rna_def_ray_sensor(BlenderRNA *brna)
RNA_def_property_string_sdna(prop, NULL, "matname");
RNA_def_property_ui_text(prop, "Material", "Only look for Objects with this material");
/*
/* //XXX either use a datablock look up to store the string name (material)
// or to do a doversion and use a material pointer.
prop= RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Material");
RNA_def_property_flag(prop, PROP_EDITABLE);