| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- #include <OgreStringConverter.h>
- #include "QGearsGameState.h"
- #include "core/CameraManager.h"
- #include "core/ConfigVar.h"
- #include "core/Console.h"
- #include "core/DebugDraw.h"
- #include "core/EntityManager.h"
- #include "core/GameFrameListner.h"
- #include "core/InputManager.h"
- #include "core/Logger.h"
- #include "core/ScriptManager.h"
- #include "core/Timer.h"
- #include "core/UiManager.h"
- ConfigVar cv_debug_fps("debug_fps", "Debug FPS", "false");
- GameFrameListener::GameFrameListener(Ogre::RenderWindow* win):
- m_Window(win),
- m_InputManager(0),
- m_Keyboard(0)
- {
- OIS::ParamList pl;
- size_t windowHnd = 0;
- std::ostringstream windowHndStr;
- win->getCustomAttribute("WINDOW", &windowHnd);
- windowHndStr << windowHnd;
- pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
- #if defined __WIN32__
- pl.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_FOREGROUND")));
- pl.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_NONEXCLUSIVE")));
- #else
- pl.insert(std::make_pair(std::string("x11_mouse_grab"), std::string("false")));
- pl.insert(std::make_pair(std::string("x11_mouse_hide"), std::string("false")));
- // pl.insert(std::make_pair(std::string("x11_keyboard_grab"), std::string("false")));
- #endif
- m_InputManager = OIS::InputManager::createInputSystem(pl);
- m_Keyboard = static_cast< OIS::Keyboard* >(m_InputManager->createInputObject(OIS::OISKeyboard, true));
- m_Keyboard->setEventCallback(this);
- m_Mouse = static_cast< OIS::Mouse* >(m_InputManager->createInputObject(OIS::OISMouse, true));
- m_Mouse->setEventCallback(this);
- windowResized(m_Window);
- //Register as a Window listener
- Ogre::WindowEventUtilities::addWindowEventListener(m_Window, this);
- }
- GameFrameListener::~GameFrameListener()
- {
- m_InputManager->destroyInputObject(m_Keyboard);
- m_InputManager->destroyInputObject(m_Mouse);
- OIS::InputManager::destroyInputSystem(m_InputManager);
- //Remove ourself as a Window listener
- Ogre::WindowEventUtilities::removeWindowEventListener(m_Window, this);
- windowClosed(m_Window);
- }
- bool
- GameFrameListener::frameStarted(const Ogre::FrameEvent& evt)
- {
- Timer::getSingleton().AddTime(evt.timeSinceLastFrame);
- if(QGears::g_ApplicationState == QGears::G_EXIT)
- {
- return false;
- }
- if(m_Keyboard)
- {
- m_Keyboard->capture();
- }
- if(m_Mouse)
- {
- m_Mouse->capture();
- }
- InputManager::getSingleton().Update();
- static InputEventArray input_event_array;
- input_event_array.clear();
- InputManager::getSingleton().GetInputEvents(input_event_array);
- bool console_active = Console::getSingleton().IsVisible();
- for(size_t i = 0; i < input_event_array.size(); ++i)
- {
- Console::getSingleton().Input(input_event_array[ i ]);
- if(console_active != true)
- {
- EntityManager::getSingleton().Input(input_event_array[ i ]);
- ScriptManager::getSingleton().Input(input_event_array[ i ]);
- CameraManager::getSingleton().Input(input_event_array[ i ], evt.timeSinceLastFrame);
- }
- }
- Console::getSingleton().Update();
- ScriptManager::getSingleton().Update(ScriptManager::SYSTEM);
- UiManager::getSingleton().Update();
- CameraManager::getSingleton().Update();
- EntityManager::getSingleton().Update();
- return true;
- }
- bool
- GameFrameListener::frameEnded(const Ogre::FrameEvent& evt)
- {
- if(cv_debug_fps.GetB() == true)
- {
- const Ogre::RenderTarget::FrameStats& stats = m_Window->getStatistics();
- DEBUG_DRAW.SetTextAlignment(DEBUG_DRAW.LEFT);
- DEBUG_DRAW.SetScreenSpace(true);
- DEBUG_DRAW.SetColour(Ogre::ColourValue(1, 1, 1, 1));
- DEBUG_DRAW.Text(10, 10, "Current FPS:" + Ogre::StringConverter::toString(stats.lastFPS));
- }
- return true;
- }
- void
- GameFrameListener::windowMoved(Ogre::RenderWindow* rw)
- {
- }
- void
- GameFrameListener::windowResized(Ogre::RenderWindow *rw)
- {
- if(m_Mouse)
- {
- const OIS::MouseState& ms = m_Mouse->getMouseState();
- ms.width = (int)rw->getWidth();
- ms.height = (int)rw->getHeight();
- }
- Console::getSingleton().OnResize();
- UiManager::getSingleton().OnResize();
- CameraManager::getSingleton().OnResize();
- EntityManager::getSingleton().OnResize();
- }
- void
- GameFrameListener::windowClosed(Ogre::RenderWindow* rw)
- {
- QGears::g_ApplicationState = QGears::G_EXIT;
- }
- void
- GameFrameListener::windowFocusChange(Ogre::RenderWindow* rw)
- {
- }
- bool
- GameFrameListener::keyPressed(const OIS::KeyEvent& event)
- {
- InputManager::getSingleton().ButtonPressed(event.key, event.text, true);
- return true;
- }
- bool
- GameFrameListener::keyReleased(const OIS::KeyEvent& event)
- {
- InputManager::getSingleton().ButtonPressed(event.key, event.text, false);
- return true;
- }
- bool
- GameFrameListener::mouseMoved(const OIS::MouseEvent& e)
- {
- if(e.state.Z.rel != 0)
- {
- InputManager::getSingleton().MouseScrolled(e.state.Z.rel);
- }
- else
- {
- InputManager::getSingleton().MouseMoved(e.state.X.rel, e.state.Y.rel);
- }
- return true;
- }
- bool
- GameFrameListener::mousePressed(const OIS::MouseEvent& e, OIS::MouseButtonID id)
- {
- InputManager::getSingleton().MousePressed(id, true);
- return true;
- }
- bool
- GameFrameListener::mouseReleased(const OIS::MouseEvent& e, OIS::MouseButtonID id)
- {
- InputManager::getSingleton().MousePressed(id, false);
- return true;
- }
|