/Source/User/Settings.cpp
C++ | 328 lines | 289 code | 17 blank | 22 comment | 111 complexity | ea0334692d332ccda0165d686cbcf77b MD5 | raw file
- /*
- Copyright (C) 2003, 2010 - Wolfire Games
- Copyright (C) 2010-2017 - Lugaru contributors (see AUTHORS file)
- This file is part of Lugaru.
- Lugaru is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
- Lugaru is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with Lugaru. If not, see <http://www.gnu.org/licenses/>.
- */
- #include "User/Settings.hpp"
- #include "Game.hpp"
- #include "Utils/Folders.hpp"
- #include "Utils/Input.hpp"
- using namespace Game;
- void DefaultSettings()
- {
- detail = 2;
- ismotionblur = 1;
- usermousesensitivity = 1;
- newscreenwidth = kContextWidth = 1024;
- newscreenheight = kContextHeight = 768;
- fullscreen = 0;
- floatjump = 0;
- autoslomo = 1;
- decalstoggle = true;
- invertmouse = 0;
- bloodtoggle = 0;
- foliage = 1;
- musictoggle = 1;
- trilinear = 1;
- gamespeed = 1;
- damageeffects = 0;
- texttoggle = 1;
- alwaysblur = 0;
- showpoints = 0;
- showdamagebar = 0;
- immediate = 0;
- velocityblur = 0;
- volume = 0.8f;
- ambientsound = 1;
- devtools = 0;
- crouchkey = SDL_SCANCODE_LSHIFT;
- jumpkey = SDL_SCANCODE_SPACE;
- leftkey = SDL_SCANCODE_A;
- forwardkey = SDL_SCANCODE_W;
- backkey = SDL_SCANCODE_S;
- rightkey = SDL_SCANCODE_D;
- drawkey = SDL_SCANCODE_E;
- throwkey = SDL_SCANCODE_Q;
- attackkey = MOUSEBUTTON_LEFT;
- consolekey = SDL_SCANCODE_GRAVE;
- newdetail = detail;
- }
- void SaveSettings()
- {
- if (newdetail < 0) {
- newdetail = 0;
- }
- if (newdetail > 2) {
- newdetail = 2;
- }
- if (newscreenwidth < minscreenwidth || newscreenwidth > maxscreenwidth) {
- newscreenwidth = screenwidth;
- }
- if (newscreenheight < minscreenheight || newscreenheight > maxscreenheight) {
- newscreenheight = screenheight;
- }
- errno = 0;
- ofstream opstream(Folders::getConfigFilePath());
- if (opstream.fail()) {
- perror(("Couldn't save config file " + Folders::getConfigFilePath()).c_str());
- return;
- }
- opstream << "Screenwidth:\n";
- opstream << newscreenwidth;
- opstream << "\nScreenheight:\n";
- opstream << newscreenheight;
- opstream << "\nFullscreen:\n";
- opstream << fullscreen;
- opstream << "\nMouse sensitivity:\n";
- opstream << usermousesensitivity;
- opstream << "\nBlur(0,1):\n";
- opstream << ismotionblur;
- opstream << "\nOverall Detail(0,1,2) higher=better:\n";
- opstream << newdetail;
- opstream << "\nFloating jump:\n";
- opstream << floatjump;
- opstream << "\nMouse jump:\n";
- opstream << mousejump;
- opstream << "\nAmbient sound:\n";
- opstream << ambientsound;
- opstream << "\nBlood (0,1,2):\n";
- opstream << bloodtoggle;
- opstream << "\nAuto slomo:\n";
- opstream << autoslomo;
- opstream << "\nFoliage:\n";
- opstream << foliage;
- opstream << "\nMusic:\n";
- opstream << musictoggle;
- opstream << "\nTrilinear:\n";
- opstream << trilinear;
- opstream << "\nDecals(shadows,blood puddles,etc):\n";
- opstream << decalstoggle;
- opstream << "\nInvert mouse:\n";
- opstream << invertmouse;
- opstream << "\nGamespeed:\n";
- if (oldgamespeed == 0) {
- oldgamespeed = 1;
- }
- opstream << oldgamespeed;
- opstream << "\nDamage effects(blackout, doublevision):\n";
- opstream << damageeffects;
- opstream << "\nText:\n";
- opstream << texttoggle;
- opstream << "\nShow Points:\n";
- opstream << showpoints;
- opstream << "\nAlways Blur:\n";
- opstream << alwaysblur;
- opstream << "\nImmediate mode (turn on on G5):\n";
- opstream << immediate;
- opstream << "\nVelocity blur:\n";
- opstream << velocityblur;
- opstream << "\nVolume:\n";
- opstream << volume;
- opstream << "\nForward key:\n";
- opstream << forwardkey;
- opstream << "\nBack key:\n";
- opstream << backkey;
- opstream << "\nLeft key:\n";
- opstream << leftkey;
- opstream << "\nRight key:\n";
- opstream << rightkey;
- opstream << "\nJump key:\n";
- opstream << jumpkey;
- opstream << "\nCrouch key:\n";
- opstream << crouchkey;
- opstream << "\nDraw key:\n";
- opstream << drawkey;
- opstream << "\nThrow key:\n";
- opstream << throwkey;
- opstream << "\nAttack key:\n";
- opstream << attackkey;
- opstream << "\nConsole key:\n";
- opstream << consolekey;
- opstream << "\nDamage bar:\n";
- opstream << showdamagebar;
- opstream << "\nStereoMode:\n";
- opstream << stereomode;
- opstream << "\nStereoSeparation:\n";
- opstream << stereoseparation;
- opstream << "\nStereoReverse:\n";
- opstream << stereoreverse;
- opstream << "\n";
- opstream.close();
- }
- bool LoadSettings()
- {
- errno = 0;
- ifstream ipstream(Folders::getConfigFilePath(), std::ios::in);
- if (ipstream.fail()) {
- perror(("Couldn't read config file " + Folders::getConfigFilePath()).c_str());
- return false;
- }
- char setting[256];
- char string[256];
- printf("Loading config\n");
- while (!ipstream.eof()) {
- ipstream.getline(setting, sizeof(setting));
- // skip blank lines
- // assume lines starting with spaces are all blank
- if (strlen(setting) == 0 || setting[0] == ' ' || setting[0] == '\t') {
- continue;
- }
- //~ printf("setting : %s\n",setting);
- if (ipstream.eof() || ipstream.fail()) {
- fprintf(stderr, "Error reading config file: Got setting name '%s', but value can't be read\n", setting);
- ipstream.close();
- return false;
- }
- if (!strncmp(setting, "Screenwidth", 11)) {
- ipstream >> kContextWidth;
- if (kContextWidth < (int)minscreenwidth || kContextWidth > (int)maxscreenwidth) {
- kContextWidth = (int)minscreenwidth;
- }
- } else if (!strncmp(setting, "Screenheight", 12)) {
- ipstream >> kContextHeight;
- if (kContextHeight < (int)minscreenheight || kContextHeight > (int)maxscreenheight) {
- kContextHeight = (int)minscreenheight;
- }
- } else if (!strncmp(setting, "Fullscreen", 10)) {
- ipstream >> fullscreen;
- } else if (!strncmp(setting, "Mouse sensitivity", 17)) {
- ipstream >> usermousesensitivity;
- } else if (!strncmp(setting, "Blur", 4)) {
- ipstream >> ismotionblur;
- } else if (!strncmp(setting, "Overall Detail", 14)) {
- ipstream >> detail;
- } else if (!strncmp(setting, "Floating jump", 13)) {
- ipstream >> floatjump;
- } else if (!strncmp(setting, "Mouse jump", 10)) {
- ipstream >> mousejump;
- } else if (!strncmp(setting, "Ambient sound", 13)) {
- ipstream >> ambientsound;
- } else if (!strncmp(setting, "Blood", 5)) {
- ipstream >> bloodtoggle;
- } else if (!strncmp(setting, "Auto slomo", 10)) {
- ipstream >> autoslomo;
- } else if (!strncmp(setting, "Foliage", 7)) {
- ipstream >> foliage;
- } else if (!strncmp(setting, "Music", 5)) {
- ipstream >> musictoggle;
- } else if (!strncmp(setting, "Trilinear", 9)) {
- ipstream >> trilinear;
- } else if (!strncmp(setting, "Decals", 6)) {
- ipstream >> decalstoggle;
- } else if (!strncmp(setting, "Invert mouse", 12)) {
- ipstream >> invertmouse;
- } else if (!strncmp(setting, "Gamespeed", 9)) {
- ipstream >> gamespeed;
- oldgamespeed = gamespeed;
- if (oldgamespeed == 0) {
- gamespeed = 1;
- oldgamespeed = 1;
- }
- } else if (!strncmp(setting, "Damage effects", 14)) {
- ipstream >> damageeffects;
- } else if (!strncmp(setting, "Text", 4)) {
- ipstream >> texttoggle;
- } else if (!strncmp(setting, "Devtools", 8)) {
- ipstream >> devtools;
- } else if (!strncmp(setting, "Show Points", 11)) {
- ipstream >> showpoints;
- } else if (!strncmp(setting, "Always Blur", 11)) {
- ipstream >> alwaysblur;
- } else if (!strncmp(setting, "Immediate mode ", 15)) {
- ipstream >> immediate;
- } else if (!strncmp(setting, "Velocity blur", 13)) {
- ipstream >> velocityblur;
- } else if (!strncmp(setting, "Volume", 6)) {
- ipstream >> volume;
- } else if (!strncmp(setting, "Forward key", 11)) {
- ipstream >> forwardkey;
- } else if (!strncmp(setting, "Back key", 8)) {
- ipstream >> backkey;
- } else if (!strncmp(setting, "Left key", 8)) {
- ipstream >> leftkey;
- } else if (!strncmp(setting, "Right key", 9)) {
- ipstream >> rightkey;
- } else if (!strncmp(setting, "Jump key", 8)) {
- ipstream >> jumpkey;
- } else if (!strncmp(setting, "Crouch key", 10)) {
- ipstream >> crouchkey;
- } else if (!strncmp(setting, "Draw key", 8)) {
- ipstream >> drawkey;
- } else if (!strncmp(setting, "Throw key", 9)) {
- ipstream >> throwkey;
- } else if (!strncmp(setting, "Attack key", 10)) {
- ipstream >> attackkey;
- } else if (!strncmp(setting, "Console key", 11)) {
- ipstream >> consolekey;
- } else if (!strncmp(setting, "Damage bar", 10)) {
- ipstream >> showdamagebar;
- } else if (!strncmp(setting, "StereoMode", 10)) {
- int i;
- ipstream >> i;
- stereomode = (StereoMode)i;
- } else if (!strncmp(setting, "StereoSeparation", 16)) {
- ipstream >> stereoseparation;
- } else if (!strncmp(setting, "StereoReverse", 13)) {
- ipstream >> stereoreverse;
- } else {
- ipstream >> string;
- fprintf(stderr, "Unknown config option '%s' with value '%s'. Ignoring.\n", setting, string);
- }
- if (ipstream.fail()) {
- fprintf(stderr, "Error reading config file: EOF reached when trying to read value for setting '%s'.\n", setting);
- ipstream.close();
- return false;
- }
- if (ipstream.bad()) {
- fprintf(stderr, "Error reading config file: Failed to read value for setting '%s'.\n", setting);
- ipstream.close();
- return false;
- }
- }
- ipstream.close();
- if (detail > 2) {
- detail = 2;
- }
- if (detail < 0) {
- detail = 0;
- }
- if (screenwidth < minscreenwidth || screenwidth > maxscreenwidth) {
- screenwidth = 1024;
- }
- if (screenheight < minscreenheight || screenheight > maxscreenheight) {
- screenheight = 768;
- }
- newdetail = detail;
- return true;
- }