BGE: patch [#20293] Added python sensor attribute: Status.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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():
|
||||
|
||||
Reference in New Issue
Block a user