working on class sections

This commit is contained in:
2021-04-17 23:46:14 +02:00
parent 2330820a15
commit e9ff516b1d
18 changed files with 329 additions and 6375 deletions

View File

@@ -1,6 +1,8 @@
#pragma once
#include "sprite.h"
#include "text.h"
#include "input.h"
#include "jail_audio.h"
#ifndef MENU_H
#define MENU_H
@@ -8,65 +10,73 @@
// 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);
// Coloca el selector en una posición específica
void setSelectorPos(Uint8 index);
private:
int mPosX; // Posición en el eje X de la primera letra del primer elemento
int mPosY; // Posición en el eje Y de la primera letra del primer elemento
std::string mName; // Nombre del menu
Uint8 mTotalItems; // Numero total de items del menu
int mItemSelected; // Índice del item del menu que ha sido seleccionado
Uint8 mDefaultActionWhenCancel; // Indice del item del menu que se selecciona cuando se cancela el menu
Uint8 mVerticalPadding; // Espacio de separacion entre items
Uint8 mBackgroundType; // Tipo de fondo para el menu
Sprite *mSelectorSprite; // Sprite con los graficos del selector
Text *mText; // Texto para poder escribir los items del menu
SDL_Renderer *mRenderer; // Puntero al renderizador de la ventana
std::string *mFileList; // Lista de ficheros
bool mIsCentered; // Variable para saber si el menu debe estar centrado respecto a un punto
int mCenter; // Centro del menu
bool mAreElementsCentered; // Variable para saber si los elementos van centrados
Uint16 mWidestItem; // Anchura del elemento más ancho
JA_Sound mSoundAccept; // Sonido al aceptar o elegir una opción del menu
JA_Sound mSoundCancel; // Sonido al cancelar el menu
JA_Sound mSoundMove; // Sonido al mover el selector
Input *mInput; // Gestor de eventos de entrada de teclado o gamepad
struct rectangle
{
SDL_Rect rect; // Rectangulo
Uint8 r; // Rojo
Uint8 g; // Verde
Uint8 b; // Azul
Uint8 a; // Transparencia
};
rectangle mRectBG; // Rectangulo de fondo del menu
struct item
{
std::string label; // Texto
int x; // Posición en el eje X de la primera letra del elemento
int y; // Posición en el eje Y de la primera letra del elemento
Uint8 w; // Ancho del elemento
Uint8 h; // Alto del elemento
Uint8 hPaddingUp; // Espaciado sobre el elemento
Uint8 hPaddingDown; // Espaciado bajo el elemento
};
item mItem[10]; // Estructura para cada elemento del menu
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; // Cantidad de pixeles que se desplaza el selector en cada salto: (target - origin) / numJumps
bool moving; // Indica si el selector está avanzando hacia el destino
Uint8 index; // Elemento del menu que tiene el foco
SDL_Rect rect; // Rectangulo del selector
Uint8 r; // Cantidad de color rojo para el rectangulo del selector
Uint8 g; // Cantidad de color verde para el rectangulo del selector
Uint8 b; // Cantidad de color azul para el rectangulo del selector
Uint8 a; // Cantidad de transparencia para el rectangulo del selector
Uint8 itemR; // Cantidad de color rojo para el texto del elemento seleccionado
Uint8 itemG; // Cantidad de color verde para el texto del elemento seleccionado
Uint8 itemB; // Cantidad de color azul para el texto del elemento seleccionado
};
selector mSelector; // Variables para pintar el selector del menu
// Carga los recursos necesarios para la sección 'Title'
bool loadMedia();
// Establece el valor de la variable
void setTotalItems(int num);
@@ -97,94 +107,66 @@ private:
// Obtiene la anchura del elemento más ancho del menu
Uint16 getWidestItem();
// Posicion X/Y del texto del primer elemento del menu
int mPosX; // En esta posición se pinta la primera letra del primer elemento
int mPosY;
// Gestiona la entrada de teclado y mando durante el menu
void checkMenuInput(Menu *menu);
// Nombre del menu
std::string mName;
public:
// Constructor
Menu(SDL_Renderer *renderer, Text *text, Input *input, std::string *fileList);
// Numero de items del menu
Uint8 mTotalItems;
// Destructor
~Menu();
// Item del menu que ha sido seleccionado
Uint8 mItemSelected;
// Inicializador
void init(std::string name, int x, int y, int backgroundType);
// Item del menu seleccionado cuando se cancela el menu
Uint8 mDefaultActionWhenCancel;
// Obtiene el nombre del menu
std::string getName();
// Espacio de separacion entre items
Uint8 mVerticalPadding;
// Obtiene el valor de la variable
Uint8 getItemSelected();
// Tipo de fondo para el menu
Uint8 mBackgroundType;
// Deja el menu apuntando al primer elemento
void reset();
// Sprite con los graficos del selector
//Sprite mSelectorSprite;
// Deja el menu sin elemento seleccionado
void deselectItem();
struct rectangle
{
SDL_Rect rect;
Uint8 r; // Rojo
Uint8 g; // Verde
Uint8 b; // Azul
Uint8 a; // Transparencia
};
// Gestiona la entrada de teclado y mando durante el menu
void checkInput();
rectangle mRectBG; // Rectangulo de fondo del menu
// Actualiza la logica del menu
void update();
// Estructura para cada elemento del menu
struct item
{
std::string label;
int x;
int y;
Uint8 w;
Uint8 h;
Uint8 hPaddingUp;
Uint8 hPaddingDown;
};
// Pinta el menu en pantalla
void render();
item mItem[10];
// Establece el color del rectangulo de fondo
void setBackgroundColor(int r, int g, int b, int alpha);
// Texto para poder escribir los items del menu
Text *mText;
// Establece el color del rectangulo del selector
void setSelectorColor(int r, int g, int b, int alpha);
// Puntero al renderizador de la ventana
SDL_Renderer *mRenderer;
// Establece el color del texto del selector
void setSelectorTextColor(int r, int g, int b);
// Variable para saber si el menu debe estar centrado respecto a un punto
bool mIsCentered;
// Centra el menu respecto a un punto
void centerMenu(int value);
// Centro del menu
int mCenter;
// Centra los elementos del menu
void centerMenuElements();
// Variable para saber si los elementos van centrados
bool mAreElementsCentered;
// Añade un item al menu
void addItem(std::string text, const Uint8 hPaddingUp = 0, const Uint8 hPaddingDown = 0);
// Anchura del elemento más ancho
Uint16 mWidestItem;
// Cambia el texto de un item
void setItemCaption(Uint8 index, std::string text);
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; // (target - origin) / numJumps
bool moving; // Indica si el selector está avanzando hacia el destino
Uint8 index; // Elemento del menu que tiene el foco
SDL_Rect rect;
Uint8 r; // Rojo
Uint8 g; // Verde
Uint8 b; // Azul
Uint8 a; // Transparencia
Uint8 itemR; // Rojo
Uint8 itemG; // Verde
Uint8 itemB; // Azul
};
// Establece el indice del item que se usará por defecto al cancelar el menu
void setDefaultActionWhenCancel(Uint8 item);
selector mSelector;
// Coloca el selector en una posición específica
void setSelectorPos(Uint8 index);
};
#endif