Open Source Tomb Raider Engine
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

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. }