mirror of
https://github.com/zhenyan121/Cubed.git
synced 2026-08-09 02:07:04 +08:00
feat(world_scene): add inventory UI and pause type enum
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
#include "Cubed/gameplay/network_server.hpp"
|
||||
#include "Cubed/scene/scene.hpp"
|
||||
#include "Cubed/ui/error_ui.hpp"
|
||||
#include "Cubed/ui/inventory_ui.hpp"
|
||||
#include "Cubed/ui/pasue_menu_ui_manager.hpp"
|
||||
#include "Cubed/ui/world_ui_manager.hpp"
|
||||
namespace Cubed {
|
||||
@@ -42,6 +43,7 @@ public:
|
||||
bool is_recording() const;
|
||||
|
||||
private:
|
||||
enum class PauseUI { PAUSE_MENU, INVENTORY };
|
||||
SceneManager& m_scene_manager;
|
||||
DevPanel m_dev_panel;
|
||||
Camera m_camera;
|
||||
@@ -53,6 +55,8 @@ private:
|
||||
bool m_show_dev_pannel = true;
|
||||
bool m_chatting = false;
|
||||
PauseMenuUIManager m_pasue_menu;
|
||||
InventoryUI m_inventory_ui;
|
||||
PauseUI m_paused_ui = PauseUI::PAUSE_MENU;
|
||||
WorldUIManager m_hud_ui;
|
||||
ErrorUI m_error_ui;
|
||||
const Argument& m_argument;
|
||||
|
||||
16
include/Cubed/ui/inventory_ui.hpp
Normal file
16
include/Cubed/ui/inventory_ui.hpp
Normal file
@@ -0,0 +1,16 @@
|
||||
#pragma once
|
||||
|
||||
#include "Cubed/ui/ui_manager.hpp"
|
||||
namespace Cubed {
|
||||
class WorldScene;
|
||||
class InventoryUI : public UIManager {
|
||||
public:
|
||||
InventoryUI(WorldScene& m_scene);
|
||||
|
||||
void init() override;
|
||||
void on_re_enter();
|
||||
|
||||
private:
|
||||
WorldScene& m_scene;
|
||||
};
|
||||
} // namespace Cubed
|
||||
@@ -91,4 +91,5 @@ target_sources(${PROJECT_NAME}
|
||||
tools/sensitive_filter.cpp
|
||||
ui/row_layout.cpp
|
||||
ui/item_slot.cpp
|
||||
ui/inventory_ui.cpp
|
||||
)
|
||||
@@ -8,8 +8,8 @@ WorldScene::WorldScene(SceneManager& scene_manager)
|
||||
: m_scene_manager(scene_manager), m_dev_panel(*this),
|
||||
m_client_world(scene_manager.app().audio(), scene_manager.app().config(),
|
||||
*this),
|
||||
m_pasue_menu(*this), m_hud_ui(*this), m_error_ui(*this),
|
||||
m_argument(scene_manager.app().argument()) {}
|
||||
m_pasue_menu(*this), m_inventory_ui(*this), m_hud_ui(*this),
|
||||
m_error_ui(*this), m_argument(scene_manager.app().argument()) {}
|
||||
|
||||
WorldScene::~WorldScene() {
|
||||
if (m_client) {
|
||||
@@ -46,7 +46,14 @@ void WorldScene::update(float dt) {
|
||||
}
|
||||
}*/
|
||||
if (m_paused) {
|
||||
m_pasue_menu.update(dt);
|
||||
switch (m_paused_ui) {
|
||||
case PauseUI::INVENTORY:
|
||||
m_inventory_ui.update(dt);
|
||||
break;
|
||||
case PauseUI::PAUSE_MENU:
|
||||
m_pasue_menu.update(dt);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
m_hud_ui.update(dt);
|
||||
}
|
||||
@@ -62,7 +69,14 @@ void WorldScene::render(Renderer& renderer) {
|
||||
m_hud_ui.render(renderer);
|
||||
}
|
||||
if (m_paused) {
|
||||
m_pasue_menu.render(renderer);
|
||||
switch (m_paused_ui) {
|
||||
case PauseUI::INVENTORY:
|
||||
m_inventory_ui.render(renderer);
|
||||
break;
|
||||
case PauseUI::PAUSE_MENU:
|
||||
m_pasue_menu.render(renderer);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (m_show_dev_pannel && m_show_hud) {
|
||||
renderer.render_dev_panel(m_dev_panel);
|
||||
@@ -139,6 +153,7 @@ void WorldScene::on_enter() {
|
||||
m_dev_panel.init();
|
||||
m_pasue_menu.init();
|
||||
m_hud_ui.init();
|
||||
m_inventory_ui.init();
|
||||
m_scene_manager.app().audio().set_client(m_client);
|
||||
m_scene_manager.app().window().set_game_running(true);
|
||||
} catch (const std::exception& e) {
|
||||
@@ -191,8 +206,11 @@ bool WorldScene::handle_mouse_move_event(const MouseMoveEvent& e) {
|
||||
return true;
|
||||
}
|
||||
if (m_paused) {
|
||||
if (m_pasue_menu.handle_event(e)) {
|
||||
return true;
|
||||
switch (m_paused_ui) {
|
||||
case PauseUI::INVENTORY:
|
||||
return m_inventory_ui.handle_event(e);
|
||||
case PauseUI::PAUSE_MENU:
|
||||
return m_pasue_menu.handle_event(e);
|
||||
}
|
||||
} else {
|
||||
if (m_hud_ui.handle_event(e)) {
|
||||
@@ -217,8 +235,11 @@ bool WorldScene::handle_mouse_button_event(const MouseButtonEvent& e) {
|
||||
return true;
|
||||
}
|
||||
if (m_paused) {
|
||||
if (m_pasue_menu.handle_event(e)) {
|
||||
return true;
|
||||
switch (m_paused_ui) {
|
||||
case PauseUI::INVENTORY:
|
||||
return m_inventory_ui.handle_event(e);
|
||||
case PauseUI::PAUSE_MENU:
|
||||
return m_pasue_menu.handle_event(e);
|
||||
}
|
||||
} else {
|
||||
if (m_hud_ui.handle_event(e)) {
|
||||
@@ -257,8 +278,11 @@ bool WorldScene::handle_mouse_wheel_event(const MouseWheelEvent& e) {
|
||||
return true;
|
||||
}
|
||||
if (m_paused) {
|
||||
if (m_pasue_menu.handle_event(e)) {
|
||||
return true;
|
||||
switch (m_paused_ui) {
|
||||
case PauseUI::INVENTORY:
|
||||
return m_inventory_ui.handle_event(e);
|
||||
case PauseUI::PAUSE_MENU:
|
||||
return m_pasue_menu.handle_event(e);
|
||||
}
|
||||
} else {
|
||||
if (m_hud_ui.handle_event(e)) {
|
||||
@@ -286,6 +310,14 @@ bool WorldScene::handle_key_event(const KeyEvent& e) {
|
||||
}
|
||||
bool pasued = pause();
|
||||
pasued = !pasued;
|
||||
m_paused_ui = PauseUI::PAUSE_MENU;
|
||||
set_pause(pasued);
|
||||
return true;
|
||||
}
|
||||
if (e.key == Key::E && e.action == KeyAction::PRESS) {
|
||||
bool pasued = pause();
|
||||
pasued = !pasued;
|
||||
m_paused_ui = PauseUI::INVENTORY;
|
||||
set_pause(pasued);
|
||||
return true;
|
||||
}
|
||||
@@ -327,8 +359,11 @@ bool WorldScene::handle_key_event(const KeyEvent& e) {
|
||||
}
|
||||
|
||||
if (m_paused) {
|
||||
if (m_pasue_menu.handle_event(e)) {
|
||||
return true;
|
||||
switch (m_paused_ui) {
|
||||
case PauseUI::INVENTORY:
|
||||
return m_inventory_ui.handle_event(e);
|
||||
case PauseUI::PAUSE_MENU:
|
||||
return m_pasue_menu.handle_event(e);
|
||||
}
|
||||
} else {
|
||||
if (m_hud_ui.handle_event(e)) {
|
||||
@@ -353,7 +388,12 @@ bool WorldScene::handle_text_input_event(const TextInputEvent& e) {
|
||||
return m_error_ui.handle_event(e);
|
||||
}
|
||||
if (m_paused) {
|
||||
return m_pasue_menu.handle_text_input_event(e);
|
||||
switch (m_paused_ui) {
|
||||
case PauseUI::INVENTORY:
|
||||
return m_inventory_ui.handle_event(e);
|
||||
case PauseUI::PAUSE_MENU:
|
||||
return m_pasue_menu.handle_event(e);
|
||||
}
|
||||
}
|
||||
|
||||
return m_hud_ui.handle_text_input_event(e);
|
||||
|
||||
45
src/ui/inventory_ui.cpp
Normal file
45
src/ui/inventory_ui.cpp
Normal file
@@ -0,0 +1,45 @@
|
||||
#include "Cubed/ui/inventory_ui.hpp"
|
||||
|
||||
#include "Cubed/app.hpp"
|
||||
#include "Cubed/scene/scene_manager.hpp"
|
||||
#include "Cubed/scene/world_scene.hpp"
|
||||
#include "Cubed/ui/column_layout.hpp"
|
||||
#include "Cubed/ui/image.hpp"
|
||||
|
||||
namespace Cubed {
|
||||
InventoryUI::InventoryUI(WorldScene& scene) : m_scene(scene) {}
|
||||
|
||||
void InventoryUI::init() {
|
||||
auto back = std::make_unique<Rect>(nullptr);
|
||||
auto& renderer = m_scene.scene_manager().app().renderer();
|
||||
auto& texture_manager = m_scene.scene_manager().app().texture_manager();
|
||||
|
||||
back->set_window_size(renderer.window_width(), renderer.window_height());
|
||||
back->set_anchor(Anchor::TOP_LEFT);
|
||||
back->set_color(Color::BLACK).set_alpha(0.7f);
|
||||
back->set_fill_parent(true);
|
||||
|
||||
auto& column = back->add_child<ColumnLayout>();
|
||||
column.set_anchor(Anchor::CENTER);
|
||||
column.set_child_anchor(ColumnLayoutAnchor::LEFT);
|
||||
auto& block_textures = texture_manager.get_item_textures();
|
||||
auto sum = block_textures.size();
|
||||
{
|
||||
auto& row_layout = column.add_child<RowLayout>();
|
||||
auto row = &row_layout;
|
||||
for (size_t i = 0; i < sum; ++i) {
|
||||
if (i % 10 == 0) {
|
||||
auto& r = column.add_child<RowLayout>();
|
||||
row = &r;
|
||||
}
|
||||
auto& slot = row->add_child<ItemSlot>();
|
||||
slot.set_default_background(texture_manager);
|
||||
slot.set_scale(5.0f);
|
||||
slot.set_item(i, block_textures[i].get());
|
||||
}
|
||||
}
|
||||
|
||||
m_root_widget = std::move(back);
|
||||
}
|
||||
void InventoryUI::on_re_enter() {}
|
||||
} // namespace Cubed
|
||||
@@ -14,7 +14,7 @@ void PauseMenuUIManager::init() {
|
||||
|
||||
rect->set_fill_parent(true);
|
||||
rect->set_color(Color::BLACK);
|
||||
rect->set_alpha(0.5f);
|
||||
rect->set_alpha(0.7f);
|
||||
rect->set_anchor(Anchor::TOP_LEFT);
|
||||
auto& renderer = m_scene.scene_manager().app().renderer();
|
||||
rect->set_window_size(renderer.window_width(), renderer.window_height());
|
||||
|
||||
Reference in New Issue
Block a user