mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-01 01:07:51 -04:00
collide: Use virtual read_datagram/write_datagram on handlers
This commit is contained in:
parent
e099d9e787
commit
f003e3434e
@ -72,8 +72,8 @@ PUBLISHED:
|
||||
EXTENSION(PyObject *__reduce__(PyObject *self) const);
|
||||
EXTENSION(void __setstate__(PyObject *self, vector_uchar data));
|
||||
|
||||
void write_datagram(Datagram &destination) const;
|
||||
void read_datagram(DatagramIterator &source);
|
||||
virtual void write_datagram(Datagram &destination) const;
|
||||
virtual void read_datagram(DatagramIterator &source);
|
||||
|
||||
protected:
|
||||
void throw_event_for(const vector_string &patterns, CollisionEntry *entry);
|
||||
|
@ -23,22 +23,8 @@
|
||||
*/
|
||||
PyObject *Extension<CollisionHandlerEvent>::
|
||||
__reduce__(PyObject *self) const {
|
||||
extern struct Dtool_PyTypedObject Dtool_Datagram;
|
||||
|
||||
// Call the write_datagram method via Python, since it's not a virtual method
|
||||
// on the C++ end.
|
||||
PyObject *method_name = PyUnicode_FromString("write_datagram");
|
||||
|
||||
Datagram dg;
|
||||
PyObject *destination = DTool_CreatePyInstance(&dg, Dtool_Datagram, false, false);
|
||||
|
||||
PyObject *retval = PyObject_CallMethodOneArg(self, method_name, destination);
|
||||
Py_DECREF(method_name);
|
||||
Py_DECREF(destination);
|
||||
if (retval == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
Py_DECREF(retval);
|
||||
_this->write_datagram(dg);
|
||||
|
||||
const char *data = (const char *)dg.get_data();
|
||||
Py_ssize_t size = dg.get_length();
|
||||
@ -51,20 +37,9 @@ __reduce__(PyObject *self) const {
|
||||
*/
|
||||
void Extension<CollisionHandlerEvent>::
|
||||
__setstate__(PyObject *self, vector_uchar data) {
|
||||
extern struct Dtool_PyTypedObject Dtool_DatagramIterator;
|
||||
|
||||
// Call the read_datagram method via Python, since it's not a virtual method
|
||||
// on the C++ end.
|
||||
PyObject *method_name = PyUnicode_FromString("read_datagram");
|
||||
|
||||
Datagram dg(std::move(data));
|
||||
DatagramIterator scan(dg);
|
||||
PyObject *source = DTool_CreatePyInstance(&scan, Dtool_DatagramIterator, false, false);
|
||||
|
||||
PyObject *retval = PyObject_CallMethodOneArg(self, method_name, source);
|
||||
Py_DECREF(method_name);
|
||||
Py_DECREF(source);
|
||||
Py_XDECREF(retval);
|
||||
_this->read_datagram(scan);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -47,20 +47,8 @@ __reduce__(PyObject *self) const {
|
||||
DTool_CreatePyInstance((void *)target, Dtool_NodePath, false, true));
|
||||
}
|
||||
|
||||
// Call the write_datagram method via Python, since it's not a virtual method
|
||||
// on the C++ end.
|
||||
PyObject *method_name = PyUnicode_FromString("write_datagram");
|
||||
|
||||
Datagram dg;
|
||||
PyObject *destination = DTool_CreatePyInstance(&dg, Dtool_Datagram, false, false);
|
||||
|
||||
PyObject *retval = PyObject_CallMethodOneArg(self, method_name, destination);
|
||||
Py_DECREF(method_name);
|
||||
Py_DECREF(destination);
|
||||
if (retval == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
Py_DECREF(retval);
|
||||
_this->write_datagram(dg);
|
||||
|
||||
const char *data = (const char *)dg.get_data();
|
||||
Py_ssize_t size = dg.get_length();
|
||||
@ -73,21 +61,10 @@ __reduce__(PyObject *self) const {
|
||||
*/
|
||||
void Extension<CollisionHandlerPhysical>::
|
||||
__setstate__(PyObject *self, vector_uchar data, PyObject *nodepaths) {
|
||||
extern struct Dtool_PyTypedObject Dtool_DatagramIterator;
|
||||
|
||||
// Call the read_datagram method via Python, since it's not a virtual method
|
||||
// on the C++ end.
|
||||
PyObject *method_name = PyUnicode_FromString("read_datagram");
|
||||
|
||||
{
|
||||
Datagram dg(std::move(data));
|
||||
DatagramIterator scan(dg);
|
||||
PyObject *source = DTool_CreatePyInstance(&scan, Dtool_DatagramIterator, false, false);
|
||||
|
||||
PyObject *retval = PyObject_CallMethodOneArg(self, method_name, source);
|
||||
Py_DECREF(method_name);
|
||||
Py_DECREF(source);
|
||||
Py_XDECREF(retval);
|
||||
_this->read_datagram(scan);
|
||||
}
|
||||
|
||||
PyObject *center = PyTuple_GET_ITEM(nodepaths, 0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user