mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 08:44:19 -04:00
output, write, and parent_id
This commit is contained in:
parent
14d8475bfa
commit
fe7f655b33
@ -187,6 +187,13 @@ get_num_fields() const {
|
||||
////////////////////////////////////////////////////////////////////
|
||||
DCField *DCClass::
|
||||
get_field(int n) const {
|
||||
#ifndef NDEBUG //[
|
||||
if (n < 0 || n >= (int)_fields.size()) {
|
||||
write(cerr, 0);
|
||||
cerr<<"n:"<<n<<" _fields.size():"<<(int)_fields.size()<<endl;
|
||||
// __asm { int 3 }
|
||||
}
|
||||
#endif //]
|
||||
nassertr_always(n >= 0 && n < (int)_fields.size(), NULL);
|
||||
return _fields[n];
|
||||
}
|
||||
@ -260,6 +267,44 @@ get_inherited_field(int n) const {
|
||||
return get_field(n);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function : output
|
||||
// Access : Published
|
||||
// Description : Write a string representation of this instance to
|
||||
// <out>.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void DCClass::
|
||||
output(ostream &out) const {
|
||||
#ifndef NDEBUG //[
|
||||
out<<""<<"DCClass";
|
||||
#endif //] NDEBUG
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function : write
|
||||
// Access : Published
|
||||
// Description : Write a string representation of this instance to
|
||||
// <out>.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void DCClass::
|
||||
write(ostream &out, unsigned int indent) const {
|
||||
#ifndef NDEBUG //[
|
||||
out.width(indent); out<<""<<"DCClass:\n";
|
||||
|
||||
out.width(indent+2); out<<""<<"_name "<<_name<<"\n";
|
||||
out.width(indent+2); out<<""<<"_is_struct "<<_is_struct<<"\n";
|
||||
out.width(indent+2); out<<""<<"_bogus_class "<<_bogus_class<<"\n";
|
||||
out.width(indent+2); out<<""<<"_number "<<_number<<"\n";
|
||||
|
||||
//typedef pvector<DCClass *> Parents;
|
||||
//Parents _parents;
|
||||
//typedef pvector<DCField *> Fields;
|
||||
//Fields _fields;
|
||||
//typedef pmap<string, DCField *> FieldsByName;
|
||||
//FieldsByName _fields_by_name;
|
||||
#endif //] NDEBUG
|
||||
}
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: DCClass::has_class_def
|
||||
@ -353,7 +398,7 @@ receive_update_broadcast_required(PyObject *distobj, DatagramIterator &di) const
|
||||
packer.set_unpack_data(di.get_remaining_bytes());
|
||||
|
||||
int num_fields = get_num_inherited_fields();
|
||||
for (int i = 0; i < num_fields && !PyErr_Occurred(); i++) {
|
||||
for (int i = 0; i < num_fields && !PyErr_Occurred(); ++i) {
|
||||
DCField *field = get_inherited_field(i);
|
||||
DCAtomicField *atom = field->as_atomic_field();
|
||||
if (atom != (DCAtomicField *)NULL &&
|
||||
@ -388,7 +433,7 @@ receive_update_all_required(PyObject *distobj, DatagramIterator &di) const {
|
||||
packer.set_unpack_data(di.get_remaining_bytes());
|
||||
|
||||
int num_fields = get_num_inherited_fields();
|
||||
for (int i = 0; i < num_fields && !PyErr_Occurred(); i++) {
|
||||
for (int i = 0; i < num_fields && !PyErr_Occurred(); ++i) {
|
||||
DCField *field = get_inherited_field(i);
|
||||
DCAtomicField *atom = field->as_atomic_field();
|
||||
if (atom != (DCAtomicField *)NULL && atom->is_required()) {
|
||||
@ -417,7 +462,7 @@ receive_update_other(PyObject *distobj, DatagramIterator &di) const {
|
||||
PStatTimer timer(((DCClass *)this)->_class_update_pcollector);
|
||||
#endif
|
||||
int num_fields = di.get_uint16();
|
||||
for (int i = 0; i < num_fields && !PyErr_Occurred(); i++) {
|
||||
for (int i = 0; i < num_fields && !PyErr_Occurred(); ++i) {
|
||||
receive_update(distobj, di);
|
||||
}
|
||||
}
|
||||
@ -704,12 +749,11 @@ ai_format_update(const string &field_name, int do_id,
|
||||
////////////////////////////////////////////////////////////////////
|
||||
Datagram DCClass::
|
||||
ai_format_generate(PyObject *distobj, int do_id,
|
||||
int zone_id, CHANNEL_TYPE district_channel_id, CHANNEL_TYPE from_channel_id,
|
||||
int parent_id, int zone_id,
|
||||
CHANNEL_TYPE district_channel_id, CHANNEL_TYPE from_channel_id,
|
||||
PyObject *optional_fields) const {
|
||||
|
||||
DCPacker packer;
|
||||
|
||||
|
||||
packer.RAW_PACK_CHANNEL(district_channel_id);
|
||||
packer.RAW_PACK_CHANNEL(from_channel_id);
|
||||
packer.raw_pack_uint8('A');
|
||||
@ -722,13 +766,19 @@ ai_format_generate(PyObject *distobj, int do_id,
|
||||
packer.raw_pack_uint16(STATESERVER_OBJECT_GENERATE_WITH_REQUIRED);
|
||||
}
|
||||
|
||||
// Parent is a bit overloaded; this parent is not about inheritance,
|
||||
// this one is about the visibility container parent, i.e. the zone
|
||||
// parent:
|
||||
if (parent_id) { // if wantOtpServer:
|
||||
packer.raw_pack_uint32(parent_id);
|
||||
}
|
||||
packer.raw_pack_uint32(zone_id);
|
||||
packer.raw_pack_uint16(_number);
|
||||
packer.raw_pack_uint32(do_id);
|
||||
|
||||
// Specify all of the required fields.
|
||||
int num_fields = get_num_inherited_fields();
|
||||
for (int i = 0; i < num_fields; i++) {
|
||||
for (int i = 0; i < num_fields; ++i) {
|
||||
DCField *field = get_inherited_field(i);
|
||||
if (field->is_required() && field->as_molecular_field() == NULL) {
|
||||
packer.begin_pack(field);
|
||||
@ -744,7 +794,7 @@ ai_format_generate(PyObject *distobj, int do_id,
|
||||
int num_optional_fields = PySequence_Size(optional_fields);
|
||||
packer.raw_pack_uint16(num_optional_fields);
|
||||
|
||||
for (int i = 0; i < num_optional_fields; i++) {
|
||||
for (int i = 0; i < num_optional_fields; ++i) {
|
||||
PyObject *py_field_name = PySequence_GetItem(optional_fields, i);
|
||||
string field_name = PyString_AsString(py_field_name);
|
||||
Py_XDECREF(py_field_name);
|
||||
|
@ -66,6 +66,9 @@ PUBLISHED:
|
||||
|
||||
INLINE void start_generate();
|
||||
INLINE void stop_generate();
|
||||
|
||||
virtual void output(ostream &out) const;
|
||||
virtual void write(ostream &out, unsigned int indent=0) const;
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
bool has_class_def() const;
|
||||
@ -92,7 +95,7 @@ PUBLISHED:
|
||||
int do_id, PyObject *args) const;
|
||||
Datagram ai_format_update(const string &field_name, int do_id,
|
||||
CHANNEL_TYPE to_id, CHANNEL_TYPE from_id, PyObject *args) const;
|
||||
Datagram ai_format_generate(PyObject *distobj, int do_id, int zone_id,
|
||||
Datagram ai_format_generate(PyObject *distobj, int do_id, int parent_id, int zone_id,
|
||||
CHANNEL_TYPE district_channel_id, CHANNEL_TYPE from_channel_id,
|
||||
PyObject *optional_fields) const;
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user