Zepha/src/lua/usertype/KeyObserver.h

43 lines
843 B
C++

#pragma once
#include "lua/Lua.h"
#include "util/Types.h"
#include "util/EventEmitter.h"
class Input;
class LocalLuaParser;
namespace Api::Usertype {
class KeyObserver {
public:
KeyObserver(Input& input, LocalLuaParser& parser): input(input), parser(parser), id(ID_NEXT++) {}
~KeyObserver();
void start();
void stop();
const string& getBuffer();
void setBuffer(const string& buffer);
static void bind(sol::state& lua, sol::table& core, Input& input, LocalLuaParser& parser);
private:
usize id = 0;
bool active = false;
string buffer {};
sol::protected_function on_press = sol::nil;
sol::protected_function on_release = sol::nil;
sol::protected_function on_change = sol::nil;
Input& input;
LocalLuaParser& parser;
vec<ListenerRef> listeners {};
static usize ID_NEXT;
};
}