Advertisement
Suby

menu.cpp

Jun 1st, 2012
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.80 KB | None | 0 0
  1. #include "menu.h"
  2. #include "constants.h"
  3.  
  4. Menu::Menu()
  5. {
  6.     //I'm sure there is a way to do all of these initializations better, but whatever
  7.     font = TTF_OpenFont( "breeserif_reg.ttf", 19 );
  8.  
  9.     MenuArea.x = 0;
  10.     MenuArea.y = 0;
  11.     MenuArea.h = SQUARE_HEIGHT * 2;
  12.     MenuArea.w = SCREEN_WIDTH;
  13.    
  14.     int Height = 0, Width = 0;
  15.     TTF_SizeText(font, "Start", &Width, &Height);
  16.     StartButtonArea.x = 1;
  17.     StartButtonArea.y = ((MenuArea.h - Height) / 2) + 1;
  18.     StartButtonArea.h = MenuArea.h;
  19.     StartButtonArea.w = Width;
  20.  
  21.     StopButtonArea.x = Width + 10;
  22.     TTF_SizeText(font, "Stop", &Width, &Height);         
  23.     StopButtonArea.y = ((MenuArea.h - Height) / 2) + 1;
  24.     StopButtonArea.h = MenuArea.h;
  25.     StopButtonArea.w = Width;    
  26.          
  27.     SpeedArea.x = StopButtonArea.x + Width + 10;
  28.     TTF_SizeText(font, "Speed", &Width, &Height);
  29.     SpeedArea.y = ((MenuArea.h - Height) / 2) + 1;
  30.     SpeedArea.h = MenuArea.h;
  31.     SpeedArea.w = Width;     
  32.  
  33.     GenerationArea.x = SpeedArea.x + Width + 10;
  34.     TTF_SizeText(font, "Generations: ", &Width, &Height);
  35.     GenerationArea.y = ((MenuArea.h - Height) / 2) + 1;
  36.     GenerationArea.h = MenuArea.h;
  37.     GenerationArea.w = Width;        
  38.  
  39.     StartSelectionArea.x = 0;
  40.     StartSelectionArea.y = 0;
  41.     StartSelectionArea.h = StartButtonArea.h + 1;
  42.     StartSelectionArea.w = StartButtonArea.w + 5;
  43.  
  44.     StopSelectionArea.x = StartSelectionArea.w;
  45.     StopSelectionArea.y = 0;
  46.     StopSelectionArea.h = StartButtonArea.h + 1;
  47.     StopSelectionArea.w = StartButtonArea.w + 4;
  48.  
  49.     SpeedSlowArea.x = SpeedArea.x;
  50.     TTF_SizeText(font, "Slow", &Width, &Height);
  51.     SpeedSlowArea.y = MenuArea.h + 5;
  52.     SpeedSlowArea.h = Height;
  53.     SpeedSlowArea.w = Width;           
  54.    
  55.     SpeedNormalArea.x = SpeedArea.x;
  56.     TTF_SizeText(font, "Normal", &Width, &Height);
  57.     SpeedNormalArea.y = SpeedSlowArea.h + SpeedSlowArea.y + 5;
  58.     SpeedNormalArea.h = Height;
  59.     SpeedNormalArea.w = Width; 
  60.  
  61.     SpeedFastArea.x = SpeedArea.x;
  62.     TTF_SizeText(font, "Fast", &Width, &Height);
  63.     SpeedFastArea.y = SpeedNormalArea.h + SpeedNormalArea.y + 5;
  64.     SpeedFastArea.h = Height;
  65.     SpeedFastArea.w = Width;   
  66.  
  67.     SpeedMenuArea.x = StopSelectionArea.x + StopSelectionArea.w;
  68.     SpeedMenuArea.y = MenuArea.h;
  69.     SpeedMenuArea.h = SpeedFastArea.h + SpeedSlowArea.h + SpeedNormalArea.h + MenuArea.h - 5;
  70.     SpeedMenuArea.w = SpeedNormalArea.w + 10;
  71.    
  72.  
  73.     SlowSelectionArea.x = SpeedMenuArea.x + 1;
  74.     SlowSelectionArea.y = MenuArea.h + 1;
  75.     SlowSelectionArea.h = SpeedSlowArea.h + 2;
  76.     SlowSelectionArea.w = SpeedMenuArea.w - 2;
  77.  
  78.     NormalSelectionArea.x = SpeedMenuArea.x + 1;
  79.     NormalSelectionArea.y = MenuArea.h + SlowSelectionArea.h + 4;
  80.     NormalSelectionArea.h = SpeedNormalArea.h + 3;
  81.     NormalSelectionArea.w = SpeedMenuArea.w - 2;
  82.  
  83.     FastSelectionArea.x = SpeedMenuArea.x + 1;
  84.     FastSelectionArea.y = NormalSelectionArea.h + MenuArea.h + SlowSelectionArea.h + 6;
  85.     FastSelectionArea.h = SpeedFastArea.h + 3;
  86.     FastSelectionArea.w = SpeedMenuArea.w - 2;
  87.  
  88.     TTF_SizeText(font, "00", &Width, &Height);
  89.     NumberArea.x = GenerationArea.x + GenerationArea.w + 10;
  90.     NumberArea.y = ((MenuArea.h - Height) / 2) + 2;
  91.     NumberArea.h = Height;
  92.     NumberArea.w = Width;
  93.  
  94.     DisplaySpeedMenu = false;
  95.    
  96.     int counter = 0;
  97.     while (counter < NUMBER_OF_BUTTONS)
  98.     {
  99.         isButtonPressed[counter] = 0;
  100.         counter++;
  101.     }
  102.  
  103.     texttorender = NULL;  
  104.  
  105.     NumberOfGenerationsInt = 0;
  106.     HoldTextForNumberOfGenerations << NumberOfGenerationsInt;
  107. }
  108.  
  109. void Menu::drawMenu(SDL_Graphics* aGraphicsObject, Timer Time)
  110. {
  111.     //This is like a giant memory leak  
  112.  
  113.     SDL_FillRect(aGraphicsObject->getShapeSurfaceScreen(), &MenuArea, SDL_MapRGB( aGraphicsObject->getShapeSurfaceScreen()->format, 0xFF, 0xFF, 0xFF));
  114.    
  115.     //make the area around the buttons highlighted if they're selected
  116.     if (Time.is_started() == true)
  117.         if (Time.is_paused() == false)
  118.             SDL_FillRect(aGraphicsObject->getShapeSurfaceScreen(), &StartSelectionArea, SDL_MapRGB( aGraphicsObject->getShapeSurfaceScreen()->format, 0, 100, 225));
  119.        
  120.     if (Time.is_paused() == true || Time.is_started() == false)
  121.         SDL_FillRect(aGraphicsObject->getShapeSurfaceScreen(), &StopSelectionArea, SDL_MapRGB( aGraphicsObject->getShapeSurfaceScreen()->format, 0, 100, 225));
  122.  
  123.     if (DisplaySpeedMenu == true)
  124.     {
  125.         SDL_FillRect(aGraphicsObject->getShapeSurfaceScreen(), &SpeedMenuArea, SDL_MapRGB( aGraphicsObject->getShapeSurfaceScreen()->format, 0xFF, 0xFF, 0xFF));
  126.        
  127.         if (Time.getInterval() == SLOW_INTERVAL)
  128.             SDL_FillRect(aGraphicsObject->getShapeSurfaceScreen(), &SlowSelectionArea, SDL_MapRGB( aGraphicsObject->getShapeSurfaceScreen()->format,  0, 100, 225));
  129.         else if (Time.getInterval() == NORMAL_INTERVAL)
  130.             SDL_FillRect(aGraphicsObject->getShapeSurfaceScreen(), &NormalSelectionArea, SDL_MapRGB( aGraphicsObject->getShapeSurfaceScreen()->format,  0, 100, 225));
  131.         else if (Time.getInterval() == FAST_INTERVAL)
  132.             SDL_FillRect(aGraphicsObject->getShapeSurfaceScreen(), &FastSelectionArea, SDL_MapRGB( aGraphicsObject->getShapeSurfaceScreen()->format,  0, 100, 225));
  133.  
  134.         drawText("Slow", aGraphicsObject, SpeedSlowArea);
  135.         drawText("Normal", aGraphicsObject, SpeedNormalArea);
  136.         drawText("Fast", aGraphicsObject, SpeedFastArea);
  137.     }
  138.  
  139.  
  140.     drawText("Start", aGraphicsObject, StartButtonArea);
  141.     drawText("Stop", aGraphicsObject, StopButtonArea);
  142.     drawText("Speed", aGraphicsObject, SpeedArea);
  143.     drawText("Generations: ", aGraphicsObject, GenerationArea);
  144.    
  145.     //draw number of generations...
  146.     HoldTextForNumberOfGenerations.str("");
  147.     HoldTextForNumberOfGenerations << NumberOfGenerationsInt;
  148.     SDL_Color BlackTextColor = {0, 0, 0};
  149.  
  150.     texttorender = TTF_RenderText_Solid( font, HoldTextForNumberOfGenerations.str().c_str(), BlackTextColor );
  151.     SDL_BlitSurface( texttorender, 0, aGraphicsObject->getShapeSurfaceScreen(), &NumberArea );
  152. }
  153.  
  154. void Menu::drawText(const char* TextToDraw, SDL_Graphics* aGraphicsObject, SDL_Rect &area)
  155. {
  156.     SDL_Color BlackTextColor = {0, 0, 0};
  157.     texttorender = TTF_RenderText_Solid(font, TextToDraw, BlackTextColor);
  158.    
  159.     //Blit
  160.     SDL_BlitSurface( texttorender, 0, aGraphicsObject->getShapeSurfaceScreen(), &area );
  161. }
  162.  
  163. SDL_Rect Menu::getButtonArea(int WhichOne)
  164. {
  165.     if (WhichOne == START_BUTTON)
  166.         return StartSelectionArea;
  167.     if (WhichOne == STOP_BUTTON)
  168.         return StopSelectionArea;
  169.     if (WhichOne == SPEED_BUTTON)
  170.         return SpeedArea;
  171.     if (WhichOne == INSIDE_SPEED_MENU)
  172.         return SpeedMenuArea;
  173.     if (WhichOne == SLOW_BUTTON)
  174.         return SlowSelectionArea;
  175.     if (WhichOne == NORMAL_BUTTON)
  176.         return NormalSelectionArea;
  177.     if (WhichOne == FAST_BUTTON)
  178.         return FastSelectionArea;
  179. }
  180.  
  181. void Menu::setIsButtonPressed(int WhichOne, bool value)
  182. {
  183.     isButtonPressed[WhichOne] = value;
  184. }
  185.  
  186. bool Menu::getIsButtonPressed(int WhichOne)
  187. {
  188.     return isButtonPressed[WhichOne];
  189. }
  190.  
  191. void Menu::enactMenuChoice(Timer &Time)
  192. {
  193.  
  194.     if (getIsButtonPressed(START_BUTTON) == true)
  195.     {
  196.         if (Time.is_started() != true)
  197.             Time.start();
  198.         else if (Time.is_paused() == true)
  199.             Time.unpause();
  200.         setIsButtonPressed(START_BUTTON, false);
  201.     }
  202.  
  203.     else if (getIsButtonPressed(STOP_BUTTON) == true)
  204.     {
  205.         if (Time.is_started() == true)
  206.             Time.pause();
  207.         setIsButtonPressed(STOP_BUTTON, false);
  208.     }
  209.  
  210.     else if (getIsButtonPressed(SPEED_BUTTON) == true)
  211.         DisplaySpeedMenu = true;
  212.  
  213.     else if (getIsButtonPressed(INSIDE_SPEED_MENU) == true)
  214.     {
  215.         if (DisplaySpeedMenu == true)
  216.             DisplaySpeedMenu = true;
  217.     }
  218.  
  219.     if (getIsButtonPressed(SLOW_BUTTON) == true)
  220.     {
  221.         Time.setInterval(SLOW_INTERVAL);
  222.         setIsButtonPressed(SLOW_BUTTON, false);
  223.     }
  224.  
  225.     if (getIsButtonPressed(NORMAL_BUTTON) == true)
  226.     {
  227.         Time.setInterval(NORMAL_INTERVAL);
  228.         setIsButtonPressed(NORMAL_BUTTON, false);
  229.     }
  230.  
  231.     if (getIsButtonPressed(FAST_BUTTON) == true)
  232.     {
  233.         Time.setInterval(FAST_INTERVAL);
  234.         setIsButtonPressed(FAST_BUTTON, false);
  235.     }
  236. }
  237.  
  238. void Menu::setDisplaySpeedMenu(bool value)
  239. {
  240.     DisplaySpeedMenu = value;
  241. }
  242.  
  243. bool Menu::getDisplaySpeedMenu()
  244. {
  245.     return DisplaySpeedMenu;
  246. }
  247.  
  248. void Menu::AddOneToGenerationCount()
  249. {
  250.     NumberOfGenerationsInt++;
  251. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement