Transició a surface: game.cpp fet
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
#include <SDL2/SDL_timer.h> // for SDL_GetTicks
|
||||
#include <algorithm> // for min
|
||||
#include <iostream> // for basic_ostream, operator<<, cout, endl
|
||||
#include "s_animated_sprite.h" // for AnimatedSprite
|
||||
#include "s_animated_sprite.h" // for SAnimatedSprite
|
||||
#include "defines.h" // for GAMECANVAS_HEIGHT, GAMECANVAS_WIDTH
|
||||
#include "global_events.h" // for check
|
||||
#include "global_inputs.h" // for check
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
// Constructor
|
||||
Credits::Credits()
|
||||
: shining_sprite_(std::make_shared<AnimatedSprite>(Resource::get()->getSurface("shine.gif"), Resource::get()->getAnimations("shine.ani")))
|
||||
: shining_sprite_(std::make_shared<SAnimatedSprite>(Resource::get()->getSurface("shine.gif"), Resource::get()->getAnimations("shine.ani")))
|
||||
{
|
||||
// Inicializa variables
|
||||
options.section.section = Section::CREDITS;
|
||||
@@ -29,23 +29,15 @@ Credits::Credits()
|
||||
Screen::get()->setBorderColor(stringToColor(options.video.palette, "black"));
|
||||
|
||||
// Crea la textura para el texto que se escribe en pantalla
|
||||
text_texture_ = createTexture(Screen::get()->getRenderer(), options.game.width, options.game.height);
|
||||
text_surface_ = std::make_shared<Surface>(Screen::get()->getRenderSurfaceData(), options.game.width, options.game.height);
|
||||
|
||||
// Crea la textura para cubrir el rexto
|
||||
cover_texture_ = createTexture(Screen::get()->getRenderer(), options.game.width, options.game.height);
|
||||
SDL_SetTextureBlendMode(cover_texture_, SDL_BLENDMODE_BLEND);
|
||||
cover_surface_ = std::make_shared<Surface>(Screen::get()->getRenderSurfaceData(), options.game.width, options.game.height);
|
||||
|
||||
// Escribe el texto en la textura
|
||||
fillTexture();
|
||||
}
|
||||
|
||||
// Destructor
|
||||
Credits::~Credits()
|
||||
{
|
||||
SDL_DestroyTexture(text_texture_);
|
||||
SDL_DestroyTexture(cover_texture_);
|
||||
}
|
||||
|
||||
// Comprueba el manejador de eventos
|
||||
void Credits::checkEvents()
|
||||
{
|
||||
@@ -150,10 +142,8 @@ void Credits::fillTexture()
|
||||
iniTexts();
|
||||
|
||||
// Rellena la textura de texto
|
||||
SDL_SetRenderTarget(Screen::get()->getRenderer(), text_texture_);
|
||||
Color color = stringToColor(options.video.palette, "black");
|
||||
SDL_SetRenderDrawColor(Screen::get()->getRenderer(), color.r, color.g, color.b, 0xFF);
|
||||
SDL_RenderClear(Screen::get()->getRenderer());
|
||||
Screen::get()->setRenderSurfaceData(text_surface_);
|
||||
Screen::get()->clean(stringToColor("black"));
|
||||
|
||||
auto text = Resource::get()->getText("smb2");
|
||||
|
||||
@@ -178,28 +168,28 @@ void Credits::fillTexture()
|
||||
SDL_SetRenderTarget(Screen::get()->getRenderer(), nullptr);
|
||||
|
||||
// Rellena la textura que cubre el texto con color transparente
|
||||
SDL_SetRenderTarget(Screen::get()->getRenderer(), cover_texture_);
|
||||
SDL_SetRenderDrawColor(Screen::get()->getRenderer(), color.r, color.g, color.b, 0x00);
|
||||
SDL_RenderClear(Screen::get()->getRenderer());
|
||||
Screen::get()->setRenderSurfaceData(text_surface_);
|
||||
Screen::get()->clean(stringToColor("transparent"));
|
||||
|
||||
// Los primeros 8 pixels crea una malla
|
||||
SDL_SetRenderDrawColor(Screen::get()->getRenderer(), color.r, color.g, color.b, 0xFF);
|
||||
auto surface = Screen::get()->getRenderSurfaceData();
|
||||
auto color = stringToColor("black");
|
||||
for (int i = 0; i < 256; i += 2)
|
||||
{
|
||||
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i, 0);
|
||||
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i, 2);
|
||||
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i, 4);
|
||||
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i, 6);
|
||||
text_surface_->putPixel(surface, i, 0, color);
|
||||
text_surface_->putPixel(surface, i, 2, color);
|
||||
text_surface_->putPixel(surface, i, 4, color);
|
||||
text_surface_->putPixel(surface, i, 6, color);
|
||||
|
||||
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i + 1, 5);
|
||||
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i + 1, 7);
|
||||
text_surface_->putPixel(surface, i + 1, 5, color);
|
||||
text_surface_->putPixel(surface, i + 1, 7, color);
|
||||
}
|
||||
|
||||
// El resto se rellena de color sólido
|
||||
SDL_Rect rect = {0, 8, 256, 192};
|
||||
SDL_RenderFillRect(Screen::get()->getRenderer(), &rect);
|
||||
text_surface_->fillRect(surface, &rect, color);
|
||||
|
||||
SDL_SetRenderTarget(Screen::get()->getRenderer(), nullptr);
|
||||
Screen::get()->setRenderSurfaceData(nullptr);
|
||||
}
|
||||
|
||||
// Actualiza el contador
|
||||
@@ -263,18 +253,17 @@ void Credits::render()
|
||||
Screen::get()->start();
|
||||
|
||||
// Limpia la pantalla
|
||||
Screen::get()->clean();
|
||||
Screen::get()->clean(1);
|
||||
|
||||
if (counter_ < 1150)
|
||||
{
|
||||
// Dibuja la textura con el texto en pantalla
|
||||
SDL_RenderCopy(Screen::get()->getRenderer(), text_texture_, nullptr, nullptr);
|
||||
text_surface_->render(0, 0);
|
||||
|
||||
// Dibuja la textura que cubre el texto
|
||||
const int offset = std::min(counter_ / 8, 192 / 2);
|
||||
SDL_Rect srcRect = {0, 0, 256, 192 - (offset * 2)};
|
||||
SDL_Rect dstRect = {0, offset * 2, 256, 192 - (offset * 2)};
|
||||
SDL_RenderCopy(Screen::get()->getRenderer(), cover_texture_, &srcRect, &dstRect);
|
||||
cover_surface_->render(0, offset * 2, &srcRect);
|
||||
|
||||
// Dibuja el sprite con el brillo
|
||||
shining_sprite_->render();
|
||||
|
||||
Reference in New Issue
Block a user