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;
+                                       }
+                               }
                        }
                }
        }


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to