forked from jaildesigner-jailgames/coffee_crisis
release v1.3 beta 1
This commit is contained in:
190
source/menu.h
Normal file
190
source/menu.h
Normal file
@@ -0,0 +1,190 @@
|
||||
#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();
|
||||
|
||||
// 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;
|
||||
|
||||
// Nombre del menu
|
||||
std::string mName;
|
||||
|
||||
// Numero de items del menu
|
||||
Uint8 mTotalItems;
|
||||
|
||||
// Item del menu que ha sido seleccionado
|
||||
Uint8 mItemSelected;
|
||||
|
||||
// Item del menu seleccionado cuando se cancela el menu
|
||||
Uint8 mDefaultActionWhenCancel;
|
||||
|
||||
// Espacio de separacion entre items
|
||||
Uint8 mVerticalPadding;
|
||||
|
||||
// Tipo de fondo para el menu
|
||||
Uint8 mBackgroundType;
|
||||
|
||||
// Sprite con los graficos del selector
|
||||
//Sprite mSelectorSprite;
|
||||
|
||||
struct rectangle
|
||||
{
|
||||
SDL_Rect rect;
|
||||
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;
|
||||
int x;
|
||||
int y;
|
||||
Uint8 w;
|
||||
Uint8 h;
|
||||
Uint8 hPaddingUp;
|
||||
Uint8 hPaddingDown;
|
||||
};
|
||||
|
||||
item mItem[10];
|
||||
|
||||
// Texto para poder escribir los items del menu
|
||||
Text *mText;
|
||||
|
||||
// Puntero al renderizador de la ventana
|
||||
SDL_Renderer *mRenderer;
|
||||
|
||||
// Variable para saber si el menu debe estar centrado respecto a un punto
|
||||
bool mIsCentered;
|
||||
|
||||
// Centro del menu
|
||||
int mCenter;
|
||||
|
||||
// Variable para saber si los elementos van centrados
|
||||
bool mAreElementsCentered;
|
||||
|
||||
// Anchura del elemento más ancho
|
||||
Uint16 mWidestItem;
|
||||
|
||||
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
|
||||
};
|
||||
|
||||
selector mSelector;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user