mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 09:52:27 -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(PyObject *__reduce__(PyObject *self) const);
|
||||||
EXTENSION(void __setstate__(PyObject *self, vector_uchar data));
|
EXTENSION(void __setstate__(PyObject *self, vector_uchar data));
|
||||||
|
|
||||||
void write_datagram(Datagram &destination) const;
|
virtual void write_datagram(Datagram &destination) const;
|
||||||
void read_datagram(DatagramIterator &source);
|
virtual void read_datagram(DatagramIterator &source);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void throw_event_for(const vector_string &patterns, CollisionEntry *entry);
|
void throw_event_for(const vector_string &patterns, CollisionEntry *entry);
|
||||||
|
@ -23,22 +23,8 @@
|
|||||||
*/
|
*/
|
||||||
PyObject *Extension<CollisionHandlerEvent>::
|
PyObject *Extension<CollisionHandlerEvent>::
|
||||||
__reduce__(PyObject *self) const {
|
__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;
|
Datagram dg;
|
||||||
PyObject *destination = DTool_CreatePyInstance(&dg, Dtool_Datagram, false, false);
|
_this->write_datagram(dg);
|
||||||
|
|
||||||
PyObject *retval = PyObject_CallMethodOneArg(self, method_name, destination);
|
|
||||||
Py_DECREF(method_name);
|
|
||||||
Py_DECREF(destination);
|
|
||||||
if (retval == nullptr) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
Py_DECREF(retval);
|
|
||||||
|
|
||||||
const char *data = (const char *)dg.get_data();
|
const char *data = (const char *)dg.get_data();
|
||||||
Py_ssize_t size = dg.get_length();
|
Py_ssize_t size = dg.get_length();
|
||||||
@ -51,20 +37,9 @@ __reduce__(PyObject *self) const {
|
|||||||
*/
|
*/
|
||||||
void Extension<CollisionHandlerEvent>::
|
void Extension<CollisionHandlerEvent>::
|
||||||
__setstate__(PyObject *self, vector_uchar data) {
|
__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));
|
Datagram dg(std::move(data));
|
||||||
DatagramIterator scan(dg);
|
DatagramIterator scan(dg);
|
||||||
PyObject *source = DTool_CreatePyInstance(&scan, Dtool_DatagramIterator, false, false);
|
_this->read_datagram(scan);
|
||||||
|
|
||||||
PyObject *retval = PyObject_CallMethodOneArg(self, method_name, source);
|
|
||||||
Py_DECREF(method_name);
|
|
||||||
Py_DECREF(source);
|
|
||||||
Py_XDECREF(retval);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -47,20 +47,8 @@ __reduce__(PyObject *self) const {
|
|||||||
DTool_CreatePyInstance((void *)target, Dtool_NodePath, false, true));
|
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;
|
Datagram dg;
|
||||||
PyObject *destination = DTool_CreatePyInstance(&dg, Dtool_Datagram, false, false);
|
_this->write_datagram(dg);
|
||||||
|
|
||||||
PyObject *retval = PyObject_CallMethodOneArg(self, method_name, destination);
|
|
||||||
Py_DECREF(method_name);
|
|
||||||
Py_DECREF(destination);
|
|
||||||
if (retval == nullptr) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
Py_DECREF(retval);
|
|
||||||
|
|
||||||
const char *data = (const char *)dg.get_data();
|
const char *data = (const char *)dg.get_data();
|
||||||
Py_ssize_t size = dg.get_length();
|
Py_ssize_t size = dg.get_length();
|
||||||
@ -73,21 +61,10 @@ __reduce__(PyObject *self) const {
|
|||||||
*/
|
*/
|
||||||
void Extension<CollisionHandlerPhysical>::
|
void Extension<CollisionHandlerPhysical>::
|
||||||
__setstate__(PyObject *self, vector_uchar data, PyObject *nodepaths) {
|
__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));
|
Datagram dg(std::move(data));
|
||||||
DatagramIterator scan(dg);
|
DatagramIterator scan(dg);
|
||||||
PyObject *source = DTool_CreatePyInstance(&scan, Dtool_DatagramIterator, false, false);
|
_this->read_datagram(scan);
|
||||||
|
|
||||||
PyObject *retval = PyObject_CallMethodOneArg(self, method_name, source);
|
|
||||||
Py_DECREF(method_name);
|
|
||||||
Py_DECREF(source);
|
|
||||||
Py_XDECREF(retval);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *center = PyTuple_GET_ITEM(nodepaths, 0);
|
PyObject *center = PyTuple_GET_ITEM(nodepaths, 0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user