Open Source Tomb Raider Engine
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CommandSet.cpp 6.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. /*!
  2. * \file src/commands/CommandSet.cpp
  3. * \brief Get/Set Commands
  4. *
  5. * \author xythobuz
  6. */
  7. #include "global.h"
  8. #include "Camera.h"
  9. #include "Log.h"
  10. #include "RunTime.h"
  11. #include "system/Sound.h"
  12. #include "system/Window.h"
  13. #include "utils/strings.h"
  14. #include "commands/CommandSet.h"
  15. std::string CommandSet::name() {
  16. return "set";
  17. }
  18. std::string CommandSet::brief() {
  19. return "set a parameter";
  20. }
  21. void CommandSet::printHelp() {
  22. Log::get(LOG_USER) << "set-Command Usage:" << Log::endl;
  23. Log::get(LOG_USER) << " set VAR VAL" << Log::endl;
  24. Log::get(LOG_USER) << "Available Variables:" << Log::endl;
  25. Log::get(LOG_USER) << " basedir STRING" << Log::endl;
  26. Log::get(LOG_USER) << " pakdir STRING" << Log::endl;
  27. Log::get(LOG_USER) << " audiodir STRING" << Log::endl;
  28. Log::get(LOG_USER) << " datadir STRING" << Log::endl;
  29. Log::get(LOG_USER) << " size INT INT" << Log::endl;
  30. Log::get(LOG_USER) << " fullscreen BOOL" << Log::endl;
  31. Log::get(LOG_USER) << " audio BOOL" << Log::endl;
  32. Log::get(LOG_USER) << " volume BOOL" << Log::endl;
  33. Log::get(LOG_USER) << " mouse_x FLOAT" << Log::endl;
  34. Log::get(LOG_USER) << " mouse_y FLOAT" << Log::endl;
  35. Log::get(LOG_USER) << " fps BOOL" << Log::endl;
  36. Log::get(LOG_USER) << "Enclose STRINGs with \"\"!" << Log::endl;
  37. }
  38. static std::string expandNames(std::string s) {
  39. // Remove quotes
  40. if ((s.length() >= 3) &&
  41. (((s[0] == '"') && (s[s.length() - 1] == '"'))
  42. || ((s[0] == '\'') && (s[s.length() - 1] == '\'')))) {
  43. s.erase(0, 1);
  44. s.erase(s.length() - 1, 1);
  45. }
  46. // Expand Names
  47. s = findAndReplace(s, "$(pakdir)", RunTime::getPakDir());
  48. s = findAndReplace(s, "$(audiodir)", RunTime::getAudioDir());
  49. s = findAndReplace(s, "$(datadir)", RunTime::getDataDir());
  50. s = findAndReplace(s, "$(basedir)", RunTime::getBaseDir());
  51. // Full path
  52. s = expandHomeDirectory(s);
  53. return s;
  54. }
  55. int CommandSet::execute(std::istream& args) {
  56. std::string var;
  57. args >> var;
  58. if (var.compare("size") == 0) {
  59. unsigned int w = DEFAULT_WIDTH, h = DEFAULT_HEIGHT;
  60. if (!(args >> w >> h)) {
  61. Log::get(LOG_USER) << "set-size-Error: Invalid value(s)" << Log::endl;
  62. return -2;
  63. }
  64. Window::setSize(glm::i32vec2(w, h));
  65. } else if (var.compare("fullscreen") == 0) {
  66. bool fullscreen = false;
  67. if (!(args >> fullscreen)) {
  68. Log::get(LOG_USER) << "set-fullscreen-Error: Invalid value" << Log::endl;
  69. return -3;
  70. }
  71. Window::setFullscreen(fullscreen);
  72. } else if (var.compare("audio") == 0) {
  73. bool audio = false;
  74. if (!(args >> audio)) {
  75. Log::get(LOG_USER) << "set-audio-Error: Invalid value" << Log::endl;
  76. return -4;
  77. }
  78. Sound::setEnabled(audio);
  79. } else if (var.compare("volume") == 0) {
  80. float vol = 1.0f;
  81. if (!(args >> vol)) {
  82. Log::get(LOG_USER) << "set-volume-Error: Invalid value" << Log::endl;
  83. return -5;
  84. }
  85. Sound::setVolume(vol);
  86. } else if (var.compare("mouse_x") == 0) {
  87. float sense = 1.0f;
  88. if (!(args >> sense)) {
  89. Log::get(LOG_USER) << "set-mouse_x-Error: Invalid value" << Log::endl;
  90. return -6;
  91. }
  92. Camera::setSensitivityX(glm::radians(sense));
  93. } else if (var.compare("mouse_y") == 0) {
  94. float sense = 1.0f;
  95. if (!(args >> sense)) {
  96. Log::get(LOG_USER) << "set-mouse_y-Error: Invalid value" << Log::endl;
  97. return -7;
  98. }
  99. Camera::setSensitivityY(glm::radians(sense));
  100. } else if (var.compare("fps") == 0) {
  101. bool fps = false;
  102. if (!(args >> fps)) {
  103. Log::get(LOG_USER) << "set-fps-Error: Invalid value" << Log::endl;
  104. return -8;
  105. }
  106. RunTime::setShowFPS(fps);
  107. } else if (var.compare("basedir") == 0) {
  108. std::string temp;
  109. args >> temp;
  110. RunTime::setBaseDir(expandNames(temp));
  111. } else if (var.compare("pakdir") == 0) {
  112. std::string temp;
  113. args >> temp;
  114. RunTime::setPakDir(expandNames(temp));
  115. } else if (var.compare("audiodir") == 0) {
  116. std::string temp;
  117. args >> temp;
  118. RunTime::setAudioDir(expandNames(temp));
  119. } else if (var.compare("datadir") == 0) {
  120. std::string temp;
  121. args >> temp;
  122. RunTime::setDataDir(expandNames(temp));
  123. } else {
  124. Log::get(LOG_USER) << "set-Error: Unknown variable (" << var.c_str() << ")" << Log::endl;
  125. return -1;
  126. }
  127. return 0;
  128. }
  129. std::string CommandGet::name() {
  130. return "get";
  131. }
  132. std::string CommandGet::brief() {
  133. return "get a parameter";
  134. }
  135. void CommandGet::printHelp() {
  136. Log::get(LOG_USER) << "get-Command Usage:" << Log::endl;
  137. Log::get(LOG_USER) << " get VAR" << Log::endl;
  138. Log::get(LOG_USER) << "Available Variables:" << Log::endl;
  139. Log::get(LOG_USER) << " basedir" << Log::endl;
  140. Log::get(LOG_USER) << " pakdir" << Log::endl;
  141. Log::get(LOG_USER) << " audiodir" << Log::endl;
  142. Log::get(LOG_USER) << " datadir" << Log::endl;
  143. Log::get(LOG_USER) << " size" << Log::endl;
  144. Log::get(LOG_USER) << " fullscreen" << Log::endl;
  145. Log::get(LOG_USER) << " audio" << Log::endl;
  146. Log::get(LOG_USER) << " volume" << Log::endl;
  147. Log::get(LOG_USER) << " mouse_x" << Log::endl;
  148. Log::get(LOG_USER) << " mouse_y" << Log::endl;
  149. Log::get(LOG_USER) << " fps" << Log::endl;
  150. }
  151. int CommandGet::execute(std::istream& args) {
  152. std::string var;
  153. args >> var;
  154. if (var.compare("size") == 0) {
  155. Log::get(LOG_USER) << Window::getSize() << Log::endl;
  156. } else if (var.compare("fullscreen") == 0) {
  157. Log::get(LOG_USER) << Window::getFullscreen() << Log::endl;
  158. } else if (var.compare("audio") == 0) {
  159. Log::get(LOG_USER) << Sound::getEnabled() << Log::endl;
  160. } else if (var.compare("volume") == 0) {
  161. Log::get(LOG_USER) << Sound::getVolume() << Log::endl;
  162. } else if (var.compare("mouse_x") == 0) {
  163. Log::get(LOG_USER) << glm::degrees(Camera::getSensitivityX()) << Log::endl;
  164. } else if (var.compare("mouse_y") == 0) {
  165. Log::get(LOG_USER) << glm::degrees(Camera::getSensitivityY()) << Log::endl;
  166. } else if (var.compare("fps") == 0) {
  167. Log::get(LOG_USER) << RunTime::getShowFPS() << Log::endl;
  168. } else if (var.compare("basedir") == 0) {
  169. Log::get(LOG_USER) << RunTime::getBaseDir() << Log::endl;
  170. } else if (var.compare("pakdir") == 0) {
  171. Log::get(LOG_USER) << RunTime::getPakDir() << Log::endl;
  172. } else if (var.compare("audiodir") == 0) {
  173. Log::get(LOG_USER) << RunTime::getAudioDir() << Log::endl;
  174. } else if (var.compare("datadir") == 0) {
  175. Log::get(LOG_USER) << RunTime::getDataDir() << Log::endl;
  176. } else {
  177. Log::get(LOG_USER) << "get-Error: Unknown variable (" << var << ")" << Log::endl;
  178. return -1;
  179. }
  180. return 0;
  181. }