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():


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

Reply via email to