From 0ecfaefddac7e66df28c6d1b3edc48289372b829 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Sat, 12 Oct 2019 09:20:55 +0700 Subject: [PATCH] bind core debug, engine and input --- headers/enduro2d/core/input.hpp | 8 + sources/enduro2d/core/input.cpp | 36 +++ sources/enduro2d/high/bindings/core_binds.cpp | 226 +++++++++++++++++- 3 files changed, 268 insertions(+), 2 deletions(-) diff --git a/headers/enduro2d/core/input.hpp b/headers/enduro2d/core/input.hpp index 07338b1f..3517b91f 100644 --- a/headers/enduro2d/core/input.hpp +++ b/headers/enduro2d/core/input.hpp @@ -28,6 +28,10 @@ namespace e2d bool is_button_just_pressed(mouse_button btn) const noexcept; bool is_button_just_released(mouse_button btn) const noexcept; + vector pressed_buttons() const; + vector just_pressed_buttons() const; + vector just_released_buttons() const; + void extract_pressed_buttons(vector& dst) const; void extract_just_pressed_buttons(vector& dst) const; void extract_just_released_buttons(vector& dst) const; @@ -53,6 +57,10 @@ namespace e2d bool is_key_just_pressed(keyboard_key key) const noexcept; bool is_key_just_released(keyboard_key key) const noexcept; + vector pressed_keys() const; + vector just_pressed_keys() const; + vector just_released_keys() const; + void extract_pressed_keys(vector& dst) const; void extract_just_pressed_keys(vector& dst) const; void extract_just_released_keys(vector& dst) const; diff --git a/sources/enduro2d/core/input.cpp b/sources/enduro2d/core/input.cpp index b6e2397e..3ce271c6 100644 --- a/sources/enduro2d/core/input.cpp +++ b/sources/enduro2d/core/input.cpp @@ -182,6 +182,24 @@ namespace e2d return state_->just_released.test(index); } + vector mouse::pressed_buttons() const { + vector buttons; + extract_pressed_buttons(buttons); + return buttons; + } + + vector mouse::just_pressed_buttons() const { + vector buttons; + extract_just_pressed_buttons(buttons); + return buttons; + } + + vector mouse::just_released_buttons() const { + vector buttons; + extract_just_released_buttons(buttons); + return buttons; + } + void mouse::extract_pressed_buttons(vector& dst) const { std::lock_guard guard(state_->mutex); for ( std::size_t i = 0; i < state_->pressed.size(); ++i ) { @@ -260,6 +278,24 @@ namespace e2d return state_->just_released.test(index); } + vector keyboard::pressed_keys() const { + vector keys; + extract_pressed_keys(keys); + return keys; + } + + vector keyboard::just_pressed_keys() const { + vector keys; + extract_just_pressed_keys(keys); + return keys; + } + + vector keyboard::just_released_keys() const { + vector keys; + extract_just_released_keys(keys); + return keys; + } + void keyboard::extract_pressed_keys(vector& dst) const { std::lock_guard guard(state_->mutex); for ( std::size_t i = 0; i < state_->pressed.size(); ++i ) { diff --git a/sources/enduro2d/high/bindings/core_binds.cpp b/sources/enduro2d/high/bindings/core_binds.cpp index aef8da33..28a031ee 100644 --- a/sources/enduro2d/high/bindings/core_binds.cpp +++ b/sources/enduro2d/high/bindings/core_binds.cpp @@ -6,10 +6,232 @@ #include "bindings.hpp" +namespace +{ + using namespace e2d; + + void bind_debug(sol::state& l) { + l.new_usertype("debug", + "min_level", sol::property(&debug::min_level, &debug::set_min_level), + "log", [](debug& d, debug::level l, const char* s){ d.log(l, s); }, + "trace", [](debug& d, const char* s){ d.trace(s); }, + "warning", [](debug& d, const char* s){ d.warning(s); }, + "error", [](debug& d, const char* s){ d.error(s); }, + "fatal", [](debug& d, const char* s){ d.fatal(s); } + ); + + #define DEBUG_LEVEL_PAIR(x) {#x, debug::level::x}, + l.new_enum("debug_level", { + DEBUG_LEVEL_PAIR(trace) + DEBUG_LEVEL_PAIR(warning) + DEBUG_LEVEL_PAIR(error) + DEBUG_LEVEL_PAIR(fatal) + }); + #undef DEBUG_LEVEL_PAIR + } + + void bind_engine(sol::state& l) { + l.new_usertype("engine", + "time", sol::property(&engine::time), + "delta_time", sol::property(&engine::delta_time), + "frame_rate", sol::property(&engine::frame_rate), + "frame_count", sol::property(&engine::frame_count), + "realtime_time", sol::property(&engine::realtime_time) + ); + } + + void bind_input(sol::state& l) { + l.new_usertype("input", + "mouse", sol::property(&input::mouse), + "keyboard", sol::property(&input::keyboard) + ); + + l.new_usertype("mouse", + "cursor_pos", sol::property(&mouse::cursor_pos), + "scroll_delta", sol::property(&mouse::scroll_delta), + + "is_any_button_pressed", sol::property(&mouse::is_any_button_pressed), + "is_any_button_just_pressed", sol::property(&mouse::is_any_button_just_pressed), + "is_any_button_just_released", sol::property(&mouse::is_any_button_just_released), + + "is_button_pressed", &mouse::is_button_pressed, + "is_button_just_pressed", &mouse::is_button_just_pressed, + "is_button_just_released", &mouse::is_button_just_released, + + "pressed_buttons", sol::property(&mouse::pressed_buttons), + "just_pressed_buttons", sol::property(&mouse::pressed_buttons), + "just_released_buttons", sol::property(&mouse::just_released_buttons) + ); + + l.new_usertype("keyboard", + "input_text", sol::property([](const keyboard& k){ return make_utf8(k.input_text()); }), + + "is_any_key_pressed", sol::property(&keyboard::is_any_key_pressed), + "is_any_key_just_pressed", sol::property(&keyboard::is_any_key_just_pressed), + "is_any_key_just_released", sol::property(&keyboard::is_any_key_just_released), + + "is_key_pressed", &keyboard::is_key_pressed, + "is_key_just_pressed", &keyboard::is_key_just_pressed, + "is_key_just_released", &keyboard::is_key_just_released, + + "pressed_keys", sol::property(&keyboard::pressed_keys), + "just_pressed_keys", sol::property(&keyboard::pressed_keys), + "just_released_keys", sol::property(&keyboard::just_released_keys) + ); + + #define MOUSE_BUTTON_PAIR(x) {#x, mouse_button::x}, + l.new_enum("mouse_button", { + MOUSE_BUTTON_PAIR(left) + MOUSE_BUTTON_PAIR(right) + MOUSE_BUTTON_PAIR(middle) + MOUSE_BUTTON_PAIR(x1) + MOUSE_BUTTON_PAIR(x2) + }); + #undef MOUSE_BUTTON_PAIR + + #define KEYBOARD_KEY_PAIR(x) {#x, keyboard_key::x}, + l.new_enum("keyboard_key", { + KEYBOARD_KEY_PAIR(_0) + KEYBOARD_KEY_PAIR(_1) + KEYBOARD_KEY_PAIR(_2) + KEYBOARD_KEY_PAIR(_3) + KEYBOARD_KEY_PAIR(_4) + KEYBOARD_KEY_PAIR(_5) + KEYBOARD_KEY_PAIR(_6) + KEYBOARD_KEY_PAIR(_7) + KEYBOARD_KEY_PAIR(_8) + KEYBOARD_KEY_PAIR(_9) + + KEYBOARD_KEY_PAIR(a) + KEYBOARD_KEY_PAIR(b) + KEYBOARD_KEY_PAIR(c) + KEYBOARD_KEY_PAIR(d) + KEYBOARD_KEY_PAIR(e) + KEYBOARD_KEY_PAIR(f) + KEYBOARD_KEY_PAIR(g) + KEYBOARD_KEY_PAIR(h) + KEYBOARD_KEY_PAIR(i) + KEYBOARD_KEY_PAIR(j) + KEYBOARD_KEY_PAIR(k) + KEYBOARD_KEY_PAIR(l) + KEYBOARD_KEY_PAIR(m) + KEYBOARD_KEY_PAIR(n) + KEYBOARD_KEY_PAIR(o) + KEYBOARD_KEY_PAIR(p) + KEYBOARD_KEY_PAIR(q) + KEYBOARD_KEY_PAIR(r) + KEYBOARD_KEY_PAIR(s) + KEYBOARD_KEY_PAIR(t) + KEYBOARD_KEY_PAIR(u) + KEYBOARD_KEY_PAIR(v) + KEYBOARD_KEY_PAIR(w) + KEYBOARD_KEY_PAIR(x) + KEYBOARD_KEY_PAIR(y) + KEYBOARD_KEY_PAIR(z) + + KEYBOARD_KEY_PAIR(f1) + KEYBOARD_KEY_PAIR(f2) + KEYBOARD_KEY_PAIR(f3) + KEYBOARD_KEY_PAIR(f4) + KEYBOARD_KEY_PAIR(f5) + KEYBOARD_KEY_PAIR(f6) + KEYBOARD_KEY_PAIR(f7) + KEYBOARD_KEY_PAIR(f8) + KEYBOARD_KEY_PAIR(f9) + KEYBOARD_KEY_PAIR(f10) + KEYBOARD_KEY_PAIR(f11) + KEYBOARD_KEY_PAIR(f12) + KEYBOARD_KEY_PAIR(f13) + KEYBOARD_KEY_PAIR(f14) + KEYBOARD_KEY_PAIR(f15) + KEYBOARD_KEY_PAIR(f16) + KEYBOARD_KEY_PAIR(f17) + KEYBOARD_KEY_PAIR(f18) + KEYBOARD_KEY_PAIR(f19) + KEYBOARD_KEY_PAIR(f20) + KEYBOARD_KEY_PAIR(f21) + KEYBOARD_KEY_PAIR(f22) + KEYBOARD_KEY_PAIR(f23) + KEYBOARD_KEY_PAIR(f24) + KEYBOARD_KEY_PAIR(f25) + + KEYBOARD_KEY_PAIR(minus) + KEYBOARD_KEY_PAIR(equal) + KEYBOARD_KEY_PAIR(backspace) + KEYBOARD_KEY_PAIR(section_sign) + KEYBOARD_KEY_PAIR(grave_accent) + + KEYBOARD_KEY_PAIR(lbracket) + KEYBOARD_KEY_PAIR(rbracket) + KEYBOARD_KEY_PAIR(semicolon) + KEYBOARD_KEY_PAIR(apostrophe) + KEYBOARD_KEY_PAIR(backslash) + + KEYBOARD_KEY_PAIR(comma) + KEYBOARD_KEY_PAIR(period) + KEYBOARD_KEY_PAIR(slash) + + KEYBOARD_KEY_PAIR(escape) + KEYBOARD_KEY_PAIR(tab) + KEYBOARD_KEY_PAIR(caps_lock) + KEYBOARD_KEY_PAIR(space) + KEYBOARD_KEY_PAIR(enter) + + KEYBOARD_KEY_PAIR(lshift) + KEYBOARD_KEY_PAIR(rshift) + KEYBOARD_KEY_PAIR(lcontrol) + KEYBOARD_KEY_PAIR(rcontrol) + KEYBOARD_KEY_PAIR(lalt) + KEYBOARD_KEY_PAIR(ralt) + KEYBOARD_KEY_PAIR(lsuper) + KEYBOARD_KEY_PAIR(rsuper) + KEYBOARD_KEY_PAIR(menu) + + KEYBOARD_KEY_PAIR(print_screen) + KEYBOARD_KEY_PAIR(scroll_lock) + KEYBOARD_KEY_PAIR(pause) + + KEYBOARD_KEY_PAIR(insert) + KEYBOARD_KEY_PAIR(del) + KEYBOARD_KEY_PAIR(home) + KEYBOARD_KEY_PAIR(end) + KEYBOARD_KEY_PAIR(page_up) + KEYBOARD_KEY_PAIR(page_down) + + KEYBOARD_KEY_PAIR(left) + KEYBOARD_KEY_PAIR(up) + KEYBOARD_KEY_PAIR(right) + KEYBOARD_KEY_PAIR(down) + + KEYBOARD_KEY_PAIR(kp_0) + KEYBOARD_KEY_PAIR(kp_1) + KEYBOARD_KEY_PAIR(kp_2) + KEYBOARD_KEY_PAIR(kp_3) + KEYBOARD_KEY_PAIR(kp_4) + KEYBOARD_KEY_PAIR(kp_5) + KEYBOARD_KEY_PAIR(kp_6) + KEYBOARD_KEY_PAIR(kp_7) + KEYBOARD_KEY_PAIR(kp_8) + KEYBOARD_KEY_PAIR(kp_9) + + KEYBOARD_KEY_PAIR(kp_num_lock) + KEYBOARD_KEY_PAIR(kp_divide) + KEYBOARD_KEY_PAIR(kp_multiply) + KEYBOARD_KEY_PAIR(kp_subtract) + KEYBOARD_KEY_PAIR(kp_add) + KEYBOARD_KEY_PAIR(kp_enter) + KEYBOARD_KEY_PAIR(kp_equal) + KEYBOARD_KEY_PAIR(kp_decimal) + }); + #undef KEYBOARD_KEY_PAIR + } +} + namespace e2d::bindings { void bind_core(sol::state& l) { - //TODO(BlackMat): implme - E2D_UNUSED(l); + bind_debug(l); + bind_engine(l); + bind_input(l); } }