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