diff options
author | Kester Maddock <Christopher.Maddock.1@uni.massey.ac.nz> | 2004-11-22 13:19:19 +0300 |
---|---|---|
committer | Kester Maddock <Christopher.Maddock.1@uni.massey.ac.nz> | 2004-11-22 13:19:19 +0300 |
commit | 46fbe6b01e095ddb66f3bf6e0516569cfdca8f74 (patch) | |
tree | e7a7754188ef9b290eca479df6ac59b00ea7478b /source/gameengine/Expressions | |
parent | cf91617d7829647629c8ce04b9f047dfbdf3d910 (diff) |
Fix for bugs: 1788 (forces) and 1799 (python delattr on game objects)
Use Polytope collision for faster mesh intersection tests, so SOLID can actually use that qhull lib now.
Diffstat (limited to 'source/gameengine/Expressions')
-rw-r--r-- | source/gameengine/Expressions/PyObjectPlus.cpp | 5 | ||||
-rw-r--r-- | source/gameengine/Expressions/PyObjectPlus.h | 92 | ||||
-rw-r--r-- | source/gameengine/Expressions/Value.cpp | 13 | ||||
-rw-r--r-- | source/gameengine/Expressions/Value.h | 1 |
4 files changed, 64 insertions, 47 deletions
diff --git a/source/gameengine/Expressions/PyObjectPlus.cpp b/source/gameengine/Expressions/PyObjectPlus.cpp index 88a38b35ad4..2b331d7f728 100644 --- a/source/gameengine/Expressions/PyObjectPlus.cpp +++ b/source/gameengine/Expressions/PyObjectPlus.cpp @@ -111,6 +111,11 @@ PyObject *PyObjectPlus::_getattr(const STR_String& attr) return Py_FindMethod(Methods, this, const_cast<char *>(attr.ReadPtr())); } +int PyObjectPlus::_delattr(const STR_String& attr) +{ + return 1; +} + int PyObjectPlus::_setattr(const STR_String& attr, PyObject *value) { //return PyObject::_setattr(attr,value); diff --git a/source/gameengine/Expressions/PyObjectPlus.h b/source/gameengine/Expressions/PyObjectPlus.h index 05c806ec4ff..7e6b3f29bab 100644 --- a/source/gameengine/Expressions/PyObjectPlus.h +++ b/source/gameengine/Expressions/PyObjectPlus.h @@ -119,47 +119,57 @@ PyObject* class_name::Py##method_name(PyObject*, PyObject* args, PyObject*) ------------------------------*/ typedef PyTypeObject * PyParentObject; // Define the PyParent Object -class PyObjectPlus : public PyObject { // The PyObjectPlus abstract class - - Py_Header; // Always start with Py_Header - - public: - PyObjectPlus(PyTypeObject *T); - - virtual ~PyObjectPlus() {}; // destructor - static void PyDestructor(PyObject *P) // python wrapper - { - delete ((PyObjectPlus *) P); - }; - - //void INCREF(void) { -// Py_INCREF(this); -// }; // incref method - //void DECREF(void) { -// Py_DECREF(this); -// }; // decref method - - virtual PyObject *_getattr(const STR_String& attr); // _getattr method - static PyObject *__getattr(PyObject * PyObj, char *attr) // This should be the entry in Type. - { return ((PyObjectPlus*) PyObj)->_getattr(STR_String(attr)); }; - - virtual int _setattr(const STR_String& attr, PyObject *value); // _setattr method - static int __setattr(PyObject *PyObj, // This should be the entry in Type. - char *attr, - PyObject *value) - { return ((PyObjectPlus*) PyObj)->_setattr(STR_String(attr), value); }; - - virtual PyObject *_repr(void); // _repr method - static PyObject *__repr(PyObject *PyObj) // This should be the entry in Type. - { return ((PyObjectPlus*) PyObj)->_repr(); }; - - - // isA methods - bool isA(PyTypeObject *T); - bool isA(const char *mytypename); - PyObject *Py_isA(PyObject *args); - static PyObject *sPy_isA(PyObject *self, PyObject *args, PyObject *kwd) - {return ((PyObjectPlus*)self)->Py_isA(args);}; +class PyObjectPlus : public PyObject +{ // The PyObjectPlus abstract class + Py_Header; // Always start with Py_Header + +public: + PyObjectPlus(PyTypeObject *T); + + virtual ~PyObjectPlus() {}; // destructor + static void PyDestructor(PyObject *P) // python wrapper + { + delete ((PyObjectPlus *) P); + }; + + //void INCREF(void) { + // Py_INCREF(this); + // }; // incref method + //void DECREF(void) { + // Py_DECREF(this); + // }; // decref method + + virtual PyObject *_getattr(const STR_String& attr); // _getattr method + static PyObject *__getattr(PyObject * PyObj, char *attr) // This should be the entry in Type. + { + return ((PyObjectPlus*) PyObj)->_getattr(STR_String(attr)); + } + + virtual int _delattr(const STR_String& attr); + virtual int _setattr(const STR_String& attr, PyObject *value); // _setattr method + static int __setattr(PyObject *PyObj, // This should be the entry in Type. + char *attr, + PyObject *value) + { + if (!value) + return ((PyObjectPlus*) PyObj)->_delattr(attr); + return ((PyObjectPlus*) PyObj)->_setattr(STR_String(attr), value); + } + + virtual PyObject *_repr(void); // _repr method + static PyObject *__repr(PyObject *PyObj) // This should be the entry in Type. + { + return ((PyObjectPlus*) PyObj)->_repr(); + } + + // isA methods + bool isA(PyTypeObject *T); + bool isA(const char *mytypename); + PyObject *Py_isA(PyObject *args); + static PyObject *sPy_isA(PyObject *self, PyObject *args, PyObject *kwd) + { + return ((PyObjectPlus*)self)->Py_isA(args); + } }; #endif // _adr_py_lib_h_ diff --git a/source/gameengine/Expressions/Value.cpp b/source/gameengine/Expressions/Value.cpp index 07505829737..9233a10b784 100644 --- a/source/gameengine/Expressions/Value.cpp +++ b/source/gameengine/Expressions/Value.cpp @@ -698,14 +698,15 @@ CValue* CValue::ConvertPythonToValue(PyObject* pyobj) return vallie; } -int CValue::_setattr(const STR_String& attr,PyObject* pyobj) + +int CValue::_delattr(const STR_String& attr) { - - if (!pyobj) { // member deletion - RemoveProperty(attr); - return 0; - } + RemoveProperty(attr); + return 0; +} +int CValue::_setattr(const STR_String& attr,PyObject* pyobj) +{ CValue* vallie = ConvertPythonToValue(pyobj); if (vallie) { diff --git a/source/gameengine/Expressions/Value.h b/source/gameengine/Expressions/Value.h index d30e8a26d97..d49c8debfdc 100644 --- a/source/gameengine/Expressions/Value.h +++ b/source/gameengine/Expressions/Value.h @@ -249,6 +249,7 @@ public: virtual CValue* ConvertPythonToValue(PyObject* pyobj); + virtual int _delattr(const STR_String& attr); virtual int _setattr(const STR_String& attr,PyObject* value); KX_PYMETHOD(CValue,GetName); |