diff options
author | Benoit Bolsee <benoit.bolsee@online.be> | 2010-01-30 21:53:33 +0300 |
---|---|---|
committer | Benoit Bolsee <benoit.bolsee@online.be> | 2010-01-30 21:53:33 +0300 |
commit | f7b7d7952d5edc22e717ab20a96f77cb3c1be87b (patch) | |
tree | c199ed14329d8ef3358cd6ea88fbb8f763bc8af2 | |
parent | cfdd53a4f8e7e80754fd1c6c796bf4410a0213a5 (diff) |
BGE: patch [#20293] Added python sensor attribute: Status.
-rw-r--r-- | source/gameengine/GameLogic/SCA_ISensor.cpp | 23 | ||||
-rw-r--r-- | source/gameengine/GameLogic/SCA_ISensor.h | 15 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_PythonInit.cpp | 8 | ||||
-rw-r--r-- | source/gameengine/PyDoc/GameTypes.py | 5 |
4 files changed, 50 insertions, 1 deletions
diff --git a/source/gameengine/GameLogic/SCA_ISensor.cpp b/source/gameengine/GameLogic/SCA_ISensor.cpp index 3191c99fb2f..9cf7e21e4ab 100644 --- a/source/gameengine/GameLogic/SCA_ISensor.cpp +++ b/source/gameengine/GameLogic/SCA_ISensor.cpp @@ -360,6 +360,7 @@ PyAttributeDef SCA_ISensor::Attributes[] = { 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 @@ PyObject* SCA_ISensor::pyattr_get_positive(void *self_v, const KX_PYATTRIBUTE_DE 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); diff --git a/source/gameengine/GameLogic/SCA_ISensor.h b/source/gameengine/GameLogic/SCA_ISensor.h index e01f5775289..e92e4bfdcfb 100644 --- a/source/gameengine/GameLogic/SCA_ISensor.h +++ b/source/gameengine/GameLogic/SCA_ISensor.h @@ -160,6 +160,12 @@ public: { 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 @@ public: 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 }; diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index ce81e4195fa..0f6b487bd60 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -1420,7 +1420,13 @@ PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack 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); diff --git a/source/gameengine/PyDoc/GameTypes.py b/source/gameengine/PyDoc/GameTypes.py index e6d51e85af6..390fb357761 100644 --- a/source/gameengine/PyDoc/GameTypes.py +++ b/source/gameengine/PyDoc/GameTypes.py @@ -142,6 +142,11 @@ class SCA_ISensor(SCA_ILogicBrick): @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(): |