home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / XenonSource.exe / xenon / source / mainmenustate.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-09-12  |  5.4 KB  |  231 lines

  1. //-------------------------------------------------------------
  2. //
  3. // Class:    CMainMenuState
  4. //
  5. // Author:    John M Phillips
  6. //
  7. // Started:    06/05/00
  8. //
  9. // Base:    CGameState
  10. //
  11. // Derived:    None
  12. //
  13. //-------------------------------------------------------------
  14.  
  15. #include "game.h"
  16.  
  17. //-------------------------------------------------------------
  18.  
  19. CMainMenuState *CMainMenuState::m_instance = 0;
  20.  
  21. gsCImage    CMainMenuState::m_bblogo;
  22. gsCImage    CMainMenuState::m_pcflogo;
  23. gsCImage    CMainMenuState::m_title;
  24.  
  25. //-------------------------------------------------------------
  26.  
  27. CMainMenuState::CMainMenuState()
  28. {
  29.     m_menu.clear();
  30.  
  31.     m_menu.addSelection("Start One Player Game");
  32.     m_menu.addSelection("Start Two Player Game");
  33.     m_menu.addSelection("View High Scores");
  34.     m_menu.addSelection("Options");
  35.     m_menu.addSelection("Credits");
  36.     m_menu.addSelection("Quit");
  37.     m_menu.setWrap(true);
  38.     m_menu.setPosition(gsCPoint(0,275));
  39.     m_menu.setSpacing(gsCPoint(0,30));
  40.     m_menu.setCurrentItem(MM_ONEPLAYER);
  41.     m_menu.setFont(&m_medium_font);
  42. }
  43.  
  44. //-------------------------------------------------------------
  45.  
  46. CMainMenuState::~CMainMenuState()
  47. {
  48. }
  49.  
  50. //-------------------------------------------------------------
  51.  
  52. CGameState *CMainMenuState::instance()
  53. {
  54.     if (!m_instance)
  55.         m_instance = new CMainMenuState;
  56.  
  57.     return m_instance;
  58. }
  59.  
  60. //-------------------------------------------------------------
  61.  
  62. bool CMainMenuState::create()
  63. {
  64.     playMusic(MUSIC_TITLE);
  65.  
  66.     if (m_screen.getBytesPerPixel() == 1)
  67.         gsCFile::setDirectory(DIRECTORY_GRAPHICS8);
  68.     else
  69.         gsCFile::setDirectory(DIRECTORY_GRAPHICS24);
  70.  
  71.     if (!m_bblogo.load("bblogo.bmp"))
  72.         return false;
  73.     m_bblogo.enableColourKey(gsCColour(gsMAGENTA));
  74.  
  75.     if (!m_pcflogo.load("pcflogo.bmp"))
  76.         return false;
  77.     m_pcflogo.enableColourKey(gsCColour(gsMAGENTA));
  78.     
  79.     if (!m_title.load("xlogo.bmp"))
  80.         return false;
  81.     m_title.enableColourKey(gsCColour(gsMAGENTA));
  82.  
  83.     m_attract_mode = UNKNOWN;
  84.  
  85.     return true;
  86. }
  87.  
  88. //-------------------------------------------------------------
  89.  
  90. bool CMainMenuState::destroy()
  91. {
  92.     m_bblogo.destroy();
  93.     m_pcflogo.destroy();
  94.     m_title.destroy();
  95.  
  96.     return true;
  97. }
  98.  
  99. //-------------------------------------------------------------
  100.  
  101. bool CMainMenuState::update()
  102. {
  103.     if (!CGameState::update())
  104.         return false;
  105.  
  106.     if (m_attract_mode == UNKNOWN) {
  107.         m_attract_mode = ON;
  108.         m_attract_mode_timer.start();
  109.         }
  110.  
  111.     if (m_attract_mode == ON &&
  112.         m_attract_mode_timer.getTime() > 10.f) {
  113.         m_demo_recorder.load(DEMO_FILENAME);
  114.         const char *level = m_demo_recorder.getLevel();
  115.         if (level != 0) {
  116.             strcpy(m_level_filename,level);
  117.             setDemoMode(DEMO_PLAYBACK);
  118.             return changeState(CPlayGameState::instance());
  119.             }
  120.         else
  121.             m_attract_mode = OFF;
  122.         }
  123.  
  124.     if (Options.getOption(OPTION_BACKDROP))
  125.         m_backdrop.draw(gsCPoint(0,0));
  126.     else
  127.         m_screen.clear(gsCColour(gsBLACK));
  128.  
  129. //    m_screen.clear(gsCColour(gsBLACK));
  130.  
  131.     m_starfield.move(4);
  132.     m_starfield.draw();
  133.  
  134.     m_title.draw(gsCPoint(64,10));
  135.     m_bblogo.draw(gsCPoint(10,360));
  136.     m_pcflogo.draw(gsCPoint(480,400));
  137.  
  138. //    m_medium_font.setTextCursor(gsCPoint(0,50));
  139. //    m_medium_font.justifyString("Xenon Demo");
  140.  
  141.     m_small_font.setTextCursor(gsCPoint(0,470));
  142.     m_small_font.justifyString("Copyright 2000 The Bitmap Brothers");
  143.     
  144.     m_small_font.setTextCursor(gsCPoint(2,2));
  145.     m_small_font.printString("%s %s",__TIME__,__DATE__);
  146.  
  147.     m_menu.draw();
  148.     
  149.     m_screen.flip();
  150.  
  151.     MainMenuItem item = (MainMenuItem) m_menu.getCurrentItem();
  152.  
  153.     gsKeyCode key = getKey();
  154.  
  155.     if (key != gsKEY_NONE)
  156.         m_attract_mode = OFF;
  157.  
  158.     switch (key) {
  159.         case gsKEY_RETURN:
  160.         case gsKEY_ENTER:
  161.         case gsKEY_LCONTROL:
  162.             switch (item) {
  163.                 case MM_ONEPLAYER:
  164.                     m_number_of_players = 1;
  165.                     playSample(SAMPLE_MENU_CLICK);
  166.                     setDemoMode(DEMO_OFF);
  167.                     return changeState(CIntroState::instance());
  168.                 case MM_TWOPLAYER:
  169.                     m_number_of_players = 2;
  170.                     playSample(SAMPLE_MENU_CLICK);
  171.                     setDemoMode(DEMO_OFF);
  172.                     return changeState(CIntroState::instance());
  173.                 case MM_SCORES:
  174.                     playSample(SAMPLE_MENU_CLICK);
  175.                     return changeState(CViewScoresState::instance());
  176.                 case MM_OPTIONS:
  177.                     playSample(SAMPLE_MENU_CLICK);
  178.                     return changeState(COptionsMenuState::instance());
  179.                 case MM_CREDITS:
  180.                     playSample(SAMPLE_MENU_CLICK);
  181.                     return changeState(CCreditsState::instance());
  182.                 case MM_QUIT:
  183.                     CMessageBoxState::setup("Sure you want to quit ?",
  184.                                             "Yes",0,
  185.                                             "No",CMainMenuState::instance());
  186.                     return changeState(CMessageBoxState::instance());
  187.                 }
  188.             break;
  189.         case gsKEY_UP:
  190.             m_menu.scroll(-1);
  191.             playSample(SAMPLE_MENU_SELECTION);
  192.             break;
  193.         case gsKEY_DOWN:
  194.             m_menu.scroll(1);
  195.             playSample(SAMPLE_MENU_SELECTION);
  196.             break;
  197.  
  198.         case gsKEY_F1:
  199.             ActorInfoList.save(ACTORINFO_FILENAME);
  200.             break;
  201.  
  202.         case gsKEY_R:
  203.             setDemoMode(DEMO_RECORD);
  204.             return changeState(CIntroState::instance());
  205.  
  206.         case gsKEY_L:
  207.             m_demo_recorder.load(DEMO_FILENAME);
  208.         case gsKEY_P:
  209.             {
  210.                 const char *level = m_demo_recorder.getLevel();
  211.                 if (level != 0) {
  212.                     strcpy(m_level_filename,level);
  213.                     setDemoMode(DEMO_PLAYBACK);
  214.                     return changeState(CPlayGameState::instance());
  215.                     }
  216.             }
  217.             break;
  218.  
  219.         case gsKEY_S:
  220.             m_demo_recorder.save();
  221.             break;
  222.         }
  223.  
  224.     if (m_sound_system.isMusicFinished())
  225.         m_sound_system.playMusic((int) MUSIC_TITLE);
  226.         
  227.     return true;
  228. }
  229.  
  230. //-------------------------------------------------------------
  231.