From 55c26df2a50209ade6672e45df754700c44f070c Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Mon, 8 Aug 2022 18:39:51 +0200 Subject: [PATCH] =?UTF-8?q?Actualizado=20el=20fichero=20utils.h=20a=20una?= =?UTF-8?q?=20versi=C3=B3n=20posterior?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/utils.cpp | 107 +++++++++++++++++++++++++++++++++++++++++------ source/utils.h | 73 ++++++++++++++++++++++---------- 2 files changed, 147 insertions(+), 33 deletions(-) diff --git a/source/utils.cpp b/source/utils.cpp index ca82b32..a90cf2d 100644 --- a/source/utils.cpp +++ b/source/utils.cpp @@ -9,7 +9,7 @@ double distanceSquared(int x1, int y1, int x2, int y2) } // Detector de colisiones entre dos circulos -bool checkCollision(Circle &a, Circle &b) +bool checkCollision(circle_t &a, circle_t &b) { // Calcula el radio total al cuadrado int totalRadiusSquared = a.r + b.r; @@ -27,12 +27,12 @@ bool checkCollision(Circle &a, Circle &b) } // Detector de colisiones entre un circulo y un rectangulo -bool checkCollision(Circle &a, SDL_Rect &b) +bool checkCollision(circle_t &a, SDL_Rect &b) { - //Closest point on collision box + // Closest point on collision box int cX, cY; - //Find closest x offset + // Find closest x offset if (a.x < b.x) { cX = b.x; @@ -46,7 +46,7 @@ bool checkCollision(Circle &a, SDL_Rect &b) cX = a.x; } - //Find closest y offset + // Find closest y offset if (a.y < b.y) { cY = b.y; @@ -60,33 +60,33 @@ bool checkCollision(Circle &a, SDL_Rect &b) cY = a.y; } - //If the closest point is inside the circle + // If the closest point is inside the circle_t if (distanceSquared(a.x, a.y, cX, cY) < a.r * a.r) { - //This box and the circle have collided + // This box and the circle_t have collided return true; } - //If the shapes have not collided + // If the shapes have not collided return false; } // Detector de colisiones entre un dos rectangulos bool checkCollision(SDL_Rect &a, SDL_Rect &b) { - //Calculate the sides of rect A + // Calculate the sides of rect A int leftA = a.x; int rightA = a.x + a.w; int topA = a.y; int bottomA = a.y + a.h; - //Calculate the sides of rect B + // Calculate the sides of rect B int leftB = b.x; int rightB = b.x + b.w; int topB = b.y; int bottomB = b.y + b.h; - //If any of the sides from A are outside of B + // If any of the sides from A are outside of B if (bottomA <= topB) { return false; @@ -107,6 +107,89 @@ bool checkCollision(SDL_Rect &a, SDL_Rect &b) return false; } - //If none of the sides from A are outside B + // If none of the sides from A are outside B return true; +} + +// Carga un archivo de imagen en una textura +bool loadTextureFromFile(LTexture *texture, std::string path, SDL_Renderer *renderer) +{ + bool success = true; + if (!texture->loadFromFile(path, renderer)) + { + printf("Failed to load %s texture!\n", path.c_str()); + success = false; + } + return success; +} + +// Devuelve un color_t a partir de un string +color_t stringToColor(std::string str) +{ + color_t color = {0x00, 0x00, 0x00}; + if (str == "black") + { + color = {0x00, 0x00, 0x00}; + } + else if (str == "light_black") + { + color = {0x3C, 0x35, 0x1F}; + } + else if (str == "blue") + { + color = {0x31, 0x33, 0x90}; + } + else if (str == "light_blue") + { + color = {0x15, 0x59, 0xDB}; + } + else if (str == "red") + { + color = {0xA7, 0x32, 0x11}; + } + else if (str == "light_red") + { + color = {0xD8, 0x55, 0x25}; + } + else if (str == "purple") + { + color = {0xA1, 0x55, 0x89}; + } + else if (str == "light_purple") + { + color = {0xCD, 0x7A, 0x50}; + } + else if (str == "green") + { + color = {0x62, 0x9A, 0x31}; + } + else if (str == "light_green") + { + color = {0x9C, 0xD3, 0x3C}; + } + else if (str == "cyan") + { + color = {0x28, 0xA4, 0xCB}; + } + else if (str == "light_cyan") + { + color = {0x65, 0xDC, 0xD6}; + } + else if (str == "yellow") + { + color = {0xE8, 0xBC, 0x50}; + } + else if (str == "light_yellow") + { + color = {0xF1, 0xE7, 0x82}; + } + else if (str == "white") + { + color = {0xBF, 0xBF, 0xBD}; + } + else if (str == "light_white") + { + color = {0xF2, 0xF1, 0xED}; + } + return color; } \ No newline at end of file diff --git a/source/utils.h b/source/utils.h index 5e71cca..ae63eba 100644 --- a/source/utils.h +++ b/source/utils.h @@ -1,35 +1,40 @@ #pragma once #include "ifdefs.h" +#include "ltexture.h" +#include #ifndef UTILS_H #define UTILS_H +#define DIFFICULTY_EASY 0 +#define DIFFICULTY_NORMAL 1 +#define DIFFICULTY_HARD 2 + // Estructura para definir un circulo -struct Circle +struct circle_t { - Uint16 x; - Uint16 y; - Uint8 r; + int x; + int y; + int r; }; -// Estructura para definir todas las entradas que aceptará el programa -struct Input +// Estructura para definir un color +struct color_t { - Uint8 up; - Uint8 down; - Uint8 left; - Uint8 right; - Uint8 escape; - Uint8 pause; - Uint8 fire; - Uint8 fireLeft; - Uint8 fireRight; - Uint8 accept; - Uint8 cancel; + Uint8 r; + Uint8 g; + Uint8 b; +}; + +// Estructura para saber la seccion y subseccion del programa +struct section_t +{ + Uint8 name; + Uint8 subsection; }; // Estructura para mapear el teclado usado en la demo -struct DemoKeys +struct demoKeys_t { Uint8 left; Uint8 right; @@ -39,16 +44,42 @@ struct DemoKeys Uint8 fireRight; }; +// Estructura para albergar métodos de control +struct input_t +{ + int id; // Identificador en el vector de mandos + std::string name; // Nombre del dispositivo + Uint8 deviceType; // Tipo de dispositivo (teclado o mando) +}; + +// Estructura con todas las opciones de configuración del programa +struct options_t +{ + Uint8 difficulty; // Dificultad del juego + input_t input[2]; // Modo de control (teclado o mando) + Uint8 language; // Idioma usado en el juego + Uint32 fullScreenMode; // Contiene el valor del modo de pantalla completa + Uint8 windowSize; // Contiene el valor del 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 +}; + // Calcula el cuadrado de la distancia entre dos puntos double distanceSquared(int x1, int y1, int x2, int y2); // Detector de colisiones entre dos circulos -bool checkCollision(Circle &a, Circle &b); +bool checkCollision(circle_t &a, circle_t &b); // Detector de colisiones entre un circulo y un rectangulo -bool checkCollision(Circle &a, SDL_Rect &b); +bool checkCollision(circle_t &a, SDL_Rect &b); // Detector de colisiones entre un dos rectangulos -bool checkCollision(SDL_Rect a, SDL_Rect b); +bool checkCollision(SDL_Rect &a, SDL_Rect &b); + +// Carga un archivo de imagen en una textura +bool loadTextureFromFile(LTexture *texture, std::string path, SDL_Renderer *renderer); + +// Devuelve un color_t a partir de un string +color_t stringToColor(std::string str); #endif \ No newline at end of file