Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "menu.h"
- #include "constants.h"
- Menu::Menu()
- {
- //I'm sure there is a way to do all of these initializations better, but whatever
- font = TTF_OpenFont( "breeserif_reg.ttf", 19 );
- MenuArea.x = 0;
- MenuArea.y = 0;
- MenuArea.h = SQUARE_HEIGHT * 2;
- MenuArea.w = SCREEN_WIDTH;
- int Height = 0, Width = 0;
- TTF_SizeText(font, "Start", &Width, &Height);
- StartButtonArea.x = 1;
- StartButtonArea.y = ((MenuArea.h - Height) / 2) + 1;
- StartButtonArea.h = MenuArea.h;
- StartButtonArea.w = Width;
- StopButtonArea.x = Width + 10;
- TTF_SizeText(font, "Stop", &Width, &Height);
- StopButtonArea.y = ((MenuArea.h - Height) / 2) + 1;
- StopButtonArea.h = MenuArea.h;
- StopButtonArea.w = Width;
- SpeedArea.x = StopButtonArea.x + Width + 10;
- TTF_SizeText(font, "Speed", &Width, &Height);
- SpeedArea.y = ((MenuArea.h - Height) / 2) + 1;
- SpeedArea.h = MenuArea.h;
- SpeedArea.w = Width;
- GenerationArea.x = SpeedArea.x + Width + 10;
- TTF_SizeText(font, "Generations: ", &Width, &Height);
- GenerationArea.y = ((MenuArea.h - Height) / 2) + 1;
- GenerationArea.h = MenuArea.h;
- GenerationArea.w = Width;
- StartSelectionArea.x = 0;
- StartSelectionArea.y = 0;
- StartSelectionArea.h = StartButtonArea.h + 1;
- StartSelectionArea.w = StartButtonArea.w + 5;
- StopSelectionArea.x = StartSelectionArea.w;
- StopSelectionArea.y = 0;
- StopSelectionArea.h = StartButtonArea.h + 1;
- StopSelectionArea.w = StartButtonArea.w + 4;
- SpeedSlowArea.x = SpeedArea.x;
- TTF_SizeText(font, "Slow", &Width, &Height);
- SpeedSlowArea.y = MenuArea.h + 5;
- SpeedSlowArea.h = Height;
- SpeedSlowArea.w = Width;
- SpeedNormalArea.x = SpeedArea.x;
- TTF_SizeText(font, "Normal", &Width, &Height);
- SpeedNormalArea.y = SpeedSlowArea.h + SpeedSlowArea.y + 5;
- SpeedNormalArea.h = Height;
- SpeedNormalArea.w = Width;
- SpeedFastArea.x = SpeedArea.x;
- TTF_SizeText(font, "Fast", &Width, &Height);
- SpeedFastArea.y = SpeedNormalArea.h + SpeedNormalArea.y + 5;
- SpeedFastArea.h = Height;
- SpeedFastArea.w = Width;
- SpeedMenuArea.x = StopSelectionArea.x + StopSelectionArea.w;
- SpeedMenuArea.y = MenuArea.h;
- SpeedMenuArea.h = SpeedFastArea.h + SpeedSlowArea.h + SpeedNormalArea.h + MenuArea.h - 5;
- SpeedMenuArea.w = SpeedNormalArea.w + 10;
- SlowSelectionArea.x = SpeedMenuArea.x + 1;
- SlowSelectionArea.y = MenuArea.h + 1;
- SlowSelectionArea.h = SpeedSlowArea.h + 2;
- SlowSelectionArea.w = SpeedMenuArea.w - 2;
- NormalSelectionArea.x = SpeedMenuArea.x + 1;
- NormalSelectionArea.y = MenuArea.h + SlowSelectionArea.h + 4;
- NormalSelectionArea.h = SpeedNormalArea.h + 3;
- NormalSelectionArea.w = SpeedMenuArea.w - 2;
- FastSelectionArea.x = SpeedMenuArea.x + 1;
- FastSelectionArea.y = NormalSelectionArea.h + MenuArea.h + SlowSelectionArea.h + 6;
- FastSelectionArea.h = SpeedFastArea.h + 3;
- FastSelectionArea.w = SpeedMenuArea.w - 2;
- TTF_SizeText(font, "00", &Width, &Height);
- NumberArea.x = GenerationArea.x + GenerationArea.w + 10;
- NumberArea.y = ((MenuArea.h - Height) / 2) + 2;
- NumberArea.h = Height;
- NumberArea.w = Width;
- DisplaySpeedMenu = false;
- int counter = 0;
- while (counter < NUMBER_OF_BUTTONS)
- {
- isButtonPressed[counter] = 0;
- counter++;
- }
- texttorender = NULL;
- NumberOfGenerationsInt = 0;
- HoldTextForNumberOfGenerations << NumberOfGenerationsInt;
- }
- void Menu::drawMenu(SDL_Graphics* aGraphicsObject, Timer Time)
- {
- //This is like a giant memory leak
- SDL_FillRect(aGraphicsObject->getShapeSurfaceScreen(), &MenuArea, SDL_MapRGB( aGraphicsObject->getShapeSurfaceScreen()->format, 0xFF, 0xFF, 0xFF));
- //make the area around the buttons highlighted if they're selected
- if (Time.is_started() == true)
- if (Time.is_paused() == false)
- SDL_FillRect(aGraphicsObject->getShapeSurfaceScreen(), &StartSelectionArea, SDL_MapRGB( aGraphicsObject->getShapeSurfaceScreen()->format, 0, 100, 225));
- if (Time.is_paused() == true || Time.is_started() == false)
- SDL_FillRect(aGraphicsObject->getShapeSurfaceScreen(), &StopSelectionArea, SDL_MapRGB( aGraphicsObject->getShapeSurfaceScreen()->format, 0, 100, 225));
- if (DisplaySpeedMenu == true)
- {
- SDL_FillRect(aGraphicsObject->getShapeSurfaceScreen(), &SpeedMenuArea, SDL_MapRGB( aGraphicsObject->getShapeSurfaceScreen()->format, 0xFF, 0xFF, 0xFF));
- if (Time.getInterval() == SLOW_INTERVAL)
- SDL_FillRect(aGraphicsObject->getShapeSurfaceScreen(), &SlowSelectionArea, SDL_MapRGB( aGraphicsObject->getShapeSurfaceScreen()->format, 0, 100, 225));
- else if (Time.getInterval() == NORMAL_INTERVAL)
- SDL_FillRect(aGraphicsObject->getShapeSurfaceScreen(), &NormalSelectionArea, SDL_MapRGB( aGraphicsObject->getShapeSurfaceScreen()->format, 0, 100, 225));
- else if (Time.getInterval() == FAST_INTERVAL)
- SDL_FillRect(aGraphicsObject->getShapeSurfaceScreen(), &FastSelectionArea, SDL_MapRGB( aGraphicsObject->getShapeSurfaceScreen()->format, 0, 100, 225));
- drawText("Slow", aGraphicsObject, SpeedSlowArea);
- drawText("Normal", aGraphicsObject, SpeedNormalArea);
- drawText("Fast", aGraphicsObject, SpeedFastArea);
- }
- drawText("Start", aGraphicsObject, StartButtonArea);
- drawText("Stop", aGraphicsObject, StopButtonArea);
- drawText("Speed", aGraphicsObject, SpeedArea);
- drawText("Generations: ", aGraphicsObject, GenerationArea);
- //draw number of generations...
- HoldTextForNumberOfGenerations.str("");
- HoldTextForNumberOfGenerations << NumberOfGenerationsInt;
- SDL_Color BlackTextColor = {0, 0, 0};
- texttorender = TTF_RenderText_Solid( font, HoldTextForNumberOfGenerations.str().c_str(), BlackTextColor );
- SDL_BlitSurface( texttorender, 0, aGraphicsObject->getShapeSurfaceScreen(), &NumberArea );
- }
- void Menu::drawText(const char* TextToDraw, SDL_Graphics* aGraphicsObject, SDL_Rect &area)
- {
- SDL_Color BlackTextColor = {0, 0, 0};
- texttorender = TTF_RenderText_Solid(font, TextToDraw, BlackTextColor);
- //Blit
- SDL_BlitSurface( texttorender, 0, aGraphicsObject->getShapeSurfaceScreen(), &area );
- }
- SDL_Rect Menu::getButtonArea(int WhichOne)
- {
- if (WhichOne == START_BUTTON)
- return StartSelectionArea;
- if (WhichOne == STOP_BUTTON)
- return StopSelectionArea;
- if (WhichOne == SPEED_BUTTON)
- return SpeedArea;
- if (WhichOne == INSIDE_SPEED_MENU)
- return SpeedMenuArea;
- if (WhichOne == SLOW_BUTTON)
- return SlowSelectionArea;
- if (WhichOne == NORMAL_BUTTON)
- return NormalSelectionArea;
- if (WhichOne == FAST_BUTTON)
- return FastSelectionArea;
- }
- void Menu::setIsButtonPressed(int WhichOne, bool value)
- {
- isButtonPressed[WhichOne] = value;
- }
- bool Menu::getIsButtonPressed(int WhichOne)
- {
- return isButtonPressed[WhichOne];
- }
- void Menu::enactMenuChoice(Timer &Time)
- {
- if (getIsButtonPressed(START_BUTTON) == true)
- {
- if (Time.is_started() != true)
- Time.start();
- else if (Time.is_paused() == true)
- Time.unpause();
- setIsButtonPressed(START_BUTTON, false);
- }
- else if (getIsButtonPressed(STOP_BUTTON) == true)
- {
- if (Time.is_started() == true)
- Time.pause();
- setIsButtonPressed(STOP_BUTTON, false);
- }
- else if (getIsButtonPressed(SPEED_BUTTON) == true)
- DisplaySpeedMenu = true;
- else if (getIsButtonPressed(INSIDE_SPEED_MENU) == true)
- {
- if (DisplaySpeedMenu == true)
- DisplaySpeedMenu = true;
- }
- if (getIsButtonPressed(SLOW_BUTTON) == true)
- {
- Time.setInterval(SLOW_INTERVAL);
- setIsButtonPressed(SLOW_BUTTON, false);
- }
- if (getIsButtonPressed(NORMAL_BUTTON) == true)
- {
- Time.setInterval(NORMAL_INTERVAL);
- setIsButtonPressed(NORMAL_BUTTON, false);
- }
- if (getIsButtonPressed(FAST_BUTTON) == true)
- {
- Time.setInterval(FAST_INTERVAL);
- setIsButtonPressed(FAST_BUTTON, false);
- }
- }
- void Menu::setDisplaySpeedMenu(bool value)
- {
- DisplaySpeedMenu = value;
- }
- bool Menu::getDisplaySpeedMenu()
- {
- return DisplaySpeedMenu;
- }
- void Menu::AddOneToGenerationCount()
- {
- NumberOfGenerationsInt++;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement