Revision: 20539
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20539
Author:   campbellbarton
Date:     2009-05-31 19:44:38 +0200 (Sun, 31 May 2009)

Log Message:
-----------
Bug in KX_GameObject.get() and ListValue.get(), wasn't checking if the CValue 
derived objects could be converted to a PyObject.
so where foo is an int prop,
 gameOb.get("foo") == 0, would end up returning a CValue int proxy.

This is more a problem for KX_GameObject since ListValues with python access 
mostly don't contain ints, strings, floats.
This also wont break games from 2.48 since the .get() function wasn't available.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Expressions/ListValue.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp

Modified: trunk/blender/source/gameengine/Expressions/ListValue.cpp
===================================================================
--- trunk/blender/source/gameengine/Expressions/ListValue.cpp   2009-05-31 
17:20:57 UTC (rev 20538)
+++ trunk/blender/source/gameengine/Expressions/ListValue.cpp   2009-05-31 
17:44:38 UTC (rev 20539)
@@ -77,8 +77,13 @@
        if (PyString_Check(pyindex))
        {
                CValue *item = ((CListValue*) 
list)->FindValue(PyString_AsString(pyindex));
-               if (item)
-                       return item->GetProxy();
+               if (item) {
+                       PyObject* pyobj = item->ConvertValueToPython();
+                       if(pyobj)
+                               return pyobj;
+                       else
+                               return item->GetProxy();
+               }
        }
        else if (PyInt_Check(pyindex))
        {
@@ -575,9 +580,13 @@
                return NULL;
        
        CValue *item = FindValue((const char *)key);
-       if (item)
-               return item->GetProxy();
-       
+       if (item) {     
+               PyObject* pyobj = item->ConvertValueToPython();
+               if (pyobj)
+                       return pyobj;
+               else
+                       return item->GetProxy();
+       }
        Py_INCREF(def);
        return def;
 }

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp    2009-05-31 
17:20:57 UTC (rev 20538)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp    2009-05-31 
17:44:38 UTC (rev 20539)
@@ -2758,8 +2758,13 @@
        
        if(PyString_Check(key)) {
                CValue *item = GetProperty(PyString_AsString(key));
-               if (item)
-                       return item->GetProxy();
+               if (item) {
+                       ret = item->ConvertValueToPython();
+                       if(ret)
+                               return ret;
+                       else
+                               return item->GetProxy();
+               }
        }
        
        if (m_attr_dict && (ret=PyDict_GetItem(m_attr_dict, key))) {


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

Reply via email to