1
0
Fork 0
spectre/examples/input/InputExample.cpp
Henrik Hautakoski 24da7f45e0 Rename Display to Window.
It makes more sense to be consistent and always call it window.
2023-08-22 07:12:47 +02:00

99 lines
2.7 KiB
C++

#include <Spectre/Input/InputModule.h>
#include <Spectre/Input/Keyboard.h>
#include <Spectre/Input/Mouse.h>
#include <Spectre/System/MessageHandler.h>
#include <Spectre/System/Log.h>
#include <Spectre/Graphics/BatchRenderer2D.h>
#include <Spectre/System/Log.h>
#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();
}