From a180f1db46bc84158aefbb3d41ed2d38f5f151c7 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Mon, 8 Aug 2022 18:41:57 +0200 Subject: [PATCH] Quitado el fichero menu.h y sus referencias --- source/director.h | 6 - source/menu.cpp | 431 ---------------------------------------------- source/menu.h | 161 ----------------- 3 files changed, 598 deletions(-) delete mode 100644 source/menu.cpp delete mode 100644 source/menu.h diff --git a/source/director.h b/source/director.h index fe1624f..be65971 100644 --- a/source/director.h +++ b/source/director.h @@ -6,7 +6,6 @@ #include "player.h" #include "map.h" #include "text.h" -#include "menu.h" #include "const.h" #include "jail_audio.h" #include "utils.h" @@ -24,11 +23,6 @@ private: Text *white; }; - struct _menu // Objetos menu - { - Menu *title; // Menu de la pantalla de título - }; - struct _options // Variables relacionadas con las opciones del juego { Uint32 fullScreenMode; // Guarda el valor elegido para el modo de pantalla completa diff --git a/source/menu.cpp b/source/menu.cpp deleted file mode 100644 index a1aeb79..0000000 --- a/source/menu.cpp +++ /dev/null @@ -1,431 +0,0 @@ -#include "ifdefs.h" -#include "const.h" -#include "text.h" -#include "menu.h" - -// Constructor -Menu::Menu() -{ - init("", 0, 0, 0, nullptr, nullptr, nullptr); -} - -Menu::~Menu() -{ - mRenderer = nullptr; - mText = nullptr; -} - -// Inicializador -void Menu::init(std::string name, int x, int y, int backgroundType, LTexture *texture, SDL_Renderer *renderer, Text *text) -{ - // Inicia variables - mName = name; - mSelector.index = 0; - mTotalItems = 0; - mItemSelected = MENU_NO_OPTION; - mVerticalPadding = 1; - mPosX = x; - mPosY = y; - mRectBG.x = 0; - mRectBG.y = 0; - mRectBG.w = 0; - mRectBG.h = 0; - mRectBG.r = 0; - mRectBG.g = 0; - mRectBG.b = 0; - mSelector.rect.x = 0; - mSelector.rect.y = 0; - mSelector.rect.w = 0; - mSelector.rect.h = 0; - mSelector.rect.r = 0; - mSelector.rect.g = 0; - mSelector.rect.b = 0; - mSelector.rect.a = 255; - mBackgroundType = backgroundType; - mText = text; - mRenderer = renderer; - mIsCentered = false; - mAreElementsCentered = false; - mCenter = x + ((SCREEN_WIDTH - x) / 2); - mWidestItem = 0; - - // Selector - mSelector.origin = 0; - mSelector.target = 0; - mSelector.y = 0; - mSelector.numJumps = 4; - mSelector.despY = 0; - mSelector.moving = false; - - // Elementos del menu - for (int i = 0; i < 10; i++) - { - mItem[i].label = ""; - mItem[i].w = 0; - mItem[i].h = 0; - mItem[i].x = 0; - mItem[i].y = 0; - mItem[i].hPaddingUp = 0; - mItem[i].hPaddingDown = 0; - } -} - -// Obtiene el nombre del menu -std::string Menu::getName() -{ - return mName; -} - -// Obtiene el valor de la variable -Uint8 Menu::getItemSelected() -{ - return mItemSelected; -} - -// Actualiza la posicion y el estado del selector -void Menu::updateSelector() -{ - if (mSelector.moving) - { - mSelector.y += mSelector.despY; - if (mSelector.despY > 0) // Va hacia abajo - { - if (mSelector.y > mSelector.target) // Ha llegado al destino - { - mSelector.origin = mSelector.y = mSelector.target; - mSelector.moving = false; - } - } - if (mSelector.despY < 0) // Va hacia abajo - { - if (mSelector.y < mSelector.target) // Ha llegado al destino - { - mSelector.origin = mSelector.y = mSelector.target; - mSelector.moving = false; - } - } - mSelector.rect.y = int(mSelector.y) - 1; - } - else - { - mSelector.rect.y = int(mSelector.y) - 1; - } -} - -// Establece el origen del selector -void Menu::setSelectorOrigin(int value) -{ - mSelector.origin = value; -} - -// Establece el destino del selector -void Menu::setSelectorTarget(int value) -{ - mSelector.target = value; -} - -// Coloca el selector en una posición específica -void Menu::setSelectorPos(Uint8 index) -{ - if (index < mTotalItems) - { - mSelector.index = index; - mSelector.y = mSelector.origin = mSelector.target = mItem[mSelector.index].y; - mSelector.moving = false; - } -} - -// Obtiene la anchura del elemento más ancho del menu -Uint16 Menu::getWidestItem() -{ - Uint16 result = 0; - - // Obtenemos la anchura del item mas ancho - for (Uint8 i = 0; i < mTotalItems; i++) - { - if (mItem[i].w > result) - { - result = mItem[i].w; - } - } - - return result; -} - -// Deja el menu apuntando al primer elemento -void Menu::reset() -{ - mItemSelected = MENU_NO_OPTION; - mSelector.index = 0; - mSelector.origin = mSelector.target = mSelector.y = mItem[0].y; - mSelector.moving = false; -} - -// Deja el menu sin elemento seleccionado -void Menu::deselectItem() -{ - mItemSelected = MENU_NO_OPTION; -} - -// Actualiza el menu para recolocarlo correctamente y establecer el tamaño -void Menu::reorganize() -{ - setRectSize(); - if (mIsCentered) - centerMenu(mCenter); - if (mAreElementsCentered) - centerMenuElements(); -} - -// Deja el menu apuntando al siguiente elemento -bool Menu::increaseSelectorIndex() -{ - bool success = false; - mSelector.y = mSelector.origin = mItem[mSelector.index].y; - - if (mSelector.index < (mTotalItems - 1)) - { - mSelector.index++; - success = true; - } - - mSelector.target = mItem[mSelector.index].y; - mSelector.despY = (mSelector.target - mSelector.origin) / mSelector.numJumps; - mSelector.moving = true; - return success; -} - -// Deja el menu apuntando al elemento anterior -bool Menu::decreaseSelectorIndex() -{ - bool success = false; - mSelector.y = mSelector.origin = mItem[mSelector.index].y; - - if (mSelector.index > 0) - { - mSelector.index--; - success = true; - } - - mSelector.target = mItem[mSelector.index].y; - mSelector.despY = (mSelector.target - mSelector.origin) / mSelector.numJumps; - mSelector.moving = true; - return success; -} - -// Comprueba la entrada (teclado, gamepad) y actua en consecuencia -bool Menu::checkInput(Uint8 input) -{ - bool success = false; - switch (input) - { - case INPUT_UP: - success = decreaseSelectorIndex(); - break; - case INPUT_DOWN: - success = increaseSelectorIndex(); - break; - case INPUT_ACCEPT: - mItemSelected = mSelector.index; - break; - case INPUT_CANCEL: - mItemSelected = mDefaultActionWhenCancel; - break; - } - return success; -} - -// Actualiza la logica del menu -void Menu::update() -{ - updateSelector(); -} - -// Pinta el menu en pantalla -void Menu::render() -{ - SDL_Rect rect = {mRectBG.x, mRectBG.y, mRectBG.w, mRectBG.h}; - - // Rendereritza el fondo del menu - if (mBackgroundType == MENU_BACKGROUND_SOLID) - { - SDL_SetRenderDrawColor(mRenderer, mRectBG.r, mRectBG.g, mRectBG.b, mRectBG.a); - SDL_RenderFillRect(mRenderer, &rect); - } - - SDL_Rect rect2 = {mSelector.rect.x, mSelector.rect.y, mSelector.rect.w, mSelector.rect.h}; - // Renderiza el rectangulo del selector - SDL_SetRenderDrawColor(mRenderer, mSelector.rect.r, mSelector.rect.g, mSelector.rect.b, mSelector.rect.a); - SDL_RenderFillRect(mRenderer, &rect2); - - // Renderitza el text - for (Uint8 i = 0; i < mTotalItems; i++) - { - if (i == mSelector.index) - { - mText->writeColored(mItem[i].x, mItem[i].y, mItem[i].label, mSelector.itemR, mSelector.itemG, mSelector.itemB); - } - else - { - mText->write(mItem[i].x, mItem[i].y, mItem[i].label, 0); - } - } -} - -// Establece el rectangulo de fondo del menu y el selector -void Menu::setRectSize() -{ - Uint8 i = 0; - mRectBG.w = 0; - mRectBG.h = 0; - mSelector.rect.w = 0; - mSelector.rect.h = 0; - - // Obtenemos la anchura del item mas ancho y la altura de la suma de alturas de los items - for (i = 0; i < mTotalItems; i++) - { - if (mItem[i].w > mRectBG.w) - { - mRectBG.w = mItem[i].w; - } - mRectBG.h += mItem[i].h + mItem[i].hPaddingDown; - } - - // La anchura de la cadena más larga, mas un caracter, mas la anchura del sprite del selector - mRectBG.w += (mText->getHeight() * 1); // + mSelectorSprite.getWidth(); - - // La altura de la suma de los items mas un caracter y menos un pixel (porque el texto en realidad es de 7 pixeles) - mRectBG.h += (mText->getHeight() * 1) - 1; - - // La posición X es la del menú menos la anchura del sprite del selector y menos medio caracter - mRectBG.x = mPosX - (mText->getHeight() / 2); // - mSelectorSprite.getWidth(); - - // La posición Y es la del menu menos la altura de medio caracter i el padding - mRectBG.y = mPosY - (mText->getHeight() / 2) - mVerticalPadding; - - // Establecemos los valores del rectangulo del selector a partir de los valores del rectangulo de fondo - mSelector.rect.h = (mText->getHeight() * 1) + 1; - mSelector.rect.w = mRectBG.w; - mSelector.rect.x = mRectBG.x; -} - -// Establece el valor de la variable -void Menu::setTotalItems(int num) -{ - mTotalItems = num; -} - -// Establece el color del rectangulo de fondo -void Menu::setBackgroundColor(int r, int g, int b, int alpha) -{ - mRectBG.r = r; - mRectBG.g = g; - mRectBG.b = b; - mRectBG.a = alpha; -} - -// Establece el color del rectangulo del selector -void Menu::setSelectorColor(int r, int g, int b, int alpha) -{ - mSelector.rect.r = r; - mSelector.rect.g = g; - mSelector.rect.b = b; - mSelector.rect.a = alpha; -} - -// Establece el color del texto del selector -void Menu::setSelectorTextColor(int r, int g, int b) -{ - mSelector.itemR = r; - mSelector.itemG = g; - mSelector.itemB = b; -} - -// Centra el menu respecto un punto -void Menu::centerMenu(int value) -{ - mIsCentered = true; - mCenter = value; - - // Actualiza el rectangulo de fondo para recalcular las dimensiones - setRectSize(); - - // Obten el acho del menu - mWidestItem = getWidestItem(); - - // Establece la nueva posición centrada en funcion del elemento más ancho - mPosX = (value) - (mWidestItem / 2); - - // Reposiciona los elementos del menu - for (Uint8 i = 0; i < 10; i++) - { - mItem[i].x = mPosX; - } - - // Recalcula el rectangulo de fondo - setRectSize(); - - // Recoloca el selector - mSelector.origin = mSelector.target = mSelector.y = mItem[mSelector.index].y; - mSelector.moving = false; - //moveSelectorSprite(mSelector.index); -} - -// Centra los elementos del menu -void Menu::centerMenuElements() -{ - mAreElementsCentered = true; - - for (Uint8 i = 0; i < mTotalItems; i++) - { - //mItem[i].x = (mCenter - ((mText->lenght(mItem[i].label, 0)) / 2)); - mItem[i].x = (mCenter - (mItem[i].w / 2)); - } -} - -// Añade un item al menu -void Menu::addItem(std::string text, const Uint8 hPaddingUp, const Uint8 hPaddingDown) -{ - // Si es el primer item coge la posición y del propio menu - if (mTotalItems == 0) - { - mItem[mTotalItems].label = text; - mItem[mTotalItems].w = mText->lenght(mItem[mTotalItems].label, 0); - mItem[mTotalItems].h = mText->getHeight() + (mVerticalPadding * 2); - mItem[mTotalItems].x = mPosX; - mItem[mTotalItems].y = mPosY; - mItem[mTotalItems].hPaddingUp = hPaddingUp; - mItem[mTotalItems].hPaddingDown = hPaddingDown; - } - else - { - // En caso contrario, coge la posición y a partir del elemento anterior - if (mTotalItems < 10) - { - mItem[mTotalItems].label = text; - mItem[mTotalItems].w = mText->lenght(mItem[mTotalItems].label, 0); - mItem[mTotalItems].h = mText->getHeight() + (mVerticalPadding * 2); - mItem[mTotalItems].x = mPosX; - mItem[mTotalItems].y = mItem[mTotalItems - 1].y + mItem[mTotalItems - 1].h + mItem[mTotalItems - 1].hPaddingDown; - mItem[mTotalItems].hPaddingUp = hPaddingUp; - mItem[mTotalItems].hPaddingDown = hPaddingDown; - } - } - setTotalItems(mTotalItems + 1); - reorganize(); - setSelectorPos(0); -} - -// Cambia el texto de un item -void Menu::setItemCaption(Uint8 index, std::string text) -{ - mItem[index].label = text; - mItem[index].w = mText->lenght(mItem[index].label, 0); - reorganize(); -} - -// Establece el indice del itemm que se usará por defecto al cancelar el menu -void Menu::setDefaultActionWhenCancel(Uint8 item) -{ - mDefaultActionWhenCancel = item; -} \ No newline at end of file diff --git a/source/menu.h b/source/menu.h deleted file mode 100644 index ea203dd..0000000 --- a/source/menu.h +++ /dev/null @@ -1,161 +0,0 @@ -#pragma once -#include "sprite.h" -#include "text.h" - -#ifndef MENU_H -#define MENU_H - -// Clase menu -class Menu -{ -public: - // Constructor - Menu(); - - // Destructor - ~Menu(); - - // Inicializador - void init(std::string name, int x, int y, int backgroundType, LTexture *texture, SDL_Renderer *renderer, Text *text); - - // Obtiene el nombre del menu - std::string getName(); - - // Obtiene el valor de la variable - Uint8 getItemSelected(); - - // Deja el menu apuntando al primer elemento - void reset(); - - // Deja el menu sin elemento seleccionado - void deselectItem(); - - // Comprueba la entrada (teclado, gamepad) y actua en consecuencia - bool checkInput(Uint8 input); - - // Actualiza la logica del menu - void update(); - - // Pinta el menu en pantalla - void render(); - - // Establece el color del rectangulo de fondo - void setBackgroundColor(int r, int g, int b, int alpha); - - // Establece el color del rectangulo del selector - void setSelectorColor(int r, int g, int b, int alpha); - - // Establece el color del texto del selector - void setSelectorTextColor(int r, int g, int b); - - // Centra el menu respecto a un punto - void centerMenu(int value); - - // Centra los elementos del menu - void centerMenuElements(); - - // Añade un item al menu - void addItem(std::string text, const Uint8 hPaddingUp = 0, const Uint8 hPaddingDown = 0); - - // Cambia el texto de un item - void setItemCaption(Uint8 index, std::string text); - - // Establece el indice del item que se usará por defecto al cancelar el menu - void setDefaultActionWhenCancel(Uint8 item); - -private: - // Establece el valor de la variable - void setTotalItems(int num); - - // Establece el rectangulo de fondo del menu - void setRectSize(); - - // Actualiza el menu para recolocarlo correctamente y establecer el tamaño - void reorganize(); - - // Deja el menu apuntando al siguiente elemento - bool increaseSelectorIndex(); - - // Deja el menu apuntando al elemento anterior - bool decreaseSelectorIndex(); - - // Mueve el grafico del selector al elemento seleccionado - //void moveSelectorSprite(int pos); - - // Actualiza la posicion y el estado del selector - void updateSelector(); - - // Establece el origen del selector - void setSelectorOrigin(int value); - - // Establece el destino del selector - void setSelectorTarget(int value); - - // Coloca el selector en una posición específica - void setSelectorPos(Uint8 index); - - // Obtiene la anchura del elemento más ancho del menu - Uint16 getWidestItem(); - - bool mAreElementsCentered; // Variable para saber si los elementos del menu van centrados respecto a este - bool mIsCentered; // Variable para saber si el menu debe estar centrado respecto a un punto - int mCenter; // Centro del menu - int mPosX; // En esta posición del eje X se pinta la primera letra del primer elemento - int mPosY; // En esta posición del eje Y se pinta la primera letra del primer elemento - SDL_Renderer *mRenderer; // Puntero al renderizador de la ventana - std::string mName; // Nombre del menu - Text *mText; // Objeto de texto para poder escribir los items del menu - Uint16 mWidestItem; // Anchura del elemento más ancho - Uint8 mBackgroundType; // Tipo de fondo para el menu, visible o no - Uint8 mDefaultActionWhenCancel; // Item del menu que se selecciona cuando se cancela el menu - Uint8 mItemSelected; // Item del menu que ha sido seleccionado - Uint8 mTotalItems; // Numero de items del menu - Uint8 mVerticalPadding; // Espacio de separacion entre items - - struct rectangle - { - Uint8 x; // Posición en el eje X - Uint8 y; // Posición en el eje Y - Uint8 w; // Anchura - Uint8 h; // Altura - Uint8 r; // Rojo - Uint8 g; // Verde - Uint8 b; // Azul - Uint8 a; // Transparencia - }; - - rectangle mRectBG; // Rectangulo de fondo del menu - - // Estructura para cada elemento del menu - struct item - { - std::string label; // Texto del elemento - int x; // Posición en el eje X donde se empieza a escribir el texto - int y; // Posición en el eje Y donde se empieza a escribir el texto - Uint8 w; // Anchura del elemento - Uint8 h; // Altura del elemento - Uint8 hPaddingUp; // Espacio vacío arriba - Uint8 hPaddingDown; // Espacio vacío abajo - }; - - item mItem[10]; - - struct selector - { - double origin; // Coordenada de origen - double target; // Coordenada de destino - double y; // Coordenada actual - Uint8 numJumps; // Numero de pasos preestablecido para llegar al destino - double despY; // Desplazamiento en el eje Y que realiza el selector en cada iteración. (target - origin) / numJumps - bool moving; // Indica si el selector está avanzando hacia el destino - Uint8 index; // Elemento del menu que tiene el foco - rectangle rect; // Rectangulo del selectur - Uint8 itemR; // Color para el texto seleccionado. Rojo - Uint8 itemG; // Color para el texto seleccionado. Verde - Uint8 itemB; // Color para el texto seleccionado. Azul - }; - - selector mSelector; -}; - -#endif