fix bam reader

This commit is contained in:
David Rose 2008-12-19 00:03:46 +00:00
parent 71e44de612
commit 99b0236c1c
2 changed files with 18 additions and 6 deletions

View File

@ -236,7 +236,11 @@ void CharacterJointEffect::
write_datagram(BamWriter *manager, Datagram &dg) {
RenderEffect::write_datagram(manager, dg);
manager->write_pointer(dg, _character);
if (_character.is_valid_pointer()) {
manager->write_pointer(dg, _character);
} else {
manager->write_pointer(dg, NULL);
}
}
////////////////////////////////////////////////////////////////////

View File

@ -801,13 +801,21 @@ complete_pointers(TypedWritable **p_list, BamReader *manager) {
int pi = TypedWritable::complete_pointers(p_list, manager);
// Get the effect pointers.
Effects::iterator ai;
for (ai = _effects.begin(); ai != _effects.end(); ++ai) {
Effect &effect = (*ai);
size_t i = 0;
while (i < _effects.size()) {
Effect &effect = _effects[i];
effect._effect = DCAST(RenderEffect, p_list[pi++]);
nassertr(effect._effect != (RenderEffect *)NULL, pi);
effect._type = effect._effect->get_type();
if (effect._effect == (RenderEffect *)NULL) {
// Remove this bogus RenderEffect pointer (it must have been
// from an unwritable class).
_effects.erase(_effects.begin() + i);
} else {
// Keep this good pointer, and increment.
effect._type = effect._effect->get_type();
++i;
}
}
// Now make sure the array is properly sorted. (It won't