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 7.4KB

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