[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28677] trunk/blender/source/blender: Logic UI - lookup for properties (matt need your help to finish it)

Dalai Felinto dfelinto at gmail.com
Sun May 9 00:11:02 CEST 2010


Revision: 28677
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28677
Author:   dfelinto
Date:     2010-05-09 00:11:00 +0200 (Sun, 09 May 2010)

Log Message:
-----------
Logic UI - lookup for properties (matt need your help to finish it)

I based this code on drawnode, so I hope this is the right way of doing this.

Working Sensors:
- keyboard
- property

Working Actuators:
- property (partly)
- ipo
- action
- shape action
- message
- random

Need help with:
- actuator sensor
- property actuator (for the second object)

- touch/ray/collision sensors + constraint actuator
(for the material lookup, not the property one)
maybe a doversion + changing the type to material work better here
(as we have in touch sensor)

+ added notifier for the game property.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_logic/logic_window.c
    trunk/blender/source/blender/makesrna/intern/rna_actuator.c
    trunk/blender/source/blender/makesrna/intern/rna_property.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-08 21:05:40 UTC (rev 28676)
+++ trunk/blender/source/blender/editors/space_logic/logic_window.c	2010-05-08 22:11:00 UTC (rev 28677)
@@ -3208,6 +3208,14 @@
 
 static void draw_sensor_actuator(uiLayout *layout, PointerRNA *ptr)
 {
+	/* -- couldnt make it work for actuators
+	Object *ob = (Object *)ptr->id.data;
+	PointerRNA settings_ptr;
+
+	RNA_pointer_create((ID *)ob, &RNA_GameObjectSettings, ob, &settings_ptr);
+	uiItemPointerR(layout, ptr, "actuator", &settings_ptr, "actuators", "", 0);
+	*/
+
 	uiItemR(layout, ptr, "actuator", 0, NULL, 0);
 }
 
@@ -3296,6 +3304,8 @@
 
 static void draw_sensor_keyboard(uiLayout *layout, PointerRNA *ptr)
 {
+	Object *ob = (Object *)ptr->id.data;
+	PointerRNA settings_ptr;
 	uiLayout *row, *col;
 
 	row = uiLayoutRow(layout, 0);
@@ -3315,9 +3325,13 @@
 	row = uiLayoutRow(col, 0);
 	uiItemL(row, "Second Modifier:", 0);
 	uiItemR(row, ptr, "second_modifier_key", UI_ITEM_R_EVENT, "", 0);
-	
-	uiItemR(layout, ptr, "target", 0, NULL, 0);
-	uiItemR(layout, ptr, "log", 0, NULL, 0);
+
+	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)
@@ -3343,10 +3357,15 @@
 
 static void draw_sensor_property(uiLayout *layout, PointerRNA *ptr)
 {
+	Object *ob = (Object *)ptr->id.data;
+	PointerRNA settings_ptr;
+
 	uiLayout *row;
 	uiItemR(layout, ptr, "evaluation_type", 0, NULL, 0);
-	uiItemR(layout, ptr, "property", 0, NULL, 0);
 
+	RNA_pointer_create((ID *)ob, &RNA_GameObjectSettings, ob, &settings_ptr);
+	uiItemPointerR(layout, ptr, "property", &settings_ptr, "properties", NULL, 0);
+
 	switch (RNA_enum_get(ptr, "evaluation_type")) {
 		case SENS_PROP_INTERVAL:
 			row = uiLayoutRow(layout, 0);
@@ -3556,8 +3575,12 @@
 
 static void draw_actuator_action(uiLayout *layout, PointerRNA *ptr)
 {
+	Object *ob = (Object *)ptr->id.data;
+	PointerRNA settings_ptr;
 	uiLayout *row;
 
+	RNA_pointer_create((ID *)ob, &RNA_GameObjectSettings, ob, &settings_ptr);
+
 	row= uiLayoutRow(layout, 0);
 	uiItemR(row, ptr, "mode", 0, "", 0);
 	uiItemR(row, ptr, "action", 0, NULL, 0);
@@ -3565,7 +3588,7 @@
 
 	row= uiLayoutRow(layout, 0);
 	if((RNA_enum_get(ptr, "mode") == ACT_ACTION_FROM_PROP))
-		uiItemR(row, ptr, "property", 0, NULL, 0);
+		uiItemPointerR(row, ptr, "property", &settings_ptr, "properties", NULL, 0);
 
 	else {
 		uiItemR(row, ptr, "frame_start", 0, NULL, 0);
@@ -3577,7 +3600,7 @@
 	uiItemR(row, ptr, "priority", 0, NULL, 0);
 
 	row= uiLayoutRow(layout, 0);
-	uiItemR(row, ptr, "frame_property", 0, NULL, 0);
+	uiItemPointerR(layout, ptr, "frame_property", &settings_ptr, "properties", NULL, 0);
 
 #ifdef __NLA_ACTION_BY_MOTION_ACTUATOR
 	uiItemR(row, "stride_length", 0, NULL, 0);
@@ -3809,8 +3832,13 @@
 
 static void draw_actuator_ipo(uiLayout *layout, PointerRNA *ptr)
 {
+	Object *ob;
+	PointerRNA settings_ptr;
 	uiLayout *row, *subrow, *col;
 
+	ob = (Object *)ptr->id.data;
+	RNA_pointer_create((ID *)ob, &RNA_GameObjectSettings, ob, &settings_ptr);
+
 	row= uiLayoutRow(layout, 0);
 	uiItemR(row, ptr, "play_type", 0, "", 0);
 	subrow= uiLayoutRow(row, 1);
@@ -3823,7 +3851,7 @@
 
 	row= uiLayoutRow(layout, 0);
 	if((RNA_enum_get(ptr, "play_type") == ACT_IPO_FROM_PROP))
-		uiItemR(row, ptr, "property", 0, NULL, 0);
+		uiItemPointerR(row, ptr, "property", &settings_ptr, "properties", NULL, 0);
 
 	else {
 		uiItemR(row, ptr, "frame_start", 0, NULL, 0);
@@ -3832,31 +3860,37 @@
 	uiItemR(row, ptr, "child", 0, NULL, 0);
 
 	row= uiLayoutRow(layout, 0);
-	uiItemR(row, ptr, "frame_property", 0, NULL, 0);
+	uiItemPointerR(row, ptr, "frame_property", &settings_ptr, "properties", NULL, 0);
 }
 
 static void draw_actuator_message(uiLayout *layout, PointerRNA *ptr)
 {
+	Object *ob;
+	PointerRNA settings_ptr;
 	uiLayout *row;
 
+	ob = (Object *)ptr->id.data;
+	RNA_pointer_create((ID *)ob, &RNA_GameObjectSettings, ob, &settings_ptr);
+
 	uiItemR(layout, ptr, "to_property", 0, NULL, 0);
 	uiItemR(layout, ptr, "subject", 0, NULL, 0);
 
-	row= uiLayoutRow(layout, 0);
+	row= uiLayoutRow(layout, 1);
 	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);
+		uiItemR(row, ptr, "body_message", 0, "", 0);
 	else // mode == ACT_MESG_PROP
-		uiItemR(row, ptr, "body_property", 0, NULL, 0);
+		uiItemPointerR(row, ptr, "body_property", &settings_ptr, "properties", "", 0);
 }
 
 static void draw_actuator_motion(uiLayout *layout, PointerRNA *ptr)
 {
+	Object *ob;
+	PointerRNA settings_ptr;
 	uiLayout *split, *row, *col, *subcol;
-	Object *ob = (Object *)ptr->id.data;
-	PointerRNA settings_ptr;
-	
+
+	ob = (Object *)ptr->id.data;	
 	RNA_pointer_create((ID *)ob, &RNA_GameObjectSettings, ob, &settings_ptr);
 	
 	uiItemR(layout, ptr, "mode", 0, NULL, 0);
@@ -3957,11 +3991,15 @@
 
 static void draw_actuator_property(uiLayout *layout, PointerRNA *ptr)
 {
+	Object *ob = (Object *)ptr->id.data;
+	PointerRNA settings_ptr;
 	uiLayout *row;
 
 	uiItemR(layout, ptr, "mode", 0, NULL, 0);
-	uiItemR(layout, ptr, "prop_name", 0, NULL, 0);
 
+	RNA_pointer_create((ID *)ob, &RNA_GameObjectSettings, ob, &settings_ptr);
+	uiItemPointerR(layout, ptr, "property", &settings_ptr, "properties", NULL, 0);
+
 	switch(RNA_enum_get(ptr, "mode"))
 	{
 		case ACT_PROP_TOGGLE:
@@ -3975,26 +4013,32 @@
 		case ACT_PROP_COPY:
 			row = uiLayoutRow(layout, 0);
 			uiItemR(row, ptr, "object", 0, NULL, 0);
-			uiItemR(row, ptr, "object_prop_name", 0, NULL, 0);
+			uiItemR(row, ptr, "object_property", 0, NULL, 0);
 	}
 }
 
 static void draw_actuator_random(uiLayout *layout, PointerRNA *ptr)
 {
+	Object *ob;
+	PointerRNA settings_ptr;
 	uiLayout *row;
+
+	ob = (Object *)ptr->id.data;
+	RNA_pointer_create((ID *)ob, &RNA_GameObjectSettings, ob, &settings_ptr);
+
 	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);
+	uiItemPointerR(row, ptr, "property", &settings_ptr, "properties", 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);
+			uiItemR(row, ptr, "always_true", UI_ITEM_R_TOGGLE, NULL, 0);
 			break;
 
 		case ACT_RANDOM_BOOL_UNIFORM:
@@ -4056,8 +4100,12 @@
 
 static void draw_actuator_shape_action(uiLayout *layout, PointerRNA *ptr)
 {
+	Object *ob = (Object *)ptr->id.data;
+	PointerRNA settings_ptr;
 	uiLayout *row;
 
+	RNA_pointer_create((ID *)ob, &RNA_GameObjectSettings, ob, &settings_ptr);
+
 	row= uiLayoutRow(layout, 0);
 	uiItemR(row, ptr, "mode", 0, "", 0);
 	uiItemR(row, ptr, "action", 0, NULL, 0);
@@ -4065,7 +4113,7 @@
 
 	row= uiLayoutRow(layout, 0);
 	if((RNA_enum_get(ptr, "mode") == ACT_ACTION_FROM_PROP))
-		uiItemR(row, ptr, "property", 0, NULL, 0);
+		uiItemPointerR(row, ptr, "property", &settings_ptr, "properties", NULL, 0);
 
 	else {
 		uiItemR(row, ptr, "frame_start", 0, NULL, 0);
@@ -4077,7 +4125,7 @@
 	uiItemR(row, ptr, "priority", 0, NULL, 0);
 
 	row= uiLayoutRow(layout, 0);
-	uiItemR(row, ptr, "frame_property", 0, NULL, 0);
+	uiItemPointerR(row, ptr, "frame_property", &settings_ptr, "properties", NULL, 0);
 
 #ifdef __NLA_ACTION_BY_MOTION_ACTUATOR
 	uiItemR(row, "stride_length", 0, NULL, 0);

Modified: trunk/blender/source/blender/makesrna/intern/rna_actuator.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_actuator.c	2010-05-08 21:05:40 UTC (rev 28676)
+++ trunk/blender/source/blender/makesrna/intern/rna_actuator.c	2010-05-08 22:11:00 UTC (rev 28677)
@@ -383,8 +383,6 @@
 		if (ob->type==OB_ARMATURE) {
 			RNA_enum_items_add_value(&item, &totitem, actuator_type_items, ACT_ACTION);
 			RNA_enum_items_add_value(&item, &totitem, actuator_type_items, ACT_ARMATURE);
-		} else {
-			RNA_enum_items_add_value(&item, &totitem, actuator_type_items, ACT_SHAPEACTION);
 		}
 	}
 
@@ -400,6 +398,13 @@
 	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);
+
+	if (ob != NULL) {
+		if (ob->type==OB_MESH){
+			RNA_enum_items_add_value(&item, &totitem, actuator_type_items, ACT_SHAPEACTION);
+		}
+	}
+
 	RNA_enum_items_add_value(&item, &totitem, actuator_type_items, ACT_SOUND);
 	RNA_enum_items_add_value(&item, &totitem, actuator_type_items, ACT_STATE);
 	RNA_enum_items_add_value(&item, &totitem, actuator_type_items, ACT_VISIBILITY);
@@ -936,8 +941,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);
+	prop= RNA_def_property(srna, "property", PROP_STRING, PROP_NONE);
 	RNA_def_property_string_sdna(prop, NULL, "name");
 	RNA_def_property_ui_text(prop, "Property", "The name of the property");
 	RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -955,7 +959,7 @@
 	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);
+	prop= RNA_def_property(srna, "object_property", 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);
@@ -1340,7 +1344,6 @@
 	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");

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list