#include #include #include #include #include #include #include #include "InputExample.h" void InputExample::init() { m_renderer = new sp::BatchRenderer2D(); getMessageHandler()->registerListener(this); m_tux_texture.create("assets/textures/tux.png"); m_kb_sprite.setTexture(m_tux_texture); m_kb_sprite.setColor(sp::Color::Green); m_kb_sprite.setSize(sp::vec2f(100, 100)); m_mouse_sprite.setTexture(m_tux_texture); m_mouse_sprite.setColor(sp::Color::Red); m_mouse_sprite.setSize(sp::vec2f(100, 100)); m_mouse_sprite.setPosition(sp::vec2f(50, 50)); m_mouse_event_sprite.setTexture(m_tux_texture); m_mouse_event_sprite.setColor(sp::Color::Blue); m_mouse_event_sprite.setSize(sp::vec2f(100, 100)); m_mouse_event_sprite.setPosition(sp::vec2f(50, 50)); m_right_mouse_down = false; m_renderer->setCamera(m_camera); } void InputExample::update(double dt) { sp::Keyboard* keyboard = getInput()->getKeyboard(); sp::Mouse* mouse = getInput()->getMouse(); double delta = 0.3 * dt; // Handle keyboard input. if (keyboard->isKeyDown(sp::Keyboard::Left)) { m_kb_sprite.move(sp::vec2f(-delta, 0)); } else if (keyboard->isKeyDown(sp::Keyboard::Right)) { m_kb_sprite.move(sp::vec2f( delta, 0)); } if (keyboard->isKeyDown(sp::Keyboard::Up)) { m_kb_sprite.move(sp::vec2f(0, -delta)); } else if (keyboard->isKeyDown(sp::Keyboard::Down)) { m_kb_sprite.move(sp::vec2f(0, delta)); } // Handle mouse input. if (mouse->isButtonDown(sp::Mouse::Left)) { m_mouse_sprite.setPosition(mouse->getPosition()); } } void InputExample::onSizeChanged(sp::Window* Window, int width, int height) { } void InputExample::onEvent(const sp::Event& event) { if (event.type == event.Key && !event.key.pressed) { if (event.key.code == sp::Keyboard::G) { getGraphics()->getWindow()->grabCursor(true); sp::Log::info("Mouse Grabbed"); } else if (event.key.code == sp::Keyboard::U) { getGraphics()->getWindow()->grabCursor(false); sp::Log::info("Mouse Released"); } } else if (event.type == event.MouseButton && event.mouseButton.button == sp::Mouse::Right) { m_right_mouse_down = event.mouseButton.pressed; } else if (event.type == event.MouseMove && m_right_mouse_down) { m_mouse_event_sprite.setPosition(event.mouseMove.x, event.mouseMove.y); } } void InputExample::render() { sp::Graphics* g = getGraphics(); g->clearBuffer(); m_renderer->begin(); m_renderer->submit(m_mouse_sprite); m_renderer->submit(m_mouse_event_sprite); m_renderer->submit(m_kb_sprite); m_renderer->render(); g->swapBuffers(); }