예제 #1
0
// load given background
void Graphics::loadBG(int which)
{
	closeBG();

	switch (which)
	{
	case MOUNTAINS:
		bg = new Texture(0, 0, 0, 0);
		bg->txLoadF(rDir + bgPrefix + bgIDs[which] + rExt);
		manageBG();
		break;
	}
}
예제 #2
0
// render everything
void Graphics::renderAll(bool manageRenderer)
{
	// SDL_Rect part = { 0, 0, 0, 0 };
	static float plrot = 0;
	static float clrot = 0;
	static float enrot = 0;
	plrot = abs(Game::gPlayer->aerialSpeed != 0 ? plrot + Game::gPlayer->aerialSpeed * Game::ROTATION_SPEED * (Game::gPlayer->aerialSpeed < 0 ? -1 : 1) : 0);
	clrot += Game::ROTATION_SPEED;
	enrot += Game::ROTATION_SPEED * 2;
	if (plrot >= 360)
		plrot = 0;
	if (clrot >= 360)
		clrot = 0;
	if (enrot >= 360)
		enrot = 0;
	viewport.w = Window::getw();
	viewport.h = Window::geth();

	if (manageRenderer)
	{
		SDL_RenderClear(Window::renderer);
		SDL_SetRenderDrawColor(Window::renderer, renderColor.r, renderColor.g, renderColor.b, renderColor.a);
		// SDL_RenderSetClipRect(Window::renderer, &viewport);
		// SDL_RenderSetViewport(Window::renderer, &viewport);
	}

	bg->txRender();
	manageBG();
	// for (int i = 0; i < bgObjects.size(); i++)
	// 	if(Game::checkCollision(viewport, bgObjects[i].first->txRect))
	// 		bgObjects[i].first->txRender();

	// only render if entity's rect is colliding with viewport rect
	for (int i = 0; i < Game::renderedEntities.size(); i++)
	{
		if (Game::checkCollision(viewport, Game::renderedEntities[i]->rect))
		{
			// Game::renderedEntities[i]->syncGFX();
			// blockGFX[Game::renderedEntities[i]->getSubtype()]->rect = Game::renderedEntities[i]->rect;
			switch (Game::renderedEntities[i]->getType())
			{
			case BLOCK:
				blockGFX[Game::renderedEntities[i]->getSubtype()]->txRect = { Game::renderedEntities[i]->rect.x - viewport.x, Game::renderedEntities[i]->rect.y - viewport.y, Game::renderedEntities[i]->rect.w, Game::renderedEntities[i]->rect.h };
				blockGFX[Game::renderedEntities[i]->getSubtype()]->txRender();
				break;
			case COLLECTIBLE:
				collectibleGFX[Game::renderedEntities[i]->getSubtype()]->txRect = { Game::renderedEntities[i]->rect.x - viewport.x, Game::renderedEntities[i]->rect.y - viewport.y, Game::renderedEntities[i]->rect.w, Game::renderedEntities[i]->rect.h };
				collectibleGFX[Game::renderedEntities[i]->getSubtype()]->txRender(NULL, NULL, clrot, SDL_FLIP_NONE);
				break;
			case ENEMY:
				enemyGFX[Game::renderedEntities[i]->getSubtype()]->txRect = { Game::renderedEntities[i]->rect.x - viewport.x, Game::renderedEntities[i]->rect.y - viewport.y, Game::renderedEntities[i]->rect.w, Game::renderedEntities[i]->rect.h };
				if (Game::renderedEntities[i]->colorMod != NULL)
				{
					enemyGFX[Game::renderedEntities[i]->getSubtype()]->txSetColor(*Game::renderedEntities[i]->colorMod);
					enemyGFX[Game::renderedEntities[i]->getSubtype()]->txRender(NULL, NULL, enrot, SDL_FLIP_NONE);
					enemyGFX[Game::renderedEntities[i]->getSubtype()]->txSetColor(0, 0, 0);
				}
				else
					enemyGFX[Game::renderedEntities[i]->getSubtype()]->txRender(NULL, NULL, enrot, SDL_FLIP_NONE);
				break;
			}
		}
	}

	// for (int i = 0; i < particles.size(); i++)
	// 	particles[i].first->txRender();
	
	// gPlayer.syncGFX();
	// Game::gPlayer->syncGFX();
	// playerGFX->rect = Game::gPlayer->rect;
	Game::gPlayer->abilities["White"] = true;

	for (int i = 0; i < Game::playerIDs.size(); i++)
	{
		if (Game::gPlayer->abilities[Game::playerIDs[i]])
		{
			playerGFX[i]->txRect = { Game::gPlayer->rect.x - viewport.x, Game::gPlayer->rect.y - viewport.y, Game::gPlayer->rect.w, Game::gPlayer->rect.h };
			playerGFX[i]->txRender(NULL, NULL, plrot, SDL_FLIP_NONE);
		}
	}

	manageParticles(SNOW_PART /* Level::getBGID() */ /* Level::getID() */);

	for (int i = 0; i < messages.size(); i++)
	{
		if (messages[i]->displayTime <= 0 && messages[i]->displayTime != -1)
		{
			messages.erase(messages.begin() + i);
			i--;
		}
		else
			messages[i]->render();
	}

	if (Game::Mode == GAME_END)
		playGameEnd();

	if(manageRenderer)
		SDL_RenderPresent(Window::renderer);
}