Changeset View
Changeset View
Standalone View
Standalone View
source/gameengine/Ketsji/KX_Light.cpp
| Context not available. | |||||
| #include "BLI_math.h" | #include "BLI_math.h" | ||||
| KX_LightObject::KX_LightObject(void* sgReplicationInfo,SG_Callbacks callbacks, | KX_LightObject::KX_LightObject(void *sgReplicationInfo, SG_Callbacks callbacks, | ||||
| RAS_IRasterizer* rasterizer, | RAS_IRasterizer *rasterizer, | ||||
| RAS_ILightObject* lightobj, | RAS_ILightObject *lightobj) | ||||
| bool glsl) | :KX_GameObject(sgReplicationInfo, callbacks), | ||||
| : KX_GameObject(sgReplicationInfo,callbacks), | m_rasterizer(rasterizer) | ||||
| m_rasterizer(rasterizer) | |||||
| { | { | ||||
| m_lightobj = lightobj; | m_lightobj = lightobj; | ||||
| m_lightobj->m_scene = sgReplicationInfo; | m_lightobj->m_scene = sgReplicationInfo; | ||||
| m_lightobj->m_light = this; | m_lightobj->m_light = this; | ||||
| m_rasterizer->AddLight(m_lightobj); | m_rasterizer->AddLight(m_lightobj); | ||||
| m_lightobj->m_glsl = glsl; | m_blenderscene = ((KX_Scene *)sgReplicationInfo)->GetBlenderScene(); | ||||
| m_blenderscene = ((KX_Scene*)sgReplicationInfo)->GetBlenderScene(); | |||||
| m_base = NULL; | m_base = NULL; | ||||
| }; | } | ||||
| KX_LightObject::~KX_LightObject() | KX_LightObject::~KX_LightObject() | ||||
| { | { | ||||
| Context not available. | |||||
| } | } | ||||
| } | } | ||||
| CValue *KX_LightObject::GetReplica() | |||||
| CValue* KX_LightObject::GetReplica() | |||||
| { | { | ||||
| KX_LightObject *replica = new KX_LightObject(*this); | |||||
| KX_LightObject* replica = new KX_LightObject(*this); | |||||
| replica->ProcessReplica(); | replica->ProcessReplica(); | ||||
| replica->m_lightobj = m_lightobj->Clone(); | replica->m_lightobj = m_lightobj->Clone(); | ||||
| replica->m_lightobj->m_light = replica; | replica->m_lightobj->m_light = replica; | ||||
| m_rasterizer->AddLight(replica->m_lightobj); | m_rasterizer->AddLight(replica->m_lightobj); | ||||
| Context not available. | |||||
| void KX_LightObject::UpdateScene(KX_Scene *kxscene) | void KX_LightObject::UpdateScene(KX_Scene *kxscene) | ||||
| { | { | ||||
| m_lightobj->m_scene = (void*)kxscene; | m_lightobj->m_scene = (void *)kxscene; | ||||
| m_blenderscene = kxscene->GetBlenderScene(); | m_blenderscene = kxscene->GetBlenderScene(); | ||||
| m_base = BKE_scene_base_add(m_blenderscene, GetBlenderObject()); | m_base = BKE_scene_base_add(m_blenderscene, GetBlenderObject()); | ||||
| } | } | ||||
| Context not available. | |||||
| 0, | 0, | ||||
| &KX_GameObject::Sequence, | &KX_GameObject::Sequence, | ||||
| &KX_GameObject::Mapping, | &KX_GameObject::Mapping, | ||||
| 0,0,0, | 0, 0, 0, | ||||
| NULL, | NULL, | ||||
| NULL, | NULL, | ||||
| 0, | 0, | ||||
| Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, | Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, | ||||
| 0,0,0,0,0,0,0, | 0, 0, 0, 0, 0, 0, 0, | ||||
| Methods, | Methods, | ||||
| 0, | 0, | ||||
| 0, | 0, | ||||
| &KX_GameObject::Type, | &KX_GameObject::Type, | ||||
| 0,0,0,0,0,0, | 0, 0, 0, 0, 0, 0, | ||||
| py_base_new | py_base_new | ||||
| }; | }; | ||||
| PyMethodDef KX_LightObject::Methods[] = { | PyMethodDef KX_LightObject::Methods[] = { | ||||
| {NULL,NULL} //Sentinel | KX_PYMETHODTABLE_NOARGS(KX_LightObject, updateShadow), | ||||
| {NULL, NULL} // Sentinel | |||||
| }; | }; | ||||
| PyAttributeDef KX_LightObject::Attributes[] = { | PyAttributeDef KX_LightObject::Attributes[] = { | ||||
| KX_PYATTRIBUTE_RW_FUNCTION("layer", KX_LightObject, pyattr_get_layer, pyattr_set_layer), | |||||
| KX_PYATTRIBUTE_RW_FUNCTION("energy", KX_LightObject, pyattr_get_energy, pyattr_set_energy), | KX_PYATTRIBUTE_RW_FUNCTION("energy", KX_LightObject, pyattr_get_energy, pyattr_set_energy), | ||||
| KX_PYATTRIBUTE_RW_FUNCTION("distance", KX_LightObject, pyattr_get_distance, pyattr_set_distance), | KX_PYATTRIBUTE_RW_FUNCTION("distance", KX_LightObject, pyattr_get_distance, pyattr_set_distance), | ||||
| KX_PYATTRIBUTE_RW_FUNCTION("color", KX_LightObject, pyattr_get_color, pyattr_set_color), | KX_PYATTRIBUTE_RW_FUNCTION("color", KX_LightObject, pyattr_get_color, pyattr_set_color), | ||||
| Context not available. | |||||
| KX_PYATTRIBUTE_RO_FUNCTION("SPOT", KX_LightObject, pyattr_get_typeconst), | KX_PYATTRIBUTE_RO_FUNCTION("SPOT", KX_LightObject, pyattr_get_typeconst), | ||||
| KX_PYATTRIBUTE_RO_FUNCTION("SUN", KX_LightObject, pyattr_get_typeconst), | KX_PYATTRIBUTE_RO_FUNCTION("SUN", KX_LightObject, pyattr_get_typeconst), | ||||
| KX_PYATTRIBUTE_RO_FUNCTION("NORMAL", KX_LightObject, pyattr_get_typeconst), | KX_PYATTRIBUTE_RO_FUNCTION("NORMAL", KX_LightObject, pyattr_get_typeconst), | ||||
| KX_PYATTRIBUTE_RO_FUNCTION("HEMI", KX_LightObject, pyattr_get_typeconst), | |||||
| KX_PYATTRIBUTE_RW_FUNCTION("type", KX_LightObject, pyattr_get_type, pyattr_set_type), | KX_PYATTRIBUTE_RW_FUNCTION("type", KX_LightObject, pyattr_get_type, pyattr_set_type), | ||||
| { NULL } //Sentinel | KX_PYATTRIBUTE_RW_FUNCTION("staticShadow", KX_LightObject, pyattr_get_static_shadow, pyattr_set_static_shadow), | ||||
| KX_PYATTRIBUTE_NULL // Sentinel | |||||
| }; | }; | ||||
| PyObject *KX_LightObject::pyattr_get_layer(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | KX_PYMETHODDEF_DOC_NOARGS(KX_LightObject, updateShadow, "updateShadow(): Set the shadow to be updated next frame if the lamp uses a static shadow.\n") | ||||
| { | { | ||||
| KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | m_lightobj->m_requestShadowUpdate = true; | ||||
| return PyLong_FromLong(self->m_lightobj->m_layer); | Py_RETURN_NONE; | ||||
| } | |||||
| int KX_LightObject::pyattr_set_layer(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | |||||
| { | |||||
| KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | |||||
| int layer = PyLong_AsLong(value); | |||||
| if (layer == -1 && PyErr_Occurred()) { | |||||
| PyErr_Format(PyExc_TypeError, "expected an integer for attribute \"%s\"", attrdef->m_name); | |||||
| return PY_SET_ATTR_FAIL; | |||||
| } | |||||
| if (layer < 1) { | |||||
| PyErr_Format(PyExc_TypeError, "expected an integer greater than 1 for attribute \"%s\"", attrdef->m_name); | |||||
| return PY_SET_ATTR_FAIL; | |||||
| } | |||||
| else if (layer > MAX_LIGHT_LAYERS) { | |||||
| PyErr_Format(PyExc_TypeError, "expected an integer less than %i for attribute \"%s\"", MAX_LIGHT_LAYERS, attrdef->m_name); | |||||
| return PY_SET_ATTR_FAIL; | |||||
| } | |||||
| self->SetLayer(layer); | |||||
| return PY_SET_ATTR_SUCCESS; | |||||
| } | } | ||||
| PyObject *KX_LightObject::pyattr_get_energy(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | PyObject *KX_LightObject::pyattr_get_energy(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | ||||
| { | { | ||||
| KX_LightObject* self = static_cast<KX_LightObject*>(self_v); | KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | ||||
| return PyFloat_FromDouble(self->m_lightobj->m_energy); | return PyFloat_FromDouble(self->m_lightobj->m_energy); | ||||
| } | } | ||||
| int KX_LightObject::pyattr_set_energy(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | int KX_LightObject::pyattr_set_energy(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | ||||
| { | { | ||||
| KX_LightObject* self = static_cast<KX_LightObject*>(self_v); | KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | ||||
| if (PyFloat_Check(value)) { | if (PyFloat_Check(value)) { | ||||
| float val = PyFloat_AsDouble(value); | float val = PyFloat_AsDouble(value); | ||||
| Context not available. | |||||
| return PY_SET_ATTR_SUCCESS; | return PY_SET_ATTR_SUCCESS; | ||||
| } | } | ||||
| PyErr_Format(PyExc_TypeError, "expected float value for attribute \"%s\"", attrdef->m_name); | PyErr_Format(PyExc_TypeError, "expected float value for attribute \"%s\"", attrdef->m_name.c_str()); | ||||
| return PY_SET_ATTR_FAIL; | return PY_SET_ATTR_FAIL; | ||||
| } | } | ||||
| Context not available. | |||||
| PyObject *KX_LightObject::pyattr_get_distance(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | PyObject *KX_LightObject::pyattr_get_distance(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | ||||
| { | { | ||||
| KX_LightObject* self = static_cast<KX_LightObject*>(self_v); | KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | ||||
| return PyFloat_FromDouble(self->m_lightobj->m_distance); | return PyFloat_FromDouble(self->m_lightobj->m_distance); | ||||
| } | } | ||||
| int KX_LightObject::pyattr_set_distance(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | int KX_LightObject::pyattr_set_distance(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | ||||
| { | { | ||||
| KX_LightObject* self = static_cast<KX_LightObject*>(self_v); | KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | ||||
| if (PyFloat_Check(value)) { | if (PyFloat_Check(value)) { | ||||
| float val = PyFloat_AsDouble(value); | float val = PyFloat_AsDouble(value); | ||||
| Context not available. | |||||
| return PY_SET_ATTR_SUCCESS; | return PY_SET_ATTR_SUCCESS; | ||||
| } | } | ||||
| PyErr_Format(PyExc_TypeError, "expected float value for attribute \"%s\"", attrdef->m_name); | PyErr_Format(PyExc_TypeError, "expected float value for attribute \"%s\"", attrdef->m_name.c_str()); | ||||
| return PY_SET_ATTR_FAIL; | return PY_SET_ATTR_FAIL; | ||||
| } | } | ||||
| PyObject *KX_LightObject::pyattr_get_color(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | PyObject *KX_LightObject::pyattr_get_color(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | ||||
| { | { | ||||
| KX_LightObject* self = static_cast<KX_LightObject*>(self_v); | KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | ||||
| return Py_BuildValue("[fff]", self->m_lightobj->m_color[0], self->m_lightobj->m_color[1], self->m_lightobj->m_color[2]); | return Py_BuildValue("[fff]", self->m_lightobj->m_color[0], self->m_lightobj->m_color[1], self->m_lightobj->m_color[2]); | ||||
| } | } | ||||
| int KX_LightObject::pyattr_set_color(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | int KX_LightObject::pyattr_set_color(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | ||||
| { | { | ||||
| KX_LightObject* self = static_cast<KX_LightObject*>(self_v); | KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | ||||
| MT_Vector3 color; | MT_Vector3 color; | ||||
| if (PyVecTo(value, color)) | if (PyVecTo(value, color)) { | ||||
| { | color.getValue(self->m_lightobj->m_color); | ||||
| self->m_lightobj->m_color[0] = color[0]; | |||||
| self->m_lightobj->m_color[1] = color[1]; | |||||
| self->m_lightobj->m_color[2] = color[2]; | |||||
| return PY_SET_ATTR_SUCCESS; | return PY_SET_ATTR_SUCCESS; | ||||
| } | } | ||||
| return PY_SET_ATTR_FAIL; | return PY_SET_ATTR_FAIL; | ||||
| Context not available. | |||||
| PyObject *KX_LightObject::pyattr_get_lin_attenuation(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | PyObject *KX_LightObject::pyattr_get_lin_attenuation(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | ||||
| { | { | ||||
| KX_LightObject* self = static_cast<KX_LightObject*>(self_v); | KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | ||||
| return PyFloat_FromDouble(self->m_lightobj->m_att1); | return PyFloat_FromDouble(self->m_lightobj->m_att1); | ||||
| } | } | ||||
| int KX_LightObject::pyattr_set_lin_attenuation(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | int KX_LightObject::pyattr_set_lin_attenuation(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | ||||
| { | { | ||||
| KX_LightObject* self = static_cast<KX_LightObject*>(self_v); | KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | ||||
| if (PyFloat_Check(value)) { | if (PyFloat_Check(value)) { | ||||
| float val = PyFloat_AsDouble(value); | float val = PyFloat_AsDouble(value); | ||||
| Context not available. | |||||
| return PY_SET_ATTR_SUCCESS; | return PY_SET_ATTR_SUCCESS; | ||||
| } | } | ||||
| PyErr_Format(PyExc_TypeError, "expected float value for attribute \"%s\"", attrdef->m_name); | PyErr_Format(PyExc_TypeError, "expected float value for attribute \"%s\"", attrdef->m_name.c_str()); | ||||
| return PY_SET_ATTR_FAIL; | return PY_SET_ATTR_FAIL; | ||||
| } | } | ||||
| PyObject *KX_LightObject::pyattr_get_quad_attenuation(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | PyObject *KX_LightObject::pyattr_get_quad_attenuation(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | ||||
| { | { | ||||
| KX_LightObject* self = static_cast<KX_LightObject*>(self_v); | KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | ||||
| return PyFloat_FromDouble(self->m_lightobj->m_att2); | return PyFloat_FromDouble(self->m_lightobj->m_att2); | ||||
| } | } | ||||
| int KX_LightObject::pyattr_set_quad_attenuation(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | int KX_LightObject::pyattr_set_quad_attenuation(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | ||||
| { | { | ||||
| KX_LightObject* self = static_cast<KX_LightObject*>(self_v); | KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | ||||
| if (PyFloat_Check(value)) { | if (PyFloat_Check(value)) { | ||||
| float val = PyFloat_AsDouble(value); | float val = PyFloat_AsDouble(value); | ||||
| Context not available. | |||||
| return PY_SET_ATTR_SUCCESS; | return PY_SET_ATTR_SUCCESS; | ||||
| } | } | ||||
| PyErr_Format(PyExc_TypeError, "expected float value for attribute \"%s\"", attrdef->m_name); | PyErr_Format(PyExc_TypeError, "expected float value for attribute \"%s\"", attrdef->m_name.c_str()); | ||||
| return PY_SET_ATTR_FAIL; | return PY_SET_ATTR_FAIL; | ||||
| } | } | ||||
| PyObject *KX_LightObject::pyattr_get_spotsize(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | PyObject *KX_LightObject::pyattr_get_spotsize(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | ||||
| { | { | ||||
| KX_LightObject* self = static_cast<KX_LightObject*>(self_v); | KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | ||||
| return PyFloat_FromDouble(RAD2DEG(self->m_lightobj->m_spotsize)); | return PyFloat_FromDouble(RAD2DEG(self->m_lightobj->m_spotsize)); | ||||
| } | } | ||||
| int KX_LightObject::pyattr_set_spotsize(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | int KX_LightObject::pyattr_set_spotsize(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | ||||
| { | { | ||||
| KX_LightObject* self = static_cast<KX_LightObject*>(self_v); | KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | ||||
| if (PyFloat_Check(value)) { | if (PyFloat_Check(value)) { | ||||
| double val = PyFloat_AsDouble(value); | double val = PyFloat_AsDouble(value); | ||||
| Context not available. | |||||
| return PY_SET_ATTR_SUCCESS; | return PY_SET_ATTR_SUCCESS; | ||||
| } | } | ||||
| PyErr_Format(PyExc_TypeError, "expected float value for attribute \"%s\"", attrdef->m_name); | PyErr_Format(PyExc_TypeError, "expected float value for attribute \"%s\"", attrdef->m_name.c_str()); | ||||
| return PY_SET_ATTR_FAIL; | return PY_SET_ATTR_FAIL; | ||||
| } | } | ||||
| PyObject *KX_LightObject::pyattr_get_spotblend(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | PyObject *KX_LightObject::pyattr_get_spotblend(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | ||||
| { | { | ||||
| KX_LightObject* self = static_cast<KX_LightObject*>(self_v); | KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | ||||
| return PyFloat_FromDouble(self->m_lightobj->m_spotblend); | return PyFloat_FromDouble(self->m_lightobj->m_spotblend); | ||||
| } | } | ||||
| int KX_LightObject::pyattr_set_spotblend(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | int KX_LightObject::pyattr_set_spotblend(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | ||||
| { | { | ||||
| KX_LightObject* self = static_cast<KX_LightObject*>(self_v); | KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | ||||
| if (PyFloat_Check(value)) { | if (PyFloat_Check(value)) { | ||||
| float val = (float)PyFloat_AsDouble(value); | float val = (float)PyFloat_AsDouble(value); | ||||
| Context not available. | |||||
| return PY_SET_ATTR_SUCCESS; | return PY_SET_ATTR_SUCCESS; | ||||
| } | } | ||||
| PyErr_Format(PyExc_TypeError, "expected float value for attribute \"%s\"", attrdef->m_name); | PyErr_Format(PyExc_TypeError, "expected float value for attribute \"%s\"", attrdef->m_name.c_str()); | ||||
| return PY_SET_ATTR_FAIL; | return PY_SET_ATTR_FAIL; | ||||
| } | } | ||||
| Context not available. | |||||
| { | { | ||||
| PyObject *retvalue; | PyObject *retvalue; | ||||
| const char* type = attrdef->m_name; | const std::string& type = attrdef->m_name; | ||||
| if (!strcmp(type, "SPOT")) { | if (type == "SPOT") { | ||||
| retvalue = PyLong_FromLong(RAS_ILightObject::LIGHT_SPOT); | retvalue = PyLong_FromLong(RAS_ILightObject::LIGHT_SPOT); | ||||
| } else if (!strcmp(type, "SUN")) { | } | ||||
| else if (type == "SUN") { | |||||
| retvalue = PyLong_FromLong(RAS_ILightObject::LIGHT_SUN); | retvalue = PyLong_FromLong(RAS_ILightObject::LIGHT_SUN); | ||||
| } else if (!strcmp(type, "NORMAL")) { | } | ||||
| else if (type == "NORMAL") { | |||||
| retvalue = PyLong_FromLong(RAS_ILightObject::LIGHT_NORMAL); | retvalue = PyLong_FromLong(RAS_ILightObject::LIGHT_NORMAL); | ||||
| } | } | ||||
| else if (type == "HEMI") { | |||||
| retvalue = PyLong_FromLong(RAS_ILightObject::LIGHT_HEMI); | |||||
| } | |||||
| else { | else { | ||||
| /* should never happen */ | /* should never happen */ | ||||
| PyErr_SetString(PyExc_TypeError, "light.type: internal error, invalid light type"); | PyErr_SetString(PyExc_TypeError, "light.type: internal error, invalid light type"); | ||||
| Context not available. | |||||
| return retvalue; | return retvalue; | ||||
| } | } | ||||
| PyObject *KX_LightObject::pyattr_get_type(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef) | PyObject *KX_LightObject::pyattr_get_type(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | ||||
| { | { | ||||
| KX_LightObject* self = static_cast<KX_LightObject*>(self_v); | KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | ||||
| return PyLong_FromLong(self->m_lightobj->m_type); | return PyLong_FromLong(self->m_lightobj->m_type); | ||||
| } | } | ||||
| int KX_LightObject::pyattr_set_type(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | int KX_LightObject::pyattr_set_type(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | ||||
| { | { | ||||
| KX_LightObject* self = static_cast<KX_LightObject*>(self_v); | KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | ||||
| const int val = PyLong_AsLong(value); | const int val = PyLong_AsLong(value); | ||||
| if ((val==-1 && PyErr_Occurred()) || val<0 || val>2) { | if ((val == -1 && PyErr_Occurred()) || val < 0 || val > 3) { | ||||
| PyErr_SetString(PyExc_ValueError, "light.type= val: KX_LightObject, expected an int between 0 and 2"); | PyErr_SetString(PyExc_ValueError, "light.type= val: KX_LightObject, expected an int between 0 and 2"); | ||||
| return PY_SET_ATTR_FAIL; | return PY_SET_ATTR_FAIL; | ||||
| } | } | ||||
| switch (val) { | switch (val) { | ||||
| case 0: | case 0: | ||||
| self->m_lightobj->m_type = self->m_lightobj->LIGHT_SPOT; | self->m_lightobj->m_type = self->m_lightobj->LIGHT_SPOT; | ||||
| Context not available. | |||||
| case 2: | case 2: | ||||
| self->m_lightobj->m_type = self->m_lightobj->LIGHT_NORMAL; | self->m_lightobj->m_type = self->m_lightobj->LIGHT_NORMAL; | ||||
| break; | break; | ||||
| case 3: | |||||
| self->m_lightobj->m_type = self->m_lightobj->LIGHT_HEMI; | |||||
| break; | |||||
| } | |||||
| return PY_SET_ATTR_SUCCESS; | |||||
| } | |||||
| PyObject *KX_LightObject::pyattr_get_static_shadow(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | |||||
| { | |||||
| KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | |||||
| return PyBool_FromLong(self->m_lightobj->m_staticShadow); | |||||
| } | |||||
| int KX_LightObject::pyattr_set_static_shadow(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) | |||||
| { | |||||
| KX_LightObject *self = static_cast<KX_LightObject *>(self_v); | |||||
| int param = PyObject_IsTrue(value); | |||||
| if (param == -1) { | |||||
| PyErr_SetString(PyExc_AttributeError, "light.staticShadow = val: KX_LightObject, expected True or False"); | |||||
| return PY_SET_ATTR_FAIL; | |||||
| } | } | ||||
| self->m_lightobj->m_staticShadow = param; | |||||
| return PY_SET_ATTR_SUCCESS; | return PY_SET_ATTR_SUCCESS; | ||||
| } | } | ||||
| #endif // WITH_PYTHON | #endif // WITH_PYTHON | ||||
| Context not available. | |||||