mirror of
https://github.com/zhenyan121/Cubed.git
synced 2026-08-08 17:57:02 +08:00
ui: add main menu scene and interactive button widget
- Implement MainMenuScene with a "Start Game" button that pushes the WorldScene. - Extend Button class with background/foreground, hover detection, and size queries. - Add virtual width/height and event handlers to Widget base class. - Update WorldUIManager to propagate mouse move events. - Adjust Window mouse mode based on game running state.
This commit is contained in:
@@ -22,7 +22,12 @@ void WorldUIManager::init() {
|
||||
.set_scale(3.0f);
|
||||
m_widgets.try_emplace("crosshair", std::move(crosshair));
|
||||
}
|
||||
void WorldUIManager::update(float) {}
|
||||
void WorldUIManager::update(float dt) {
|
||||
|
||||
for (auto& w : m_widgets) {
|
||||
w.second->update(dt);
|
||||
}
|
||||
}
|
||||
void WorldUIManager::render(Renderer& renderer) {
|
||||
renderer.begin_render_ui();
|
||||
|
||||
@@ -36,7 +41,12 @@ void WorldUIManager::render(Renderer& renderer) {
|
||||
}
|
||||
bool WorldUIManager::handle_event(const Event& e) {
|
||||
return std::visit(
|
||||
Overloaded{[](const MouseMoveEvent&) { return false; },
|
||||
Overloaded{[this](const MouseMoveEvent& e) {
|
||||
if (handle_mouse_move_event(e)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
[this](const MouseButtonEvent& e) {
|
||||
if (handle_mouse_button_event(e)) {
|
||||
return true;
|
||||
@@ -65,8 +75,20 @@ bool WorldUIManager::handle_event(const Event& e) {
|
||||
},
|
||||
e);
|
||||
}
|
||||
|
||||
bool WorldUIManager::handle_mouse_button_event(const MouseButtonEvent&) {
|
||||
bool WorldUIManager::handle_mouse_move_event(const MouseMoveEvent& e) {
|
||||
for (auto& w : m_widgets) {
|
||||
if (w.second->handle_mouse_move_event(e)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
bool WorldUIManager::handle_mouse_button_event(const MouseButtonEvent& e) {
|
||||
for (auto& w : m_widgets) {
|
||||
if (w.second->handle_mouse_button_event(e)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
bool WorldUIManager::handle_window_resize_event(const WindowResizeEvent& e) {
|
||||
@@ -78,11 +100,29 @@ bool WorldUIManager::handle_window_resize_event(const WindowResizeEvent& e) {
|
||||
e.height / 2 + crosshair->height() / 2);
|
||||
}
|
||||
}
|
||||
for (auto& w : m_widgets) {
|
||||
if (w.second->handle_window_resize_event(e)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
bool WorldUIManager::handle_mouse_wheel_event(const MouseWheelEvent&) {
|
||||
bool WorldUIManager::handle_mouse_wheel_event(const MouseWheelEvent& e) {
|
||||
for (auto& w : m_widgets) {
|
||||
if (w.second->handle_mouse_wheel_event(e)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
bool WorldUIManager::handle_key_event(const KeyEvent& e) {
|
||||
for (auto& w : m_widgets) {
|
||||
if (w.second->handle_key_event(e)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
bool WorldUIManager::handle_key_event(const KeyEvent&) { return false; }
|
||||
|
||||
} // namespace Cubed
|
||||
Reference in New Issue
Block a user