diff --git a/media/lang/ba_BA.txt b/media/lang/ba_BA.txt deleted file mode 100644 index af96a2a..0000000 --- a/media/lang/ba_BA.txt +++ /dev/null @@ -1,158 +0,0 @@ -## 0 - MENU DEL TITULO -JUGAR -## 1 - MENU DEL TITULO -OPCIONS -## 2 - MENU DEL TITULO -INSTRUCCIONS -## 3 - MENU DEL TITULO -EIXIR -## 4 - MENU DE OPCIONES -FINESTRA -## 5 - MENU DE OPCIONES -PANTALLA COMPLETA -## 6 - MENU DE OPCIONES -PANTALLA COMPLETA FALSA -## 7 - MENU DE OPCIONES -TAMANY DE FINESTRA -## 8 - MENU DE OPCIONES -IDIOMA -## 9 - MENU DE OPCIONES -[ ACEPTAR ] -## 10 - MENU DE OPCIONES -[ CANCELAR ] -## 11 - INSTRUCCIONES -OBJECTIU -## 12 - INSTRUCCIONES -HAS D'EXPLOTAR -## 13 - INSTRUCCIONES -TANTS GLOBUS COM PUGUES -## 14 - INSTRUCCIONES -LA DIFICULTAT AUGMENTA -## 15 - INSTRUCCIONES -A MESURA QUE VAS PUNTUANT -## 16 - INSTRUCCIONES -OBJECTES -## 17 - INSTRUCCIONES -1.000 PUNTS -## 18 - INSTRUCCIONES -2.500 PUNTS -## 19 - INSTRUCCIONES -5.000 PUNTS -## 20 - INSTRUCCIONES -PARA EL TEMPS -## 21 - INSTRUCCIONES -VIDA EXTRA -## 22 - INSTRUCCIONES -PREM UNA TECLA PER A TORNAR -## 23 - TITULO -PREM QUALSEVOL TECLA -## 24 - MENU SELECCION DE IDIOMA -ESPA{OL (ESPANYOL) -## 25 - MENU SELECCION DE IDIOMA -BALOONCIA -## 26 - MENU SELECCION DE IDIOMA -ENGLISH (ANGLES) -## 27 - INTRO -Un dia qualsevol de l'any 2000 -## 28 - INTRO -Tot esta tranquil a la UPV -## 29 - INTRO -Fins que un desaprensiu... -## 30 - INTRO -HEY! ME ANE A FERME UN CORTAET... -## 31 - INTRO -UAAAAAAAAAAAAA!!! -## 32 - INTRO -Espera un moment... -## 33 - INTRO -Si resulta que no tinc solt! -## 34 - INTRO -MERDA DE MAQUINA! -## 35 - INTRO -Blop... blop... blop... -## 36 - TEXTOS DEL JUEGO -Temps detes: -## 37 - TEXTOS DEL JUEGO -D E M O -## 38 - TEXTOS DEL JUEGO -Pantalla -## 39 - MARCADOR -PUNTS -## 40 - MARCADOR -MAX.PUNT. -## 41 - MARCADOR -MULT -## 42 - MARCADOR -PANTALLA -## 43 - PANTALLA DE GAME OVER -FI DEL JOC -## 44 - PANTALLA DE GAME OVER -ELS TEUS PUNTS: -## 45 - PANTALLA DE GAME OVER -REINTENTAR? -## 46 - MENU DE PAUSA -CONTINUAR -## 47 - MENU DE PAUSA -EIXIR DEL JOC -## 48 - MENU GAME OVER -SI -## 49 - MENU GAME OVER -NO -## 50 - TEXTO DE COMPLETAR EL JUEGO -Felicitats!! -## 51 - MENU DEL TITULO -1 JUGADOR -## 52 - MENU DEL TITULO -2 JUGADORS -## 53 MARCADOR -jugador 1 -## 54 MARCADOR -jugador 2 -## 55 MARCADOR -mult -## 56 MARCADOR -max. puntuacio -## 57 MARCADOR -pantalla -## 58 - MENU DE OPCIONES -MODE DE VISUALITZACIO -## 59 - MENU DE OPCIONES -DIFICULTAT -## 60 - MENU DE OPCIONES -FILTRE -## 61 - MENU DE OPCIONES -SINC. VERTICAL -## 62 - MENU DE OPCIONES -CONTROLS DEL JUGADOR 1 -## 63 - MENU DE OPCIONES -CONTROLS DEL JUGADOR 2 -## 64 - MENU DE OPCIONES -TECLAT -## 65 - MENU DE OPCIONES -MANDO -## 66 - MENU DE OPCIONES -FACIL -## 67 - MENU DE OPCIONES -NORMAL -## 68 - MENU DE OPCIONES -DIFICIL -## 69 - MENU DE OPCIONES -TECLAT -## 70 - MENU DE OPCIONES -MANDO -## 71 - MENU DE OPCIONES -LINEAL -## 72 - MENU DE OPCIONES -NEAREST -## 73 - MENU DE OPCIONES -ACTIVADA -## 74 - MENU DE OPCIONES -DESACTIVADA -## 75 - JUEGO -Endavant! -## 76 - JUEGO -1.000.000 de punts! -## 77 - PANTALLA DE GAME OVER -PUNTS J1: -## 78 - PANTALLA DE GAME OVER -PUNTS J2: \ No newline at end of file diff --git a/media/lang/en_UK.txt b/media/lang/en_UK.txt deleted file mode 100644 index d8e3ebc..0000000 --- a/media/lang/en_UK.txt +++ /dev/null @@ -1,158 +0,0 @@ -## 0 - MENU DEL TITULO -PLAY -## 1 - MENU DEL TITULO -OPTIONS -## 2 - MENU DEL TITULO -HOW TO PLAY -## 3 - MENU DEL TITULO -QUIT -## 4 - MENU DE OPCIONES -WINDOW -## 5 - MENU DE OPCIONES -FULLSCREEN -## 6 - MENU DE OPCIONES -FAKE FULLSCREEN -## 7 - MENU DE OPCIONES -WINDOW SIZE -## 8 - MENU DE OPCIONES -LANGUAGE -## 9 - MENU DE OPCIONES -[ ACCEPT ] -## 10 - MENU DE OPCIONES -[ CANCEL ] -## 11 - INSTRUCCIONES -OBJECTIVE -## 12 - INSTRUCCIONES -YOU HAVE TO POP AS MANY -## 13 - INSTRUCCIONES -BALLOONS AS YOU CAN -## 14 - INSTRUCCIONES -DIFFICULTY WILL BE INCREASED -## 15 - INSTRUCCIONES -AS YOU SCORE POINTS -## 16 - INSTRUCCIONES -ITEMS -## 17 - INSTRUCCIONES -1.000 POINTS -## 18 - INSTRUCCIONES -2.500 POINTS -## 19 - INSTRUCCIONES -5.000 POINTS -## 20 - INSTRUCCIONES -TIME STOPPER -## 21 - INSTRUCCIONES -EXTRA HIT -## 22 - INSTRUCCIONES -PRESS ANY KEY TO RETURN -## 23 - TITULO -PRESS ANY KEY -## 24 - MENU SELECCION DE IDIOMA -ESPA{OL (SPANISH) -## 25 - MENU SELECCION DE IDIOMA -BALOONCIA (VALENCIAN) -## 26 - MENU SELECCION DE IDIOMA -ENGLISH -## 27 - INTRO -Any day of the year 2000 -## 28 - INTRO -Everything is quiet at the UPV -## 29 - INTRO -Until a bastard arrives... -## 30 - INTRO - YO! GONNA TAKE A CAFELITO... -## 31 - INTRO -AAAAAAAARGHHHH!!! -## 32 - INTRO -Wait a moment... -## 33 - INTRO - I don't have any loose! -## 34 - INTRO -FUCKING MACHINE! -## 35 - INTRO -Blop... blop... blop... -## 36 - TEXTOS DEL JUEGO -Time stopped: -## 37 - TEXTOS DEL JUEGO -D E M O -## 38 - TEXTOS DEL JUEGO -Stage -## 39 - MARCADOR -SCORE -## 40 - MARCADOR -HI-SCORE -## 41 - MARCADOR -MULT -## 42 - MARCADOR -STAGE -## 43 - PANTALLA DE GAME OVER -GAME OVER -## 44 - PANTALLA DE GAME OVER -YOUR SCORE: -## 45 - PANTALLA DE GAME OVER -RETRY? -## 46 - MENU DE PAUSA -CONTINUE -## 47 - MENU DE PAUSA -LEAVE GAME -## 48 - MENU GAME OVER -YES -## 49 - MENU GAME OVER -NO -## 50 - TEXTO DE COMPLETAR EL JUEGO -Congratulations!! -## 51 - MENU DEL TITULO -1 PLAYER -## 52 - MENU DEL TITULO -2 PLAYERS -## 53 - MARCADOR -player 1 -## 54 - MARCADOR -player 2 -## 55 - MARCADOR -mult -## 56 - MARCADOR -high score -## 57 - MARCADOR -stage -## 58 - MENU DE OPCIONES -DISPLAY MODE -## 59 - MENU DE OPCIONES -DIFFICULTY -## 60 - MENU DE OPCIONES -FILTER -## 61 - MENU DE OPCIONES -VSYNC -## 62 - MENU DE OPCIONES -PLAYER 1 CONTROLS -## 63 - MENU DE OPCIONES -PLAYER 2 CONTROLS -## 64 - MENU DE OPCIONES -KEYBOARD -## 65 - MENU DE OPCIONES -GAME CONTROLLER -## 66 - MENU DE OPCIONES -EASY -## 67 - MENU DE OPCIONES -NORMAL -## 68 - MENU DE OPCIONES -HARD -## 69 - MENU DE OPCIONES -KEYBOARD -## 70 - MENU DE OPCIONES -GAME CONTROLLER -## 71 - MENU DE OPCIONES -LINEAL -## 72 - MENU DE OPCIONES -NEAREST -## 73 - MENU DE OPCIONES -ON -## 74 - MENU DE OPCIONES -OFF -## 75 - JUEGO -Get Ready! -## 76 - JUEGO -1.000.000 points! -## 77 - PANTALLA DE GAME OVER -PLAYER1 SCORE: -## 78 - PANTALLA DE GAME OVER -PLAYER2 SCORE: \ No newline at end of file diff --git a/media/lang/es_ES.txt b/media/lang/es_ES.txt deleted file mode 100644 index 6c21712..0000000 --- a/media/lang/es_ES.txt +++ /dev/null @@ -1,158 +0,0 @@ -## 0 - MENU DEL TITULO -JUGAR -## 1 - MENU DEL TITULO -OPCIONES -## 2 - MENU DEL TITULO -INSTRUCCIONES -## 3 - MENU DEL TITULO -SALIR -## 4 - MENU DE OPCIONES -VENTANA -## 5 - MENU DE OPCIONES -PANTALLA COMPLETA -## 6 - MENU DE OPCIONES -PANTALLA COMPLETA FALSA -## 7 - MENU DE OPCIONES -TAMA{O DE VENTANA -## 8 - MENU DE OPCIONES -IDIOMA -## 9 - MENU DE OPCIONES -[ ACEPTAR ] -## 10 - MENU DE OPCIONES -[ CANCELAR ] -## 11 - INSTRUCCIONES -OBJETIVO -## 12 - INSTRUCCIONES -TIENES QUE EXPLOTAR -## 13 - INSTRUCCIONES -TANTOS GLOBOS COMO PUEDAS -## 14 - INSTRUCCIONES -LA DIFICULTAD SE INCREMENTA -## 15 - INSTRUCCIONES -A MEDIDA QUE VAS PUNTUANDO -## 16 - INSTRUCCIONES -OBJETOS -## 17 - INSTRUCCIONES -1.000 PUNTOS -## 18 - INSTRUCCIONES -2.500 PUNTOS -## 19 - INSTRUCCIONES -5.000 PUNTOS -## 20 - INSTRUCCIONES -DETIENE EL TIEMPO -## 21 - INSTRUCCIONES -VIDA EXTRA -## 22 - INSTRUCCIONES -PULSA UNA TECLA PARA VOLVER -## 23 - TITULO -PULSA CUALQUIER TECLA -## 24 - MENU SELECCION DE IDIOMA -ESPA{OL -## 25 - MENU SELECCION DE IDIOMA -BALOONCIA (VALENCIANO) -## 26 - MENU SELECCION DE IDIOMA -ENGLISH (INGLES) -## 27 - INTRO -Un dia cualquiera del a{o 2000 -## 28 - INTRO -Todo esta tranquilo en la UPV -## 29 - INTRO -Hasta que un desaprensivo... -## 30 - INTRO -HEY! VOY A SACARME UN TALLADET... -## 31 - INTRO -UAAAAAAAAAAAAA!!! -## 32 - INTRO -Espera un momento... -## 33 - INTRO -Si no llevo suelto encima! -## 34 - INTRO -MIERDA DE MAQUINA! -## 35 - INTRO -Blop... blop... blop... -## 36 - TEXTOS DEL JUEGO -Tiempo: -## 37 - TEXTOS DEL JUEGO -D E M O -## 38 - TEXTOS DEL JUEGO -Fase -## 39 - MARCADOR -PUNTOS -## 40 - MARCADOR -MAX.PUNT. -## 41 - MARCADOR -MULT -## 42 - MARCADOR -FASE -## 43 - PANTALLA DE GAME OVER -FIN DE JUEGO -## 44 - PANTALLA DE GAME OVER -TU PUNTUACION: -## 45 - PANTALLA DE GAME OVER -REINTENTAR? -## 46 - MENU DE PAUSA -CONTINUAR -## 47 - MENU DE PAUSA -SALIR DEL JUEGO -## 48 - MENU GAME OVER -SI -## 49 - MENU GAME OVER -NO -## 50 - TEXTO DE COMPLETAR EL JUEGO -Felicidades!! -## 51 - MENU DEL TITULO -1 JUGADOR -## 52 - MENU DEL TITULO -2 JUGADORES -## 53 - MARCADOR -jugador 1 -## 54 - MARCADOR -jugador 2 -## 55 - MARCADOR -mult -## 56 - MARCADOR -max. puntuacion -## 57 - MARCADOR -fase -## 58 - MENU DE OPCIONES -MODO DE VISUALIZACION -## 59 - MENU DE OPCIONES -DIFICULTAD -## 60 - MENU DE OPCIONES -FILTRO -## 61 - MENU DE OPCIONES -SINC. VERTICAL -## 62 - MENU DE OPCIONES -CONTROLES DEL JUGADOR 1 -## 63 - MENU DE OPCIONES -CONTROLES DEL JUGADOR 2 -## 64 - MENU DE OPCIONES -TECLADO -## 65 - MENU DE OPCIONES -MANDO -## 66 - MENU DE OPCIONES -FACIL -## 67 - MENU DE OPCIONES -NORMAL -## 68 - MENU DE OPCIONES -DIFICIL -## 69 - MENU DE OPCIONES -TECLADO -## 70 - MENU DE OPCIONES -MANDO -## 71 - MENU DE OPCIONES -LINEAL -## 72 - MENU DE OPCIONES -NEAREST -## 73 - MENU DE OPCIONES -ACTIVADA -## 74 - MENU DE OPCIONES -DESACTIVADA -## 75 - JUEGO -Adelante! -## 76 - JUEGO -1.000.000 de puntos! -## 77 - PANTALLA DE GAME OVER -PUNTUACION J1: -## 78 - PANTALLA DE GAME OVER -PUNTUACION J2: \ No newline at end of file diff --git a/source/const.h b/source/const.h new file mode 100644 index 0000000..2e700f4 --- /dev/null +++ b/source/const.h @@ -0,0 +1,61 @@ +#pragma once + +#include +#include +#include "utils.h" + +#ifndef CONST_H +#define CONST_H + +// Textos +#define WINDOW_CAPTION "JailDoctor's Dilemma" +#define TEXT_COPYRIGHT "@2022 JailDesigner" +#define VERSION "0.1" + +// Tamaño de bloque +#define BLOCK 8 +#define HALF_BLOCK 4 + +// Tamaño de la pantalla virtual +#define GAMECANVAS_WIDTH 256 +#define GAMECANVAS_HEIGHT 192 + +// Zona de juego +const int PLAY_AREA_TOP = (0 * BLOCK); +const int PLAY_AREA_BOTTOM = (16 * BLOCK); +const int PLAY_AREA_LEFT = (0 * BLOCK); +const int PLAY_AREA_RIGHT = (32 * BLOCK); +const int PLAY_AREA_WIDTH = PLAY_AREA_RIGHT - PLAY_AREA_LEFT; +const int PLAY_AREA_HEIGHT = PLAY_AREA_BOTTOM - PLAY_AREA_TOP; +const int PLAY_AREA_CENTER_X = PLAY_AREA_LEFT + (PLAY_AREA_WIDTH / 2); +const int PLAY_AREA_CENTER_FIRST_QUARTER_X = (PLAY_AREA_WIDTH / 4); +const int PLAY_AREA_CENTER_THIRD_QUARTER_X = (PLAY_AREA_WIDTH / 4) * 3; +const int PLAY_AREA_CENTER_Y = PLAY_AREA_TOP + (PLAY_AREA_HEIGHT / 2); +const int PLAY_AREA_FIRST_QUARTER_Y = PLAY_AREA_HEIGHT / 4; +const int PLAY_AREA_THIRD_QUARTER_Y = (PLAY_AREA_HEIGHT / 4) * 3; + +#define BORDER_TOP 0 +#define BORDER_RIGHT 1 +#define BORDER_BOTTOM 2 +#define BORDER_LEFT 3 + +// Anclajes de pantalla +const int GAMECANVAS_CENTER_X = GAMECANVAS_WIDTH / 2; +const int GAMECANVAS_FIRST_QUARTER_X = GAMECANVAS_WIDTH / 4; +const int GAMECANVAS_THIRD_QUARTER_X = (GAMECANVAS_WIDTH / 4) * 3; +const int GAMECANVAS_CENTER_Y = GAMECANVAS_HEIGHT / 2; +const int GAMECANVAS_FIRST_QUARTER_Y = GAMECANVAS_HEIGHT / 4; +const int GAMECANVAS_THIRD_QUARTER_Y = (GAMECANVAS_HEIGHT / 4) * 3; + +// Secciones del programa +#define SECTION_PROG_LOGO 0 +#define SECTION_PROG_INTRO 1 +#define SECTION_PROG_TITLE 2 +#define SECTION_PROG_GAME 3 +#define SECTION_PROG_QUIT 4 + +// Colores +const color_t borderColor = {0x27, 0x27, 0x36}; +const color_t black = {0xFF, 0xFF, 0xFF}; + +#endif \ No newline at end of file diff --git a/source/director.cpp b/source/director.cpp index 8e1e385..99a6a24 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -7,19 +7,19 @@ // Constructor Director::Director(std::string path) { - // Inicializa la ruta - setExecutablePath(path); - // Crea el objeto que controla los ficheros de recursos - asset = new Asset(executablePath); - - // Establece la lista de ficheros - setFileList(); + asset = new Asset(path.substr(0, path.find_last_of("\\/"))); // Si falta algún fichero no inicia el programa - Uint8 section = SECTION_PROG_GAME; - if (!asset->check()) - section = SECTION_PROG_QUIT; + if (!setFileList()) + { + section.name = SECTION_PROG_QUIT; + } + else + { + section.name = SECTION_PROG_GAME; + section.subsection = 0; + } // Crea el puntero a la estructura y carga el fichero de configuración options = new options_t; @@ -27,22 +27,21 @@ Director::Director(std::string path) options->windowSize = 2; options->filter = FILTER_NEAREST; options->vSync = true; - options->screenWidth = GAME_WIDTH * options->windowSize; - options->screenHeight = GAME_HEIGHT * options->windowSize; + options->screenWidth = GAMECANVAS_WIDTH * options->windowSize; + options->screenHeight = GAMECANVAS_HEIGHT * options->windowSize; options->integerScale = true; options->keepAspect = true; - // Crea los objetos - input = new Input(asset->get("gamecontrollerdb.txt")); - // Inicializa SDL initSDL(); // Inicializa JailAudio initJailAudio(); - - // Inicializa el resto de variables - init(section); + + // Crea los objetos + input = new Input(asset->get("gamecontrollerdb.txt")); + initInput(); + screen = new Screen(window, renderer, options, GAMECANVAS_WIDTH, GAMECANVAS_HEIGHT); } Director::~Director() @@ -58,13 +57,8 @@ Director::~Director() } // Inicia las variables necesarias para arrancar el programa -void Director::init(Uint8 name) +void Director::initInput() { - // Sección - section.name = name; - section.subsection = 0; - - // Controles input->bindKey(INPUT_UP, SDL_SCANCODE_UP); input->bindKey(INPUT_DOWN, SDL_SCANCODE_DOWN); input->bindKey(INPUT_LEFT, SDL_SCANCODE_LEFT); @@ -101,7 +95,6 @@ bool Director::initSDL() // Inicializa SDL if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER | SDL_INIT_AUDIO) < 0) - //if (SDL_Init(SDL_INIT_EVERYTHING) < 0) { printf("SDL could not initialize!\nSDL Error: %s\n", SDL_GetError()); success = false; @@ -156,13 +149,15 @@ bool Director::initSDL() } // Crea el indice de ficheros -void Director::setFileList() +bool Director::setFileList() { asset->add("/media/font/smb2.png", font); asset->add("/media/font/smb2.txt", font); asset->add("/media/font/debug.png", font); asset->add("/media/font/debug.txt", font); + asset->add("/data/gamecontrollerdb.txt", data); + asset->add("/data/room/01.room", room); asset->add("/data/room/02.room", room); asset->add("/data/room/03.room", room); @@ -173,22 +168,22 @@ void Director::setFileList() asset->add("/data/room/03.tmx", room); asset->add("/data/room/04.tmx", room); asset->add("/data/room/05.tmx", room); + asset->add("/media/tilesets/standard.png", bitmap); + asset->add("/media/enemies/paco.png", bitmap); asset->add("/media/enemies/paco.ani", data); asset->add("/media/enemies/chip.png", bitmap); asset->add("/media/enemies/chip.ani", data); asset->add("/media/enemies/wave.png", bitmap); asset->add("/media/enemies/wave.ani", data); + asset->add("/media/player/player01.png", bitmap); asset->add("/media/player/player01.ani", data); + asset->add("/media/items/items.png", bitmap); -} -// Establece el valor de la variable -void Director::setExecutablePath(std::string path) -{ - executablePath = path.substr(0, path.find_last_of("\\/")); + return asset->check(); } // Obtiene el valor de la variable diff --git a/source/director.h b/source/director.h index 7b9e3f2..f4e30d7 100644 --- a/source/director.h +++ b/source/director.h @@ -10,14 +10,11 @@ #include "input.h" #include "game.h" #include "asset.h" +#include "const.h" #ifndef DIRECTOR_H #define DIRECTOR_H -#define WINDOW_CAPTION "JailDoctor's Dilemma" -#define GAME_WIDTH 256 -#define GAME_HEIGHT 192 - // Director class Director { @@ -34,23 +31,17 @@ private: std::string executablePath; // Path del ejecutable section_t section; // Sección y subsección actual del programa; - // Inicia las variables necesarias para arrancar el programa - void init(Uint8 name); - // Inicializa jail_audio void initJailAudio(); // Arranca SDL y crea la ventana bool initSDL(); + // Inicializa el objeto Input + void initInput(); + // Crea el indice de ficheros - void setFileList(); - - // Comprueba que todos los ficheros existen - bool checkFileList(); - - // Establece el valor de la variable - void setExecutablePath(std::string path); + bool setFileList(); // Obtiene el valor de la variable Uint8 getSubsection(); @@ -73,9 +64,6 @@ private: // Ejecuta la seccion de juego donde se juega void runGame(); - // Comprueba los ficheros del vector de ficheros que coinciden con una ruta dada - bool checkFolder(std::string name, std::string path); - public: // Constructor Director(std::string path); diff --git a/source/player.h b/source/player.h index 1fd1209..5eb577d 100644 --- a/source/player.h +++ b/source/player.h @@ -6,6 +6,7 @@ #include "room.h" #include "animatedsprite.h" #include "input.h" +#include "const.h" #include #ifndef PLAYER_H diff --git a/source/room.h b/source/room.h index 06fc32c..25cdb97 100644 --- a/source/room.h +++ b/source/room.h @@ -6,6 +6,7 @@ #include "enemy.h" #include "item.h" #include "item_tracker.h" +#include "const.h" #include #include diff --git a/source/screen.cpp b/source/screen.cpp index 3b33e81..feb1b15 100644 --- a/source/screen.cpp +++ b/source/screen.cpp @@ -3,15 +3,15 @@ #include // Constructor -Screen::Screen(SDL_Window *window, SDL_Renderer *renderer, options_t *options) +Screen::Screen(SDL_Window *window, SDL_Renderer *renderer, options_t *options, int gameInternalResX, int gameInternalResY) { // Inicializa variables this->window = window; this->renderer = renderer; this->options = options; - gameCanvasWidth = 256; - gameCanvasHeight = 192; + gameCanvasWidth = gameInternalResX; + gameCanvasHeight = gameInternalResY; // Establece el modo de video setVideoMode(options->fullScreenMode); @@ -24,6 +24,14 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer, options_t *options) gameCanvas = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, gameCanvasWidth, gameCanvasHeight); if (gameCanvas == NULL) printf("TitleSurface could not be created!\nSDL Error: %s\n", SDL_GetError()); + + // Calcula los anclajes + anchor.left = 0; + anchor.right = gameCanvasWidth; + anchor.center = gameCanvasWidth / 2; + anchor.top = 0; + anchor.bottom = gameCanvasHeight; + anchor.middle = gameCanvasHeight / 2; } // Destructor diff --git a/source/screen.h b/source/screen.h index 04f416f..113d21b 100644 --- a/source/screen.h +++ b/source/screen.h @@ -6,6 +6,16 @@ #ifndef SCREEN_H #define SCREEN_H +struct anchor_t +{ + int left; // Parte izquierda de la pantalla de juego + int right; // Parte drecha de la pantalla de juego + int center; // Parte central horizontal de la pantalla de juego + int top; // Parte superior de la pantalla de juego + int bottom; // Parte infoerior de la pantalla de juego + int middle; // Parte central vertical de la pantalla de juego +}; + // Clase Screen class Screen { @@ -15,16 +25,17 @@ private: SDL_Texture *gameCanvas; // Textura para completar la ventana de juego hasta la pantalla completa options_t *options; // Variable con todas las opciones del programa - int screenWidth; // Ancho de la pantalla - int screenHeight; // Alto de la pantalla - int gameCanvasWidth; // Ancho de la textura donde se dibuja el juego - int gameCanvasHeight; // Alto de la textura donde se dibuja el juego - SDL_Rect dest; // Coordenadas donde se va a dibujar la textura del juego + int screenWidth; // Ancho de la pantalla o ventana + int screenHeight; // Alto de la pantalla o ventana + int gameCanvasWidth; // Resolución interna del juego. Es el ancho de la textura donde se dibuja el juego + int gameCanvasHeight; // Resolución interna del juego. Es el alto de la textura donde se dibuja el juego + anchor_t anchor; // Variable con los anclajes de la pantalla + SDL_Rect dest; // Coordenadas donde se va a dibujar la textura del juego sobre la pantalla o ventana color_t borderColor; // Color del borde añadido a la textura de juego para rellenar la pantalla public: // Constructor - Screen(SDL_Window *window, SDL_Renderer *renderer, options_t *options); + Screen(SDL_Window *window, SDL_Renderer *renderer, options_t *options, int gameInternalResX, int gameInternalResY); // Destructor ~Screen(); diff --git a/source/utils.h b/source/utils.h index 2acf21f..97580dc 100644 --- a/source/utils.h +++ b/source/utils.h @@ -56,8 +56,8 @@ struct options_t int windowSize; // Contiene el valor por el que se multiplica el tamaño de la ventana Uint32 filter; // Filtro usado para el escalado de la imagen bool vSync; // Indica si se quiere usar vsync o no - int screenWidth; // Ancho de la pantalla/ventana - int screenHeight; // Alto de la pantalla/ventana + int screenWidth; // Ancho de la pantalla o ventana + int screenHeight; // Alto de la pantalla o ventana bool integerScale; // Indica si el escalado de la imagen ha de ser entero en el modo a pantalla completa bool keepAspect; // Indica si se ha de mantener la relación de aspecto al poner el modo a pantalla completa };