[Add] Use new body death code with pre-hyperspace clearout.
This commit is contained in:
parent
6d568a0ecf
commit
6404418ce1
@ -28,16 +28,17 @@ void Space::Init(void) {
|
||||
void Space::Clear(void) {
|
||||
for(std::list<Body*>::iterator i = bodies.begin(); i != bodies.end(); ++i) {
|
||||
(*i)->SetFrame(NULL);
|
||||
if((*i) != (Body*)L3D::player) delete *i;
|
||||
if((*i) != (Body*)L3D::player) {
|
||||
KillBody(*i);
|
||||
}
|
||||
}
|
||||
bodies.clear();
|
||||
/* Player now removed also, but not freed. */
|
||||
PruneCorpses();
|
||||
|
||||
for(std::list<Frame*>::iterator i = rootFrame->m_children.begin();
|
||||
i != rootFrame->m_children.end(); ++i) delete *i;
|
||||
rootFrame->m_children.clear();
|
||||
|
||||
L3D::player->SetFrame(rootFrame);
|
||||
bodies.push_back(L3D::player);
|
||||
}
|
||||
|
||||
void Space::GenBody(StarSystem* system, StarSystem::SBody* sbody, Frame* f) {
|
||||
@ -218,19 +219,17 @@ void Space::TimeStep(float step) {
|
||||
for(bodiesIter_t i = bodies.begin(); i != bodies.end(); ++i) {
|
||||
(*i)->TimeStepUpdate(step);
|
||||
}
|
||||
/* Prune dead bodies. */
|
||||
for(bodiesIter_t i = corpses.begin(); i != corpses.end(); i++) {
|
||||
ProcessCorpse(*i);
|
||||
}
|
||||
corpses.clear();
|
||||
PruneCorpses();
|
||||
}
|
||||
|
||||
void Space::ProcessCorpse(Body* const b) {
|
||||
for(bodiesIter_t i = bodies.begin(); i != bodies.end(); ++i) {
|
||||
(*i)->NotifyDeath(b);
|
||||
void Space::PruneCorpses(void) {
|
||||
for(bodiesIter_t corpse = corpses.begin(); corpse != corpses.end(); ++corpse) {
|
||||
for(bodiesIter_t i = bodies.begin(); i != bodies.end(); i++)
|
||||
(*i)->NotifyDeath(*corpse);
|
||||
bodies.remove(*corpse);
|
||||
delete *corpse;
|
||||
}
|
||||
bodies.remove(b);
|
||||
delete b;
|
||||
corpses.clear();
|
||||
}
|
||||
|
||||
struct body_zsort_t {
|
||||
|
@ -25,8 +25,7 @@ public:
|
||||
private:
|
||||
static void UpdateFramesOfReference(void);
|
||||
static void CollideFrame(Frame* f);
|
||||
static void ProcessCorpse(Body* const b);
|
||||
|
||||
static void PruneCorpses(void);
|
||||
static Frame* rootFrame;
|
||||
//static std::list<Frame*> rootFrames;
|
||||
static std::list<Body*> corpses;
|
||||
|
@ -19,7 +19,7 @@ StaticRigidBody::~StaticRigidBody(void) {
|
||||
free(sbreCollMesh->pFlag);
|
||||
free(sbreCollMesh);
|
||||
}
|
||||
GetFrame()->RemoveGeom(m_geom);
|
||||
SetFrame(0); /* Will remove geom from frame if necessary. */
|
||||
dGeomDestroy(m_geom);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user