58 wchar_t szPath[MAX_PATH];
59 GetModuleFileNameW( NULL, szPath, MAX_PATH );
60 return std::filesystem::path{szPath}.parent_path() /
"";
63 char szPath[PATH_MAX];
64 uint32_t bufsize = PATH_MAX;
65 if (!_NSGetExecutablePath(szPath, &bufsize))
66 return std::filesystem::path{szPath}.parent_path() /
"";
70 char szPath[PATH_MAX];
71 ssize_t count = readlink(
"/proc/self/exe", szPath, PATH_MAX );
72 if( count < 0 || count >= PATH_MAX )
75 return std::filesystem::path{szPath}.parent_path() /
"";
124 OgreBites::Keycode key = evt.keysym.sym;
127 if (evt.keysym.mod == (
unsigned short)64)
132 else if (evt.keysym.mod == (
unsigned short)1)
137 else if (evt.keysym.mod == (
unsigned short)256)
144 if (key == OgreBites::SDLK_ESCAPE)
149 else if (key == OgreBites::SDLK_F2)
152 HAL *hal = vm->GetHAL();
153 Ogre::RenderSystem *rendersystem = hal->
mRoot->getRenderSystem();
155 int batches = (int)rendersystem->_getBatchCount();
156 int triangles = (int)rendersystem->_getFaceCount();
157 int vertices = (int)rendersystem->_getVertexCount();
161 else if (key == OgreBites::SDLK_SPACE)
167 else if (key ==
'\x76')
175 vm->GetHAL()->Report(
"Gravity and collision detection on",
"");
177 vm->GetHAL()->Report(
"Gravity and collision detection off",
"");
184 else if (key == OgreBites::SDLK_F3)
190 else if (key == OgreBites::SDLK_F6)
196 else if (key == OgreBites::SDLK_F7)
200 colliders = !colliders;
202 else if (key == OgreBites::SDLK_F4)
207 vm->GetSkySystem()->EnableSky(
false);
211 else if (wireframe == 1)
216 else if (wireframe == 2)
218 vm->GetSkySystem()->EnableSky(
true);
223 else if (key == OgreBites::SDLK_F11)
225 std::string prefix = GetDataPath();
226 vm->GetHAL()->GetRenderWindow()->writeContentsToTimestampedFile(prefix +
"screenshots/skyscraper-",
".jpg");
228 else if (key == OgreBites::SDLK_F5)
233 else if (key == OgreBites::SDLK_F10)
236 SetFullScreen(!FullScreen);
238 else if (key == OgreBites::SDLK_F8)
244 else if (key == OgreBites::SDLK_F9)
247 vm->GetHAL()->ToggleStats();
249 else if (key == OgreBites::SDLK_KP_MINUS)
255 else if (key == OgreBites::SDLK_KP_PLUS)
262 else if (key ==
'\x63')
269 else if (key == OgreBites::SDLK_KP_1)
271 vm->SetActiveEngine(0);
273 else if (key == OgreBites::SDLK_KP_2)
275 vm->SetActiveEngine(1);
277 else if (key == OgreBites::SDLK_KP_3)
279 vm->SetActiveEngine(2);
281 else if (key == OgreBites::SDLK_KP_4)
283 vm->SetActiveEngine(3);
285 else if (key == OgreBites::SDLK_KP_5)
287 vm->SetActiveEngine(4);
289 else if (key == OgreBites::SDLK_KP_6)
291 vm->SetActiveEngine(5);
293 else if (key == OgreBites::SDLK_KP_7)
295 vm->SetActiveEngine(6);
297 else if (key == OgreBites::SDLK_KP_8)
299 vm->SetActiveEngine(7);
301 else if (key == OgreBites::SDLK_KP_9)
303 vm->SetActiveEngine(8);
305 else if (key == OgreBites::SDLK_KP_0)
307 vm->SetActiveEngine(9);
309 else if (key == OgreBites::SDLK_RETURN)
315 GetKeyStates(engine, key,
true);
317 ProcessMovement(engine, ctrl_down, shift_down);
329 OgreBites::Keycode key = evt.keysym.sym;
335 GetKeyStates(engine, key,
false);
337 ProcessMovement(engine, ctrl_down, shift_down);
346 if (!vm->GetActiveEngine())
350 ::SBS::SBS *Simcore = vm->GetActiveEngine()->GetSystem();
361 int old_mouse_x = camera->
mouse_x;
362 int old_mouse_y = camera->
mouse_y;
371 if (freelook ==
false)
381 Real width = mRenderWindow->getWidth();
382 Real height = mRenderWindow->getHeight();
385 if (old_mouse_x != camera->
mouse_x || old_mouse_y != camera->
mouse_y)
390 rotational.x = -(((
Real)camera->
mouse_y - (height / 2))) / (height * 2);
391 rotational.y = -((width / 2) - (
Real)camera->
mouse_x) / (width * 2);
394 Real fps_adjust = Simcore->
FPS / 60;
395 rotational *= fps_adjust;
403 ProcessMovement(vm->GetActiveEngine(),
false,
false,
true);
408 if (freelook ==
true)
413 if (old_mouse_x != camera->
mouse_x || old_mouse_y != camera->
mouse_y)
415 ProcessMovement(vm->GetActiveEngine(),
false,
false,
true);
420 HandleMouseMovement();
545 if (alt_down ==
true)
548 if (key == OgreBites::SDLK_RIGHT || key ==
'\x64')
551 else if (key == OgreBites::SDLK_LEFT || key ==
'\x61')
554 else if (key == OgreBites::SDLK_UP || key ==
'\x77')
557 else if (key == OgreBites::SDLK_DOWN || key ==
'\x73')
560 else if (key == OgreBites::SDLK_PAGEUP)
563 else if (key == OgreBites::SDLK_PAGEDOWN)
570 if (key == OgreBites::SDLK_RIGHT || key ==
'\x64')
573 if (key == OgreBites::SDLK_LEFT || key ==
'\x61')
584 if (key == OgreBites::SDLK_RIGHT || key ==
'\x64' || key ==
'\x71')
587 if (key == OgreBites::SDLK_LEFT || key ==
'\x61' || key ==
'\x65')
591 if (key == OgreBites::SDLK_PAGEUP)
594 if (key == OgreBites::SDLK_PAGEDOWN)
597 if (key == OgreBites::SDLK_UP || key ==
'\x77')
600 if (key == OgreBites::SDLK_DOWN || key ==
'\x73')
601 step_backward = down;
612 if (key == OgreBites::SDLK_HOME)
614 if (key == OgreBites::SDLK_END)
620 if (key == OgreBites::SDLK_LEFT || key ==
'\x61')
622 if (key == OgreBites::SDLK_RIGHT || key ==
'\x64')
624 if (key == OgreBites::SDLK_DOWN || key ==
'\x73')
626 if (key == OgreBites::SDLK_UP || key ==
'\x77')