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

  1. //-------------------------------------------------------------
  2. //
  3. // Class:    CVideoMenuState
  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. CVideoMenuState *CVideoMenuState::m_instance = 0;
  20.  
  21. //-------------------------------------------------------------
  22.  
  23. CVideoMenuState::CVideoMenuState()
  24. {
  25. }
  26.  
  27. //-------------------------------------------------------------
  28.  
  29. CVideoMenuState::~CVideoMenuState()
  30. {
  31. }
  32.  
  33. //-------------------------------------------------------------
  34.  
  35. CGameState *CVideoMenuState::instance()
  36. {
  37.     if (!m_instance)
  38.         m_instance = new CVideoMenuState;
  39.  
  40.     return m_instance;
  41. }
  42.  
  43. //-------------------------------------------------------------
  44.  
  45. void CVideoMenuState::copyOptionsToMenu()
  46. {
  47.     m_menu.setValue(OM_HIRES        ,Options.getOption(OPTION_HIRES));
  48.     m_menu.setValue(OM_WINDOWED        ,Options.getOption(OPTION_WINDOWED));
  49.  
  50.     switch (Options.getOption(OPTION_COLOURDEPTH)) {
  51.         case 8:        m_menu.setValue(OM_COLOURDEPTH,0);    break;
  52.         case 24:    m_menu.setValue(OM_COLOURDEPTH,2);    break;
  53.         case 32:    m_menu.setValue(OM_COLOURDEPTH,3);    break;
  54.         default:    m_menu.setValue(OM_COLOURDEPTH,1);    break;
  55.         }
  56.  
  57.     m_menu.setValue(OM_PARTICLEFX    ,Options.getOption(OPTION_PARTICLEFX));
  58.     m_menu.setValue(OM_BACKDROP        ,Options.getOption(OPTION_BACKDROP));
  59. }
  60.  
  61. //-------------------------------------------------------------
  62.  
  63. void CVideoMenuState::copyMenuToOptions()
  64. {
  65.     Options.setOption(OPTION_HIRES        ,m_menu.getValue(OM_HIRES));
  66.     Options.setOption(OPTION_WINDOWED    ,m_menu.getValue(OM_WINDOWED));
  67.  
  68.     switch (m_menu.getValue(OM_COLOURDEPTH)) {
  69.         case 0:    Options.setOption(OPTION_COLOURDEPTH,8);    break;
  70.         case 1:    Options.setOption(OPTION_COLOURDEPTH,16);    break;
  71.         case 2:    Options.setOption(OPTION_COLOURDEPTH,24);    break;
  72.         case 3:    Options.setOption(OPTION_COLOURDEPTH,32);    break;
  73.         }
  74.  
  75.     Options.setOption(OPTION_PARTICLEFX    ,m_menu.getValue(OM_PARTICLEFX));
  76.     Options.setOption(OPTION_BACKDROP    ,m_menu.getValue(OM_BACKDROP));
  77. }
  78.  
  79. //-------------------------------------------------------------
  80.  
  81. bool CVideoMenuState::create()
  82. {
  83.     m_menu.clear();
  84.  
  85. //    m_menu.addOptionList("Resolution","320x240","640x480",0);
  86.     m_menu.addOptionList("Resolution","640x480","640x480",0);
  87.     m_menu.addOptionList("Screen","Full","Window",0);
  88.     m_menu.addOptionList("Colour Depth","8-bit","16-bit","24-bit","32-bit",0);
  89.     m_menu.addOptionList("Particle FX","Off","On ",0);
  90.     m_menu.addOptionList("Backdrop","Off","On ",0);
  91.  
  92.     copyOptionsToMenu();
  93.  
  94.     m_menu.addSeperator();
  95.     m_menu.addSelection("Apply");
  96.     m_menu.addSelection("Cancel");
  97.  
  98.     m_menu.setWrap(true);
  99.     m_menu.setPosition(gsCPoint(0,150));
  100.     m_menu.setSpacing(gsCPoint(0,30));
  101.     m_menu.setCurrentItem(OM_CANCEL);
  102.     m_menu.setFont(&m_medium_font);
  103.  
  104.     return true;
  105. }
  106.  
  107. //-------------------------------------------------------------
  108.  
  109. bool CVideoMenuState::update()
  110. {
  111.     if (!CGameState::update())
  112.         return false;
  113.  
  114.     if (Options.getOption(OPTION_BACKDROP))
  115.         m_backdrop.draw(gsCPoint(0,0));
  116.     else
  117.         m_screen.clear(gsCColour(gsBLACK));
  118.  
  119.     m_starfield.move(4);
  120.     m_starfield.draw();
  121.  
  122.     m_medium_font.setTextCursor(gsCPoint(0,50));
  123.     m_medium_font.justifyString("Video Options");
  124.  
  125.     m_menu.draw();
  126.     
  127.     m_screen.flip();
  128.  
  129.     VideoMenuItem item = (VideoMenuItem) m_menu.getCurrentItem();
  130.  
  131.     switch (getKey()) {
  132.         case gsKEY_RETURN:
  133.         case gsKEY_ENTER:
  134.         case gsKEY_LCONTROL:
  135.             if (item == OM_APPLY) {
  136.                 CGameState::playSample(SAMPLE_MENU_SELECTION);
  137.                 copyMenuToOptions();
  138.                 if (Options.areChanged()) {
  139.  
  140.                     gsCFile::setDirectory(DIRECTORY_ROOT);
  141.  
  142.                     Options.save(OPTIONS_FILENAME);
  143.  
  144.                     if (Options.requireReload()) {
  145.                         CMessageBoxState::setup("Restart to apply options ?",
  146.                                                 "Yes",0,
  147.                                                 "No",COptionsMenuState::instance(),
  148.                                                 true);
  149.                         return changeState(CMessageBoxState::instance());
  150.                         }
  151.                     else
  152.                         return changeState(COptionsMenuState::instance());
  153.                     }
  154.                 else
  155.                     return changeState(COptionsMenuState::instance());
  156.                 }
  157.             else if (item == OM_CANCEL) {
  158.                 CGameState::playSample(SAMPLE_MENU_BACK);
  159.                 return changeState(COptionsMenuState::instance());
  160.                 }
  161.             break;
  162.         case gsKEY_UP:
  163.             CGameState::playSample(SAMPLE_MENU_SELECTION);
  164.             m_menu.scroll(-1);
  165.             break;
  166.         case gsKEY_DOWN:
  167.             CGameState::playSample(SAMPLE_MENU_SELECTION);
  168.             m_menu.scroll(1);
  169.             break;
  170.         case gsKEY_LEFT:
  171.             if (m_menu.setValue(item,m_menu.getValue(item) - 1))
  172.                 CGameState::playSample(SAMPLE_MENU_OPTION);
  173.             break;
  174.         case gsKEY_RIGHT:
  175.             if (m_menu.setValue(item,m_menu.getValue(item) + 1))
  176.                 CGameState::playSample(SAMPLE_MENU_OPTION);
  177.             break;
  178.         }
  179.  
  180.     return true;
  181. }
  182.  
  183. //-------------------------------------------------------------
  184.  
  185.