[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26446] trunk/blender/source/gameengine: BGE: patch [#20293] Added python sensor attribute: Status.

Benoit Bolsee benoit.bolsee at online.be
Sat Jan 30 19:53:33 CET 2010


Revision: 26446
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26446
Author:   ben2610
Date:     2010-01-30 19:53:33 +0100 (Sat, 30 Jan 2010)

Log Message:
-----------
BGE: patch [#20293] Added python sensor attribute: Status.

Modified Paths:
--------------
    trunk/blender/source/gameengine/GameLogic/SCA_ISensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_ISensor.h
    trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
    trunk/blender/source/gameengine/PyDoc/GameTypes.py

Modified: trunk/blender/source/gameengine/GameLogic/SCA_ISensor.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_ISensor.cpp	2010-01-30 18:23:13 UTC (rev 26445)
+++ trunk/blender/source/gameengine/GameLogic/SCA_ISensor.cpp	2010-01-30 18:53:33 UTC (rev 26446)
@@ -360,6 +360,7 @@
 	KX_PYATTRIBUTE_BOOL_RW_CHECK("tap",SCA_ISensor,m_tap,pyattr_check_tap),
 	KX_PYATTRIBUTE_RO_FUNCTION("triggered", SCA_ISensor, pyattr_get_triggered),
 	KX_PYATTRIBUTE_RO_FUNCTION("positive", SCA_ISensor, pyattr_get_positive),
+	KX_PYATTRIBUTE_RO_FUNCTION("status", SCA_ISensor, pyattr_get_status),
 	//KX_PYATTRIBUTE_TODO("links"),
 	//KX_PYATTRIBUTE_TODO("posTicks"),
 	//KX_PYATTRIBUTE_TODO("negTicks"),
@@ -382,6 +383,28 @@
 	return PyLong_FromSsize_t(self->GetState());
 }
 
+PyObject* SCA_ISensor::pyattr_get_status(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+	SCA_ISensor* self= static_cast<SCA_ISensor*>(self_v);
+	int status = 0;
+	if (self->GetState()) 
+	{
+		if (self->GetState() == self->GetPrevState()) 
+		{
+			status = 2;
+		}
+		else 
+		{
+			status = 1;
+		}
+	}
+	else if (self->GetState() != self->GetPrevState()) 
+	{
+		status = 3;
+	}
+	return PyLong_FromSsize_t(status);
+}
+
 int SCA_ISensor::pyattr_check_level(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
 {
 	SCA_ISensor* self= static_cast<SCA_ISensor*>(self_v);

Modified: trunk/blender/source/gameengine/GameLogic/SCA_ISensor.h
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_ISensor.h	2010-01-30 18:23:13 UTC (rev 26445)
+++ trunk/blender/source/gameengine/GameLogic/SCA_ISensor.h	2010-01-30 18:53:33 UTC (rev 26446)
@@ -160,6 +160,12 @@
 	{
 		return m_state;
 	}
+	
+	/** get the previous state of the sensor: positive or negative */
+	bool GetPrevState()
+	{
+		return m_prev_state;
+	}
 
 	/** Resume sensing. */
 	void Resume();
@@ -178,8 +184,17 @@
 	
 	static PyObject*	pyattr_get_triggered(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
 	static PyObject*	pyattr_get_positive(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+	static PyObject*	pyattr_get_status(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
 	static int          pyattr_check_level(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
 	static int          pyattr_check_tap(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+	
+	enum SensorStatus {
+		KX_SENSOR_INACTIVE = 0,
+		KX_SENSOR_JUST_ACTIVATED,
+		KX_SENSOR_ACTIVE,
+		KX_SENSOR_JUST_DEACTIVATED
+	
+	};
 #endif // DISABLE_PYTHON
 };
 

Modified: trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp	2010-01-30 18:23:13 UTC (rev 26445)
+++ trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp	2010-01-30 18:53:33 UTC (rev 26446)
@@ -1420,7 +1420,13 @@
 	KX_MACRO_addTypesToDict(d, KX_STATE28, (1<<27));
 	KX_MACRO_addTypesToDict(d, KX_STATE29, (1<<28));
 	KX_MACRO_addTypesToDict(d, KX_STATE30, (1<<29));
-
+	
+	/* All Sensors */
+	KX_MACRO_addTypesToDict(d, KX_SENSOR_JUST_ACTIVATED, SCA_ISensor::KX_SENSOR_JUST_ACTIVATED);
+	KX_MACRO_addTypesToDict(d, KX_SENSOR_ACTIVE, SCA_ISensor::KX_SENSOR_ACTIVE);
+	KX_MACRO_addTypesToDict(d, KX_SENSOR_JUST_DEACTIVATED, SCA_ISensor::KX_SENSOR_JUST_DEACTIVATED);
+	KX_MACRO_addTypesToDict(d, KX_SENSOR_INACTIVE, SCA_ISensor::KX_SENSOR_INACTIVE);
+	
 	/* Radar Sensor */
 	KX_MACRO_addTypesToDict(d, KX_RADAR_AXIS_POS_X, KX_RadarSensor::KX_RADAR_AXIS_POS_X);
 	KX_MACRO_addTypesToDict(d, KX_RADAR_AXIS_POS_Y, KX_RadarSensor::KX_RADAR_AXIS_POS_Y);

Modified: trunk/blender/source/gameengine/PyDoc/GameTypes.py
===================================================================
--- trunk/blender/source/gameengine/PyDoc/GameTypes.py	2010-01-30 18:23:13 UTC (rev 26445)
+++ trunk/blender/source/gameengine/PyDoc/GameTypes.py	2010-01-30 18:53:33 UTC (rev 26446)
@@ -142,6 +142,11 @@
 	@type triggered: boolean
 	@ivar positive: True if this sensor brick is in a positive state. (read-only)
 	@type positive: boolean
+	@ivar status: The status of the sensor. (read-only)
+		KX_SENSOR_INACTIVE, KX_SENSOR_JUST_ACTIVATED, 
+		KX_SENSOR_ACTIVE, KX_SENSOR_JUST_DEACTIVATED
+		Note: this convenient attribute combines the values of triggered and positive attributes
+	@type status: int from 0-3.
 	"""
 	
 	def reset():





More information about the Bf-blender-cvs mailing list