InputManager, mouse pointer won't move, but getting input

strook

10-02-2011 08:23:07

i have this code:

header:

...
MyGUI::InputManager* mMyGUIInputManager;
...


source:
void InputManager::setMousePosition(int _x, int _y)
{
//const OIS::MouseState &ms = mMouse->getMouseState();
mCursorX = _x;
mCursorY = _y;

checkPosition();
}

void InputManager::checkPosition()
{
const OIS::MouseState& ms = mMouse->getMouseState();

if (mCursorX < 0)
mCursorX = 0;
else if (mCursorX >= ms.width)
mCursorX = ms.width - 1;

if (mCursorY < 0)
mCursorY = 0;
else if (mCursorY >= ms.height)
mCursorY = ms.height - 1;
}

void InputManager::updateCursorPosition()
{
const OIS::MouseState& ms = mMouse->getMouseState();
injectMouseMove(mCursorX, mCursorY, ms.Z.abs);
}

void InputManager::injectMouseMove(int _absx, int _absy, int _absz)
{
setMousePosition(_absx, _absy);
// mMyGUIInputManager->injectMouseMove(_absx, _absy, _absz); <-----------------------------
}

void InputManager::injectMousePress(int _absx, int _absy, MyGUI::MouseButton _id)
{
const OIS::MouseState &ms = mMouse->getMouseState();
OIS::MouseEvent event( NULL, ms );
if(ms.buttonDown(OIS::MouseButtonID(event.state.buttons)))
{
mousePressed( event, OIS::MouseButtonID(event.state.buttons));
}
}

startup:
void InputManager::createInput(size_t _handle, MyGUI::Gui* mGUI )
{
pmygui = mGUI;

std::ostringstream windowHndStr;
windowHndStr << _handle;

OIS::ParamList pl;
pl.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_FOREGROUND" )));
pl.insert(std::make_pair(std::string("w32_keyboard"), std::string("DISCL_FOREGROUND")));
pl.insert(std::make_pair(std::string("x11_mouse_grab"), std::string("false")));

pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));

mInputManager = OIS::InputManager::createInputSystem(pl);

mKeyboard = static_cast<OIS::Keyboard*>(mInputManager->createInputObject( OIS::OISKeyboard, true ));
mKeyboard->setEventCallback(this);

mMouse = static_cast<OIS::Mouse*>(mInputManager->createInputObject( OIS::OISMouse, true ));
mMouse->setEventCallback(this);

// mMyGUIInputManager = new MyGUI::InputManager(); <-------------------
// mMyGUIInputManager->initialise(); <------------------------
}



if i activate the <-------------- commented out functions, the program will crash at starting up the input manager.

what did i do wrong?

how do i get the pointer moving'?

Altren

10-02-2011 08:27:03

inputManager is singleton and you are trying to create and initialise it twice (initially it is created inside MyGUI::Gui::initialise).
Replace two lines
mMyGUIInputManager = new MyGUI::InputManager();
mMyGUIInputManager->initialise();
with
mMyGUIInputManager = MyGUI::InputManager::getInstance();

strook

13-02-2011 02:38:59

Thx , I will try and report.

strook

18-02-2011 21:11:38

it works :mrgreen: