[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18177] trunk/blender/source/gameengine/ GameLogic: BGE API cleanup: more consistent type check on set attribute ( mouse and keyboard so far).

Benoit Bolsee benoit.bolsee at online.be
Tue Dec 30 17:44:34 CET 2008


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);





More information about the Bf-blender-cvs mailing list