forked from teamnwah/openmw-tes3coop
Started integrating OE (NO-COMPILE)
This commit is contained in:
parent
064e3e2e23
commit
259908013e
5 changed files with 32 additions and 117 deletions
3
.gitmodules
vendored
3
.gitmodules
vendored
|
@ -1,3 +1,6 @@
|
||||||
[submodule "libs/mangle"]
|
[submodule "libs/mangle"]
|
||||||
path = libs/mangle
|
path = libs/mangle
|
||||||
url = git://github.com/korslund/mangle.git
|
url = git://github.com/korslund/mangle.git
|
||||||
|
[submodule "libs/openengine"]
|
||||||
|
path = libs/openengine
|
||||||
|
url = git://github.com/korslund/OpenEngine
|
||||||
|
|
|
@ -1,12 +1,17 @@
|
||||||
#ifndef _MWINPUT_MWINPUTMANAGER_H
|
#ifndef _MWINPUT_MWINPUTMANAGER_H
|
||||||
#define _MWINPUT_MWINPUTMANAGER_H
|
#define _MWINPUT_MWINPUTMANAGER_H
|
||||||
|
|
||||||
#include "components/engine/input/listener.hpp"
|
#include <libs/openengine/input/dispatcher.hpp>
|
||||||
#include "components/engine/input/dispatcher.hpp"
|
#include <libs/openengine/input/poller.hpp>
|
||||||
#include "components/engine/input/poller.hpp"
|
|
||||||
#include "boost/bind.hpp"
|
#include <libs/openengine/ogre/exitlistener.hpp>
|
||||||
#include "apps/openmw/mwrender/playerpos.hpp"
|
#include <libs/openengine/ogre/mouselook.hpp>
|
||||||
#include "libs/platform/strings.h"
|
|
||||||
|
#include <libs/mangle/input/drivers/ois_driver.hpp>
|
||||||
|
|
||||||
|
#include <libs/platform/strings.h>
|
||||||
|
#include <boost/bind.hpp>
|
||||||
|
#include "../mwrender/playerpos.hpp"
|
||||||
|
|
||||||
namespace MWInput
|
namespace MWInput
|
||||||
{
|
{
|
||||||
|
@ -29,13 +34,10 @@ namespace MWInput
|
||||||
// Class that handles all input and key bindings for OpenMW
|
// Class that handles all input and key bindings for OpenMW
|
||||||
class MWInputManager : public Ogre::FrameListener
|
class MWInputManager : public Ogre::FrameListener
|
||||||
{
|
{
|
||||||
// Note: the order here is important. The OISManager must be
|
Mangle::Input::EventPtr disp;
|
||||||
// initialized before poller and listener.
|
|
||||||
Input::Dispatcher disp;
|
|
||||||
Render::OgreRenderer &ogre;
|
Render::OgreRenderer &ogre;
|
||||||
Input::OISManager input;
|
Mangle::Input::OISDriver input;
|
||||||
Input::Poller poller;
|
OEngine::Input::Poller poller;
|
||||||
Input::InputListener listener;
|
|
||||||
MWRender::PlayerPos &player;
|
MWRender::PlayerPos &player;
|
||||||
|
|
||||||
// Count screenshots. TODO: We should move this functionality to
|
// Count screenshots. TODO: We should move this functionality to
|
||||||
|
@ -59,21 +61,21 @@ namespace MWInput
|
||||||
public:
|
public:
|
||||||
MWInputManager(Render::OgreRenderer &_ogre,
|
MWInputManager(Render::OgreRenderer &_ogre,
|
||||||
MWRender::PlayerPos &_player, bool debug)
|
MWRender::PlayerPos &_player, bool debug)
|
||||||
: disp(A_LAST),
|
: ogre(_ogre),
|
||||||
ogre(_ogre),
|
input(ogre.getWindow(), !debug),
|
||||||
input(_ogre, debug),
|
|
||||||
poller(input),
|
poller(input),
|
||||||
listener(_ogre, input, disp),
|
|
||||||
player(_player),
|
player(_player),
|
||||||
shotCount(0)
|
shotCount(0)
|
||||||
{
|
{
|
||||||
using namespace Input;
|
using namespace OEngine::Input;
|
||||||
using namespace OIS;
|
using namespace OIS;
|
||||||
|
|
||||||
|
disp = EventPtr(new Dispatcher(A_LAST));
|
||||||
|
|
||||||
// Bind MW-specific functions
|
// Bind MW-specific functions
|
||||||
disp.funcs.bind(A_Quit, boost::bind(&InputListener::exitNow, &listener),
|
disp->funcs.bind(A_Quit, boost::bind(&InputListener::exitNow, &listener),
|
||||||
"Quit program");
|
"Quit program");
|
||||||
disp.funcs.bind(A_Screenshot, boost::bind(&MWInputManager::screenshot, this),
|
disp->funcs.bind(A_Screenshot, boost::bind(&MWInputManager::screenshot, this),
|
||||||
"Screenshot");
|
"Screenshot");
|
||||||
|
|
||||||
// Add ourselves as a frame listener, to catch movement keys
|
// Add ourselves as a frame listener, to catch movement keys
|
||||||
|
@ -83,9 +85,9 @@ namespace MWInput
|
||||||
listener.setCamera(player.getCamera());
|
listener.setCamera(player.getCamera());
|
||||||
|
|
||||||
// Key bindings
|
// Key bindings
|
||||||
disp.bind(KC_Q, A_Quit);
|
disp->bind(KC_Q, A_Quit);
|
||||||
disp.bind(KC_ESCAPE, A_Quit);
|
disp->bind(KC_ESCAPE, A_Quit);
|
||||||
disp.bind(KC_SYSRQ, A_Screenshot);
|
disp->bind(KC_SYSRQ, A_Screenshot);
|
||||||
|
|
||||||
// Key bindings for polled keys
|
// Key bindings for polled keys
|
||||||
|
|
||||||
|
@ -109,6 +111,9 @@ namespace MWInput
|
||||||
// Used to check for movement keys
|
// Used to check for movement keys
|
||||||
bool frameStarted(const Ogre::FrameEvent &evt)
|
bool frameStarted(const Ogre::FrameEvent &evt)
|
||||||
{
|
{
|
||||||
|
// Tell OIS to handle all input events
|
||||||
|
input.capture();
|
||||||
|
|
||||||
float speed = 300 * evt.timeSinceLastFrame;
|
float speed = 300 * evt.timeSinceLastFrame;
|
||||||
float moveX = 0, moveY = 0, moveZ = 0;
|
float moveX = 0, moveY = 0, moveZ = 0;
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit eed875ae043c3c48fd23e18342c17d6f2331cc17
|
Subproject commit 9f21081c13f70bc41e20b50c19ed2dac9b458833
|
1
libs/openengine
Submodule
1
libs/openengine
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 5333b8e230e285e9183b0639188283bdbc15af6c
|
|
@ -1,97 +1,3 @@
|
||||||
// Frame listener, passed to Ogre. The only thing we use this for is
|
|
||||||
// to capture input and pass control to D code.
|
|
||||||
class MorroFrameListener: public FrameListener
|
|
||||||
{
|
|
||||||
|
|
||||||
public:
|
|
||||||
// Start of frame
|
|
||||||
bool frameStarted(const FrameEvent& evt)
|
|
||||||
{
|
|
||||||
TRACE("frameStarted (Input)");
|
|
||||||
|
|
||||||
if(mWindow->isClosed())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// Capture keyboard and mouse events
|
|
||||||
mKeyboard->capture();
|
|
||||||
mMouse->capture();
|
|
||||||
|
|
||||||
// Notify the GUI
|
|
||||||
mGUI->injectFrameEntered(evt.timeSinceLastFrame);
|
|
||||||
|
|
||||||
// Turn over control to the D code
|
|
||||||
return d_frameStarted(evt.timeSinceLastFrame);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Recieves input events and sends them to the D event handler.
|
|
||||||
class InputListener : public OIS::KeyListener, public OIS::MouseListener
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
bool keyPressed( const OIS::KeyEvent &arg )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
std::cout << "KeyPressed {" << arg.key
|
|
||||||
<< ", " << ((OIS::Keyboard*)(arg.device))->getAsString(arg.key)
|
|
||||||
<< "} || Character (" << (char)arg.text << ")\n";
|
|
||||||
//*/
|
|
||||||
if(guiMode)
|
|
||||||
mGUI->injectKeyPress(arg);
|
|
||||||
|
|
||||||
d_handleKey(arg.key, arg.text);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool mouseMoved( const OIS::MouseEvent &arg )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
const OIS::MouseState& s = arg.state;
|
|
||||||
std::cout << "MouseMoved: Abs("
|
|
||||||
<< s.X.abs << ", " << s.Y.abs << ", " << s.Z.abs << ") Rel("
|
|
||||||
<< s.X.rel << ", " << s.Y.rel << ", " << s.Z.rel << ")\n";
|
|
||||||
*/
|
|
||||||
// TODO: this should be handled elsewhere later on, most likely in
|
|
||||||
// Monster script.
|
|
||||||
if(guiMode)
|
|
||||||
mGUI->injectMouseMove(arg);
|
|
||||||
|
|
||||||
d_handleMouseMove(&arg.state);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool mousePressed( const OIS::MouseEvent &arg, OIS::MouseButtonID id )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
const OIS::MouseState& s = arg.state;
|
|
||||||
std::cout << "Mouse button #" << id << " pressed. Abs("
|
|
||||||
<< s.X.abs << ", " << s.Y.abs << ", " << s.Z.abs << ") Rel("
|
|
||||||
<< s.X.rel << ", " << s.Y.rel << ", " << s.Z.rel << ")\n";
|
|
||||||
*/
|
|
||||||
if(guiMode)
|
|
||||||
mGUI->injectMousePress(arg, id);
|
|
||||||
|
|
||||||
d_handleMouseButton(&arg.state, id);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool mouseReleased( const OIS::MouseEvent &arg, OIS::MouseButtonID id )
|
|
||||||
{
|
|
||||||
if(guiMode)
|
|
||||||
mGUI->injectMouseRelease(arg, id);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool keyReleased( const OIS::KeyEvent &arg )
|
|
||||||
{
|
|
||||||
if(guiMode)
|
|
||||||
mGUI->injectKeyRelease(arg);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
MorroFrameListener mFrameListener;
|
|
||||||
InputListener mInput;
|
|
||||||
|
|
||||||
// Get current camera orientation, in the form of 'front' and 'up'
|
// Get current camera orientation, in the form of 'front' and 'up'
|
||||||
// vectors.
|
// vectors.
|
||||||
extern "C" void ogre_getCameraOrientation(float *fx, float *fy, float *fz,
|
extern "C" void ogre_getCameraOrientation(float *fx, float *fy, float *fz,
|
||||||
|
|
Loading…
Reference in a new issue