collision_detection::WorldDiff::WorldDiff(WorldDiff &other) { WorldPtr world = other.world_.lock(); if (world) { changes_ = other.changes_; boost::weak_ptr<World>(world).swap(world_); observer_handle_ = world->addObserver(boost::bind(&WorldDiff::notify, this, _1, _2)); } }
void collision_detection::WorldDiff::reset(const WorldPtr& world) { clearChanges(); WorldPtr old_world = world_.lock(); if (old_world) old_world->removeObserver(observer_handle_); boost::weak_ptr<World>(world).swap(world_); observer_handle_ = world->addObserver(boost::bind(&WorldDiff::notify, this, _1, _2)); }
void collision_detection::WorldDiff::setWorld(const WorldPtr& world) { WorldPtr old_world = world_.lock(); if (old_world) { old_world->notifyObserverAllObjects(observer_handle_, World::DESTROY); old_world->removeObserver(observer_handle_); } boost::weak_ptr<World>(world).swap(world_); observer_handle_ = world->addObserver(boost::bind(&WorldDiff::notify, this, _1, _2)); world->notifyObserverAllObjects(observer_handle_, World::CREATE|World::ADD_SHAPE); }
collision_detection::WorldDiff::WorldDiff(const WorldPtr& world) : world_(world) { observer_handle_ = world->addObserver(boost::bind(&WorldDiff::notify, this, _1, _2)); }