Guest

Untitled

By: a guest on Sep 17th, 2009  |  syntax: C++  |  size: 8.40 KB  |  hits: 88  |  expires: Never
download  |  raw  |  embed  |  report abuse
This paste has a previous version, view the difference. Copied
  1. ////////////////////////////////////////////////////////////////////////
  2. // GameMenuState.cpp: implementation of the CGameMenuState class.
  3. //
  4. ////////////////////////////////////////////////////////////////////////
  5.  
  6.  
  7. #include "GameMenuState.h"
  8. #include "GameStateLoad01.h"
  9. #include "GameCreditsState.h"
  10. #include "GameControlsMenuState.h"
  11.  
  12.  
  13. #ifdef _DEBUG
  14. #undef THIS_FILE
  15.  
  16. static char THIS_FILE[]=__FILE__;
  17.  
  18. #define new DEBUG_NEW
  19. #endif
  20.  
  21.  
  22. // Statica variable instanstiation
  23. // singleton
  24. CGameMenuState CGameMenuState::m_MenuState;
  25.  
  26.  
  27. //! Default constructor
  28. CGameMenuState::CGameMenuState() {}
  29.  
  30.  
  31. //! Default destructor
  32. CGameMenuState::~CGameMenuState() {}
  33.  
  34.  
  35. //! Keyboard event handler passed down by CGameManager
  36. void CGameMenuState::KeyboardEvent(CGameManager* pManager)
  37. {
  38.        
  39.         // key presses
  40.         if (pManager->getKey(irr::KEY_ESCAPE))
  41.                 pManager->getDevice()->closeDevice(); // should call pManager clear()
  42.    
  43. }
  44.  
  45.  
  46. //! Mouse event handler passed down by CGameManager
  47. void CGameMenuState::MouseEvent(CGameManager* pManager)
  48. {
  49.        
  50.         // mouse clicks
  51.         if (pManager->getMouse() == EMIE_LMOUSE_LEFT_UP && m_iDebounce > 0)
  52.         {
  53.                
  54.                 m_iDebounce = 0;
  55.                 MouseClicked(pManager);
  56.        
  57.         }
  58.  
  59.         if (pManager->getMouse() == EMIE_RMOUSE_PRESSED_DOWN || pManager->getMouse() == EMIE_LMOUSE_PRESSED_DOWN )
  60.                 m_iDebounce++;
  61.  
  62. }
  63.  
  64.  
  65. CGameMenuState* CGameMenuState::Instance()
  66. {
  67.  
  68.         return ( &m_MenuState );
  69.  
  70. }
  71.  
  72.  
  73. //! Init resources needed for the CMenuState state, menu buttons etc
  74. // Enter state function
  75. void CGameMenuState::Init(CGameManager * pManager)
  76. {
  77.        
  78.         // initialize from parent
  79.         CGameState::Init(pManager);
  80.        
  81.         LoadMouseCursor(pManager);
  82.  
  83.         m_iDebounce = 0;
  84.  
  85.         // load background image
  86.         m_pIntroImage = pManager->getGUIEnvironment()->addImage(irr::core::rect< irr::s32 >(256, 50, 790, 330));
  87.         m_pIntroImage->setImage(pManager->getDriver()->getTexture("media/menu_image.jpg"));
  88.        
  89.         // Play button(s)
  90.         m_pPlayButtonHighImage = pManager->getGUIEnvironment()->
  91.                         addImage(irr::core::rect< irr::s32>(256,448,256+139,448+27));
  92.         m_pPlayButtonHighImage->setImage(pManager->getDriver()->getTexture("media/buttons/play_on.png"));
  93.         m_pPlayButtonImage = pManager->getGUIEnvironment()->
  94.                         addImage(irr::core::rect< irr::s32 >(256,448,256+139,448+27));
  95.         m_pPlayButtonImage->setImage(pManager->getDriver()->getTexture("media/buttons/play.png"));
  96.         m_pPlayButtonImage->setUseAlphaChannel(true);
  97.        
  98.         // Options button
  99.         m_pOptionsButtonHighImage = pManager->getGUIEnvironment()->
  100.                         addImage(irr::core::rect< irr::s32 >(256,475,256+139,475+27));
  101.         m_pOptionsButtonHighImage->setImage(pManager->getDriver()->getTexture("media/buttons/controls_on.png"));
  102.         m_pOptionsButtonImage = pManager->getGUIEnvironment()->
  103.                         addImage(irr::core::rect< irr::s32 >(256,475,256+139,475+27));
  104.         m_pOptionsButtonImage->setImage(pManager->getDriver()->getTexture("media/buttons/controls.png"));
  105.         m_pOptionsButtonImage->setUseAlphaChannel(true);
  106.        
  107.         // Credits button
  108.         m_pCreditsButtonHighImage = pManager->getGUIEnvironment()->
  109.                         addImage(irr::core::rect< irr::s32 >(256,502,256+139,502+27));
  110.         m_pCreditsButtonHighImage->setImage(pManager->getDriver()->getTexture("media/buttons/credits_on.png"));
  111.         m_pCreditsButtonImage = pManager->getGUIEnvironment()->
  112.                         addImage(irr::core::rect< irr::s32 >(256,502,256+139,502+27));
  113.         m_pCreditsButtonImage->setImage(pManager->getDriver()->getTexture("media/buttons/credits.png"));
  114.         m_pCreditsButtonImage->setUseAlphaChannel(true);
  115.        
  116.         // Exit button
  117.         m_pExitButtonHighImage = pManager->getGUIEnvironment()->
  118.                         addImage(irr::core::rect< irr::s32 >(256,529,256+139,529+27));
  119.         m_pExitButtonHighImage->setImage(pManager->getDriver()->getTexture("media/buttons/exit_on.png"));
  120.         m_pExitButtonImage = pManager->getGUIEnvironment()->
  121.                         addImage(irr::core::rect< irr::s32 >(256,529,256+139,529+27));
  122.         m_pExitButtonImage->setImage(pManager->getDriver()->getTexture("media/buttons/exit.png"));
  123.         m_pExitButtonImage->setUseAlphaChannel(true);
  124.        
  125.         CGameState::FadeInOut(pManager);
  126.        
  127. }
  128.  
  129.  
  130. //! Update, game loop for intro state
  131. // Update state function
  132. void CGameMenuState::Update(CGameManager * pManager)
  133. {
  134.        
  135.         pManager->getDriver()->beginScene(true, true, video::SColor(0,0,0,0));
  136.        
  137.         pManager->getGUIEnvironment()->drawAll();
  138.         MouseOver(pManager);
  139.         DisplayMouse(pManager);
  140.    
  141.         pManager->getDriver()->endScene();     
  142.  
  143. }
  144.  
  145.  
  146. // Exit state function
  147. void CGameMenuState::Clear(CGameManager * pManager)
  148. {
  149.        
  150.         // tidy up code here
  151.         if (m_pIntroImage)
  152.                 m_pIntroImage->remove();
  153.        
  154.         if (m_pPlayButtonImage)
  155.                 m_pPlayButtonImage->remove();
  156.        
  157.         if (m_pPlayButtonHighImage)
  158.                 m_pPlayButtonHighImage->remove();
  159.        
  160.         if (m_pOptionsButtonImage)
  161.                 m_pOptionsButtonImage->remove();
  162.        
  163.         if (m_pOptionsButtonHighImage)
  164.                 m_pOptionsButtonHighImage->remove();
  165.        
  166.         if (m_pCreditsButtonImage)
  167.                 m_pCreditsButtonImage->remove();
  168.        
  169.         if (m_pCreditsButtonHighImage)
  170.                 m_pCreditsButtonHighImage->remove();
  171.        
  172.         if (m_pExitButtonImage)
  173.                 m_pExitButtonImage->remove();
  174.        
  175.         if (m_pExitButtonHighImage)
  176.                 m_pExitButtonHighImage->remove();
  177.  
  178. }
  179.  
  180.  
  181. //! Mouse clicked, check to see if over button
  182. void CGameMenuState::MouseClicked(CGameManager * pManager)
  183. {
  184.        
  185.         // get mouse position2d<s32>
  186.         m_MousePos = pManager->getDevice()->getCursorControl()->getPosition();
  187.  
  188.         // check if over Exit button
  189.         if (m_pExitButtonImage->getRelativePosition().isPointInside(m_MousePos))
  190.                 pManager->getDevice()->closeDevice(); // should call pManager clear()
  191.  
  192.         else if (m_pOptionsButtonImage->getRelativePosition().isPointInside(m_MousePos))
  193.                 ChangeState(pManager, CGameControlsMenuState::Instance());
  194.          
  195.         // check if over Credits button
  196.         else if (m_pCreditsButtonImage->getRelativePosition().isPointInside(m_MousePos))
  197.                 ChangeState(pManager, CGameCreditsState::Instance());
  198.        
  199.         // check if over Play button
  200.         else if (m_pPlayButtonImage->getRelativePosition().isPointInside(m_MousePos))
  201.                 ChangeState(pManager, CGameStateLoad01::Instance());
  202.                
  203. }
  204.  
  205.  
  206. //! Mouse over, check to see if over button to highlight
  207. bool CGameMenuState::MouseOver(CGameManager * pManager)
  208. {
  209.        
  210.         ResetButtons(pManager);
  211.  
  212.         // get mouse position2d<s32>
  213.         m_MousePos = pManager->getDevice()->getCursorControl()->getPosition();
  214.  
  215.         // check if over Play button
  216.         if (m_pPlayButtonImage->getRelativePosition().isPointInside(m_MousePos))
  217.         {
  218.        
  219.                 m_pPlayButtonHighImage->setVisible(true);
  220.                 m_pPlayButtonImage->setVisible(false);
  221.                 return true;
  222.  
  223.         }
  224.  
  225.         // check if over Options button
  226.         if (m_pOptionsButtonImage->getRelativePosition().isPointInside(m_MousePos))
  227.         {
  228.  
  229.                 m_pOptionsButtonHighImage->setVisible(true);
  230.                 m_pOptionsButtonImage->setVisible(false);
  231.                 return true;
  232.  
  233.         }
  234.        
  235.         // check if over Credits button
  236.         if (m_pCreditsButtonImage->getRelativePosition().isPointInside(m_MousePos))
  237.         {
  238.  
  239.                 m_pCreditsButtonHighImage->setVisible(true);
  240.                 m_pCreditsButtonImage->setVisible(false);
  241.                 return true;
  242.  
  243.         }
  244.        
  245.         // check if over Exit button
  246.         if (m_pExitButtonImage->getRelativePosition().isPointInside(m_MousePos))
  247.         {
  248.  
  249.                 m_pExitButtonHighImage->setVisible(true);
  250.                 m_pExitButtonImage->setVisible(false);
  251.                 return true;
  252.  
  253.         }
  254.        
  255.         return false;
  256.  
  257. }
  258.  
  259.  
  260. //! reset buttons state
  261. void CGameMenuState::ResetButtons(CGameManager * pManager)
  262. {
  263.  
  264.         // set highlighted button to off
  265.         m_pPlayButtonHighImage->setVisible(false);
  266.         m_pOptionsButtonHighImage->setVisible(false);
  267.         m_pCreditsButtonHighImage->setVisible(false);
  268.         m_pExitButtonHighImage->setVisible(false);
  269.        
  270.         // set normal buttons on
  271.         m_pPlayButtonImage->setVisible(true);
  272.         m_pOptionsButtonImage->setVisible(true);
  273.         m_pCreditsButtonImage->setVisible(true);
  274.         m_pExitButtonImage->setVisible(true);
  275.  
  276. }
  277.  
  278.  
  279. //! Display mouse cursor in center of screen
  280. void CGameMenuState::DisplayMouse(CGameManager* pManager)
  281. {
  282.        
  283.         if(!m_bMouseMode)
  284.         {
  285.        
  286.                 m_MousePos = pManager->getDevice()->getCursorControl()->getPosition();
  287.                 pManager->getDriver()->draw2DImage(m_pMouseCursor, core::position2d<s32>(m_MousePos.X,                                         
  288.                 m_MousePos.Y), core::rect<s32>(0,0,m_pMouseCursor->getSize().Height,
  289.                 m_pMouseCursor- >getSize().Width), 0, video::SColor(255,255,255,255), true);
  290.  
  291.         }
  292.  
  293. }
  294.  
  295.  
  296. //! Load mouse cursor
  297. void CGameMenuState::LoadMouseCursor(CGameManager* pManager)
  298. {
  299.        
  300.         m_pMouseCursor =  pManager->getDriver()->getTexture("media/crosshair2.png");
  301.         pManager->getDriver()->makeColorKeyTexture(m_pMouseCursor,core::position2d<s32>(0,0));
  302.         pManager->getDevice()->getCursorControl()->setVisible(false);
  303.  
  304. }