diff --git a/direct/src/dcparser/dcClass.cxx b/direct/src/dcparser/dcClass.cxx index 513331a6ae..9768957e79 100644 --- a/direct/src/dcparser/dcClass.cxx +++ b/direct/src/dcparser/dcClass.cxx @@ -915,6 +915,31 @@ ai_format_update(const string &field_name, DOID_TYPE do_id, } #endif // HAVE_PYTHON +#ifdef HAVE_PYTHON +//////////////////////////////////////////////////////////////////// +// Function: DCClass::ai_format_update_msg_type +// Access: Published +// Description: Generates a datagram containing the message necessary +// to send an update, using the indicated msg type +// for the indicated distributed +// object from the AI. +//////////////////////////////////////////////////////////////////// +Datagram DCClass:: +ai_format_update_msg_type(const string &field_name, DOID_TYPE do_id, + CHANNEL_TYPE to_id, CHANNEL_TYPE from_id, int msg_type, PyObject *args) const { + DCField *field = get_field_by_name(field_name); + if (field == (DCField *)NULL) { + ostringstream strm; + strm << "No field named " << field_name << " in class " << get_name() + << "\n"; + nassert_raise(strm.str()); + return Datagram(); + } + + return field->ai_format_update_msg_type(do_id, to_id, from_id, msg_type, args); +} +#endif // HAVE_PYTHON + #ifdef HAVE_PYTHON //////////////////////////////////////////////////////////////////// // Function: DCClass::client_format_generate diff --git a/direct/src/dcparser/dcClass.h b/direct/src/dcparser/dcClass.h index c1b7142c8d..f282eb0430 100644 --- a/direct/src/dcparser/dcClass.h +++ b/direct/src/dcparser/dcClass.h @@ -112,6 +112,8 @@ PUBLISHED: DOID_TYPE do_id, PyObject *args) const; Datagram ai_format_update(const string &field_name, DOID_TYPE do_id, CHANNEL_TYPE to_id, CHANNEL_TYPE from_id, PyObject *args) const; + Datagram ai_format_update_msg_type(const string &field_name, DOID_TYPE do_id, + CHANNEL_TYPE to_id, CHANNEL_TYPE from_id, int msg_type, PyObject *args) const; Datagram ai_format_generate(PyObject *distobj, DOID_TYPE do_id, ZONEID_TYPE parent_id, ZONEID_TYPE zone_id, CHANNEL_TYPE district_channel_id, CHANNEL_TYPE from_channel_id, PyObject *optional_fields) const; diff --git a/direct/src/dcparser/dcField.cxx b/direct/src/dcparser/dcField.cxx index 37bc0f0a96..3a55c866cc 100644 --- a/direct/src/dcparser/dcField.cxx +++ b/direct/src/dcparser/dcField.cxx @@ -480,6 +480,36 @@ ai_format_update(DOID_TYPE do_id, CHANNEL_TYPE to_id, CHANNEL_TYPE from_id, PyOb } #endif // HAVE_PYTHON +#ifdef HAVE_PYTHON +//////////////////////////////////////////////////////////////////// +// Function: DCField::ai_format_update_msg_type +// Access: Published +// Description: Generates a datagram containing the message necessary +// to send an update, with the msg type, +// for the indicated distributed +// object from the AI. +//////////////////////////////////////////////////////////////////// +Datagram DCField:: +ai_format_update_msg_type(DOID_TYPE do_id, CHANNEL_TYPE to_id, CHANNEL_TYPE from_id, int msg_type, PyObject *args) const { + DCPacker packer; + + packer.raw_pack_uint8(1); + packer.RAW_PACK_CHANNEL(to_id); + packer.RAW_PACK_CHANNEL(from_id); + packer.raw_pack_uint16(msg_type); + packer.raw_pack_uint32(do_id); + packer.raw_pack_uint16(_number); + + packer.begin_pack(this); + pack_args(packer, args); + if (!packer.end_pack()) { + return Datagram(); + } + + return Datagram(packer.get_data(), packer.get_length()); +} +#endif // HAVE_PYTHON + //////////////////////////////////////////////////////////////////// // Function: DCField::generate_hash diff --git a/direct/src/dcparser/dcField.h b/direct/src/dcparser/dcField.h index 217973b393..ff6d3b2d00 100644 --- a/direct/src/dcparser/dcField.h +++ b/direct/src/dcparser/dcField.h @@ -88,6 +88,8 @@ PUBLISHED: Datagram client_format_update(DOID_TYPE do_id, PyObject *args) const; Datagram ai_format_update(DOID_TYPE do_id, CHANNEL_TYPE to_id, CHANNEL_TYPE from_id, PyObject *args) const; + Datagram ai_format_update_msg_type(DOID_TYPE do_id, CHANNEL_TYPE to_id, CHANNEL_TYPE from_id, + int msg_type, PyObject *args) const; #endif public: