[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29177] trunk/blender/source/blender: Logic Editor: more datablock lookups :)

Dalai Felinto dfelinto at gmail.com
Thu Jun 3 10:26:47 CEST 2010


Revision: 29177
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29177
Author:   dfelinto
Date:     2010-06-03 10:26:47 +0200 (Thu, 03 Jun 2010)

Log Message:
-----------
Logic Editor: more datablock lookups :)
Now all the material properties have the nice Datablock Lookup menu (thanks a lot Matt !). They still store the property as a string, therefore if you change a material name the logic bricks using it don't get updated. it would be nice if we had a way to communicate that in the interface.

The only "datablock" field that doesn't have lookup is "property" in collision and ray sensors and Constraint Actuator. The reason being is that there is no global ListBase to gather the properties of all the objects in the scene. And it may be too overkill to create a list with all the properties on-the-fly only for that (it would be cool though)

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

Modified: trunk/blender/source/blender/editors/space_logic/logic_window.c
===================================================================
--- trunk/blender/source/blender/editors/space_logic/logic_window.c	2010-06-03 07:47:49 UTC (rev 29176)
+++ trunk/blender/source/blender/editors/space_logic/logic_window.c	2010-06-03 08:26:47 UTC (rev 29177)
@@ -3245,10 +3245,13 @@
 	uiItemR(row, ptr, "value", 0, NULL, 0);
 }
 
-static void draw_sensor_collision(uiLayout *layout, PointerRNA *ptr)
+static void draw_sensor_collision(uiLayout *layout, PointerRNA *ptr, bContext *C)
 {
 	uiLayout *row, *split;
+	PointerRNA main_ptr;
 
+	RNA_main_pointer_create(CTX_data_main(C), &main_ptr);
+
 	split = uiLayoutSplit(layout, 0.3, 0);
 	row = uiLayoutRow(split, 1);
 	uiItemR(row, ptr, "pulse", UI_ITEM_R_TOGGLE, NULL, 0);
@@ -3259,7 +3262,7 @@
 			uiItemR(split, ptr, "property", 0, NULL, 0);
 			break;
 		case SENS_COLLISION_MATERIAL:
-			uiItemR(split, ptr, "material", 0, NULL, 0);
+			uiItemPointerR(split, ptr, "material", &main_ptr, "materials", NULL, ICON_MATERIAL_DATA);
 			break;
 	}
 }
@@ -3343,9 +3346,6 @@
 	RNA_pointer_create((ID *)ob, &RNA_GameObjectSettings, ob, &settings_ptr);
 	uiItemPointerR(layout, ptr, "target", &settings_ptr, "properties", NULL, 0);
 	uiItemPointerR(layout, ptr, "log", &settings_ptr, "properties", NULL, 0);
-
-//	uiItemR(layout, ptr, "target", 0, NULL, 0);
-//	uiItemR(layout, ptr, "log", 0, NULL, 0);
 }
 
 static void draw_sensor_message(uiLayout *layout, PointerRNA *ptr)
@@ -3414,17 +3414,21 @@
 	uiItemR(layout, ptr, "seed", 0, NULL, 0);
 }
 
-static void draw_sensor_ray(uiLayout *layout, PointerRNA *ptr)
+static void draw_sensor_ray(uiLayout *layout, PointerRNA *ptr, bContext *C)
 {
 	uiLayout *split, *row;
+	PointerRNA main_ptr;
 
+	RNA_main_pointer_create(CTX_data_main(C), &main_ptr);
 	split= uiLayoutSplit(layout, 0.3, 0);
 	uiItemR(split, ptr, "ray_type", 0, "", 0);
 	switch (RNA_enum_get(ptr, "ray_type")) {
 		case SENS_RAY_PROPERTY:
-			uiItemR(split, ptr, "property", 0, "", 0); break;
+			uiItemR(split, ptr, "property", 0, "", 0);
+			break;
 		case SENS_RAY_MATERIAL:
-			uiItemR(split, ptr, "material", 0, "", 0); break;
+			uiItemPointerR(split, ptr, "material", &main_ptr, "materials", "", ICON_MATERIAL_DATA);
+			break;
 	}
 
 	split= uiLayoutSplit(layout, 0.3, 0);
@@ -3439,7 +3443,7 @@
 	uiItemR(layout, ptr, "material", 0, NULL, 0);
 }
 
-void draw_brick_sensor(uiLayout *layout, PointerRNA *ptr)
+void draw_brick_sensor(uiLayout *layout, PointerRNA *ptr, bContext *C)
 {
 	uiLayout *box;
 	
@@ -3461,7 +3465,7 @@
 			draw_sensor_armature(box, ptr);
 			break;
 		case SENS_COLLISION:
-			draw_sensor_collision(box, ptr);
+			draw_sensor_collision(box, ptr, C);
 			break;
 		case SENS_DELAY:
 			draw_sensor_delay(box, ptr);
@@ -3491,7 +3495,7 @@
 			draw_sensor_random(box, ptr);
 			break;
 		case SENS_RAY:
-			draw_sensor_ray(box, ptr);
+			draw_sensor_ray(box, ptr, C);
 			break;
 		case SENS_TOUCH:
 			draw_sensor_touch(box, ptr);
@@ -3696,10 +3700,13 @@
 	uiItemR(row, ptr, "max", 0, NULL, 0);
 }
 
-static void draw_actuator_constraint(uiLayout *layout, PointerRNA *ptr)
+static void draw_actuator_constraint(uiLayout *layout, PointerRNA *ptr, bContext *C)
 {
 	uiLayout *row, *col, *subcol, *split;
+	PointerRNA main_ptr;
 
+	RNA_main_pointer_create(CTX_data_main(C), &main_ptr);
+
 	uiItemR(layout, ptr, "mode", 0, NULL, 0);
 	switch (RNA_enum_get(ptr, "mode"))
 	{
@@ -3736,7 +3743,7 @@
 			split = uiLayoutSplit(layout, 0.15, 0);
 			uiItemR(split, ptr, "detect_material", UI_ITEM_R_TOGGLE, NULL, 0);
 			if (RNA_boolean_get(ptr, "detect_material"))
-				uiItemR(split, ptr, "material", 0, NULL, 0);
+				uiItemPointerR(split, ptr, "material", &main_ptr, "materials", NULL, ICON_MATERIAL_DATA);
 			else
 				uiItemR(split, ptr, "property", 0, NULL, 0);
 
@@ -3780,7 +3787,7 @@
 			split = uiLayoutSplit(layout, 0.15, 0);
 			uiItemR(split, ptr, "detect_material", UI_ITEM_R_TOGGLE, NULL, 0);
 			if (RNA_boolean_get(ptr, "detect_material"))
-				uiItemR(split, ptr, "material", 0, NULL, 0);
+				uiItemPointerR(split, ptr, "material", &main_ptr, "materials", NULL, ICON_MATERIAL_DATA);
 			else
 				uiItemR(split, ptr, "property", 0, NULL, 0);
 
@@ -3913,16 +3920,18 @@
 	uiItemPointerR(row, ptr, "frame_property", &settings_ptr, "properties", NULL, 0);
 }
 
-static void draw_actuator_message(uiLayout *layout, PointerRNA *ptr)
+static void draw_actuator_message(uiLayout *layout, PointerRNA *ptr, bContext *C)
 {
 	Object *ob;
-	PointerRNA settings_ptr;
+	PointerRNA main_ptr, settings_ptr;
 	uiLayout *row;
 
+	RNA_main_pointer_create(CTX_data_main(C), &main_ptr);
+
 	ob = (Object *)ptr->id.data;
 	RNA_pointer_create((ID *)ob, &RNA_GameObjectSettings, ob, &settings_ptr);
 
-	uiItemR(layout, ptr, "to_property", 0, NULL, 0);
+	uiItemPointerR(layout, ptr, "to_property", &main_ptr, "objects", NULL, ICON_OBJECT_DATA);
 	uiItemR(layout, ptr, "subject", 0, NULL, 0);
 
 	row= uiLayoutRow(layout, 1);
@@ -4281,7 +4290,7 @@
 			draw_actuator_camera(box, ptr);
 			break;
 		case ACT_CONSTRAINT:
-			draw_actuator_constraint(box, ptr);
+			draw_actuator_constraint(box, ptr, C);
 			break;
 		case ACT_EDIT_OBJECT:
 			draw_actuator_edit_object(box, ptr);
@@ -4296,7 +4305,7 @@
 			draw_actuator_ipo(box, ptr);
 			break;
 		case ACT_MESSAGE:
-			draw_actuator_message(box, ptr);
+			draw_actuator_message(box, ptr, C);
 			break;
 		case ACT_OBJECT:
 			draw_actuator_motion(box, ptr);
@@ -4523,7 +4532,7 @@
 				draw_sensor_header(col, &ptr);
 				
 				/* draw the brick contents */
-				draw_brick_sensor(col, &ptr);
+				draw_brick_sensor(col, &ptr, C);
 				
 				/* put link button to the right */
 				col = uiLayoutColumn(split, 0);

Modified: trunk/blender/source/blender/makesrna/intern/rna_actuator.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_actuator.c	2010-06-03 07:47:49 UTC (rev 29176)
+++ trunk/blender/source/blender/makesrna/intern/rna_actuator.c	2010-06-03 08:26:47 UTC (rev 29177)
@@ -284,6 +284,21 @@
 	*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;
@@ -1172,6 +1187,7 @@
 	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);





More information about the Bf-blender-cvs mailing list