Trabajando en la intro

This commit is contained in:
2022-09-03 20:55:55 +02:00
parent 62183d745a
commit c46637092a
8 changed files with 361 additions and 108 deletions

View File

@@ -10,7 +10,7 @@
// Textos
#define WINDOW_CAPTION "JailDoctor's Dilemma"
#define TEXT_COPYRIGHT "@2022 JailDesigner"
#define VERSION "0.1"
#define VERSION "0.6"
// Tamaño de bloque
#define BLOCK 8

View File

@@ -230,6 +230,9 @@ void Director::runLogo()
// Ejecuta la seccion de juego de la introducción
void Director::runIntro()
{
intro = new Intro(renderer, screen, asset);
setSection(intro->run());
delete intro;
}
// Ejecuta la seccion de juego con el titulo y los menus

View File

@@ -9,6 +9,7 @@
#include "game.h"
#include "logo.h"
#include "title.h"
#include "intro.h"
#include "asset.h"
#include "const.h"
@@ -26,6 +27,7 @@ private:
Game *game; // Objeto para gestionar la sección del juego
Logo *logo; // Objeto para gestionar la sección del logo del programa
Title *title; // Objeto para gestionar la pantalla de título
Intro *intro; // Onjeto para gestionar la introducción del juego
Asset *asset; // Objeto que gestiona todos los ficheros de recursos
struct options_t *options; // Variable con todas las opciones del programa

169
source/intro.cpp Normal file
View File

@@ -0,0 +1,169 @@
#include "intro.h"
// Constructor
Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset)
{
// Copia la dirección de los objetos
this->renderer = renderer;
this->screen = screen;
this->asset = asset;
// Reserva memoria para los punteros
eventHandler = new SDL_Event();
texture = new LTexture(renderer, asset->get("loading_screen1.png"));
texture2 = new LTexture(renderer, asset->get("loading_screen2.png"));
sprite = new Sprite(0, 0, texture->getWidth(), texture->getHeight(), texture, renderer);
sprite2 = new Sprite(0, 0, texture2->getWidth(), texture2->getHeight(), texture, renderer);
// Inicializa variables
counter = 0;
section.name = SECTION_PROG_INTRO;
section.subsection = 0;
ticks = 0;
ticksSpeed = 15;
counterLoad1 = 0;
color_t c = stringToColor("black");
color.push_back(c);
c = stringToColor("blue");
color.push_back(c);
c = stringToColor("red");
color.push_back(c);
c = stringToColor("purple");
color.push_back(c);
c = stringToColor("green");
color.push_back(c);
c = stringToColor("cyan");
color.push_back(c);
c = stringToColor("yellow");
color.push_back(c);
c = stringToColor("light_white");
color.push_back(c);
}
// Destructor
Intro::~Intro()
{
delete texture;
delete texture2;
delete sprite;
delete sprite2;
delete eventHandler;
}
// Comprueba el manejador de eventos
void Intro::checkEventHandler()
{
// Comprueba los eventos que hay en la cola
while (SDL_PollEvent(eventHandler) != 0)
{
// Evento de salida de la aplicación
if (eventHandler->type == SDL_QUIT)
{
section.name = SECTION_PROG_QUIT;
break;
}
// Cualquier tecla pulsada
if ((eventHandler->type == SDL_KEYDOWN) || (eventHandler->type == SDL_JOYBUTTONDOWN))
{
section.name = SECTION_PROG_TITLE;
section.subsection = 0;
}
}
}
// Gestiona la primera parte de la carga
void Intro::updateLoad1()
{
counterLoad1 = std::min(counter / 3, 64);
}
// Gestiona la segunda parte de la carga
void Intro::updateLoad2()
{
}
// Dibuja la pantalla de carga
void Intro::renderLoad()
{
sprite->render();
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_Rect rect = {0, 0 + counterLoad1, 256, 64 - counterLoad1};
SDL_RenderFillRect(renderer, &rect);
rect.y += 64;
SDL_RenderFillRect(renderer, &rect);
rect.y += 64;
SDL_RenderFillRect(renderer, &rect);
}
// Actualiza las variables
void Intro::update()
{
// Comprueba que la diferencia de ticks sea mayor a la velocidad del juego
if (SDL_GetTicks() - ticks > ticksSpeed)
{
// Actualiza el contador de ticks
ticks = SDL_GetTicks();
// Comprueba el manejador de eventos
checkEventHandler();
// Incrementa el contador
counter++;
// Gestiona la primera parte de la carga
updateLoad1();
// Gestiona la segunda parte de la carga
updateLoad2();
// Comprueba si ha terminado el logo
if (counter == 1000)
{
section.name = SECTION_PROG_TITLE;
section.subsection = 0;
}
}
}
// Dibuja en pantalla
void Intro::render()
{
// Prepara para empezar a dibujar en la textura de juego
screen->start();
// Limpia la pantalla
screen->clean();
// Dibuja la pantalla de carga
renderLoad();
// Vuelca el contenido del renderizador en pantalla
screen->blit();
}
// Bucle para el logo del juego
section_t Intro::run()
{
// Detiene la música
JA_StopMusic();
while (section.name == SECTION_PROG_INTRO)
{
update();
render();
}
return section;
}

63
source/intro.h Normal file
View File

@@ -0,0 +1,63 @@
#pragma once
#include <SDL2/SDL.h>
#include "const.h"
#include "utils.h"
#include "sprite.h"
#include "screen.h"
#include "asset.h"
#include "jail_audio.h"
#include <vector>
#ifndef INTRO_H
#define INTRO_H
// Clase Intro
class Intro
{
private:
SDL_Renderer *renderer; // El renderizador de la ventana
Screen *screen; // Objeto encargado de dibujar en pantalla
Asset *asset; // Objeto con los ficheros de recursos
LTexture *texture; // Textura con los graficos "JAILGAMES"
LTexture *texture2; // Textura con los graficos "Since 1998"
SDL_Event *eventHandler; // Manejador de eventos
Sprite *sprite; // Sprite para manejar la textura
Sprite *sprite2; // Sprite para manejar la textura2
std::vector<color_t> color; // Vector con los colores para el fade
int counter; // Contador
section_t section; // Estado del bucle principal para saber si continua o se sale
int ticks; // Contador de ticks para ajustar la velocidad del programa
int ticksSpeed; // Velocidad a la que se repiten los bucles del programa
int counterLoad1;
// Actualiza las variables
void update();
// Dibuja en pantalla
void render();
// Comprueba el manejador de eventos
void checkEventHandler();
// Gestiona la primera parte de la carga
void updateLoad1();
// Gestiona la segunda parte de la carga
void updateLoad2();
// Dibuja la pantalla de carga
void renderLoad();
public:
// Constructor
Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset);
// Destructor
~Intro();
// Bucle principal
section_t run();
};
#endif

View File

@@ -102,22 +102,9 @@ void Logo::checkEventHandler()
}
}
// Actualiza las variables
void Logo::update()
// Gestiona el logo de JAILGAME
void Logo::updateJAILGAMES()
{
// Comprueba que la diferencia de ticks sea mayor a la velocidad del juego
if (SDL_GetTicks() - ticks > ticksSpeed)
{
// Actualiza el contador de ticks
ticks = SDL_GetTicks();
// Comprueba el manejador de eventos
checkEventHandler();
// Incrementa el contador
counter++;
// update de JAILGAMES
if (counter > 30)
{
for (int i = 1; i < sprite.size(); i++)
@@ -145,8 +132,10 @@ void Logo::update()
}
}
}
}
// update de fade
// Gestiona el color de las texturas
void Logo::updateTextureColors()
{
const int ini = 70;
const int inc = 4;
@@ -222,10 +211,31 @@ void Logo::update()
}
}
// Actualiza las variables
void Logo::update()
{
// Comprueba que la diferencia de ticks sea mayor a la velocidad del juego
if (SDL_GetTicks() - ticks > ticksSpeed)
{
// Actualiza el contador de ticks
ticks = SDL_GetTicks();
// Comprueba el manejador de eventos
checkEventHandler();
// Incrementa el contador
counter++;
// Gestiona el logo de JAILGAME
updateJAILGAMES();
// Gestiona el color de las texturas
updateTextureColors();
// Comprueba si ha terminado el logo
if (counter == endLogo + postLogo)
{
section.name = SECTION_PROG_TITLE;
section.name = SECTION_PROG_INTRO;
section.subsection = 0;
}
}

View File

@@ -42,6 +42,12 @@ private:
// Comprueba el manejador de eventos
void checkEventHandler();
// Gestiona el logo de JAILGAME
void updateJAILGAMES();
// Gestiona el color de las texturas
void updateTextureColors();
public:
// Constructor
Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset);

View File

@@ -26,13 +26,13 @@ x (A) Tecla + y - para cambiar tamaño de ventana. O control F1 a F4 {cm:2022-08
(A) Añadir a cada habitación el color del borde
(A) Añadir a cada habitación el color del nombre de la habitación
(A) Crear el logo al estilo del logo de ERBE o TOPO, con lineas que lo formen
x (A) Crear el logo al estilo del logo de ERBE o TOPO, con lineas que lo formen
(A) El titulo del juego hacerlo parecido al del Jet Set Willy in Paris
- Ha de generarse como las cargas de pantalla de spectrum
- Luego se colorea
- Finalmente, cada elemento cambia de color como si fueran luces de neon
(A) En el titulo del juego, por la parte inferior ha de aparecer una marquesina con texto, al estilo demoscene
(A) La pantalla de titulo no tiene menu, solo un PRESS ENTER TO PLAY
x (A) En el titulo del juego, por la parte inferior ha de aparecer una marquesina con texto, al estilo demoscene
x (A) La pantalla de titulo no tiene menu, solo un PRESS ENTER TO PLAY
## TEMAS