PageRenderTime 23ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/editor/src/frame_listener.cpp

http://pmaz3.googlecode.com/
C++ | 102 lines | 67 code | 18 blank | 17 comment | 13 complexity | e2171f93ca094d9020ac268028f5d3b7 MD5 | raw file
Possible License(s): MIT
  1. /**
  2. @file frame_listener.cpp
  3. @brief Frame Listener class functions
  4. */
  5. #include "frame_listener.hpp"
  6. pm3::FRAME_LISTENER::FRAME_LISTENER() {
  7. m_time = 0.0;
  8. m_mouse_state = 0;
  9. }
  10. pm3::FRAME_LISTENER::~FRAME_LISTENER() {
  11. }
  12. bool pm3::FRAME_LISTENER::frameEnded( const Ogre::FrameEvent &r_event ) {
  13. pm3::INTERFACE *intf = pm3::INTERFACE::getSingletonPtr();
  14. float worst = 0, avg = 0, best = 0;
  15. std::string str;
  16. if (intf && intf->get_render_window()) {
  17. // Update FPS on the overlay
  18. worst = intf->get_render_window()->getWorstFPS();
  19. avg = intf->get_render_window()->getAverageFPS();
  20. best = intf->get_render_window()->getBestFPS();
  21. str = "FPS: " + pm3::util::to_str( worst ) + " .. " +
  22. pm3::util::to_str( avg ) + " .. " +
  23. pm3::util::to_str( best );
  24. pm3::hud::TEXT_OVERLAY::getSingleton().set_text( "FPS", str );
  25. }
  26. return true;
  27. }
  28. bool pm3::FRAME_LISTENER::frameStarted( const Ogre::FrameEvent &r_event ) {
  29. pm3::PHYSICS *physics = pm3::PHYSICS::getSingletonPtr();
  30. pm3::PIXELWORLD *world = pm3::PIXELWORLD::getSingletonPtr();
  31. int num_movement_keys = 0;
  32. float mouse_sensitivity = 0;
  33. Ogre::Vector2 mouse_delta;
  34. // Keyboard
  35. {
  36. // Go forward
  37. if (m_keymap [Qt::Key_W]) {
  38. world->m_player.move( Ogre::Vector3( 0.0f, 0.0f, -r_event.timeSinceLastFrame ) );
  39. num_movement_keys++;
  40. }
  41. // Go backwards
  42. if (m_keymap [Qt::Key_S]) {
  43. world->m_player.move( Ogre::Vector3( 0.0f, 0.0f, r_event.timeSinceLastFrame ) );
  44. num_movement_keys++;
  45. }
  46. // Strafe left
  47. if (m_keymap [Qt::Key_A]) {
  48. world->m_player.move( Ogre::Vector3( -r_event.timeSinceLastFrame, 0.0f, 0.0f ) );
  49. num_movement_keys++;
  50. }
  51. // Strafe right
  52. if (m_keymap [Qt::Key_D]) {
  53. world->m_player.move( Ogre::Vector3( r_event.timeSinceLastFrame, 0.0f, 0.0f ) );
  54. num_movement_keys++;
  55. }
  56. // No movement? Stop the player then
  57. if (num_movement_keys == 0)
  58. world->m_player.stop();
  59. }
  60. // Mouse
  61. {
  62. mouse_sensitivity = pm3::PIXELWORLD::getSingleton().m_player.get_mouse_sensitivity();
  63. mouse_delta = m_mouse_new_pos - m_mouse_old_pos;
  64. mouse_delta *= -r_event.timeSinceLastFrame * mouse_sensitivity;
  65. if (( m_mouse_state & Qt::RightButton ) != 0) {
  66. world->m_player.angle_rotate( Ogre::Degree( mouse_delta.x ),
  67. Ogre::Degree( mouse_delta.y ) );
  68. }
  69. }
  70. // Update physics
  71. if (physics && physics->get_physics_world()) {
  72. // Update bullet world
  73. //! \note The third argument is fixed timestep, which should be small enough to allow for enough iterations during one frame
  74. physics->get_physics_world()->stepSimulation( r_event.timeSinceLastFrame, 10, 1.0f / 200.0f );
  75. physics->get_physics_world()->debugDrawWorld();
  76. physics->get_physics_debug()->step();
  77. }
  78. // Update world
  79. if (world)
  80. world->update();
  81. // Update the camera debug overlay text
  82. pm3::hud::TEXT_OVERLAY::getSingleton().set_text( "Camera", pm3::PIXELWORLD::getSingleton().m_player.get_pos_str() );
  83. return true;
  84. }