[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16724] trunk/blender/source: BGE patch: add Debug button next to object state.

Benoit Bolsee benoit.bolsee at online.be
Thu Sep 25 18:19:09 CEST 2008


Revision: 16724
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16724
Author:   ben2610
Date:     2008-09-25 18:19:07 +0200 (Thu, 25 Sep 2008)

Log Message:
-----------
BGE patch: add Debug button next to object state. The object state mask will be printed at runtime with the debug info as a comma separated list of state numbers (1..30) for each active state bit. The reserved property name __state__ is used for that purpose (users should not create a property with that name).

Modified Paths:
--------------
    trunk/blender/source/blender/makesdna/DNA_object_types.h
    trunk/blender/source/blender/src/buttons_logic.c
    trunk/blender/source/gameengine/Converter/KX_ConvertProperties.cpp
    trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp

Modified: trunk/blender/source/blender/makesdna/DNA_object_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_object_types.h	2008-09-25 16:13:17 UTC (rev 16723)
+++ trunk/blender/source/blender/makesdna/DNA_object_types.h	2008-09-25 16:19:07 UTC (rev 16724)
@@ -469,6 +469,7 @@
 #define OB_SHOWCONT		2048
 #define OB_SETSTBIT		4096
 #define OB_INITSTBIT	8192
+#define OB_DEBUGSTATE	16384
 
 /* ob->restrictflag */
 #define OB_RESTRICT_VIEW	1

Modified: trunk/blender/source/blender/src/buttons_logic.c
===================================================================
--- trunk/blender/source/blender/src/buttons_logic.c	2008-09-25 16:13:17 UTC (rev 16723)
+++ trunk/blender/source/blender/src/buttons_logic.c	2008-09-25 16:19:07 UTC (rev 16724)
@@ -3366,24 +3366,25 @@
 
 			/* first show the state */
 			uiBlockSetEmboss(block, UI_EMBOSSP);
-			uiDefBlockBut(block, object_state_mask_menu, ob, "State", (short)(xco-10), (short)(yco-10), 40, 19, "Object state menu: store and retrieve initial state");
+			uiDefBlockBut(block, object_state_mask_menu, ob, "State", (short)(xco-10), (short)(yco-10), 36, 19, "Object state menu: store and retrieve initial state");
 			uiBlockSetEmboss(block, UI_EMBOSS);
 			if (!ob->state)
 				ob->state = 1;
 			for (offset=0; offset<15; offset+=5) {
 				uiBlockBeginAlign(block);
 				for (stbit=0; stbit<5; stbit++) {
-					but = uiDefButBitI(block, controller_state_mask&(1<<(stbit+offset)) ? BUT_TOGDUAL:TOG, 1<<(stbit+offset), stbit+offset, "",	(short)(xco+35+12*stbit+13*offset), yco, 12, 12, (int *)&(ob->state), 0, 0, 0, 0, get_state_name(ob, (short)(stbit+offset)));
+					but = uiDefButBitI(block, controller_state_mask&(1<<(stbit+offset)) ? BUT_TOGDUAL:TOG, 1<<(stbit+offset), stbit+offset, "",	(short)(xco+31+12*stbit+13*offset), yco, 12, 12, (int *)&(ob->state), 0, 0, 0, 0, get_state_name(ob, (short)(stbit+offset)));
 					uiButSetFunc(but, check_state_mask, but, &(ob->state));
 				}
 				for (stbit=0; stbit<5; stbit++) {
-					but = uiDefButBitI(block, controller_state_mask&(1<<(stbit+offset+15)) ? BUT_TOGDUAL:TOG, 1<<(stbit+offset+15), stbit+offset+15, "",	(short)(xco+35+12*stbit+13*offset), yco-12, 12, 12, (int *)&(ob->state), 0, 0, 0, 0, get_state_name(ob, (short)(stbit+offset+15)));
+					but = uiDefButBitI(block, controller_state_mask&(1<<(stbit+offset+15)) ? BUT_TOGDUAL:TOG, 1<<(stbit+offset+15), stbit+offset+15, "",	(short)(xco+31+12*stbit+13*offset), yco-12, 12, 12, (int *)&(ob->state), 0, 0, 0, 0, get_state_name(ob, (short)(stbit+offset+15)));
 					uiButSetFunc(but, check_state_mask, but, &(ob->state));
 				}
 			}
 			uiBlockBeginAlign(block);
-			uiDefButBitS(block, TOG, OB_SETSTBIT, B_SET_STATE_BIT, "All",(short)(xco+235), yco-10, 25, 19, &ob->scaflag, 0, 0, 0, 0, "Set all state bits");
-			uiDefButBitS(block, TOG, OB_INITSTBIT, B_INIT_STATE_BIT, "Ini",(short)(xco+260), yco-10, 25, 19, &ob->scaflag, 0, 0, 0, 0, "Set the initial state");
+			uiDefButBitS(block, TOG, OB_SETSTBIT, B_SET_STATE_BIT, "All",(short)(xco+226), yco-10, 22, 19, &ob->scaflag, 0, 0, 0, 0, "Set all state bits");
+			uiDefButBitS(block, TOG, OB_INITSTBIT, B_INIT_STATE_BIT, "Ini",(short)(xco+248), yco-10, 22, 19, &ob->scaflag, 0, 0, 0, 0, "Set the initial state");
+			uiDefButBitS(block, TOG, OB_DEBUGSTATE, 0, "D",(short)(xco+270), yco-10, 15, 19, &ob->scaflag, 0, 0, 0, 0, "Print state debug info");
 			uiBlockEndAlign(block);
 
 			yco-=35;

Modified: trunk/blender/source/gameengine/Converter/KX_ConvertProperties.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/KX_ConvertProperties.cpp	2008-09-25 16:13:17 UTC (rev 16723)
+++ trunk/blender/source/gameengine/Converter/KX_ConvertProperties.cpp	2008-09-25 16:19:07 UTC (rev 16724)
@@ -132,6 +132,10 @@
 
 		prop = prop->next;
 	}
-
-	
+	// check if state needs to be debugged
+	if (object->scaflag & OB_DEBUGSTATE)
+	{
+		//  reserve name for object state
+		scene->AddDebugProperty(gameobj,STR_String("__state__"));
+	}
 }

Modified: trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp	2008-09-25 16:13:17 UTC (rev 16723)
+++ trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp	2008-09-25 16:19:07 UTC (rev 16724)
@@ -1243,19 +1243,49 @@
 				CValue* propobj = (*it)->m_obj;
 				STR_String objname = propobj->GetName();
 				STR_String propname = (*it)->m_name;
-				CValue* propval = propobj->GetProperty(propname);
-				if (propval)
+				if (propname == "__state__")
 				{
-					STR_String text = propval->GetText();
-					debugtxt = objname + "." + propname + " = " + text;
+					// reserve name for object state
+					KX_GameObject* gameobj = static_cast<KX_GameObject*>(propobj);
+					unsigned int state = gameobj->GetState();
+					debugtxt = objname + "." + propname + " = ";
+					bool first = true;
+					for (int statenum=1;state;state >>= 1, statenum++)
+					{
+						if (state & 1)
+						{
+							if (!first)
+							{
+								debugtxt += ",";
+							}
+							debugtxt += STR_String(statenum);
+							first = false;
+						}
+					}
 					m_rendertools->RenderText2D(RAS_IRenderTools::RAS_TEXT_PADDED, 
-												debugtxt.Ptr(),
-												xcoord,
-												ycoord,
-												m_canvas->GetWidth(),
-												m_canvas->GetHeight());
+													debugtxt.Ptr(),
+													xcoord,
+													ycoord,
+													m_canvas->GetWidth(),
+													m_canvas->GetHeight());
 					ycoord += 14;
 				}
+				else
+				{
+					CValue* propval = propobj->GetProperty(propname);
+					if (propval)
+					{
+						STR_String text = propval->GetText();
+						debugtxt = objname + "." + propname + " = " + text;
+						m_rendertools->RenderText2D(RAS_IRenderTools::RAS_TEXT_PADDED, 
+													debugtxt.Ptr(),
+													xcoord,
+													ycoord,
+													m_canvas->GetWidth(),
+													m_canvas->GetHeight());
+						ycoord += 14;
+					}
+				}
 			}
 		}
 	}





More information about the Bf-blender-cvs mailing list