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

This commit is contained in:
2010-01-30 18:53:33 +00:00
parent cfdd53a4f8
commit f7b7d7952d
4 changed files with 50 additions and 1 deletions

View File

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

View File

@@ -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
};

View File

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

View File

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