void physicsManager::gameWorldStep() { b2Vec2 playerV = playerBody->GetLinearVelocity(); Viewport *viewport = game->getGUI()->getViewport(); AnimatedSprite *a = static_cast<AnimatedSprite*>(playerBody->GetUserData()); Player *p = dynamic_cast<Player*>(a); playerV.x = 0; playerV.y = 0; if (playerMoveLeft) { playerV.x = -2; } if (playerMoveRight) { playerV.x = 2; } if (playerMoveUp) { playerV.y = 2; } if (playerMoveDown) { playerV.y = -2; } //if (p->isCollidingWithBot()) // playerV = playerBody->GetLinearVelocity(); if (playerMoveLeft && playerMoveRight) { playerV.x = 0; } if (playerMoveUp && playerMoveDown) { playerV.y = 0; } //playerBody->GetLinearVelocity().x //playerBody->SetLinearVelocity(playerV); b2Vec2 playerPos = game->getGSM()->getSpriteManager()->getPlayer()->getBody()->GetPosition(); //b2Vec2 playerPos = game->getGSM()->getPhyiscs()->getPlayerBody()->GetPosition(); int playerX = (playerPos.x / pixelScaling) - viewport->getViewportX(); int playerY = (playerPos.y / pixelScaling) - viewport->getViewportY(); int realX = (playerPos.x / pixelScaling); int realY = (playerPos.y / pixelScaling); boolean outsideX; boolean outsideY; if (lavaBossHealth == true) { if ((realX >= 1440 && realX <= 1630) && (realY >= 2912 && realY <= 3168 && lavaBossFight == false)) { playerBody->SetLinearVelocity(playerV); list<Bot*>::iterator active = game->getGSM()->getSpriteManager()->getBotsIterator(); if (viewport->getScrollSpeedX() > 0) { while (active != game->getGSM()->getSpriteManager()->getEndOfBotsIterator()) { Bot *b = (*active); if (b->getType() == L"LAVA_BOSS") { b->setCurrentState(L"RISE"); if (b->getFrameIndex() == 14) { viewport->setScrollSpeedX(0); viewport->moveViewport(0, 0, 3200, 3200); lavaBossFight = true; } else { viewport->setScrollSpeedX(viewportConverter * -1); viewport->moveViewport(viewportConverter * -1, 0, 3200, 3200); } } active++; } return; } else if (viewport->getScrollSpeedX() < 0) { while (active != game->getGSM()->getSpriteManager()->getEndOfBotsIterator()) { Bot *b = (*active); if (b->getType() == L"LAVA_BOSS") { b->setCurrentState(L"RISE"); if (b->getFrameIndex() == 14) { viewport->setScrollSpeedX(0); viewport->moveViewport(0, 0, 3200, 3200); lavaBossFight = true; } else { viewport->setScrollSpeedX(viewportConverter * 1); viewport->moveViewport(viewportConverter * 1, 0, 3200, 3200); } } active++; } return; } } else if (lavaBossFight == true) { playerBody->SetLinearVelocity(playerV); gameWorld->Step(timeStep, velocityIterations, positionIterations); gameWorld->ClearForces(); playerMoveLeft = false; playerMoveRight = false; playerMoveUp = false; playerMoveDown = false; viewportMoved = false; mouseClicked = false; list<Bot*>::iterator active = game->getGSM()->getSpriteManager()->getBotsIterator(); while (active != game->getGSM()->getSpriteManager()->getEndOfBotsIterator()) { Bot *b = (*active); if (b->getType() == L"LAVA_BOSS") { if (b->getCurrentState() == L"DEAD") { viewport->setScrollSpeedX(0); viewport->moveViewport(0, 0, 3200, 3200); lavaBossFight = false; } } active++; } return; } } if ((viewport->getViewportX() <= 0.0f || viewport->getViewportX() >= 3200)) outsideX = false; else if (playerX >= 492 && playerX <= 532) outsideX = false; else outsideX = true; if ((viewport->getViewportY() <= 0.0f || viewport->getViewportY() >= 3200)) outsideY = false; else if (playerY >= 492 && playerY <= 532) outsideY = false; else outsideY = true; if (viewport->getViewportX() <= 0.0f || viewport->getViewportX() >= 3200) { if (playerX >= 507 && playerX <= 512) { if (game->getGSM()->getPhyiscs()->getPlayerBody()->GetLinearVelocity().x != 0) { viewport->setScrollSpeedX(viewportConverter * playerBody->GetLinearVelocity().x); viewportMoved = true; } } } else if (playerX >= 472 && playerX <= 552) { if (game->getGSM()->getPhyiscs()->getPlayerBody()->GetLinearVelocity().x != 0) { viewport->setScrollSpeedX(viewportConverter * playerBody->GetLinearVelocity().x); viewportMoved = true; } } else { viewport->setScrollSpeedX(0.0f); } if (viewport->getViewportY() <= 0.0f || viewport->getViewportY() >= 3200) { if (playerY >= 379 && playerY <= 389) { if (game->getGSM()->getPhyiscs()->getPlayerBody()->GetLinearVelocity().y != 0) { viewport->setScrollSpeedY(viewportConverter * playerBody->GetLinearVelocity().y); viewportMoved = true; } } } else if (playerY >= 344 && playerY <= 424) { if (game->getGSM()->getPhyiscs()->getPlayerBody()->GetLinearVelocity().y != 0) { viewport->setScrollSpeedY(viewportConverter * playerBody->GetLinearVelocity().y); viewportMoved = true; } } else { viewport->setScrollSpeedY(0.0f); } b2Vec2 rot; rot.x = (mouseLoc.x - playerBody->GetPosition().x); rot.y = (mouseLoc.y - playerBody->GetPosition().y); float angle = atan2f(rot.y, rot.x); playerBody->SetLinearVelocity(playerV); if (game->getGSM()->getPhyiscs()->getPlayerBody()->GetLinearVelocity().x == 0) viewport->setScrollSpeedX(0); if (game->getGSM()->getPhyiscs()->getPlayerBody()->GetLinearVelocity().y == 0) viewport->setScrollSpeedY(0); if (viewportMoved == true) { viewport->moveViewport(viewport->getScrollSpeedX(), viewport->getScrollSpeedY(), 3200, 3200); } else if (outsideX || outsideY) { if (playerX < 510) viewport->setScrollSpeedX(viewportConverter * -2); else if (playerX > 520) viewport->setScrollSpeedX(viewportConverter * 2); else viewport->setScrollSpeedX(0.0f); if (playerY < 379) viewport->setScrollSpeedY(viewportConverter * -2); else if (playerY > 389) viewport->setScrollSpeedY(viewportConverter * 2); else { viewport->setScrollSpeedY(0.0f); } viewport->moveViewport(viewport->getScrollSpeedX(), viewport->getScrollSpeedY(), 3200, 3200); } /*if (playerBody->GetAngularVelocity() != 0) playerBody->SetAngularVelocity(playerBody->GetAngularVelocity()/2);*/ gameWorld->Step(timeStep, velocityIterations, positionIterations); gameWorld->ClearForces(); playerMoveLeft = false; playerMoveRight = false; playerMoveUp = false; playerMoveDown = false; viewportMoved = false; mouseClicked = false; }