void Scene::reset() { if (player) { resetObject(*player); } for(auto &object : m_objects) resetObject(object); }
StatsProcessNode::~StatsProcessNode(void) { resetObject(); // Setting next as 0 , if caller tries to access the next node after // deletion it will be caught immediately. next = 0; }
void Physics::step(void) { dynamicWorld->stepSimulation(1.f/60.f); graphics->animate(); int numManifolds = dynamicWorld->getDispatcher()->getNumManifolds(); for (int i = 0; i < numManifolds; i++) { btPersistentManifold* contactManifold = dynamicWorld->getDispatcher()->getManifoldByIndexInternal(i); btCollisionObject* obA = static_cast<btCollisionObject*>(contactManifold->getBody0()); btCollisionObject* obB = static_cast<btCollisionObject*>(contactManifold->getBody1()); btBroadphaseProxy* obA_proxy = obA->getBroadphaseHandle(); btBroadphaseProxy* obB_proxy = obB->getBroadphaseHandle(); if (obA_proxy->m_collisionFilterGroup & obB_proxy->m_collisionFilterMask) { if (obA_proxy->m_collisionFilterGroup == COL_PENGUIN && obB_proxy->m_collisionFilterGroup == COL_KILLBOX) { PhysicsBody* object = reinterpret_cast<PhysicsBody*>(obA->getUserPointer()); resetObject(object); } else if (obA_proxy->m_collisionFilterGroup == COL_PENGUIN && obB_proxy->m_collisionFilterGroup == COL_GOAL) { nextStage(); graphics->playSound(2); } else if (obA_proxy->m_collisionFilterGroup == COL_PENGUIN && obB_proxy->m_collisionFilterGroup == COL_CHECKPOINT) { btVector3 checkpoint2 = obB->getWorldTransform().getOrigin(); btBoxShape* shape = reinterpret_cast<btBoxShape*>(obB->getCollisionShape()); checkpoint2 += btVector3(0, shape->getHalfExtentsWithoutMargin().y(), 0); checkpoint2 += btVector3(0, 25, 0); PhysicsBody* object = reinterpret_cast<PhysicsBody*>(obA->getUserPointer()); btRigidBody* body = object->getBody(); btVector3 translate = body->getCenterOfMassPosition(); if (checkpoint2 != checkpoint && translate.y() >= checkpoint2.y()) { graphics->playSound(1); checkpoint = checkpoint2; } } } } }