SkillsNode::SkillsNode(const sf::Texture& desativado, const sf::Texture& ativado, const sf::Texture& desenho, const sf::Texture& desc, int aprimoramento): simbolo() { simbolo[0].setTexture(desativado); simbolo[1].setTexture(ativado); simbolo[2].setTexture(desenho); this->Dir = NULL; this->Esq = NULL; this->status = false; this->setOriginCenter(); SpriteNode *aux = new SpriteNode(desc); aux->setPosition(200.f,155.f); this->insereFilho(aux); this->desc = false; this->aprimoramento = aprimoramento; }
void Box2dTest::Step(Settings* settings) { float32 timeStep = settings->hz > 0.0f ? 1.0f / settings->hz : float32(0.0f); uint32 flags = 0; int collidedCount=0; m_world->SetWarmStarting(settings->enableWarmStarting > 0); m_world->SetContinuousPhysics(settings->enableContinuous > 0); m_world->SetSubStepping(settings->enableSubStepping > 0); m_world->Step(timeStep, settings->velocityIterations, settings->positionIterations); m_world->ClearForces(); irr::core::array<int> toRemove; mCacheData.clear(); for (irr::u32 i = 0; i < mGameObjects.size(); i++) { GameObject& gameObject = mGameObjects[i]; if(gameObject.mBody!=NULL) { { float32 bpx=gameObject.mBody->GetPosition().x; float32 bpy=gameObject.mBody->GetPosition().y; if (bpy < -6.0 && gameObject.mBody->GetLinearVelocity().y <0) { gameObject.mUserData->m_setForRemoval=true; gameObject.mUserData->m_withCollision=false; } if (bpy > 6.0 && gameObject.mBody->GetLinearVelocity().y> 0) { gameObject.mUserData->m_setForRemoval=true; gameObject.mUserData->m_withCollision=false; } video::SColorf clrint(1.0,1.0,1.0,1.0); video::SColor clri; vector3df scale(1.0f,1.0f,1.0f); if(gameObject.mUserData->m_emitSound >0) gameObject.mUserData->m_emitSound--; gameObject.mUserData->m_collideCount=0; gameObject.mUserData->m_setContactPointer = false; if(gameObject.mUserData->m_shapeType< FIGUREDEF_COUNT && gameObject.mUserData->m_setForRemoval ) { if(gameObject.mUserData->m_withCollision) { BodyCacheData cacheData; cacheData.cachedShapeType = gameObject.mUserData->m_shapeType; cacheData.cachedAngle = gameObject.mBody->GetAngle(); cacheData.cachedAngulcarVelocity = gameObject.mBody->GetAngularVelocity(); cacheData.cachedCenter = gameObject.mBody->GetWorldCenter(); cacheData.cachedLinearVelocity= gameObject.mBody->GetLinearVelocity(); cacheData.cachedWithCollision = gameObject.mUserData->m_withCollision; m_world->DestroyBody(gameObject.mBody); gameObject.mBody=NULL; toRemove.push_back(gameObject.mNodeId); mCacheData.push_back(cacheData); collidedCount++; } else { //objects that go outside the limits if(gameObject.mUserData->m_withCollision== false) { m_world->DestroyBody(gameObject.mBody); gameObject.mBody=NULL; toRemove.push_back(gameObject.mNodeId); } } } } } gameObject.mUserData->m_setForRemoval = false; } //delete collided objects for (irr::u32 j = 0; j < toRemove.size(); j++) { int nodeId = toRemove[j]; for (irr::u32 i = 0; i < mGameObjects.size(); i++) { if (mGameObjects[i].mNodeId == nodeId) { if(mGameObjects[i].mUserData) { delete mGameObjects[i].mUserData; } mGameObjects.erase(i); break; } } } player.addToScore(mCacheData.size()); bool clearWebItem = false; SpriteNode* collideBodyNode = (SpriteNode*) mSmgr->getSceneNodeFromId(mPaddle->mNodeId); if(mPaddle->mBody) { mPaddle->mBody->SetTransform(b2Vec2(mIacoPoint.x, mPaddle->mBody->GetPosition().y),0); if(collideBodyNode) collideBodyNode->setPosition( irr::core::vector3df( mPaddle->mBody->GetPosition().x, mPaddle->mBody->GetPosition().y, 0.0f) ); } frameCount++; mCollideExternal=0; mMouseUp=false; }