/*
	addSpriteItemsToRenderList - This method goes through all of the sprites,
	including the player sprite, and adds the visible ones to the render list.
	This method should be called each frame.
*/
void SpriteManager::addSpriteItemsToRenderList(	Game *game)
{
	GameStateManager *gsm = game->getGSM();
	GameGUI *gui = game->getGUI();
	if (gsm->isWorldRenderable())
	{
		GameGraphics *graphics = game->getGraphics();
		RenderList *renderList = graphics->getWorldRenderList();
		Viewport *viewport = gui->getViewport();

		// ADD THE PLAYER SPRITE
		addSpriteToRenderList(&player, renderList, viewport);
	/*	X = player.getPhysicalProperties() -> getX();
		Y = player.getPhysicalProperties() -> getY();*/
		//addSpriteToRenderList(&healthBar, renderList, viewport);
		// NOW ADD THE REST OF THE SPRITES
		list<Bot*>::iterator botIterator;
		botIterator = bots.begin();
		while (botIterator != bots.end())
		{			

			Bot *bot = (*botIterator);
			if (bot->getCurrentState() == L"DYING" && bot->getRemoval() > 0)
				bot->setRemoval(bot->getRemoval()-1);
			if (bot->getRemoval() != 0) {
				addSpriteToRenderList(bot, renderList, viewport);
			}
			
			if (bot->getRemoval() == 0){
					
					
				//bot->setCurrentlyCollidable(false);	
			}
			
			botIterator++;
		}
	}
}
示例#2
0
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;
}