summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--editor/app.hpp22
-rw-r--r--editor/draw.cpp50
-rw-r--r--editor/events.cpp42
-rw-r--r--main/events.cpp4
-rw-r--r--main/floormat-app.hpp12
-rw-r--r--main/floormat-events.cpp60
-rw-r--r--main/floormat-main-impl.hpp2
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;