--- a/src/PhysicsObject.cc Sat Dec 06 19:14:58 2008 +0000
+++ b/src/PhysicsObject.cc Sat Dec 06 19:38:01 2008 +0000
@@ -4,14 +4,15 @@
#include <cmath>
-PhysicsObject::PhysicsObject (PhysicsWorld &world, float mass, Vector position, Vector velocity) :
- world(world), position(position), velocity(velocity), mass(mass), inAir(true), aim(0), facingRight(true), alive(true)
-{
- world.addPhysicsObject(this);
+PhysicsObject::PhysicsObject (PhysicsWorld &world, float mass, Vector position, Vector velocity, bool enabled) :
+ world(world), position(position), velocity(velocity), mass(mass), inAir(true), aim(0), facingRight(true), alive(false), shouldDelete(false)
+{
+ if (enabled)
+ enable();
}
PhysicsObject::~PhysicsObject (void) {
- // Engine::log(DEBUG, "PhysicsObject.destructor") << this /* << ": objects.size=" << ((int) world.objects.size()) */;
+// Engine::log(DEBUG, "PhysicsObject.destructor") << this /* << ": objects.size=" << ((int) world.objects.size()) */;
}
/**
@@ -296,7 +297,7 @@
this->facingRight = facingRight;
this->aim = aim;
}
-
+
Vector PhysicsObject::getPosition () {
return this->position;
}
@@ -325,8 +326,18 @@
this->updatePosition(tick_length);
}
+void PhysicsObject::enable (void) {
+ alive = true;
+ world.addPhysicsObject(this);
+}
+
+void PhysicsObject::disable (void) {
+ alive = false;
+}
+
void PhysicsObject::destroy (void) {
alive = false;
+ shouldDelete = true;
}
bool PhysicsObject::isDestroyed (void) {
@@ -335,8 +346,11 @@
bool PhysicsObject::removeIfDestroyed (void) {
if (!alive) {
- delete this;
+ if (shouldDelete)
+ delete this;
+
return true;
+
} else {
return false;
}