nngn
Loading...
Searching...
No Matches
input.h
Go to the documentation of this file.
1
5#ifndef NNGN_INPUT_INPUT_H
6#define NNGN_INPUT_INPUT_H
7
8#include <bitset>
9#include <cstddef>
10#include <cstdint>
11#include <memory>
12#include <span>
13#include <unordered_map>
14#include <vector>
15
16#include "utils/def.h"
17#include "utils/utils.h"
18
19struct lua_State;
20
21namespace nngn {
22
23using nngn::i32;
24
25class BindingGroup;
26struct Graphics;
27
29struct Input {
35 enum Selector : std::uint8_t {
36 PRESS = 1u << 0, CTRL = 1u << 1, ALT = 1u << 2,
37 };
38 enum Action : std::uint8_t {
39 KEY_PRESS = 0b1, KEY_RELEASE = 0,
40 };
41 enum Modifier : std::uint8_t {
42 MOD_SHIFT = 0b1, MOD_CTRL = 0b10, MOD_ALT = 0b100,
43 };
44 enum {
48 KEY_MAX = 348,
49 };
50 struct Source {
51 virtual ~Source() = 0;
52 virtual void get_keys(std::span<i32> keys) const;
53 virtual bool update(Input*) { return true; }
54 protected:
56 };
57 enum TerminalFlag : std::uint8_t {
58 OUTPUT_PROCESSING = 1u << 0,
59 };
60 void init(lua_State *L_) { this->L = L_; }
61 void get_keys(std::span<i32> keys) const;
62 void has_override(std::size_t n, i32 *keys) const;
63 BindingGroup *binding_group() const { return this->m_binding_group; }
65 void add_source(std::unique_ptr<Source> p);
67 bool override_keys(bool pressed, std::span<const i32> keys);
70 bool update();
71 bool key_callback(int key, Action action, Modifier mods) const;
72private:
73 lua_State *L = {};
74 int callback_ref = {};
75 BindingGroup *m_binding_group = {};
76 std::bitset<KEY_MAX + 1> overrides = {};
77 std::vector<std::unique_ptr<Source>> sources = {};
78};
79
80std::unique_ptr<Input::Source> input_terminal_source(
81 int fd, Input::TerminalFlag flags);
82std::unique_ptr<Input::Source> input_graphics_source(Graphics *g);
83
84}
85
86#endif
Definition: group.h:10
g
Definition: gamma.lua:7
Colliders::Backend::Input Input
Definition: native.cpp:9
n
Definition: dump_lights.lua:5
p
Definition: input.lua:29
std::chrono::duration< float, typename T::period > fd
Definition: timing.cpp:8
#define NNGN_DEFAULT_CONSTRUCT(x)
Definition: utils.h:20
Definition: audio.cpp:7
std::unique_ptr< Input::Source > input_terminal_source(int fd, Input::TerminalFlag flags)
Definition: terminal.cpp:122
std::int32_t i32
Definition: def.h:10
std::unique_ptr< Input::Source > input_graphics_source(Graphics *g)
Definition: graphics.cpp:79
Definition: input.h:50
virtual ~Source()=0
virtual bool update(Input *)
Definition: input.h:53
virtual void get_keys(std::span< i32 > keys) const
Dispatches keyboard input events to pre-registered Lua functions.
Definition: input.h:29
void add_source(std::unique_ptr< Source > p)
Modifier
Definition: input.h:41
@ MOD_SHIFT
Definition: input.h:42
@ MOD_ALT
Definition: input.h:42
@ MOD_CTRL
Definition: input.h:42
std::vector< std::unique_ptr< Source > > sources
Definition: input.h:77
bool override_keys(bool pressed, std::span< const i32 > keys)
TerminalFlag
Definition: input.h:57
@ OUTPUT_PROCESSING
Definition: input.h:58
bool register_callback()
void set_binding_group(BindingGroup *g)
Definition: input.h:64
std::bitset< KEY_MAX+1 > overrides
Definition: input.h:76
void get_keys(std::span< i32 > keys) const
bool remove_callback()
lua_State * L
Definition: input.h:73
@ KEY_PAGE_UP
Definition: input.h:47
@ KEY_ENTER
Definition: input.h:45
@ KEY_RIGHT
Definition: input.h:46
@ KEY_LEFT
Definition: input.h:46
@ KEY_TAB
Definition: input.h:45
@ KEY_ESC
Definition: input.h:45
@ KEY_MAX
Definition: input.h:48
@ KEY_PAGE_DOWN
Definition: input.h:47
@ KEY_UP
Definition: input.h:46
@ KEY_DOWN
Definition: input.h:46
bool update()
bool remove_source(Source *p)
BindingGroup * m_binding_group
Definition: input.h:75
void has_override(std::size_t n, i32 *keys) const
bool key_callback(int key, Action action, Modifier mods) const
Selector
Indicates that a callback should only handle a sub-set of events.
Definition: input.h:35
@ PRESS
Definition: input.h:36
@ ALT
Definition: input.h:36
@ CTRL
Definition: input.h:36
Action
Definition: input.h:38
@ KEY_RELEASE
Definition: input.h:39
@ KEY_PRESS
Definition: input.h:39
void init(lua_State *L_)
Definition: input.h:60
int callback_ref
Definition: input.h:74
BindingGroup * binding_group() const
Definition: input.h:63