[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28580] trunk/blender/source/blender: BGE Logic UI: more actuators + almost all sensors

Dalai Felinto dfelinto at gmail.com
Tue May 4 23:31:46 CEST 2010


Revision: 28580
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28580
Author:   dfelinto
Date:     2010-05-04 23:31:46 +0200 (Tue, 04 May 2010)

Log Message:
-----------
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)

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_logic/logic_window.c
    trunk/blender/source/blender/makesdna/DNA_actuator_types.h
    trunk/blender/source/blender/makesrna/intern/rna_actuator.c
    trunk/blender/source/blender/makesrna/intern/rna_sensor.c

Modified: trunk/blender/source/blender/editors/space_logic/logic_window.c
===================================================================
--- trunk/blender/source/blender/editors/space_logic/logic_window.c	2010-05-04 21:19:32 UTC (rev 28579)
+++ trunk/blender/source/blender/editors/space_logic/logic_window.c	2010-05-04 21:31:46 UTC (rev 28580)
@@ -3554,7 +3554,7 @@
 
 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_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_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_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_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)

Modified: trunk/blender/source/blender/makesdna/DNA_actuator_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_actuator_types.h	2010-05-04 21:19:32 UTC (rev 28579)
+++ trunk/blender/source/blender/makesdna/DNA_actuator_types.h	2010-05-04 21:31:46 UTC (rev 28580)
@@ -95,7 +95,7 @@
 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 {

Modified: trunk/blender/source/blender/makesrna/intern/rna_actuator.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_actuator.c	2010-05-04 21:19:32 UTC (rev 28579)
+++ trunk/blender/source/blender/makesrna/intern/rna_actuator.c	2010-05-04 21:31:46 UTC (rev 28580)
@@ -358,7 +358,7 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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);
 }

Modified: trunk/blender/source/blender/makesrna/intern/rna_sensor.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_sensor.c	2010-05-04 21:19:32 UTC (rev 28579)
+++ trunk/blender/source/blender/makesrna/intern/rna_sensor.c	2010-05-04 21:31:46 UTC (rev 28580)
@@ -407,7 +407,8 @@
 	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.

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list