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

  1. //-------------------------------------------------------------
  2. //
  3. // Class:    CIntroState
  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. CIntroState *CIntroState::m_instance = 0;
  20.  
  21. //-------------------------------------------------------------
  22.  
  23. CIntroState::CIntroState()
  24. {
  25. }
  26.  
  27. //-------------------------------------------------------------
  28.  
  29. CIntroState::~CIntroState()
  30. {
  31. }
  32.  
  33. //-------------------------------------------------------------
  34.  
  35. CGameState *CIntroState::instance()
  36. {
  37.     if (!m_instance)
  38.         m_instance = new CIntroState;
  39.  
  40.     return m_instance;
  41. }
  42.  
  43. //-------------------------------------------------------------
  44.  
  45. bool CIntroState::create()
  46. {
  47.     m_menu.clear();
  48.  
  49.     m_menu.addSeperator("Choose Level:");
  50.     m_menu.addSeperator();
  51.  
  52.     gsCFile::setDirectory(DIRECTORY_LEVELS);
  53.  
  54.     const char *name = gsCFile::findFirst("*.fmp");
  55.  
  56.     while (name) {
  57.         m_files.addItem(strdup(name));
  58.         name = gsCFile::findNext();
  59.         }
  60.  
  61.     gsCFile::findClose();
  62.  
  63.     for (int i = 0; i < m_files.getSize(); i++)
  64.         m_menu.addSelection(m_files[i]);
  65.  
  66.     m_menu.setWrap(true);
  67.     m_menu.setPosition(gsCPoint(0,100));
  68.     m_menu.setSpacing(gsCPoint(0,30));
  69.     m_menu.setCurrentItem(IM_FIRSTFILE);
  70.     m_menu.setFont(&m_medium_font);
  71.  
  72.     playMusic(MUSIC_INTRO);
  73.  
  74.     return true;
  75. }
  76.  
  77. //-------------------------------------------------------------
  78.  
  79. bool CIntroState::update()
  80. {
  81.     if (!CGameState::update())
  82.         return false;
  83.  
  84.     if (Options.getOption(OPTION_BACKDROP))
  85.         m_backdrop.draw(gsCPoint(0,0));
  86.     else
  87.         m_screen.clear(gsCColour(gsBLACK));
  88.  
  89.     m_starfield.move(4);
  90.     m_starfield.draw();
  91.  
  92.     m_menu.draw();
  93.  
  94.     m_screen.flip();
  95.  
  96.     switch (getKey()) {
  97.         case gsKEY_RETURN:
  98.         case gsKEY_ENTER:
  99.         case gsKEY_LCONTROL:
  100.             {
  101.             int item = m_menu.getCurrentItem();
  102.  
  103.             strcpy(m_level_filename,m_menu.getName(item));
  104.  
  105.             CGameState::playSample(SAMPLE_MENU_CLICK);
  106.  
  107.             return changeState(CPlayGameState::instance());
  108.             }
  109.             break;
  110.         case gsKEY_UP:
  111.             m_menu.scroll(-1);
  112.             CGameState::playSample(SAMPLE_MENU_SELECTION);
  113.             break;
  114.         case gsKEY_DOWN:
  115.             m_menu.scroll(1);
  116.             CGameState::playSample(SAMPLE_MENU_SELECTION);
  117.             break;
  118.         case gsKEY_ESCAPE:
  119.             return changeState(CMainMenuState::instance());
  120.         }
  121.  
  122.     return true;
  123. }
  124.  
  125. //-------------------------------------------------------------
  126.  
  127. bool CIntroState::destroy()
  128. {
  129.     for (int i = 0; i < m_files.getSize(); i++)
  130.         free(m_files[i]);
  131.  
  132.     m_files.clear();
  133.  
  134.     return true;
  135. }
  136.  
  137. //-------------------------------------------------------------
  138.