diff options
| -rw-r--r-- | editor/app.hpp | 22 | ||||
| -rw-r--r-- | editor/draw.cpp | 50 | ||||
| -rw-r--r-- | editor/events.cpp | 42 | ||||
| -rw-r--r-- | main/events.cpp | 4 | ||||
| -rw-r--r-- | main/floormat-app.hpp | 12 | ||||
| -rw-r--r-- | main/floormat-events.cpp | 60 | ||||
| -rw-r--r-- | main/floormat-main-impl.hpp | 2 |
7 files changed, 126 insertions, 66 deletions
diff --git a/editor/app.hpp b/editor/app.hpp index b5a22f28..f3c95d6f 100644 --- a/editor/app.hpp +++ b/editor/app.hpp @@ -39,13 +39,12 @@ struct app final : floormat_app void draw_msaa() override; void draw() override; - bool on_mouse_move(const mouse_move_event& event) noexcept override; - bool on_mouse_up_down(const mouse_button_event& event, bool is_down) noexcept override; - bool on_mouse_scroll(const mouse_scroll_event& event) noexcept override; - bool on_key_up_down(const key_event& event, bool is_down) noexcept override; - - bool on_text_input_event(const text_input_event& event) noexcept override; - bool on_text_editing_event(const text_editing_event& event) noexcept override; + void on_mouse_move(const mouse_move_event& event) noexcept override; + void on_mouse_up_down(const mouse_button_event& event, bool is_down) noexcept override; + void on_mouse_scroll(const mouse_scroll_event& event) noexcept override; + void on_key_up_down(const key_event& event, bool is_down) noexcept override; + void on_text_input_event(const text_input_event& event) noexcept override; + //bool on_text_editing_event(const text_editing_event& event) noexcept override; void on_viewport_event(const Magnum::Math::Vector2<int>& size) noexcept override; void on_any_event(const any_event& event) noexcept override; void on_focus_in() noexcept override; @@ -74,14 +73,15 @@ private: void recalc_cursor_tile(); void init_imgui(Vector2i size); - void draw_cursor_tile(); - void draw_wireframe_quad(global_coords pt); - void draw_wireframe_box(global_coords pt); void draw_ui(); float draw_main_menu(); void draw_editor_pane(tile_editor& type, float main_menu_height); void draw_fps(); - void draw_cursor_coord(); + void draw_cursor_tile(); + void render_menu(); + + void draw_wireframe_quad(global_coords pt); + void draw_wireframe_box(global_coords pt); Containers::Pointer<floormat_main> M; [[maybe_unused]] void* _dummy; diff --git a/editor/draw.cpp b/editor/draw.cpp new file mode 100644 index 00000000..33188573 --- /dev/null +++ b/editor/draw.cpp @@ -0,0 +1,50 @@ +#include "app.hpp" +#include "main/floormat-main.hpp" +#include "shaders/tile-shader.hpp" + +namespace floormat { + +void app::draw_wireframe_quad(global_coords pos) +{ + constexpr float LINE_WIDTH = 2; + const auto pt = pos.to_signed(); + auto& shader = M->shader(); + + //if (const auto& [c, tile] = _world[pos]; tile.ground_image) + { + const Vector3 center{pt[0]*TILE_SIZE[0], pt[1]*TILE_SIZE[1], 0}; + shader.set_tint({1, 0, 0, 1}); + _wireframe_quad.draw(shader, {center, {TILE_SIZE[0], TILE_SIZE[1]}, LINE_WIDTH}); + } +} + +void app::draw_wireframe_box(global_coords pos) +{ + constexpr float LINE_WIDTH = 1.5; + auto& shader = M->shader(); + + constexpr auto X = TILE_SIZE[0], Y = TILE_SIZE[1], Z = TILE_SIZE[2]; + constexpr Vector3 size{X, Y, Z}; + const auto pt = pos.to_signed(); + const Vector3 center{pt[0]*TILE_SIZE[0], pt[1]*TILE_SIZE[1], 0}; + shader.set_tint({0, 1, 0, 1}); + _wireframe_box.draw(shader, {center, size, LINE_WIDTH}); +} + +void app::draw_cursor_tile() +{ + if (cursor.tile && !cursor.in_imgui) + draw_wireframe_quad(*cursor.tile); +} + +void app::draw_msaa() +{ + draw_cursor_tile(); +} + +void app::draw() +{ + render_menu(); +} + +} // namespace floormat diff --git a/editor/events.cpp b/editor/events.cpp index 7bffda19..67a3c63c 100644 --- a/editor/events.cpp +++ b/editor/events.cpp @@ -8,10 +8,14 @@ namespace floormat { +void app::on_focus_in() noexcept {} +void app::on_mouse_enter() noexcept {} +void app::on_any_event(const floormat::any_event& event) noexcept {} + #define accessor(type, name) \ type m_##name = {}; auto name() const noexcept { return m_##name; } -bool app::on_mouse_move(const mouse_move_event& event) noexcept +void app::on_mouse_move(const mouse_move_event& event) noexcept { struct { accessor(Vector2i, position) @@ -27,11 +31,9 @@ bool app::on_mouse_move(const mouse_move_event& event) noexcept if (cursor.tile) _editor.on_mouse_move(M->world(), *cursor.tile); - - return true; } -bool app::on_mouse_up_down(const mouse_button_event& event, bool is_down) noexcept +void app::on_mouse_up_down(const mouse_button_event& event, bool is_down) noexcept { enum class Button : std::underlying_type_t<mouse_button> { Left = mouse_button_left, @@ -58,21 +60,18 @@ bool app::on_mouse_up_down(const mouse_button_event& event, bool is_down) noexce _editor.on_release(); } } - - return true; } -bool app::on_mouse_scroll(const mouse_scroll_event& event) noexcept +void app::on_mouse_scroll(const mouse_scroll_event& event) noexcept { struct { accessor(Vector2, offset) accessor(Vector2i, position) } e = {event.offset, event.position}; _imgui.handleMouseScrollEvent(e); - return true; } -bool app::on_key_up_down(const floormat::key_event& event, bool is_down) noexcept +void app::on_key_up_down(const floormat::key_event& event, bool is_down) noexcept { using KeyEvent = Platform::Sdl2Application::KeyEvent; struct Ev final { @@ -82,6 +81,7 @@ bool app::on_key_up_down(const floormat::key_event& event, bool is_down) noexcep accessor(Key, key) accessor(Modifiers, modifiers) } e = {Ev::Key(event.key), Ev::Modifier(event.mods)}; + if (!(is_down ? _imgui.handleKeyPressEvent(e) : _imgui.handleKeyReleaseEvent(e))) { // todo put it into a separate function @@ -100,17 +100,35 @@ bool app::on_key_up_down(const floormat::key_event& event, bool is_down) noexcep if (x != key::COUNT) _keys[x] = is_down && !event.is_repeated; } - return true; + else + _keys = {}; } -bool app::on_text_input_event(const floormat::text_input_event& event) noexcept +void app::on_text_input_event(const floormat::text_input_event& event) noexcept { struct { accessor(Containers::StringView, text) } e = {event.text}; if (_imgui.handleTextInputEvent(e)) _keys = {}; - return true; +} + +void app::on_viewport_event(const Math::Vector2<int>& size) noexcept +{ + init_imgui(size); +} + +void app::on_focus_out() noexcept +{ + cursor.pixel = std::nullopt; + recalc_cursor_tile(); + _keys = {}; +} + +void app::on_mouse_leave() noexcept +{ + cursor.pixel = std::nullopt; + recalc_cursor_tile(); } } // namespace floormat diff --git a/main/events.cpp b/main/events.cpp index 242e890e..8ab3d997 100644 --- a/main/events.cpp +++ b/main/events.cpp @@ -30,7 +30,6 @@ void main_impl::mouseReleaseEvent(Platform::Sdl2Application::MouseEvent& event) return event.setAccepted(); do_mouse_release((int)event.button()); } -#endif void main_impl::mouseMoveEvent(Platform::Sdl2Application::MouseMoveEvent& event) { @@ -44,7 +43,6 @@ void main_impl::mouseMoveEvent(Platform::Sdl2Application::MouseMoveEvent& event) do_mouse_move(*_cursor_tile); } -#if 0 void main_impl::mouseScrollEvent(Platform::Sdl2Application::MouseScrollEvent& event) { if (_imgui.handleMouseScrollEvent(event)) @@ -97,7 +95,6 @@ void main_impl::anyEvent(SDL_Event& event) std::fputs("", stdout); break; // put breakpoint here } } -#endif void main_impl::event_focus_out() // TODO move to app { @@ -110,5 +107,6 @@ void main_impl::event_mouse_leave() // TODO move to app _cursor_pixel = std::nullopt; recalc_cursor_tile(); } +#endif } // namespace floormat diff --git a/main/floormat-app.hpp b/main/floormat-app.hpp index f4f7cc25..e4bf2cae 100644 --- a/main/floormat-app.hpp +++ b/main/floormat-app.hpp @@ -25,12 +25,12 @@ struct floormat_app virtual void draw_msaa(); virtual void draw() = 0; - virtual bool on_mouse_move(const mouse_move_event& event) noexcept = 0; - virtual bool on_mouse_up_down(const mouse_button_event& event, bool is_down) noexcept = 0; - virtual bool on_mouse_scroll(const mouse_scroll_event& event) noexcept = 0; - virtual bool on_key_up_down(const key_event& event, bool is_down) noexcept = 0; - virtual bool on_text_input_event(const text_input_event& event) noexcept = 0; - virtual bool on_text_editing_event(const text_editing_event& event) noexcept = 0; + virtual void on_mouse_move(const mouse_move_event& event) noexcept = 0; + virtual void on_mouse_up_down(const mouse_button_event& event, bool is_down) noexcept = 0; + virtual void on_mouse_scroll(const mouse_scroll_event& event) noexcept = 0; + virtual void on_key_up_down(const key_event& event, bool is_down) noexcept = 0; + virtual void on_text_input_event(const text_input_event& event) noexcept = 0; + //virtual bool on_text_editing_event(const text_editing_event& event) noexcept = 0; virtual void on_viewport_event(const Magnum::Math::Vector2<int>& size) noexcept = 0; virtual void on_any_event(const any_event& event) noexcept = 0; virtual void on_focus_in() noexcept = 0; diff --git a/main/floormat-events.cpp b/main/floormat-events.cpp index 9091e663..62409d35 100644 --- a/main/floormat-events.cpp +++ b/main/floormat-events.cpp @@ -17,67 +17,61 @@ void main_impl::viewportEvent(Platform::Sdl2Application::ViewportEvent& event) void main_impl::mousePressEvent(Platform::Sdl2Application::MouseEvent& event) { - if (app.on_mouse_up_down({event.position(), - (SDL_Keymod)(std::uint16_t)event.modifiers(), - mouse_button(event.button()), - std::uint8_t(std::min(255, event.clickCount()))}, - true)) - return event.setAccepted(); + app.on_mouse_up_down({event.position(), + (SDL_Keymod)(std::uint16_t)event.modifiers(), + mouse_button(event.button()), + std::uint8_t(std::min(255, event.clickCount()))}, + true); } void main_impl::mouseReleaseEvent(Platform::Sdl2Application::MouseEvent& event) { - if (app.on_mouse_up_down({event.position(), - (SDL_Keymod)(std::uint16_t)event.modifiers(), - mouse_button(event.button()), - std::uint8_t(std::min(255, event.clickCount()))}, - false)) - return event.setAccepted(); + app.on_mouse_up_down({event.position(), + (SDL_Keymod)(std::uint16_t)event.modifiers(), + mouse_button(event.button()), + std::uint8_t(std::min(255, event.clickCount()))}, + false); } void main_impl::mouseMoveEvent(Platform::Sdl2Application::MouseMoveEvent& event) { - if (app.on_mouse_move({event.position(), event.relativePosition(), - (mouse_button)(std::uint8_t)(std::uint32_t)event.buttons(), - (SDL_Keymod)(std::uint16_t)event.modifiers()})) - return event.setAccepted(); + app.on_mouse_move({event.position(), event.relativePosition(), + (mouse_button)(std::uint8_t)(std::uint32_t)event.buttons(), + (SDL_Keymod)(std::uint16_t)event.modifiers()}); } void main_impl::mouseScrollEvent(Platform::Sdl2Application::MouseScrollEvent& event) { - if (app.on_mouse_scroll(mouse_scroll_event{event.offset(), event.position(), - (SDL_Keymod)(std::uint16_t)event.modifiers()})) - return event.setAccepted(); + app.on_mouse_scroll({event.offset(), event.position(), + (SDL_Keymod)(std::uint16_t)event.modifiers()}); } void main_impl::textInputEvent(Platform::Sdl2Application::TextInputEvent& event) { - if (app.on_text_input_event({event.text()})) - return event.setAccepted(); + app.on_text_input_event({event.text()}); } +#if 0 void main_impl::textEditingEvent(Platform::Sdl2Application::TextEditingEvent& event) { - if (app.on_text_editing_event({event.text(), event.start(), event.length()})) - return event.setAccepted(); + app.on_text_editing_event({event.text(), event.start(), event.length()}) } +#endif void main_impl::keyPressEvent(Platform::Sdl2Application::KeyEvent& event) { - if (app.on_key_up_down({(SDL_Keycode)(std::uint32_t)event.key(), - (SDL_Keymod)(std::uint16_t)event.modifiers(), - event.isRepeated()}, - true)) - return event.setAccepted(); + app.on_key_up_down({(SDL_Keycode)(std::uint32_t)event.key(), + (SDL_Keymod)(std::uint16_t)event.modifiers(), + event.isRepeated()}, + true) } void main_impl::keyReleaseEvent(Platform::Sdl2Application::KeyEvent& event) { - if (app.on_key_up_down({(SDL_Keycode)(std::uint32_t)event.key(), - (SDL_Keymod)(std::uint16_t)event.modifiers(), - event.isRepeated()}, - false)) - return event.setAccepted(); + app.on_key_up_down({(SDL_Keycode)(std::uint32_t)event.key(), + (SDL_Keymod)(std::uint16_t)event.modifiers(), + event.isRepeated()}, + false) } void main_impl::anyEvent(SDL_Event& event) diff --git a/main/floormat-main-impl.hpp b/main/floormat-main-impl.hpp index 4ab6ef27..a952cdda 100644 --- a/main/floormat-main-impl.hpp +++ b/main/floormat-main-impl.hpp @@ -38,7 +38,7 @@ struct main_impl final : Platform::Sdl2Application, floormat_main [[maybe_unused]] void mouseMoveEvent(MouseMoveEvent& event) override; [[maybe_unused]] void mouseScrollEvent(MouseScrollEvent& event) override; [[maybe_unused]] void textInputEvent(TextInputEvent& event) override; - [[maybe_unused]] void textEditingEvent(TextEditingEvent& event) override; + //[[maybe_unused]] void textEditingEvent(TextEditingEvent& event) override; [[maybe_unused]] void keyPressEvent(KeyEvent& event) override; [[maybe_unused]] void keyReleaseEvent(KeyEvent& event) override; [[maybe_unused]] void anyEvent(SDL_Event& event) override; |
