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

  1. //-------------------------------------------------------------
  2. //
  3. // Module:    COptions
  4. //
  5. // Author:    John M Phillips
  6. //
  7. // Started:    05/05/00
  8. //
  9. // Base:    None
  10. //
  11. // Derived:    None
  12. //
  13. //-------------------------------------------------------------
  14.  
  15. #include "game.h"
  16.  
  17. //-------------------------------------------------------------
  18.  
  19. int COptions::m_defaults[TOTAL_OPTIONS] = {
  20.     0,                    //OPTION_DIFFICULTY
  21.     true,                //OPTION_HIRES
  22.     true,                //OPTION_WINDOWED
  23.     24,                    //OPTION_COLOURDEPTH
  24.     false,                //OPTION_JOYSTICK
  25.     true,                //OPTION_MUSIC
  26.     true,                //OPTION_SOUNDFX
  27.     true,                //OPTION_PARTICLEFX
  28.     true,                //OPTION_BACKDROP
  29.     false,                //OPTION_DEBUGINFO
  30.     false,                //OPTION_CHEATS
  31.     KEYBOARD_LAYOUT_1,    //OPTION_CONTROL1
  32.     KEYBOARD_LAYOUT_1    //OPTION_CONTROL2
  33. };
  34.  
  35. //-------------------------------------------------------------
  36.  
  37. COptions Options;
  38.  
  39. //-------------------------------------------------------------
  40.  
  41. COptions::COptions()
  42. {
  43.     restoreDefaults();
  44.     changesNoted();
  45. }
  46.  
  47. //-------------------------------------------------------------
  48.  
  49. COptions::~COptions()
  50. {
  51. }
  52.  
  53. //-------------------------------------------------------------
  54.  
  55. void COptions::restoreDefaults()
  56. {
  57.     for (int i = 0; i < TOTAL_OPTIONS; i++)
  58.         setOption((OptionType) i,m_defaults[i]);
  59. }
  60.  
  61. //-------------------------------------------------------------
  62.  
  63. bool COptions::load(const char *filename)
  64. {
  65.     if (!m_file.open(filename))
  66.         return false;
  67.  
  68.     readOption(OPTION_DIFFICULTY,    "Options","Difficulty");
  69.     readOption(OPTION_HIRES,        "Options","Hires");
  70.     readOption(OPTION_WINDOWED,        "Options","Windowed");
  71.     readOption(OPTION_COLOURDEPTH,    "Options","ColourDepth");
  72.     readOption(OPTION_JOYSTICK,        "Options","Joystick");
  73.     readOption(OPTION_MUSIC,        "Options","Music");
  74.     readOption(OPTION_SOUNDFX,        "Options","SoundFx");
  75.     readOption(OPTION_PARTICLEFX,    "Options","ParticleFx");
  76.     readOption(OPTION_BACKDROP,        "Options","Backdrop");
  77.     readOption(OPTION_DEBUGINFO,    "Options","DebugInfo");
  78.     readOption(OPTION_CHEATS,        "Options","Cheats");
  79.     readOption(OPTION_CONTROL1,        "Options","Control1");
  80.     readOption(OPTION_CONTROL2,        "Options","Control2");
  81.     
  82.     m_file.close();
  83.  
  84.     changesNoted();
  85.  
  86.     return true;
  87. }
  88.  
  89. //-------------------------------------------------------------
  90.  
  91. bool COptions::save(const char *filename)
  92. {
  93.     if (!m_file.open(filename))
  94.         return false;
  95.  
  96.     if (!m_file.writeInt("Options","Difficulty",    getOption(OPTION_DIFFICULTY)) ||
  97.         !m_file.writeInt("Options","Hires",            getOption(OPTION_HIRES)) ||
  98.         !m_file.writeInt("Options","Windowed",        getOption(OPTION_WINDOWED)) ||
  99.         !m_file.writeInt("Options","ColourDepth",    getOption(OPTION_COLOURDEPTH)) ||
  100.         !m_file.writeInt("Options","Joystick",        getOption(OPTION_JOYSTICK)) ||
  101.         !m_file.writeInt("Options","Music",            getOption(OPTION_MUSIC)) ||
  102.         !m_file.writeInt("Options","SoundFx",        getOption(OPTION_SOUNDFX)) ||
  103.         !m_file.writeInt("Options","ParticleFx",    getOption(OPTION_PARTICLEFX)) ||
  104.         !m_file.writeInt("Options","Backdrop",        getOption(OPTION_BACKDROP)) ||
  105.         !m_file.writeInt("Options","DebugInfo",        getOption(OPTION_DEBUGINFO)) ||
  106.         !m_file.writeInt("Options","Cheats",        getOption(OPTION_CHEATS)) ||
  107.  
  108.         !m_file.writeInt("Options","Control1",        getOption(OPTION_CONTROL1)) ||
  109.         !m_file.writeInt("Options","Control2",        getOption(OPTION_CONTROL2))) {
  110.  
  111.         m_file.close();
  112.         return false;
  113.         }
  114.     else {
  115.         m_file.close();
  116.         return true;
  117.         }
  118. }
  119.  
  120. //-------------------------------------------------------------
  121.  
  122. void COptions::readOption(OptionType type,const char *section,const char *key)
  123. {
  124.     setOption(type,m_file.readInt(section,key,m_defaults[type]));
  125. }
  126.  
  127. //-------------------------------------------------------------
  128.  
  129. void COptions::setOption(OptionType type,int value)
  130. {
  131.     if (value != m_options[type]) {
  132.  
  133.         m_options[type] = value;
  134.         m_changed = true;
  135.  
  136.         switch (type) {
  137.             case OPTION_HIRES:
  138.             case OPTION_COLOURDEPTH:
  139.             case OPTION_WINDOWED:
  140.                 m_reload = true;
  141.                 break;
  142.             case OPTION_SOUNDFX:
  143.                 if (value == 0)
  144.                     CGameState::stopSamples();
  145.                 break;
  146.             case OPTION_MUSIC:
  147.                 if (value == 0)
  148.                     CGameState::stopMusic();
  149.                 break;
  150.             }
  151.         }
  152. }
  153.  
  154. //-------------------------------------------------------------
  155.  
  156. int COptions::getOption(OptionType type)
  157. {
  158.     return m_options[type];
  159. }
  160.  
  161. //-------------------------------------------------------------
  162.  
  163. void COptions::toggleOption(OptionType type)
  164. {
  165.     setOption(type,1 - getOption(type) & 1);
  166. }
  167.  
  168. //-------------------------------------------------------------
  169.  
  170. bool COptions::areChanged()
  171. {
  172.     return m_changed;
  173. }
  174.  
  175. //-------------------------------------------------------------
  176.  
  177. bool COptions::requireReload()
  178. {
  179.     return m_reload;
  180. }
  181.  
  182. //-------------------------------------------------------------
  183.  
  184. void COptions::changesNoted()
  185. {
  186.     m_changed = false;
  187.     m_reload = false;
  188. }
  189.  
  190. //-------------------------------------------------------------
  191.