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  std::string log_filepath = PathCombine(App::sys_logs_dir->getStr(), "RoR.log");
233  std::string cfg_filepath = PathCombine(App::sys_config_dir->getStr(), "ogre.cfg");
234  m_ogre_root = new Ogre::Root("", cfg_filepath, log_filepath);
235 
236  // load OGRE plugins manually
237 #ifdef _DEBUG
238  std::string plugins_path = PathCombine(RoR::App::sys_process_dir->getStr(), "plugins_d.cfg");
239 #else
240  std::string plugins_path = PathCombine(RoR::App::sys_process_dir->getStr(), "plugins.cfg");
241 #endif
242  try
243  {
244  Ogre::ConfigFile cfg;
245  cfg.load(plugins_path);
246  std::string plugin_dir = cfg.getSetting("PluginFolder", /*section=*/"", /*default=*/App::sys_process_dir->getStr());
247  Ogre::StringVector plugins = cfg.getMultiSetting("Plugin");
248  for (Ogre::String plugin_filename: plugins)
249  {
250  try
251  {
252  m_ogre_root->loadPlugin(PathCombine(plugin_dir, plugin_filename));
253  }
254  catch (Ogre::Exception&) {} // Logged by OGRE
255  }
256  }
257  catch (Ogre::Exception& e)
258  {
259  ErrorUtils::ShowError (_L("Startup error"), e.getFullDescription());
260  return false;
261  }
262 
263  // Load renderer configuration
264  if (!m_ogre_root->restoreConfig())
265  {
266  const auto render_systems = App::GetAppContext()->GetOgreRoot()->getAvailableRenderers();
267  if (!render_systems.empty())
268  m_ogre_root->setRenderSystem(render_systems.front());
269  else
270  ErrorUtils::ShowError (_L("Startup error"), _L("No render system plugin available. Check your plugins.cfg"));
271  }
272 
273  const auto rs = m_ogre_root->getRenderSystemByName(App::app_rendersys_override->getStr());
274  if (rs != nullptr && rs != m_ogre_root->getRenderSystem())
275  {
276  // The user has selected a different render system during the previous session.
277  m_ogre_root->setRenderSystem(rs);
278  m_ogre_root->saveConfig();
279  }
281 
282  // Start the renderer
283  m_ogre_root->initialise(/*createWindow=*/false);
284 
285  // Configure the render window
286  Ogre::ConfigOptionMap ropts = m_ogre_root->getRenderSystem()->getConfigOptions();
287  Ogre::NameValuePairList miscParams;
288  miscParams["FSAA"] = ropts["FSAA"].currentValue;
289  miscParams["vsync"] = ropts["VSync"].currentValue;
290  miscParams["gamma"] = ropts["sRGB Gamma Conversion"].currentValue;
291  miscParams["border"] = "fixed";
292 #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
293  const auto rd = ropts["Rendering Device"];
294  const auto it = std::find(rd.possibleValues.begin(), rd.possibleValues.end(), rd.currentValue);
295  const int idx = std::distance(rd.possibleValues.begin(), it);
296  miscParams["monitorIndex"] = Ogre::StringConverter::toString(idx);
297  miscParams["windowProc"] = Ogre::StringConverter::toString((size_t)OgreBites::WindowEventUtilities::_WndProc);
298 #endif
299 
300  // Validate rendering resolution
301  Ogre::uint32 width, height;
302  std::istringstream mode (ropts["Video Mode"].currentValue);
303  Ogre::String token;
304  mode >> width;
305  mode >> token; // 'x' as seperator between width and height
306  mode >> height;
307 
308  if(width < 800) width = 800;
309  if(height < 600) height = 600;
310 
311  // Create render window
312  m_render_window = Ogre::Root::getSingleton().createRenderWindow (
313  "Rigs of Rods version " + Ogre::String (ROR_VERSION_STRING),
314  width, height, ropts["Full Screen"].currentValue == "Yes", &miscParams);
315  OgreBites::WindowEventUtilities::_addRenderWindow(m_render_window);
316 
318  m_render_window->setActive(true);
319 
320  // Create viewport (without camera)
321  m_viewport = m_render_window->addViewport(/*camera=*/nullptr);
322  m_viewport->setBackgroundColour(Ogre::ColourValue::Black);
323 
324  return true;
325 }
326 
327 Ogre::RenderWindow* AppContext::CreateCustomRenderWindow(std::string const& window_name, int width, int height)
328 {
329  Ogre::NameValuePairList misc;
330  Ogre::ConfigOptionMap ropts = m_ogre_root->getRenderSystem()->getConfigOptions();
331  misc["FSAA"] = Ogre::StringConverter::parseInt(ropts["FSAA"].currentValue, 0);
332 
333  Ogre::RenderWindow* rw = Ogre::Root::getSingleton().createRenderWindow(window_name, width, height, false, &misc);
334  return rw;
335 }
336 
338 {
339  const std::time_t time = std::time(nullptr);
340  const int index = (time == m_prev_screenshot_time) ? m_prev_screenshot_index+1 : 1;
341 
342  std::stringstream stamp;
343  stamp << std::put_time(std::localtime(&time), "%Y-%m-%d_%H-%M-%S") << "_" << index
344  << "." << App::app_screenshot_format->getStr();
345  std::string path = PathCombine(App::sys_screenshot_dir->getStr(), "screenshot_") + stamp.str();
346 
347  if (App::app_screenshot_format->getStr() == "png")
348  {
349  AdvancedScreen png(m_render_window, path);
350 
351  png.addData("User_NickName", App::mp_player_name->getStr());
352  png.addData("User_Language", App::app_language->getStr());
353 
354  if (App::app_state->getEnum<AppState>() == AppState::SIMULATION &&
355  App::GetGameContext()->GetPlayerActor())
356  {
357  png.addData("Truck_file", App::GetGameContext()->GetPlayerActor()->ar_filename);
358  png.addData("Truck_name", App::GetGameContext()->GetPlayerActor()->getTruckName());
359  }
360  if (App::GetGameContext()->GetTerrain())
361  {
362  png.addData("Terrn_file", App::sim_terrain_name->getStr());
363  png.addData("Terrn_name", App::sim_terrain_gui_name->getStr());
364  }
365  if (App::mp_state->getEnum<MpState>() == MpState::CONNECTED)
366  {
367  png.addData("MP_ServerName", App::mp_server_host->getStr());
368  }
369 
370  png.write();
371  }
372  else
373  {
374  m_render_window->writeContentsToFile(path);
375  }
376 
378  _L("Screenshot: ") + stamp.str());
379 
380  m_prev_screenshot_time = time;
381  m_prev_screenshot_index = index;
382 }
383 
385 {
386  if (!val && !m_windowed_fix)
387  {
388  // Workaround OGRE glitch - badly aligned viewport after first full->window switch
389  // Observed on Win10/OpenGL (GeForce GTX 660)
390  m_render_window->setFullscreen(false, m_render_window->getWidth()-1, m_render_window->getHeight()-1);
391  m_render_window->setFullscreen(false, m_render_window->getWidth()+1, m_render_window->getHeight()+1);
392  }
393  else
394  {
395  m_render_window->setFullscreen(val, m_render_window->getWidth(), m_render_window->getHeight());
396  }
397 }
398 
399 // --------------------------
400 // Program paths and logging
401 
403 {
404  // Process directory
405  std::string exe_path = RoR::GetExecutablePath();
406  if (exe_path.empty())
407  {
408  ErrorUtils::ShowError(_L("Startup error"), _L("Error while retrieving program directory path"));
409  return false;
410  }
411  App::sys_process_dir->setStr(RoR::GetParentDirectory(exe_path.c_str()).c_str());
412 
413  // RoR's home directory
414  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
415  if (FolderExists(local_userdir))
416  {
417  // It's a portable installation
418  App::sys_user_dir->setStr(local_userdir.c_str());
419  }
420  else
421  {
422  // Default location - user's home directory
423  std::string user_home = RoR::GetUserHomeDirectory();
424  if (user_home.empty())
425  {
426  ErrorUtils::ShowError(_L("Startup error"), _L("Error while retrieving user directory path"));
427  return false;
428  }
429  RoR::Str<500> ror_homedir;
430 #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
431  ror_homedir << user_home << PATH_SLASH << "My Games";
432  CreateFolder(ror_homedir.ToCStr());
433  ror_homedir << PATH_SLASH << "Rigs of Rods";
434 #elif OGRE_PLATFORM == OGRE_PLATFORM_LINUX
435  char* env_SNAP = getenv("SNAP_USER_COMMON");
436  if(env_SNAP)
437  ror_homedir = env_SNAP;
438  else
439  ror_homedir << user_home << PATH_SLASH << ".rigsofrods";
440 #elif OGRE_PLATFORM == OGRE_PLATFORM_APPLE
441  ror_homedir << user_home << PATH_SLASH << "RigsOfRods";
442 #endif
443  CreateFolder(ror_homedir.ToCStr ());
444  App::sys_user_dir->setStr(ror_homedir.ToCStr ());
445  }
446 
447  return true;
448 }
449 
451 {
452  std::string logs_dir = PathCombine(App::sys_user_dir->getStr(), "logs");
453  CreateFolder(logs_dir);
454  App::sys_logs_dir->setStr(logs_dir.c_str());
455 
456  auto ogre_log_manager = OGRE_NEW Ogre::LogManager();
457  std::string rorlog_path = PathCombine(logs_dir, "RoR.log");
458  Ogre::Log* rorlog = ogre_log_manager->createLog(rorlog_path, true, true);
459  rorlog->stream() << "[RoR] Rigs of Rods (www.rigsofrods.org) version " << ROR_VERSION_STRING;
460  std::time_t t = std::time(nullptr);
461  rorlog->stream() << "[RoR] Current date: " << std::put_time(std::localtime(&t), "%Y-%m-%d");
462 
463  rorlog->addListener(App::GetConsole()); // Allow console to intercept log messages
464 }
465 
467 {
468  std::string process_dir = PathCombine(App::sys_process_dir->getStr(), "resources");
469 #if OGRE_PLATFORM == OGRE_PLATFORM_LINUX
470  if (!FolderExists(process_dir))
471  {
472  process_dir = "/usr/share/rigsofrods/resources/";
473  }
474 #endif
475  if (!FolderExists(process_dir))
476  {
477  ErrorUtils::ShowError(_L("Startup error"), _L("Resources folder not found. Check if correctly installed."));
478  return false;
479  }
480  App::sys_resources_dir->setStr(process_dir);
481  return true;
482 }
483 
485 {
486  Ogre::String src_path = PathCombine(App::sys_resources_dir->getStr(), "skeleton.zip");
487  Ogre::ResourceGroupManager::getSingleton().addResourceLocation(src_path, "Zip", "SrcRG");
488  Ogre::FileInfoListPtr fl = Ogre::ResourceGroupManager::getSingleton().findResourceFileInfo("SrcRG", "*", true);
489  if (fl->empty())
490  {
491  ErrorUtils::ShowError(_L("Startup error"), _L("Faulty resource folder. Check if correctly installed."));
492  return false;
493  }
494  Ogre::String dst_path = PathCombine(App::sys_user_dir->getStr(), "");
495  for (auto file : *fl)
496  {
497  CreateFolder(dst_path + file.basename);
498  }
499  fl = Ogre::ResourceGroupManager::getSingleton().findResourceFileInfo("SrcRG", "*");
500  if (fl->empty())
501  {
502  ErrorUtils::ShowError(_L("Startup error"), _L("Faulty resource folder. Check if correctly installed."));
503  return false;
504  }
505  Ogre::ResourceGroupManager::getSingleton().addResourceLocation(dst_path, "FileSystem", "DstRG", false, false);
506  for (auto file : *fl)
507  {
508  if (file.uncompressedSize == 0)
509  continue;
510  Ogre::String path = file.path + file.basename;
511  if (!Ogre::ResourceGroupManager::getSingleton().findResourceFileInfo("DstRG", path)->empty())
512  continue;
513  Ogre::DataStreamPtr src_ds = Ogre::ResourceGroupManager::getSingleton().openResource(path, "SrcRG");
514  Ogre::DataStreamPtr dst_ds = Ogre::ResourceGroupManager::getSingleton().createResource(path, "DstRG");
515  std::vector<char> buf(src_ds->size());
516  size_t read = src_ds->read(buf.data(), src_ds->size());
517  if (read > 0)
518  {
519  dst_ds->write(buf.data(), read);
520  }
521  }
522  Ogre::ResourceGroupManager::getSingleton().destroyResourceGroup("SrcRG");
523  Ogre::ResourceGroupManager::getSingleton().destroyResourceGroup("DstRG");
524 
525  return true;
526 }
527 
529 {
530 #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
531  Ogre::String old_ror_homedir = Ogre::StringUtil::format("%s\\Rigs of Rods 0.4", RoR::GetUserHomeDirectory().c_str());
532  if(FolderExists(old_ror_homedir))
533  {
534  if (!FileExists(Ogre::StringUtil::format("%s\\OBSOLETE_FOLDER.txt", old_ror_homedir.c_str())))
535  {
536  Ogre::String obsoleteMessage = Ogre::StringUtil::format("This folder is obsolete, please move your mods to %s", App::sys_user_dir->getStr());
537  try
538  {
539  Ogre::ResourceGroupManager::getSingleton().addResourceLocation(old_ror_homedir, "FileSystem", "homedir", false, false);
540  Ogre::DataStreamPtr stream = Ogre::ResourceGroupManager::getSingleton().createResource("OBSOLETE_FOLDER.txt", "homedir");
541  stream->write(obsoleteMessage.c_str(), obsoleteMessage.length());
542  Ogre::ResourceGroupManager::getSingleton().destroyResourceGroup("homedir");
543  }
544  catch (std::exception & e)
545  {
546  RoR::LogFormat("Error writing to %s, message: '%s'", old_ror_homedir.c_str(), e.what());
547  }
548  Ogre::String message = Ogre::StringUtil::format(
549  "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",
551  App::sys_user_dir->getStr()
552  );
553 
554  RoR::App::GetGuiManager()->ShowMessageBox("Obsolete folder detected", message.c_str());
555  }
556  }
557 #endif // OGRE_PLATFORM_WIN32
558 }
559 
561 {
562  m_mainthread_id = std::this_thread::get_id();
563 
564  // This cannot be done earlier as it uses the above thread ID to assert() against invalid access.
566 }
RoR::App::sys_user_dir
CVar * sys_user_dir
Definition: Application.cpp:162
GameContext.h
Game state manager and message-queue provider.
RoR::AppContext::SetUpProgramPaths
bool SetUpProgramPaths()
Definition: AppContext.cpp:402
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:228
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:692
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:167
RoR::AppContext::CreateCustomRenderWindow
Ogre::RenderWindow * CreateCustomRenderWindow(std::string const &name, int width, int height)
Definition: AppContext.cpp:327
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:274
RoR::App::GetGuiManager
GUIManager * GetGuiManager()
Definition: Application.cpp:268
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:265
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:301
RoR::AppContext::SetUpRendering
bool SetUpRendering()
Definition: AppContext.cpp:229
RoR::App::GetOverlayWrapper
OverlayWrapper * GetOverlayWrapper()
Definition: Application.cpp:267
RoR::InputEngine::SetJoystickListener
void SetJoystickListener(OIS::JoyStickListener *obj)
Definition: InputEngine.cpp:657
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:367
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:191
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:466
RoR::App::sim_state
CVar * sim_state
Definition: Application.cpp:96
RoR::App::sys_logs_dir
CVar * sys_logs_dir
Definition: Application.cpp:166
OgreImGui::InjectMouseReleased
void InjectMouseReleased(const OIS::MouseEvent &arg, OIS::MouseButtonID id)
Definition: OgreImGui.cpp:108
RoR::AppContext::SetUpConfigSkeleton
bool SetUpConfigSkeleton()
Definition: AppContext.cpp:484
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:634
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:686
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:680
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:269
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:279
RoR::CacheEntry
Definition: CacheSystem.h:55
RoR::InputEngine::ProcessJoystickEvent
void ProcessJoystickEvent(const OIS::JoyStickEvent &arg)
Definition: InputEngine.cpp:666
RoR::AppState::SIMULATION
@ SIMULATION
RoRVersion.h
RoR::AppContext::CaptureScreenshot
void CaptureScreenshot()
Definition: AppContext.cpp:337
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:163
RoR::AppContext::SetUpLogging
void SetUpLogging()
Definition: AppContext.cpp:450
RoR::AppContext::SetUpThreads
void SetUpThreads()
Definition: AppContext.cpp:560
RoR::OverlayWrapper::windowResized
void windowResized()
Definition: OverlayWrapper.cpp:129
RoR::AppContext::ActivateFullscreen
void ActivateFullscreen(bool val)
Definition: AppContext.cpp:384
RoR::AppContext::SetUpObsoleteConfMarker
void SetUpObsoleteConfMarker()
Definition: AppContext.cpp:528
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:270
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:304
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:651
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:161
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:170
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:675
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:645