working on options menu
This commit is contained in:
156
source/menu.cpp
156
source/menu.cpp
@@ -47,9 +47,11 @@ void Menu::init(std::string name, int x, int y, int backgroundType)
|
||||
mSelector.b = 0;
|
||||
mSelector.a = 255;
|
||||
mBackgroundType = backgroundType;
|
||||
mIsCentered = false;
|
||||
mAreElementsCentered = false;
|
||||
mCenter = x + ((SCREEN_WIDTH - x) / 2);
|
||||
mIsCenteredOnX = false;
|
||||
mIsCenteredOnY = false;
|
||||
mAreElementsCenteredOnX = false;
|
||||
mCenterX = x + ((SCREEN_WIDTH - x) / 2);
|
||||
mCenterY = y + ((SCREEN_HEIGHT - y) / 2);
|
||||
mWidestItem = 0;
|
||||
|
||||
// Selector
|
||||
@@ -60,15 +62,6 @@ void Menu::init(std::string name, int x, int y, int backgroundType)
|
||||
mSelector.despY = 0;
|
||||
mSelector.moving = false;
|
||||
|
||||
// Sprite con los graficos del selector
|
||||
//mSelectorSprite.setWidth(8);
|
||||
//mSelectorSprite.setHeight(8);
|
||||
//mSelectorSprite.setPosX(0);
|
||||
//mSelectorSprite.setPosY(0);
|
||||
//mSelectorSprite.setTexture(texture);
|
||||
//mSelectorSprite.setRenderer(renderer);
|
||||
//mSelectorSprite.setSpriteClip(0, 0, mSelectorSprite.getWidth(), mSelectorSprite.getHeight());
|
||||
|
||||
// Elementos del menu
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
@@ -80,9 +73,6 @@ void Menu::init(std::string name, int x, int y, int backgroundType)
|
||||
mItem[i].hPaddingUp = 0;
|
||||
mItem[i].hPaddingDown = 0;
|
||||
}
|
||||
|
||||
// Mueve el grafico del selector al elemento seleccionado
|
||||
//moveSelectorSprite(mSelector.index);
|
||||
}
|
||||
|
||||
// Carga los recursos necesarios para la sección 'Title'
|
||||
@@ -113,12 +103,6 @@ Uint8 Menu::getItemSelected()
|
||||
return temp;
|
||||
}
|
||||
|
||||
// Mueve el grafico del selector al elemento seleccionado
|
||||
/*void Menu::moveSelectorSprite(int pos)
|
||||
{
|
||||
mSelector.rect.y = mItem[pos].y - 1;
|
||||
}*/
|
||||
|
||||
// Actualiza la posicion y el estado del selector
|
||||
void Menu::updateSelector()
|
||||
{
|
||||
@@ -194,7 +178,6 @@ void Menu::reset()
|
||||
{
|
||||
mItemSelected = MENU_NO_OPTION;
|
||||
mSelector.index = 0;
|
||||
//moveSelectorSprite(mSelector.index);
|
||||
mSelector.origin = mSelector.target = mSelector.y = mItem[0].y;
|
||||
mSelector.moving = false;
|
||||
}
|
||||
@@ -209,10 +192,12 @@ void Menu::deselectItem()
|
||||
void Menu::reorganize()
|
||||
{
|
||||
setRectSize();
|
||||
if (mIsCentered)
|
||||
centerMenu(mCenter);
|
||||
if (mAreElementsCentered)
|
||||
centerMenuElements();
|
||||
if (mIsCenteredOnX)
|
||||
centerMenuOnX(mCenterX);
|
||||
if (mIsCenteredOnY)
|
||||
centerMenuOnY(mCenterY);
|
||||
if (mAreElementsCenteredOnX)
|
||||
centerMenuElementsOnX();
|
||||
}
|
||||
|
||||
// Deja el menu apuntando al siguiente elemento
|
||||
@@ -278,9 +263,6 @@ void Menu::render()
|
||||
SDL_RenderDrawRect(mRenderer, &mRectBG.rect);
|
||||
}
|
||||
|
||||
// Renderiza el sprite del selector
|
||||
//mSelectorSprite.render();
|
||||
|
||||
// Renderitza el text
|
||||
for (int i = 0; i < mTotalItems; i++)
|
||||
{
|
||||
@@ -299,30 +281,13 @@ void Menu::render()
|
||||
// Establece el rectangulo de fondo del menu y el selector
|
||||
void Menu::setRectSize()
|
||||
{
|
||||
Uint8 i = 0;
|
||||
mRectBG.rect.w = 0;
|
||||
mRectBG.rect.h = 0;
|
||||
mSelector.rect.w = 0;
|
||||
mSelector.rect.h = 0;
|
||||
findHeight();
|
||||
findWidth();
|
||||
mRectBG.rect.w = mWidth;
|
||||
mRectBG.rect.h = mHeight;
|
||||
|
||||
// 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.rect.w)
|
||||
{
|
||||
mRectBG.rect.w = mItem[i].w;
|
||||
}
|
||||
mRectBG.rect.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.rect.w += (mText->getCharacterWidth() * 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.rect.h += (mText->getCharacterWidth() * 1) - 1;
|
||||
|
||||
// La posición X es la del menú menos la anchura del sprite del selector y menos medio caracter
|
||||
mRectBG.rect.x = mPosX - (mText->getCharacterWidth() / 2); // - mSelectorSprite.getWidth();
|
||||
// La posición X es la del menú menos medio caracter
|
||||
mRectBG.rect.x = mPosX - (mText->getCharacterWidth() / 2);
|
||||
|
||||
// La posición Y es la del menu menos la altura de medio caracter i el padding
|
||||
mRectBG.rect.y = mPosY - (mText->getCharacterWidth() / 2) - mVerticalPadding;
|
||||
@@ -365,11 +330,11 @@ void Menu::setSelectorTextColor(int r, int g, int b)
|
||||
mSelector.itemB = b;
|
||||
}
|
||||
|
||||
// Centra el menu respecto un punto
|
||||
void Menu::centerMenu(int value)
|
||||
// Centra el menu respecto un punto en el eje X
|
||||
void Menu::centerMenuOnX(int value)
|
||||
{
|
||||
mIsCentered = true;
|
||||
mCenter = value;
|
||||
mIsCenteredOnX = true;
|
||||
mCenterX = value;
|
||||
|
||||
// Actualiza el rectangulo de fondo para recalcular las dimensiones
|
||||
setRectSize();
|
||||
@@ -392,22 +357,41 @@ void Menu::centerMenu(int value)
|
||||
// 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()
|
||||
// Centra el menu respecto un punto en el eje Y
|
||||
void Menu::centerMenuOnY(int value)
|
||||
{
|
||||
mAreElementsCentered = true;
|
||||
mIsCenteredOnY = true;
|
||||
mCenterY = value;
|
||||
|
||||
// Actualiza el rectangulo de fondo para recalcular las dimensiones
|
||||
setRectSize();
|
||||
|
||||
// Obten el alto del menu
|
||||
findHeight();
|
||||
|
||||
// Establece la nueva posición centrada en funcion del elemento más ancho
|
||||
mPosY = (value) - (mHeight / 2);
|
||||
|
||||
// Reposiciona los elementos del menu
|
||||
replaceElementsOnY();
|
||||
|
||||
// Recalcula el rectangulo de fondo
|
||||
setRectSize();
|
||||
|
||||
// Recoloca el selector
|
||||
mSelector.origin = mSelector.target = mSelector.y = mItem[mSelector.index].y;
|
||||
mSelector.moving = false;
|
||||
}
|
||||
|
||||
// Centra los elementos del menu en el eje X
|
||||
void Menu::centerMenuElementsOnX()
|
||||
{
|
||||
mAreElementsCenteredOnX = true;
|
||||
|
||||
for (int i = 0; i < mTotalItems; i++)
|
||||
{
|
||||
//mItem[i].x = (mCenter - ((mText->lenght(mItem[i].label, 0)) / 2));
|
||||
mItem[i].x = (mCenter - (mItem[i].w / 2));
|
||||
}
|
||||
|
||||
// Mueve el grafico del selector al elemento seleccionado
|
||||
//moveSelectorSprite(mSelector.index);
|
||||
mItem[i].x = (mCenterX - (mItem[i].w / 2));
|
||||
}
|
||||
|
||||
// Añade un item al menu
|
||||
@@ -483,4 +467,42 @@ void Menu::checkInput()
|
||||
mItemSelected = mDefaultActionWhenCancel;
|
||||
JA_PlaySound(mSoundCancel);
|
||||
}
|
||||
}
|
||||
|
||||
// Calcula el ancho del menu
|
||||
void Menu::findWidth()
|
||||
{
|
||||
mWidth = 0;
|
||||
|
||||
// Obtenemos la anchura del item mas ancho
|
||||
for (int i = 0; i < mTotalItems; i++)
|
||||
if (mItem[i].w > mWidth)
|
||||
mWidth = mItem[i].w;
|
||||
|
||||
// La anchura de la cadena más larga, mas un caracter
|
||||
mWidth += (mText->getCharacterWidth() * 1);
|
||||
}
|
||||
|
||||
// Calcula el alto del menu
|
||||
void Menu::findHeight()
|
||||
{
|
||||
mHeight = 0;
|
||||
|
||||
// Obtenemos la altura de la suma de alturas de los items
|
||||
for (int i = 0; i < mTotalItems; i++)
|
||||
mHeight += mItem[i].h + mItem[i].hPaddingDown;
|
||||
|
||||
// La altura de la suma de los items mas un caracter y menos un pixel (porque el texto en realidad es de 7 pixeles)
|
||||
mHeight += (mText->getCharacterWidth() * 1) - 1;
|
||||
}
|
||||
|
||||
// Recoloca los elementos del menu en el eje Y
|
||||
void Menu::replaceElementsOnY()
|
||||
{
|
||||
mItem[0].y = mPosY;
|
||||
|
||||
for (int i = 1; i < mTotalItems; i++)
|
||||
{
|
||||
mItem[i].y = mItem[i - 1].y + mItem[i - 1].h + mItem[i - 1].hPaddingDown;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user