Revision: 18177
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18177
Author:   ben2610
Date:     2008-12-30 17:44:34 +0100 (Tue, 30 Dec 2008)

Log Message:
-----------
BGE API cleanup: more consistent type check on set attribute (mouse and 
keyboard so far). Check type after name so that the user get a type error when 
assigning a wrong type to a built-in attribute.

Modified Paths:
--------------
    trunk/blender/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_MouseSensor.cpp

Modified: trunk/blender/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp    
2008-12-30 16:04:27 UTC (rev 18176)
+++ trunk/blender/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp    
2008-12-30 16:44:34 UTC (rev 18177)
@@ -846,49 +846,64 @@
 
 int SCA_KeyboardSensor::_setattr(const STR_String& attr, PyObject *value)
 {
-       if (PyInt_Check(value))
+       if (attr == "key")
        {
-               int val = PyInt_AsLong(value);
-
-               if (attr == "key")
-               {
-                       m_hotkey = val;
-                       return 0;
+               if (!PyInt_Check(value)){
+                       PyErr_SetString(PyExc_TypeError, "expected an integer");
+                       return 1;                       
                }
+               m_hotkey = PyInt_AsLong(value);
+               return 0;
+       }
 
-               if (attr == "hold1")
-               {
-                       m_qual = val;
-                       return 0;
+       if (attr == "hold1")
+       {
+               if (!PyInt_Check(value)){
+                       PyErr_SetString(PyExc_TypeError, "expected an integer");
+                       return 1;                       
                }
-               
-               if (attr == "hold2")
-               {
-                       m_qual2 = val;
-                       return 0;
+               m_qual = PyInt_AsLong(value);
+               return 0;
+       }
+       
+       if (attr == "hold2")
+       {
+               if (!PyInt_Check(value)){
+                       PyErr_SetString(PyExc_TypeError, "expected an integer");
+                       return 1;                       
                }
+               m_qual2 = PyInt_AsLong(value);
+               return 0;
+       }
 
-               if (attr == "useAllKeys")
-               {
-                       m_bAllKeys = (val != 0);
-                       return 0;
+       if (attr == "useAllKeys")
+       {
+               if (!PyInt_Check(value)){
+                       PyErr_SetString(PyExc_TypeError, "expected an integer");
+                       return 1;                       
                }
+               m_bAllKeys = (PyInt_AsLong(value) != 0);
+               return 0;
        }
-
-       if (PyString_Check(value))
+       
+       if (attr == "logToggleProperty")
        {
-               STR_String val = PyString_AsString(value);
-               if (attr == "logToggleProperty")
-               {
-                       m_toggleprop = val;
-                       return 0;
+               if (!PyString_Check(value)){
+                       PyErr_SetString(PyExc_TypeError, "expected a string");
+                       return 1;                       
                }
+               m_toggleprop = PyString_AsString(value);
+               return 0;
+       }
 
-               if (attr == "logTargetProperty")
-               {
-                       m_targetprop = val;
-                       return 0;
+       if (attr == "logTargetProperty")
+       {
+               if (!PyString_Check(value)){
+                       PyErr_SetString(PyExc_TypeError, "expected a string");
+                       return 1;                       
                }
+               m_targetprop = PyString_AsString(value);
+               return 0;
        }
 
        return SCA_ISensor::_setattr(attr, value);

Modified: trunk/blender/source/gameengine/GameLogic/SCA_MouseSensor.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_MouseSensor.cpp       
2008-12-30 16:04:27 UTC (rev 18176)
+++ trunk/blender/source/gameengine/GameLogic/SCA_MouseSensor.cpp       
2008-12-30 16:44:34 UTC (rev 18177)
@@ -343,31 +343,30 @@
 
 int SCA_MouseSensor::_setattr(const STR_String& attr, PyObject *value)
 {
-       if (PyInt_Check(value))
+       if (attr == "mode")
        {
+               if (!PyInt_Check(value)){
+                       PyErr_SetString(PyExc_TypeError, "expected an integer");
+                       return 1;                       
+               }
+               
                int val = PyInt_AsLong(value);
-
-               if (attr == "mode")
-               {
-                       if ((val < KX_MOUSESENSORMODE_NODEF) 
-                               || (val > KX_MOUSESENSORMODE_MAX)){     
-                               
-                               PyErr_SetString(PyExc_ValueError, "invalid mode 
specified!");
-                               return NULL;
-                       }
-                       
-                       m_mousemode = val;
-                       UpdateHotkey();
-                       return 0;
+               
+               if ((val < KX_MOUSESENSORMODE_NODEF) 
+                       || (val > KX_MOUSESENSORMODE_MAX)){             
+                       PyErr_SetString(PyExc_ValueError, "invalid mode 
specified!");
+                       return 1;
                }
+               
+               m_mousemode = val;
+               UpdateHotkey();
+               return 0;
        }
-       else 
+       
+       if (attr == "position")
        {
-               if (attr == "position")
-               {
-                       PyErr_SetString(PyExc_AttributeError, "read-only 
property!");
-                       return NULL;            
-               }
+               PyErr_SetString(PyExc_AttributeError, "'position' is a 
read-only property!");
+               return 1;               
        }
        
        return SCA_ISensor::_setattr(attr, value);


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

Reply via email to