[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29485] trunk/blender/source/blender: Logic UI: partial implementation of state per controller

Dalai Felinto dfelinto at gmail.com
Wed Jun 16 10:29:40 CEST 2010


Revision: 29485
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29485
Author:   dfelinto
Date:     2010-06-16 10:29:40 +0200 (Wed, 16 Jun 2010)

Log Message:
-----------
Logic UI: partial implementation of state per controller
Adding two rna properties: state and state_number

For scripting "state_number" (integer) makes more sense while "state" (boolean/array) may be needed for the UI.
So far the UI is only showing the state number (using Label). Still have to decide how is the better way to "change the state".

If we don't need "state" (as boolean) for the UI, we can have only the integer one and rename it to "state".

+ some cosmetic changes (renamed ob "states" to "visible states")

ps.: 2 goals == 2 commits... let's see if I can keep that ratio until the middle of July ...

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_logic/logic_ops.c
    trunk/blender/source/blender/editors/space_logic/logic_window.c
    trunk/blender/source/blender/makesrna/intern/rna_controller.c
    trunk/blender/source/blender/makesrna/intern/rna_object.c

Modified: trunk/blender/source/blender/editors/space_logic/logic_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_logic/logic_ops.c	2010-06-16 06:20:56 UTC (rev 29484)
+++ trunk/blender/source/blender/editors/space_logic/logic_ops.c	2010-06-16 08:29:40 UTC (rev 29485)
@@ -484,7 +484,6 @@
 	PropertyRNA *prop;
 	const char *act_name;
 	char  name[32];
-	//XXX RNA_string_get is not using maxlen, it's using UserPreferencesFilePaths_python_scripts_directory_get instead (what limits the string copy to 160 chars in this case and CRASHES Blender).
 	int type= RNA_enum_get(op->ptr, "type");
 
 	act= new_actuator(type);

Modified: trunk/blender/source/blender/editors/space_logic/logic_window.c
===================================================================
--- trunk/blender/source/blender/editors/space_logic/logic_window.c	2010-06-16 06:20:56 UTC (rev 29484)
+++ trunk/blender/source/blender/editors/space_logic/logic_window.c	2010-06-16 08:29:40 UTC (rev 29485)
@@ -3507,6 +3507,7 @@
 static void draw_controller_header(uiLayout *layout, PointerRNA *ptr)
 {
 	uiLayout *box, *row;
+	char name[3]; //XXX provisorly for state number
 	
 	box= uiLayoutBox(layout);
 	row= uiLayoutRow(box, 0);
@@ -3514,6 +3515,11 @@
 	uiItemR(row, ptr, "expanded", UI_ITEM_R_NO_BG, "", 0);
 	uiItemR(row, ptr, "type", 0, "", 0);
 	uiItemR(row, ptr, "name", 0, "", 0);
+
+	/* XXX provisory: state number */
+	sprintf(name, "%d", RNA_int_get(ptr, "state_number"));
+	uiItemL(row, name, 0);
+
 	uiItemR(row, ptr, "priority", 0, "", 0);
 	uiItemO(row, "", ICON_X, "LOGIC_OT_controller_remove");
 }
@@ -4425,7 +4431,7 @@
 			col= uiLayoutColumn(subsplit, 0);
 			row= uiLayoutRow(col, 0);
 			uiLayoutSetActive(row, RNA_boolean_get(&settings_ptr, "all_states")==0);
-			uiTemplateLayers(row, &settings_ptr, "state", &settings_ptr, "used_state", 0);
+			uiTemplateLayers(row, &settings_ptr, "visible_state", &settings_ptr, "used_state", 0);
 			row= uiLayoutRow(col, 0);
 			uiTemplateLayers(row, &settings_ptr, "initial_state", &settings_ptr, "used_state", 0);
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_controller.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_controller.c	2010-06-16 06:20:56 UTC (rev 29484)
+++ trunk/blender/source/blender/makesrna/intern/rna_controller.c	2010-06-16 08:29:40 UTC (rev 29485)
@@ -28,7 +28,7 @@
 #include "RNA_define.h"
 
 #include "rna_internal.h"
-
+#include "DNA_object_types.h"
 #include "DNA_controller_types.h"
 
 EnumPropertyItem controller_type_items[] ={
@@ -82,6 +82,60 @@
 	}
 }
 
+static int rna_Controller_state_number_get(struct PointerRNA *ptr)
+{
+	bController *cont= (bController *)ptr->data;
+	int bit;
+
+	for (bit=0; bit<32; bit++) {
+		if (cont->state_mask & (1<<bit))
+			return bit+1;
+	}
+	return 0;
+}
+
+static int rna_Controller_state_number_set(struct PointerRNA *ptr, const int value)
+{
+	bController *cont= (bController *)ptr->data;
+	if (value < 1 || value > OB_MAX_STATES)
+		return;
+
+	cont->state_mask = (1 << (value - 1));
+}
+
+static void rna_Controller_state_get(PointerRNA *ptr, int *values)
+{
+	bController *cont= (bController *)ptr->data;
+	int i;
+
+	memset(values, 0, sizeof(int)*OB_MAX_STATES);
+	for(i=0; i<OB_MAX_STATES; i++)
+		values[i] = (cont->state_mask & (1<<i));
+}
+
+static void rna_Controller_state_set(PointerRNA *ptr, const int *values)
+{
+	bController *cont= (bController *)ptr->data;
+	int i, tot= 0;
+
+	/* ensure we always have some state selected */
+	for(i=0; i<OB_MAX_STATES; i++)
+		if(values[i])
+			tot++;
+	
+	if(tot==0)
+		return;
+
+	/* only works for one state at once */
+	if(tot>1)
+		return;
+
+	for(i=0; i<OB_MAX_STATES; i++) {
+		if(values[i]) cont->state_mask |= (1<<i);
+		else cont->state_mask &= ~(1<<i);
+	}
+}
+
 #else
 
 void RNA_def_controller(BlenderRNA *brna)
@@ -124,6 +178,24 @@
 	RNA_def_property_ui_icon(prop, ICON_BOOKMARKS, 1);
 	RNA_def_property_update(prop, NC_LOGIC, NULL);
 
+	/* State */
+	
+	// array of OB_MAX_STATES
+	prop= RNA_def_property(srna, "state", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+	RNA_def_property_array(prop, OB_MAX_STATES);
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+	RNA_def_property_ui_text(prop, "", "Set Controller state index (1 to 30)");
+	RNA_def_property_boolean_funcs(prop, "rna_Controller_state_get", "rna_Controller_state_set");
+	RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+	// number of the state
+	prop= RNA_def_property(srna, "state_number", PROP_INT, PROP_UNSIGNED);
+	RNA_def_property_int_sdna(prop, NULL, "state_mask");
+	RNA_def_property_range(prop, 1, OB_MAX_STATES);
+	RNA_def_property_ui_text(prop, "", "Set Controller state index (1 to 30)");
+	RNA_def_property_int_funcs(prop, "rna_Controller_state_number_get", "rna_Controller_state_number_set", NULL);
+	RNA_def_property_update(prop, NC_LOGIC, NULL);
+
 	/* Expression Controller */
 	srna= RNA_def_struct(brna, "ExpressionController", "Controller");
 	RNA_def_struct_sdna_from(srna, "bExpressionCont", "data");

Modified: trunk/blender/source/blender/makesrna/intern/rna_object.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_object.c	2010-06-16 06:20:56 UTC (rev 29484)
+++ trunk/blender/source/blender/makesrna/intern/rna_object.c	2010-06-16 08:29:40 UTC (rev 29485)
@@ -1264,7 +1264,7 @@
 
 	/* state */
 
-	prop= RNA_def_property(srna, "state", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+	prop= RNA_def_property(srna, "visible_state", PROP_BOOLEAN, PROP_LAYER_MEMBER);
 	RNA_def_property_boolean_sdna(prop, NULL, "state", 1);
 	RNA_def_property_array(prop, OB_MAX_STATES);
 	RNA_def_property_ui_text(prop, "State", "State determining which controllers are displayed");





More information about the Bf-blender-cvs mailing list