fixed NO_ACTION actions causing issues, and added mouseGrab feature
This commit is contained in:
parent
273e8cc7e6
commit
2184955935
@ -11,7 +11,8 @@
|
|||||||
|
|
||||||
Input::Input(sf::Window *w) :
|
Input::Input(sf::Window *w) :
|
||||||
m_window(w),
|
m_window(w),
|
||||||
m_closeRequested(false)
|
m_closeRequested(false),
|
||||||
|
m_mouseGrabbed(false)
|
||||||
{
|
{
|
||||||
m_heldkeys = std::vector<sf::Keyboard::Key>();
|
m_heldkeys = std::vector<sf::Keyboard::Key>();
|
||||||
m_actions = std::vector<int>();
|
m_actions = std::vector<int>();
|
||||||
@ -31,12 +32,18 @@ void Input::updateEvents(){
|
|||||||
m_closeRequested = false;
|
m_closeRequested = false;
|
||||||
m_hasBeenResized = false;
|
m_hasBeenResized = false;
|
||||||
m_delta_vertical_scroll = 0;
|
m_delta_vertical_scroll = 0;
|
||||||
m_last_mouse_position = m_mouse_position;
|
|
||||||
|
if(m_mouseGrabbed)
|
||||||
|
m_last_mouse_position = sf::Vector2i(m_window->getSize())/2;
|
||||||
|
else
|
||||||
|
m_last_mouse_position = m_mouse_position;
|
||||||
|
|
||||||
/* global affectation */
|
/* global affectation */
|
||||||
kb = m_keybindings[m_current_context];
|
kb = m_keybindings[m_current_context];
|
||||||
m_actions.clear();
|
m_actions.clear();
|
||||||
|
|
||||||
|
int action;
|
||||||
|
|
||||||
/* event-parsing loop */
|
/* event-parsing loop */
|
||||||
while(m_window->pollEvent(event))
|
while(m_window->pollEvent(event))
|
||||||
{
|
{
|
||||||
@ -49,28 +56,36 @@ void Input::updateEvents(){
|
|||||||
c = (char) event.text.unicode;
|
c = (char) event.text.unicode;
|
||||||
m_buffer.push_back(c);
|
m_buffer.push_back(c);
|
||||||
break;
|
break;
|
||||||
case sf::Event::KeyPressed:
|
case sf::Event::KeyPressed:
|
||||||
m_actions.push_back(kb.getPressedAction(event.key.code));
|
action = kb.getPressedAction(event.key.code);
|
||||||
|
if(action != -1)
|
||||||
|
m_actions.push_back(action);
|
||||||
m_heldkeys.push_back(event.key.code);
|
m_heldkeys.push_back(event.key.code);
|
||||||
break;
|
break;
|
||||||
case sf::Event::KeyReleased:
|
case sf::Event::KeyReleased:
|
||||||
m_actions.push_back(kb.getReleasedAction(event.key.code));
|
action = kb.getReleasedAction(event.key.code);
|
||||||
|
if(action != -1)
|
||||||
|
m_actions.push_back(action);
|
||||||
releaseHeldKeys(event.key.code);
|
releaseHeldKeys(event.key.code);
|
||||||
break;
|
break;
|
||||||
case sf::Event::MouseButtonPressed:
|
case sf::Event::MouseButtonPressed:
|
||||||
m_actions.push_back(kb.getPressedAction(sf::Keyboard::KeyCount + event.mouseButton.button));
|
action = kb.getPressedAction(sf::Keyboard::KeyCount + event.mouseButton.button);
|
||||||
|
if(action != -1)
|
||||||
|
m_actions.push_back(action);
|
||||||
m_heldkeys.push_back((sf::Keyboard::Key) (sf::Keyboard::KeyCount + event.mouseButton.button));
|
m_heldkeys.push_back((sf::Keyboard::Key) (sf::Keyboard::KeyCount + event.mouseButton.button));
|
||||||
break;
|
break;
|
||||||
case sf::Event::MouseButtonReleased:
|
case sf::Event::MouseButtonReleased:
|
||||||
m_actions.push_back(kb.getReleasedAction(sf::Keyboard::KeyCount + event.mouseButton.button));
|
action = kb.getReleasedAction(sf::Keyboard::KeyCount + event.mouseButton.button);
|
||||||
|
if(action != -1)
|
||||||
|
m_actions.push_back(action);
|
||||||
releaseHeldKeys((sf::Keyboard::Key) (sf::Keyboard::KeyCount + event.mouseButton.button));
|
releaseHeldKeys((sf::Keyboard::Key) (sf::Keyboard::KeyCount + event.mouseButton.button));
|
||||||
break;
|
break;
|
||||||
case sf::Event::MouseWheelScrolled:
|
case sf::Event::MouseWheelScrolled:
|
||||||
if (event.mouseWheelScroll.wheel == sf::Mouse::VerticalWheel)
|
if (event.mouseWheelScroll.wheel == sf::Mouse::VerticalWheel)
|
||||||
m_delta_vertical_scroll = event.mouseWheelScroll.delta;
|
m_delta_vertical_scroll = event.mouseWheelScroll.delta;
|
||||||
break;
|
break;
|
||||||
case sf::Event::MouseMoved:
|
case sf::Event::MouseMoved:
|
||||||
m_mouse_position = sf::Mouse::getPosition();
|
m_mouse_position = sf::Mouse::getPosition(*m_window);
|
||||||
break;
|
break;
|
||||||
case sf::Event::MouseEntered:
|
case sf::Event::MouseEntered:
|
||||||
// action MouseEntered
|
// action MouseEntered
|
||||||
@ -80,9 +95,13 @@ void Input::updateEvents(){
|
|||||||
break;
|
break;
|
||||||
case sf::Event::Resized:
|
case sf::Event::Resized:
|
||||||
m_hasBeenResized = true;
|
m_hasBeenResized = true;
|
||||||
|
if(m_mouseGrabbed)
|
||||||
|
m_last_mouse_position = sf::Vector2i(m_window->getSize())/2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(m_mouseGrabbed)
|
||||||
|
sf::Mouse::setPosition(m_last_mouse_position, *m_window);
|
||||||
for (auto key: m_heldkeys)
|
for (auto key: m_heldkeys)
|
||||||
{
|
{
|
||||||
m_actions.push_back(kb.getHoldAction(key));
|
m_actions.push_back(kb.getHoldAction(key));
|
||||||
@ -155,6 +174,13 @@ float Input::getDeltaVerticalScroll() const
|
|||||||
return m_delta_vertical_scroll;
|
return m_delta_vertical_scroll;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Input::setMouseGrabbed(bool isGrabbed)
|
||||||
|
{
|
||||||
|
m_mouseGrabbed = isGrabbed;
|
||||||
|
if(isGrabbed)
|
||||||
|
m_last_mouse_position = sf::Vector2i(m_window->getSize())/2;
|
||||||
|
}
|
||||||
|
|
||||||
std::string Input::getText()
|
std::string Input::getText()
|
||||||
{
|
{
|
||||||
std::string t = m_buffer;
|
std::string t = m_buffer;
|
||||||
|
@ -35,6 +35,7 @@ private:
|
|||||||
sf::Vector2i m_mouse_position;
|
sf::Vector2i m_mouse_position;
|
||||||
sf::Vector2i m_last_mouse_position;
|
sf::Vector2i m_last_mouse_position;
|
||||||
float m_delta_vertical_scroll;
|
float m_delta_vertical_scroll;
|
||||||
|
bool m_mouseGrabbed;
|
||||||
|
|
||||||
/* text-related variable */
|
/* text-related variable */
|
||||||
std::string m_buffer;
|
std::string m_buffer;
|
||||||
@ -65,6 +66,11 @@ public:
|
|||||||
sf::Vector2i getDeltaPosition() const;
|
sf::Vector2i getDeltaPosition() const;
|
||||||
float getDeltaVerticalScroll() const;
|
float getDeltaVerticalScroll() const;
|
||||||
|
|
||||||
|
/* Mouse grabbing */
|
||||||
|
void setMouseGrabbed(bool isGrabbed);
|
||||||
|
void toggleMouseGrab() { setMouseGrabbed(!m_mouseGrabbed); }
|
||||||
|
bool isMouseGrabbed() const { return m_mouseGrabbed; }
|
||||||
|
|
||||||
/* text-related function */
|
/* text-related function */
|
||||||
std::string getText();
|
std::string getText();
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@ std::vector<Binding> IKeysMap::getBindings(int action) const {
|
|||||||
KeyBindings::KeyBindings()
|
KeyBindings::KeyBindings()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
KeyBindings::KeyBindings(const Context &context, const IKeysMap &keysmap)
|
KeyBindings::KeyBindings(const Context &context, const IKeysMap &keysmap)
|
||||||
{
|
{
|
||||||
for (int action : context.getActions()){
|
for (int action : context.getActions()){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user