You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.3 KiB

#pragma once
#include <SFML/Graphics.hpp>
#include <list>
#include "Event.hpp"
#include <memory>
#include "Pub_Sub.h"
class Input : public VrEventPublisher {
public:
Input();
~Input();
// Keep track of keys that are not released
// Keep track of mouse up and downs in conjunction with dragging
// Keep track of joystick buttons
void consume_sf_events(sf::RenderWindow *window);
void consume_vr_events();
void handle_held_keys();
void dispatch_events();
private:
void transpose_sf_events(std::list<sf::Event> event_queue);
std::vector<sf::Keyboard::Key> held_keys;
std::vector<sf::Mouse::Button> held_mouse_buttons;
std::vector<bool> keyboard_flags;
std::vector<bool> mouse_flags;
private:
std::list<std::unique_ptr<vr::Event>> event_queue;
};
class WindowHandler : public VrEventSubscriber {
public:
WindowHandler(sf::RenderWindow *window) : window_ref(window) { };
virtual void recieve_event(VrEventPublisher* publisher, std::unique_ptr<vr::Event>(event)) override {
if (event.get()->type == vr::Event::Closed) {
window_ref->close();
} else if (event.get()->type == vr::Event::KeyPressed) {
vr::KeyPressed *key_event = static_cast<vr::KeyPressed*>(event.get());
if (key_event->code == sf::Keyboard::Escape) {
window_ref->close();
}
}
};
private:
sf::RenderWindow* window_ref;
};