From b0d14b91e081096493197305a1268924e678a7e6 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Fri, 16 Oct 2020 19:37:18 +0200 Subject: [PATCH] Adding Input Example. --- examples/build.lua | 3 +- examples/input/InputExample.cpp | 65 +++++++++++++++++++++++++++++++++ examples/input/InputExample.h | 34 +++++++++++++++++ examples/input/bam.lua | 7 ++++ examples/input/main.cpp | 11 ++++++ 5 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 examples/input/InputExample.cpp create mode 100644 examples/input/InputExample.h create mode 100644 examples/input/bam.lua create mode 100644 examples/input/main.cpp diff --git a/examples/build.lua b/examples/build.lua index 5505fed..92d04a1 100644 --- a/examples/build.lua +++ b/examples/build.lua @@ -24,7 +24,8 @@ assets = CopyDir(PathJoin(paths.build, paths.examples), "assets") examples = BuildExamples(example_settings, { "text", - "events" + "events", + "input" }, assets) PseudoTarget("examples", examples) diff --git a/examples/input/InputExample.cpp b/examples/input/InputExample.cpp new file mode 100644 index 0000000..0dc73e0 --- /dev/null +++ b/examples/input/InputExample.cpp @@ -0,0 +1,65 @@ + +#include +#include +#include + +#include +#include +#include "InputExample.h" + +void InputExample::init() +{ + m_renderer = new sp::BatchRenderer2D(); + + 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_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::render() +{ + sp::Graphics* g = getGraphics(); + + g->clearBuffer(); + + m_renderer->begin(); + m_renderer->submit(m_mouse_sprite); + m_renderer->submit(m_kb_sprite); + m_renderer->render(); + + g->swapBuffers(); +} diff --git a/examples/input/InputExample.h b/examples/input/InputExample.h new file mode 100644 index 0000000..e227a8d --- /dev/null +++ b/examples/input/InputExample.h @@ -0,0 +1,34 @@ + +#ifndef INPUT_EXAMPLE_H +#define INPUT_EXAMPLE_H + +#include +#include +#include +#include + +namespace sp { + class Renderer2D; +} + +class InputExample : public sp::Game +{ +protected : + + void init(); + + void update(double dt); + + void render(); + +private : + sp::Camera2D m_camera; + sp::Renderer2D *m_renderer; + + sp::Sprite m_kb_sprite; + sp::Sprite m_mouse_sprite; + + sp::Texture m_tux_texture; +}; + +#endif /* INPUT_EXAMPLE_H*/ diff --git a/examples/input/bam.lua b/examples/input/bam.lua new file mode 100644 index 0000000..6cf60e3 --- /dev/null +++ b/examples/input/bam.lua @@ -0,0 +1,7 @@ + +local base = PathDir(ModuleFilename()) + +src ={ + base .. "/main.cpp", + base .. "/InputExample.cpp" +} diff --git a/examples/input/main.cpp b/examples/input/main.cpp new file mode 100644 index 0000000..513d592 --- /dev/null +++ b/examples/input/main.cpp @@ -0,0 +1,11 @@ + +#include "InputExample.h" + +int main(int argc, char **argv) { + + InputExample game; + + game.run(); + + return 0; +}