RigsofRods
Soft-body Physics Simulation
AppContext.cpp
Go to the documentation of this file.
1 /*
2  This source file is part of Rigs of Rods
3  Copyright 2005-2012 Pierre-Michel Ricordel
4  Copyright 2007-2012 Thomas Fischer
5  Copyright 2013-2020 Petr Ohlidal
6 
7  For more information, see http://www.rigsofrods.org/
8 
9  Rigs of Rods is free software: you can redistribute it and/or modify
10  it under the terms of the GNU General Public License version 3, as
11  published by the Free Software Foundation.
12 
13  Rigs of Rods is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with Rigs of Rods. If not, see <http://www.gnu.org/licenses/>.
20 */
21 
22 #include "AppContext.h"
23 
24 #include "AdvancedScreen.h"
25 #include "Actor.h"
26 #include "CameraManager.h"
27 #include "ChatSystem.h"
28 #include "Console.h"
29 #include "ContentManager.h"
30 #include "DashBoardManager.h"
31 #include "ErrorUtils.h"
32 #include "GameContext.h"
33 #include "GUIManager.h"
34 #include "GUI_LoadingWindow.h"
35 #include "GUI_MainSelector.h"
38 #include "InputEngine.h"
39 #include "Language.h"
40 #include "PlatformUtils.h"
41 #include "RoRVersion.h"
42 #include "OverlayWrapper.h"
43 
44 #ifdef USE_ANGELSCRIPT
45 # include "ScriptEngine.h"
46 #endif
47 
48 #ifdef _WIN32
49 # include <windows.h>
50 #endif
51 
52 #include <iomanip>
53 #include <sstream>
54 #include <string>
55 #include <ctime>
56 
57 using namespace RoR;
58 
59 // --------------------------
60 // Input handling
61 
63 {
68 
69  if (App::io_ffb_enabled->getBool())
70  {
72  }
73  return true;
74 }
75 
76 bool AppContext::mouseMoved(const OIS::MouseEvent& arg) // overrides OIS::MouseListener
77 {
80 
81  if (!ImGui::GetIO().WantCaptureMouse) // true if mouse is over any window
82  {
83  bool handled = false;
85  {
86  handled = App::GetOverlayWrapper()->mouseMoved(arg); // update the old airplane / autopilot gui
87  }
88  if (!handled)
89  {
90  if (!App::GetCameraManager()->mouseMoved(arg))
91  {
93  }
94  }
95  }
96 
97  return true;
98 }
99 
100 bool AppContext::mousePressed(const OIS::MouseEvent& arg, OIS::MouseButtonID _id) // overrides OIS::MouseListener
101 {
104 
105  if (!ImGui::GetIO().WantCaptureMouse) // true if mouse is over any window
106  {
107  bool handled = false;
109  {
110  handled = App::GetOverlayWrapper()->mousePressed(arg, _id); // update the old airplane / autopilot gui
111  }
112 
113  if (!handled && App::app_state->getEnum<AppState>() == AppState::SIMULATION)
114  {
116  App::GetCameraManager()->mousePressed(arg, _id);
117  }
118  }
119  else
120  {
122  }
123 
124  return true;
125 }
126 
127 bool AppContext::mouseReleased(const OIS::MouseEvent& arg, OIS::MouseButtonID _id) // overrides OIS::MouseListener
128 {
131 
132  if (!ImGui::GetIO().WantCaptureMouse) // true if mouse is over any window
133  {
134  bool handled = false;
136  {
137  handled = App::GetOverlayWrapper()->mouseReleased(arg, _id); // update the old airplane / autopilot gui
138  }
139  if (!handled && App::app_state->getEnum<AppState>() == AppState::SIMULATION)
140  {
142  }
143  }
144  else
145  {
147  }
148 
149  return true;
150 }
151 
152 bool AppContext::keyPressed(const OIS::KeyEvent& arg)
153 {
155 
156  if (!App::GetGuiManager()->IsGuiCaptureKeyboardRequested() &&
157  !ImGui::GetIO().WantCaptureKeyboard)
158  {
160  }
161 
162  return true;
163 }
164 
165 bool AppContext::keyReleased(const OIS::KeyEvent& arg)
166 {
168 
169  if (!App::GetGuiManager()->IsGuiCaptureKeyboardRequested() &&
170  !ImGui::GetIO().WantCaptureKeyboard)
171  {
173  }
174  else if (App::GetInputEngine()->isKeyDownEffective(arg.key))
175  {
176  // If capturing is requested, still pass release events for already-pressed keys.
178  }
179 
180  return true;
181 }
182 
183 bool AppContext::buttonPressed(const OIS::JoyStickEvent& arg, int) { App::GetInputEngine()->ProcessJoystickEvent(arg); return true; }
184 bool AppContext::buttonReleased(const OIS::JoyStickEvent& arg, int) { App::GetInputEngine()->ProcessJoystickEvent(arg); return true; }
185 bool AppContext::axisMoved(const OIS::JoyStickEvent& arg, int) { App::GetInputEngine()->ProcessJoystickEvent(arg); return true; }
186 bool AppContext::sliderMoved(const OIS::JoyStickEvent& arg, int) { App::GetInputEngine()->ProcessJoystickEvent(arg); return true; }
187 bool AppContext::povMoved(const OIS::JoyStickEvent& arg, int) { App::GetInputEngine()->ProcessJoystickEvent(arg); return true; }
188 
189 void AppContext::windowResized(Ogre::RenderWindow* rw)
190 {
191  App::GetInputEngine()->windowResized(rw); // Update mouse area
193  if (App::sim_state->getEnum<AppState>() == RoR::AppState::SIMULATION)
194  {
195  for (ActorPtr& actor: App::GetGameContext()->GetActorManager()->GetActors())
196  {
197  actor->ar_dashboard->windowResized();
198  }
199  }
200 }
201 
202 void AppContext::windowFocusChange(Ogre::RenderWindow* rw)
203 {
205 }
206 
207 // --------------------------
208 // Rendering
209 
210 void AppContext::SetRenderWindowIcon(Ogre::RenderWindow* rw)
211 {
212 #ifdef _WIN32
213  size_t hWnd = 0;
214  rw->getCustomAttribute("WINDOW", &hWnd);
215 
216  char buf[MAX_PATH];
217  ::GetModuleFileNameA(0, (LPCH)&buf, MAX_PATH);
218 
219  HINSTANCE instance = ::GetModuleHandleA(buf);
220  HICON hIcon = ::LoadIconA(instance, MAKEINTRESOURCEA(101));
221  if (hIcon)
222  {
223  ::SendMessageA((HWND)hWnd, WM_SETICON, 1, (LPARAM)hIcon);
224  ::SendMessageA((HWND)hWnd, WM_SETICON, 0, (LPARAM)hIcon);
225  }
226 #endif // _WIN32
227 }
228 
230 {
231  // Create 'OGRE root' facade
232  // * leave 'plugins' param empty, we load manually below
233  // * note file 'ogre.cfg' isn't read immediatelly but only after calling 'restoreConfig()' below.
234  std::string log_filepath = PathCombine(App::sys_logs_dir->getStr(), "RoR.log");
235  std::string cfg_filepath = PathCombine(App::sys_config_dir->getStr(), "ogre.cfg");
236  LOG(fmt::format("[RoR|Startup|Rendering] Creating OGRE renderer Root object, config='{}'", cfg_filepath));
237  m_ogre_root = new Ogre::Root("", cfg_filepath, log_filepath);
238 
239  // load OGRE plugins manually
240 #ifdef _DEBUG
241  std::string plugins_path = PathCombine(RoR::App::sys_process_dir->getStr(), "plugins_d.cfg");
242 #else
243  std::string plugins_path = PathCombine(RoR::App::sys_process_dir->getStr(), "plugins.cfg");
244 #endif
245  LOG(fmt::format("[RoR|Startup|Rendering] Loading OGRE renderer plugins config '{}'.", plugins_path));
246  try
247  {
248  Ogre::ConfigFile cfg;
249  cfg.load(plugins_path);
250  std::string plugin_dir = cfg.getSetting("PluginFolder", /*section=*/"", /*default=*/App::sys_process_dir->getStr());
251  Ogre::StringVector plugins = cfg.getMultiSetting("Plugin");
252  for (Ogre::String plugin_filename: plugins)
253  {
254  try
255  {
256  m_ogre_root->loadPlugin(PathCombine(plugin_dir, plugin_filename));
257  }
258  catch (Ogre::Exception&) {} // Logged by OGRE
259  }
260  }
261  catch (Ogre::Exception& e)
262  {
264  _L("Startup error"),
265  fmt::format(_L("Could not load file '{}' - make sure the game is installed correctly.\n\nDetailed info: {}"), plugins_path, e.getDescription()));
266  return false;
267  }
268 
269  // Load renderer configuration
270  bool autodetect_resolution = false;
271  if (!m_ogre_root->restoreConfig())
272  {
273  autodetect_resolution = true;
274  LOG(fmt::format("[RoR|Startup|Rendering] WARNING - invalid 'ogre.cfg', selecting render plugin manually..."));
275 
276  const auto render_systems = App::GetAppContext()->GetOgreRoot()->getAvailableRenderers();
277  if (!render_systems.empty())
278  {
279  LOG(fmt::format("[RoR|Startup|Rendering] Auto-selected renderer plugin '{}'", render_systems.front()->getName()));
280  m_ogre_root->setRenderSystem(render_systems.front());
281  }
282  else
283  {
284  ErrorUtils::ShowError (_L("Startup error"), _L("No render system plugin available. Check your plugins.cfg"));
285  return false;
286  }
287  }
288 
289  const auto rs = m_ogre_root->getRenderSystemByName(App::app_rendersys_override->getStr());
290  if (rs != nullptr && rs != m_ogre_root->getRenderSystem())
291  {
292  LOG(fmt::format("[RoR|Startup|Rendering] Setting renderer '{}' on behalf of 'app_rendersys_override' (user selection via Settings UI)", rs->getName()));
293  // The user has selected a different render system during the previous session.
294  m_ogre_root->setRenderSystem(rs);
295  m_ogre_root->saveConfig();
296  }
298 
299  // Start the renderer
300  LOG(fmt::format("[RoR|Startup|Rendering] Starting renderer '{}' (without auto-creating render window)", m_ogre_root->getRenderSystem()->getName()));
301  m_ogre_root->initialise(/*createWindow=*/false);
302 
303  // Review configuration options
304  Ogre::ConfigOptionMap ropts = m_ogre_root->getRenderSystem()->getConfigOptions();
305  std::stringstream ropts_log;
306  for (auto& pair: ropts)
307  {
308  ropts_log << " " << pair.first << " = " << pair.second.currentValue << " (";
309  for (auto& val: pair.second.possibleValues)
310  {
311  ropts_log << val << ", ";
312  }
313  ropts_log << ")\n";
314  }
315  LOG(fmt::format("[RoR|Startup|Rendering] Renderer options as reported by OGRE:\n{}", ropts_log.str()));
316 
317  // Configure the render window
318  Ogre::NameValuePairList miscParams;
319  miscParams["FSAA"] = ropts["FSAA"].currentValue;
320  miscParams["vsync"] = ropts["VSync"].currentValue;
321  miscParams["gamma"] = ropts["sRGB Gamma Conversion"].currentValue;
322  if (!App::diag_allow_window_resize->getBool())
323  {
324  miscParams["border"] = "fixed";
325  }
326 #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
327  const auto rd = ropts["Rendering Device"];
328  const auto it = std::find(rd.possibleValues.begin(), rd.possibleValues.end(), rd.currentValue);
329  const int idx = std::distance(rd.possibleValues.begin(), it);
330  miscParams["monitorIndex"] = Ogre::StringConverter::toString(idx);
331  miscParams["windowProc"] = Ogre::StringConverter::toString((size_t)OgreBites::WindowEventUtilities::_WndProc);
332 #endif
333 
334  // Validate rendering resolution
335  Ogre::uint32 width, height;
336  std::istringstream mode (ropts["Video Mode"].currentValue);
337  Ogre::String token;
338  mode >> width;
339  mode >> token; // 'x' as seperator between width and height
340  mode >> height;
341 
342  if(width < 800) width = 800;
343  if(height < 600) height = 600;
344 
345  if (autodetect_resolution)
346  {
347  for (auto& p_mode_str: ropts["Video Mode"].possibleValues)
348  {
349  Ogre::uint32 p_width, p_height;
350  std::istringstream p_mode (p_mode_str);
351  p_mode >> p_width;
352  p_mode >> token; // 'x' as seperator between width and height
353  p_mode >> p_height;
354  if (p_width >= width && p_height >= height)
355  {
356  width = p_width;
357  height = p_height;
358  m_ogre_root->getRenderSystem()->setConfigOption("Video Mode", p_mode_str);
359  }
360  }
361 
362  LOG(fmt::format("[RoR|Startup|Rendering] WARNING - invalid 'ogre.cfg', auto-detected resolution {}x{}", width, height));
363  m_ogre_root->saveConfig();
364  }
365 
366  // Review render window settings
367  std::stringstream miscParams_log;
368  for (auto& pair: miscParams)
369  {
370  miscParams_log << " " << pair.first << " = " << pair.second << "\n";
371  }
372  LOG(fmt::format("[RoR|Startup|Rendering] Creating render window with settings:\n{}", miscParams_log.str()));
373 
374  // Create render window
375  m_render_window = Ogre::Root::getSingleton().createRenderWindow (
376  "Rigs of Rods version " + Ogre::String (ROR_VERSION_STRING),
377  width, height, ropts["Full Screen"].currentValue == "Yes", &miscParams);
378  OgreBites::WindowEventUtilities::_addRenderWindow(m_render_window);
379 
381  m_render_window->setActive(true);
382 
383  // Create viewport (without camera)
384  m_viewport = m_render_window->addViewport(/*camera=*/nullptr);
385  m_viewport->setBackgroundColour(Ogre::ColourValue::Black);
386 
387  return true;
388 }
389 
390 Ogre::RenderWindow* AppContext::CreateCustomRenderWindow(std::string const& window_name, int width, int height)
391 {
392  Ogre::NameValuePairList misc;
393  Ogre::ConfigOptionMap ropts = m_ogre_root->getRenderSystem()->getConfigOptions();
394  misc["FSAA"] = Ogre::StringConverter::parseInt(ropts["FSAA"].currentValue, 0);
395 
396  Ogre::RenderWindow* rw = Ogre::Root::getSingleton().createRenderWindow(window_name, width, height, false, &misc);
397  return rw;
398 }
399 
401 {
402  const std::time_t time = std::time(nullptr);
403  const int index = (time == m_prev_screenshot_time) ? m_prev_screenshot_index+1 : 1;
404 
405  std::stringstream stamp;
406  stamp << std::put_time(std::localtime(&time), "%Y-%m-%d_%H-%M-%S") << "_" << index
407  << "." << App::app_screenshot_format->getStr();
408  std::string path = PathCombine(App::sys_screenshot_dir->getStr(), "screenshot_") + stamp.str();
409 
410  if (App::app_screenshot_format->getStr() == "png")
411  {
412  AdvancedScreen png(m_render_window, path);
413 
414  png.addData("User_NickName", App::mp_player_name->getStr());
415  png.addData("User_Language", App::app_language->getStr());
416 
417  if (App::app_state->getEnum<AppState>() == AppState::SIMULATION &&
418  App::GetGameContext()->GetPlayerActor())
419  {
420  png.addData("Truck_file", App::GetGameContext()->GetPlayerActor()->ar_filename);
421  png.addData("Truck_name", App::GetGameContext()->GetPlayerActor()->getTruckName());
422  }
423  if (App::GetGameContext()->GetTerrain())
424  {
425  png.addData("Terrn_file", App::sim_terrain_name->getStr());
426  png.addData("Terrn_name", App::sim_terrain_gui_name->getStr());
427  }
428  if (App::mp_state->getEnum<MpState>() == MpState::CONNECTED)
429  {
430  png.addData("MP_ServerName", App::mp_server_host->getStr());
431  }
432 
433  png.write();
434  }
435  else
436  {
437  m_render_window->writeContentsToFile(path);
438  }
439 
441  _L("Screenshot: ") + stamp.str());
442 
443  m_prev_screenshot_time = time;
444  m_prev_screenshot_index = index;
445 }
446 
448 {
449  if (!val && !m_windowed_fix)
450  {
451  // Workaround OGRE glitch - badly aligned viewport after first full->window switch
452  // Observed on Win10/OpenGL (GeForce GTX 660)
453  m_render_window->setFullscreen(false, m_render_window->getWidth()-1, m_render_window->getHeight()-1);
454  m_render_window->setFullscreen(false, m_render_window->getWidth()+1, m_render_window->getHeight()+1);
455  }
456  else
457  {
458  m_render_window->setFullscreen(val, m_render_window->getWidth(), m_render_window->getHeight());
459  }
460 }
461 
462 // --------------------------
463 // Program paths and logging
464 
466 {
467  // Process directory
468  std::string exe_path = RoR::GetExecutablePath();
469  if (exe_path.empty())
470  {
471  ErrorUtils::ShowError(_L("Startup error"), _L("Error while retrieving program directory path"));
472  return false;
473  }
474  App::sys_process_dir->setStr(RoR::GetParentDirectory(exe_path.c_str()).c_str());
475 
476  // RoR's home directory
477  std::string local_userdir = PathCombine(App::sys_process_dir->getStr(), "config"); // TODO: Think of a better name, this is ambiguious with ~/.rigsofrods/config which stores configfiles! ~ only_a_ptr, 02/2018
478  if (FolderExists(local_userdir))
479  {
480  // It's a portable installation
481  App::sys_user_dir->setStr(local_userdir.c_str());
482  }
483  else
484  {
485  // Default location - user's home directory
486  std::string user_home = RoR::GetUserHomeDirectory();
487  if (user_home.empty())
488  {
489  ErrorUtils::ShowError(_L("Startup error"), _L("Error while retrieving user directory path"));
490  return false;
491  }
492  RoR::Str<500> ror_homedir;
493 #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
494  ror_homedir << user_home << PATH_SLASH << "My Games";
495  CreateFolder(ror_homedir.ToCStr());
496  ror_homedir << PATH_SLASH << "Rigs of Rods";
497 #elif OGRE_PLATFORM == OGRE_PLATFORM_LINUX
498  char* env_SNAP = getenv("SNAP_USER_COMMON");
499  if(env_SNAP)
500  ror_homedir = env_SNAP;
501  else
502  ror_homedir << user_home << PATH_SLASH << ".rigsofrods";
503 #elif OGRE_PLATFORM == OGRE_PLATFORM_APPLE
504  ror_homedir << user_home << PATH_SLASH << "RigsOfRods";
505 #endif
506  CreateFolder(ror_homedir.ToCStr ());
507  App::sys_user_dir->setStr(ror_homedir.ToCStr ());
508  }
509 
510  return true;
511 }
512 
514 {
515  std::string logs_dir = PathCombine(App::sys_user_dir->getStr(), "logs");
516  CreateFolder(logs_dir);
517  App::sys_logs_dir->setStr(logs_dir.c_str());
518 
519  auto ogre_log_manager = OGRE_NEW Ogre::LogManager();
520  std::string rorlog_path = PathCombine(logs_dir, "RoR.log");
521  Ogre::Log* rorlog = ogre_log_manager->createLog(rorlog_path, true, true);
522  rorlog->stream() << "[RoR] Rigs of Rods (www.rigsofrods.org) version " << ROR_VERSION_STRING;
523  std::time_t t = std::time(nullptr);
524  rorlog->stream() << "[RoR] Current date: " << std::put_time(std::localtime(&t), "%Y-%m-%d");
525 
526  rorlog->addListener(App::GetConsole()); // Allow console to intercept log messages
527 }
528 
530 {
531  std::string process_dir = PathCombine(App::sys_process_dir->getStr(), "resources");
532 #if OGRE_PLATFORM == OGRE_PLATFORM_LINUX
533  if (!FolderExists(process_dir))
534  {
535  process_dir = "/usr/share/rigsofrods/resources/";
536  }
537 #endif
538  if (!FolderExists(process_dir))
539  {
540  ErrorUtils::ShowError(_L("Startup error"), _L("Resources folder not found. Check if correctly installed."));
541  return false;
542  }
543  App::sys_resources_dir->setStr(process_dir);
544  return true;
545 }
546 
548 {
549  Ogre::String src_path = PathCombine(App::sys_resources_dir->getStr(), "skeleton.zip");
550  Ogre::ResourceGroupManager::getSingleton().addResourceLocation(src_path, "Zip", "SrcRG");
551  Ogre::FileInfoListPtr fl = Ogre::ResourceGroupManager::getSingleton().findResourceFileInfo("SrcRG", "*", true);
552  if (fl->empty())
553  {
554  ErrorUtils::ShowError(_L("Startup error"), _L("Faulty resource folder. Check if correctly installed."));
555  return false;
556  }
557  Ogre::String dst_path = PathCombine(App::sys_user_dir->getStr(), "");
558  for (auto file : *fl)
559  {
560  CreateFolder(dst_path + file.basename);
561  }
562  fl = Ogre::ResourceGroupManager::getSingleton().findResourceFileInfo("SrcRG", "*");
563  if (fl->empty())
564  {
565  ErrorUtils::ShowError(_L("Startup error"), _L("Faulty resource folder. Check if correctly installed."));
566  return false;
567  }
568  Ogre::ResourceGroupManager::getSingleton().addResourceLocation(dst_path, "FileSystem", "DstRG", false, false);
569  for (auto file : *fl)
570  {
571  if (file.uncompressedSize == 0)
572  continue;
573  Ogre::String path = file.path + file.basename;
574  if (!Ogre::ResourceGroupManager::getSingleton().findResourceFileInfo("DstRG", path)->empty())
575  continue;
576  Ogre::DataStreamPtr src_ds = Ogre::ResourceGroupManager::getSingleton().openResource(path, "SrcRG");
577  Ogre::DataStreamPtr dst_ds = Ogre::ResourceGroupManager::getSingleton().createResource(path, "DstRG");
578  std::vector<char> buf(src_ds->size());
579  size_t read = src_ds->read(buf.data(), src_ds->size());
580  if (read > 0)
581  {
582  dst_ds->write(buf.data(), read);
583  }
584  }
585  Ogre::ResourceGroupManager::getSingleton().destroyResourceGroup("SrcRG");
586  Ogre::ResourceGroupManager::getSingleton().destroyResourceGroup("DstRG");
587 
588  return true;
589 }
590 
592 {
593 #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
594  Ogre::String old_ror_homedir = Ogre::StringUtil::format("%s\\Rigs of Rods 0.4", RoR::GetUserHomeDirectory().c_str());
595  if(FolderExists(old_ror_homedir))
596  {
597  if (!FileExists(Ogre::StringUtil::format("%s\\OBSOLETE_FOLDER.txt", old_ror_homedir.c_str())))
598  {
599  Ogre::String obsoleteMessage = Ogre::StringUtil::format("This folder is obsolete, please move your mods to %s", App::sys_user_dir->getStr());
600  try
601  {
602  Ogre::ResourceGroupManager::getSingleton().addResourceLocation(old_ror_homedir, "FileSystem", "homedir", false, false);
603  Ogre::DataStreamPtr stream = Ogre::ResourceGroupManager::getSingleton().createResource("OBSOLETE_FOLDER.txt", "homedir");
604  stream->write(obsoleteMessage.c_str(), obsoleteMessage.length());
605  Ogre::ResourceGroupManager::getSingleton().destroyResourceGroup("homedir");
606  }
607  catch (std::exception & e)
608  {
609  RoR::LogFormat("Error writing to %s, message: '%s'", old_ror_homedir.c_str(), e.what());
610  }
611  Ogre::String message = Ogre::StringUtil::format(
612  "Welcome to Rigs of Rods %s\nPlease note that the mods folder has moved to:\n\"%s\"\nPlease move your mods to the new folder to continue using them",
614  App::sys_user_dir->getStr()
615  );
616 
617  RoR::App::GetGuiManager()->ShowMessageBox("Obsolete folder detected", message.c_str());
618  }
619  }
620 #endif // OGRE_PLATFORM_WIN32
621 }
622 
624 {
625  m_mainthread_id = std::this_thread::get_id();
626 
627  // This cannot be done earlier as it uses the above thread ID to assert() against invalid access.
629 }
RoR::App::sys_user_dir
CVar * sys_user_dir
Definition: Application.cpp:163
GameContext.h
Game state manager and message-queue provider.
RoR::AppContext::SetUpProgramPaths
bool SetUpProgramPaths()
Definition: AppContext.cpp:465
RoR::AppContext::mousePressed
virtual bool mousePressed(const OIS::MouseEvent &arg, OIS::MouseButtonID id) override
Definition: AppContext.cpp:100
GUI_MultiplayerClientList.h
RoR::SceneMouse::mousePressed
bool mousePressed(const OIS::MouseEvent &_arg, OIS::MouseButtonID _id)
Definition: SceneMouse.cpp:227
RoR::AppContext::m_viewport
Ogre::Viewport * m_viewport
Definition: AppContext.h:99
RoR::SceneMouse::mouseMoved
bool mouseMoved(const OIS::MouseEvent &_arg)
Definition: SceneMouse.cpp:114
RoR::InputEngine::resetKeys
void resetKeys()
Definition: InputEngine.cpp:696
RoR::AppContext::m_windowed_fix
bool m_windowed_fix
Workaround OGRE glitch when switching from fullscreen.
Definition: AppContext.h:100
OverlayWrapper.h
OgreImGui::InjectMousePressed
void InjectMousePressed(const OIS::MouseEvent &arg, OIS::MouseButtonID id)
Definition: OgreImGui.cpp:99
RoR::GUIManager::WakeUpGUI
void WakeUpGUI()
Definition: GUIManager.cpp:455
RoR::MpState::CONNECTED
@ CONNECTED
RoR::App::sys_resources_dir
CVar * sys_resources_dir
Definition: Application.cpp:168
RoR::AppContext::CreateCustomRenderWindow
Ogre::RenderWindow * CreateCustomRenderWindow(std::string const &name, int width, int height)
Definition: AppContext.cpp:390
RoR::AppContext::mouseReleased
virtual bool mouseReleased(const OIS::MouseEvent &arg, OIS::MouseButtonID id) override
Definition: AppContext.cpp:127
RoR::App::GetCameraManager
CameraManager * GetCameraManager()
Definition: Application.cpp:275
RoR::App::GetGuiManager
GUIManager * GetGuiManager()
Definition: Application.cpp:269
RoR::AppContext::m_prev_screenshot_index
int m_prev_screenshot_index
Definition: AppContext.h:103
DashBoardManager.h
file
This is a raw Ogre binding for Imgui No project cmake file
Definition: README-OgreImGui.txt:3
RoR::App::mp_player_name
CVar * mp_player_name
Definition: Application.cpp:124
RoR::AppContext::keyPressed
virtual bool keyPressed(const OIS::KeyEvent &arg) override
Definition: AppContext.cpp:152
ContentManager.h
RoR::App::GetAppContext
AppContext * GetAppContext()
Definition: Application.cpp:266
format
Truck file format(technical spec)
RoR::App::app_language
CVar * app_language
Definition: Application.cpp:80
AdvancedScreen::write
void write()
Definition: AdvancedScreen.h:68
RoR::App::CreateInputEngine
void CreateInputEngine()
Definition: Application.cpp:302
RoR::AppContext::SetUpRendering
bool SetUpRendering()
Definition: AppContext.cpp:229
RoR::App::GetOverlayWrapper
OverlayWrapper * GetOverlayWrapper()
Definition: Application.cpp:268
RoR::InputEngine::SetJoystickListener
void SetJoystickListener(OIS::JoyStickListener *obj)
Definition: InputEngine.cpp:661
OgreImGui::InjectKeyReleased
void InjectKeyReleased(const OIS::KeyEvent &arg)
Definition: OgreImGui.cpp:128
CameraManager.h
RoR::LogFormat
void LogFormat(const char *format,...)
Improved logging utility. Uses fixed 2Kb buffer.
Definition: Application.cpp:424
RoR::App::app_rendersys_override
CVar * app_rendersys_override
Definition: Application.cpp:86
AppContext.h
System integration layer; inspired by OgreBites::ApplicationContext.
Console.h
RoR::Console::putMessage
void putMessage(MessageArea area, MessageType type, std::string const &msg, std::string icon="")
Definition: Console.cpp:97
RoR::AppContext::buttonReleased
virtual bool buttonReleased(const OIS::JoyStickEvent &arg, int button) override
Definition: AppContext.cpp:184
AdvancedScreen.h
RoR::App::io_ffb_enabled
CVar * io_ffb_enabled
Definition: Application.cpp:192
RoR::FolderExists
bool FolderExists(const char *path)
Path must be UTF-8 encoded.
Definition: PlatformUtils.cpp:169
RoR::AppContext::SetUpResourcesDir
bool SetUpResourcesDir()
Definition: AppContext.cpp:529
RoR::App::sim_state
CVar * sim_state
Definition: Application.cpp:96
RoR::App::sys_logs_dir
CVar * sys_logs_dir
Definition: Application.cpp:167
OgreImGui::InjectMouseReleased
void InjectMouseReleased(const OIS::MouseEvent &arg, OIS::MouseButtonID id)
Definition: OgreImGui.cpp:108
RoR::AppContext::SetUpConfigSkeleton
bool SetUpConfigSkeleton()
Definition: AppContext.cpp:547
Language.h
RefCountingObjectPtr< Actor >
GUI_MultiplayerSelector.h
GUIManager.h
Actor.h
RoR::Console::CONSOLE_SYSTEM_NOTICE
@ CONSOLE_SYSTEM_NOTICE
Definition: Console.h:51
RoR::App::mp_state
CVar * mp_state
Definition: Application.cpp:115
RoR::PATH_SLASH
char PATH_SLASH
Definition: PlatformUtils.cpp:161
RoR::AppContext::buttonPressed
virtual bool buttonPressed(const OIS::JoyStickEvent &arg, int button) override
Definition: AppContext.cpp:183
RoR::AppContext::m_render_window
Ogre::RenderWindow * m_render_window
Definition: AppContext.h:98
RoR::GUIManager::GetImGui
OgreImGui & GetImGui()
Definition: GUIManager.h:157
RoR::InputEngine::windowResized
void windowResized(Ogre::RenderWindow *rw)
Definition: InputEngine.cpp:638
RoR::AppContext::keyReleased
virtual bool keyReleased(const OIS::KeyEvent &arg) override
Definition: AppContext.cpp:165
RoR::GameContext::GetSceneMouse
SceneMouse & GetSceneMouse()
Definition: GameContext.h:170
RoR::CVar::getStr
std::string const & getStr() const
Definition: CVar.h:95
RoR::ForceFeedback::Setup
void Setup()
Definition: ForceFeedback.cpp:35
RoR::Str< 500 >
OgreImGui::InjectMouseMoved
void InjectMouseMoved(const OIS::MouseEvent &arg)
Definition: OgreImGui.cpp:89
RoR::PathCombine
std::string PathCombine(std::string a, std::string b)
Definition: PlatformUtils.h:48
GUI_LoadingWindow.h
RoR::AppContext::mouseMoved
virtual bool mouseMoved(const OIS::MouseEvent &arg) override
Definition: AppContext.cpp:76
RoR::InputEngine::ProcessMouseEvent
void ProcessMouseEvent(const OIS::MouseEvent &arg)
Definition: InputEngine.cpp:690
ErrorUtils.h
GUI_MainSelector.h
RoR::AppContext::SetRenderWindowIcon
void SetRenderWindowIcon(Ogre::RenderWindow *rw)
Definition: AppContext.cpp:210
ScriptEngine.h
RoR::AppContext::m_mainthread_id
std::thread::id m_mainthread_id
Definition: AppContext.h:107
RoR::App::app_state
CVar * app_state
Definition: Application.cpp:79
RoR::InputEngine::ProcessKeyRelease
void ProcessKeyRelease(const OIS::KeyEvent &arg)
Definition: InputEngine.cpp:684
ChatSystem.h
RoR::Str::ToCStr
const char * ToCStr() const
Definition: Str.h:46
RoR::App::sim_terrain_name
CVar * sim_terrain_name
Definition: Application.cpp:97
RoR::AppContext::m_prev_screenshot_time
std::time_t m_prev_screenshot_time
Definition: AppContext.h:102
RoR::CreateFolder
void CreateFolder(const char *path)
Path must be UTF-8 encoded.
Definition: PlatformUtils.cpp:175
OgreImGui::InjectKeyPressed
void InjectKeyPressed(const OIS::KeyEvent &arg)
Definition: OgreImGui.cpp:117
RoR::OverlayWrapper::mouseMoved
bool mouseMoved(const OIS::MouseEvent &_arg)
Definition: OverlayWrapper.cpp:493
PlatformUtils.h
Platform-specific utilities. We use narrow UTF-8 encoded strings as paths. Inspired by http://utf8eve...
RoR::CameraManager::mousePressed
bool mousePressed(const OIS::MouseEvent &_arg, OIS::MouseButtonID _id)
Definition: CameraManager.cpp:589
RoR::GetUserHomeDirectory
std::string GetUserHomeDirectory()
Returns UTF-8 path or empty string on error.
Definition: PlatformUtils.cpp:180
RoR::App::GetConsole
Console * GetConsole()
Definition: Application.cpp:270
RoR::AppContext::axisMoved
virtual bool axisMoved(const OIS::JoyStickEvent &arg, int axis) override
Definition: AppContext.cpp:185
RoR::App::GetGameContext
GameContext * GetGameContext()
Definition: Application.cpp:280
RoR::CacheEntry
Definition: CacheSystem.h:55
RoR::InputEngine::ProcessJoystickEvent
void ProcessJoystickEvent(const OIS::JoyStickEvent &arg)
Definition: InputEngine.cpp:670
RoR::AppState::SIMULATION
@ SIMULATION
RoRVersion.h
RoR::AppContext::CaptureScreenshot
void CaptureScreenshot()
Definition: AppContext.cpp:400
ROR_VERSION_STRING
const char *const ROR_VERSION_STRING
RoR::OverlayWrapper::mousePressed
bool mousePressed(const OIS::MouseEvent &_arg, OIS::MouseButtonID _id)
Definition: OverlayWrapper.cpp:633
RoR::App::sys_config_dir
CVar * sys_config_dir
Definition: Application.cpp:164
RoR::AppContext::SetUpLogging
void SetUpLogging()
Definition: AppContext.cpp:513
RoR::AppContext::SetUpThreads
void SetUpThreads()
Definition: AppContext.cpp:623
RoR::OverlayWrapper::windowResized
void windowResized()
Definition: OverlayWrapper.cpp:129
RoR::AppContext::ActivateFullscreen
void ActivateFullscreen(bool val)
Definition: AppContext.cpp:447
RoR::AppContext::SetUpObsoleteConfMarker
void SetUpObsoleteConfMarker()
Definition: AppContext.cpp:591
AdvancedScreen
Definition: AdvancedScreen.h:47
instance
or anywhere else will not be considered a but parsed as regular data ! Each line is treated as values separated by separators Possible i e animators Multiline description Single instance
Definition: ReadMe.txt:53
RoR::App::app_screenshot_format
CVar * app_screenshot_format
Definition: Application.cpp:85
RoR::AppContext::povMoved
virtual bool povMoved(const OIS::JoyStickEvent &arg, int) override
Definition: AppContext.cpp:187
RoR::AppContext::m_ogre_root
Ogre::Root * m_ogre_root
Definition: AppContext.h:97
RoR::App::mp_server_host
CVar * mp_server_host
Definition: Application.cpp:121
RoR::GetExecutablePath
std::string GetExecutablePath()
Returns UTF-8 path or empty string on error.
Definition: PlatformUtils.cpp:185
RoR::GetParentDirectory
std::string GetParentDirectory(const char *src_buff)
Returns UTF-8 path without trailing slash.
Definition: PlatformUtils.cpp:209
_L
#define _L
Definition: ErrorUtils.cpp:34
RoR::GUIManager::ShowMessageBox
void ShowMessageBox(const char *title, const char *text, bool allow_close=true, const char *btn1_text="OK", const char *btn2_text=nullptr)
Definition: GUIManager.cpp:440
RoR::App::GetInputEngine
InputEngine * GetInputEngine()
Definition: Application.cpp:271
RoR::App::diag_allow_window_resize
CVar * diag_allow_window_resize
Definition: Application.cpp:159
RoR::AppContext::windowFocusChange
virtual void windowFocusChange(Ogre::RenderWindow *rw) override
Definition: AppContext.cpp:202
RoR::SceneMouse::mouseReleased
bool mouseReleased(const OIS::MouseEvent &_arg, OIS::MouseButtonID _id)
Definition: SceneMouse.cpp:303
RoR::AppContext::GetOgreRoot
Ogre::Root * GetOgreRoot()
Definition: AppContext.h:65
InputEngine.h
Handles controller inputs from player. Defines input events and binding mechanism,...
RoR::InputEngine::SetMouseListener
void SetMouseListener(OIS::MouseListener *obj)
Definition: InputEngine.cpp:655
AdvancedScreen::addData
void addData(Ogre::String name, Ogre::String value)
Definition: AdvancedScreen.h:61
RoR::OverlayWrapper::mouseReleased
bool mouseReleased(const OIS::MouseEvent &_arg, OIS::MouseButtonID _id)
Definition: OverlayWrapper.cpp:638
RoR::App::sys_process_dir
CVar * sys_process_dir
Definition: Application.cpp:162
RoR::AppContext::windowResized
virtual void windowResized(Ogre::RenderWindow *rw) override
Definition: AppContext.cpp:189
RoR::Console::CONSOLE_MSGTYPE_INFO
@ CONSOLE_MSGTYPE_INFO
Generic message.
Definition: Console.h:60
RoR::App::sim_terrain_gui_name
CVar * sim_terrain_gui_name
Definition: Application.cpp:98
RoR::GameContext::m_dummy_cache_selection
CacheEntryPtr m_dummy_cache_selection
Definition: GameContext.h:202
RoR::App::sys_screenshot_dir
CVar * sys_screenshot_dir
Definition: Application.cpp:171
RoR::AppContext::m_force_feedback
RoR::ForceFeedback m_force_feedback
Definition: AppContext.h:105
RoR::AppContext::SetUpInput
bool SetUpInput()
Definition: AppContext.cpp:62
ErrorUtils::ShowError
static int ShowError(Ogre::UTFString title, Ogre::UTFString message)
shows a simple error message box
Definition: ErrorUtils.cpp:43
RoR::AppContext::sliderMoved
virtual bool sliderMoved(const OIS::JoyStickEvent &arg, int) override
Definition: AppContext.cpp:186
RoR
Definition: AppContext.h:36
RoR::InputEngine::ProcessKeyPress
void ProcessKeyPress(const OIS::KeyEvent &arg)
Definition: InputEngine.cpp:679
Log
quaternion Log() const
RoR::CVar::setStr
void setStr(std::string const &str)
Definition: CVar.h:83
ROR_VERSION_STRING_SHORT
const char *const ROR_VERSION_STRING_SHORT
RoR::FileExists
bool FileExists(const char *path)
Path must be UTF-8 encoded.
Definition: PlatformUtils.cpp:163
RoR::InputEngine::SetKeyboardListener
void SetKeyboardListener(OIS::KeyListener *obj)
Definition: InputEngine.cpp:649