src/PhysicsObject.cc
changeset 225 22ecb9cb9245
parent 223 2fcaf54ed37b
child 228 dbc1bb7a98b5
--- 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;
     }