Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenoit Bolsee <benoit.bolsee@online.be>2010-01-30 21:53:33 +0300
committerBenoit Bolsee <benoit.bolsee@online.be>2010-01-30 21:53:33 +0300
commitf7b7d7952d5edc22e717ab20a96f77cb3c1be87b (patch)
treec199ed14329d8ef3358cd6ea88fbb8f763bc8af2 /source/gameengine
parentcfdd53a4f8e7e80754fd1c6c796bf4410a0213a5 (diff)
BGE: patch [#20293] Added python sensor attribute: Status.
Diffstat (limited to 'source/gameengine')
-rw-r--r--source/gameengine/GameLogic/SCA_ISensor.cpp23
-rw-r--r--source/gameengine/GameLogic/SCA_ISensor.h15
-rw-r--r--source/gameengine/Ketsji/KX_PythonInit.cpp8
-rw-r--r--source/gameengine/PyDoc/GameTypes.py5
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():