0, 0, &SCA_ISensor::Type, 0,0,0,0,0,0, py_base_new }; PyMethodDef KX_TouchSensor::Methods[] = { {NULL,NULL} //Sentinel }; PyAttributeDef KX_TouchSensor::Attributes[] = { KX_PYATTRIBUTE_STRING_RW("propName",0,MAX_PROP_NAME,false,KX_TouchSensor,m_touchedpropname), KX_PYATTRIBUTE_BOOL_RW("useMaterial",KX_TouchSensor,m_bFindMaterial), KX_PYATTRIBUTE_BOOL_RW("usePulseCollision",KX_TouchSensor,m_bTouchPulse), KX_PYATTRIBUTE_STRING_RO("hitMaterial", KX_TouchSensor, m_hitMaterial), KX_PYATTRIBUTE_RO_FUNCTION("hitObject", KX_TouchSensor, pyattr_get_object_hit), KX_PYATTRIBUTE_RO_FUNCTION("hitObjectList", KX_TouchSensor, pyattr_get_object_hit_list), { NULL } //Sentinel }; /* Python API */ PyObject *KX_TouchSensor::pyattr_get_object_hit(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { KX_TouchSensor* self = static_cast<KX_TouchSensor*>(self_v); if (self->m_hitObject) return self->m_hitObject->GetProxy(); else Py_RETURN_NONE;
0, 0, &SCA_ISensor::Type, 0, 0, 0, 0, 0, 0, py_base_new }; PyMethodDef KX_CollisionSensor::Methods[] = { {NULL, NULL} //Sentinel }; PyAttributeDef KX_CollisionSensor::Attributes[] = { KX_PYATTRIBUTE_STRING_RW("propName", 0, MAX_PROP_NAME, false, KX_CollisionSensor, m_touchedpropname), KX_PYATTRIBUTE_BOOL_RW("useMaterial", KX_CollisionSensor, m_bFindMaterial), KX_PYATTRIBUTE_BOOL_RW("usePulseCollision", KX_CollisionSensor, m_bCollisionPulse), KX_PYATTRIBUTE_STRING_RO("hitMaterial", KX_CollisionSensor, m_hitMaterial), KX_PYATTRIBUTE_RO_FUNCTION("hitObject", KX_CollisionSensor, pyattr_get_object_hit), KX_PYATTRIBUTE_RO_FUNCTION("hitObjectList", KX_CollisionSensor, pyattr_get_object_hit_list), KX_PYATTRIBUTE_NULL //Sentinel }; /* Python API */ PyObject *KX_CollisionSensor::pyattr_get_object_hit(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { KX_CollisionSensor *self = static_cast<KX_CollisionSensor *>(self_v); if (self->m_hitObject) { return self->m_hitObject->GetProxy(); } else {
m_progress += progress; RunProgressCallback(); } #ifdef WITH_PYTHON PyMethodDef KX_LibLoadStatus::Methods[] = { {NULL} //Sentinel }; PyAttributeDef KX_LibLoadStatus::Attributes[] = { KX_PYATTRIBUTE_RW_FUNCTION("onFinish", KX_LibLoadStatus, pyattr_get_onfinish, pyattr_set_onfinish), // KX_PYATTRIBUTE_RW_FUNCTION("onProgress", KX_LibLoadStatus, pyattr_get_onprogress, pyattr_set_onprogress), KX_PYATTRIBUTE_FLOAT_RO("progress", KX_LibLoadStatus, m_progress), KX_PYATTRIBUTE_STRING_RO("libraryName", KX_LibLoadStatus, m_libname), KX_PYATTRIBUTE_RO_FUNCTION("timeTaken", KX_LibLoadStatus, pyattr_get_timetaken), KX_PYATTRIBUTE_BOOL_RO("finished", KX_LibLoadStatus, m_finished), { NULL } //Sentinel }; PyTypeObject KX_LibLoadStatus::Type = { PyVarObject_HEAD_INIT(NULL, 0) "KX_LibLoadStatus", sizeof(PyObjectPlus_Proxy), 0, py_base_dealloc, 0, 0, 0, 0,
Methods, 0, 0, &CValue::Type, 0,0,0,0,0,0, py_base_new }; PyMethodDef SCA_ILogicBrick::Methods[] = { {NULL,NULL} //Sentinel }; PyAttributeDef SCA_ILogicBrick::Attributes[] = { KX_PYATTRIBUTE_RO_FUNCTION("owner", SCA_ILogicBrick, pyattr_get_owner), KX_PYATTRIBUTE_INT_RW("executePriority",0,100000,false,SCA_ILogicBrick,m_Execute_Priority), KX_PYATTRIBUTE_STRING_RO("name", SCA_ILogicBrick, m_name), {NULL} //Sentinel }; int SCA_ILogicBrick::CheckProperty(void *self, const PyAttributeDef *attrdef) { if (attrdef->m_type != KX_PYATTRIBUTE_TYPE_STRING || attrdef->m_length != 1) { PyErr_SetString(PyExc_AttributeError, "inconsistent check function for attribute type, report to blender.org"); return 1; } SCA_ILogicBrick* brick = reinterpret_cast<SCA_ILogicBrick*>(self); STR_String* var = reinterpret_cast<STR_String*>((char*)self+attrdef->m_offset); CValue* prop = brick->GetParent()->FindIdentifier(*var); bool error = prop->IsError(); prop->Release(); if (error) {