mirror of
https://github.com/zhenyan121/Cubed.git
synced 2026-08-08 17:57:02 +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/gameplay/network_server.hpp"
|
||||||
#include "Cubed/scene/scene.hpp"
|
#include "Cubed/scene/scene.hpp"
|
||||||
#include "Cubed/ui/error_ui.hpp"
|
#include "Cubed/ui/error_ui.hpp"
|
||||||
|
#include "Cubed/ui/inventory_ui.hpp"
|
||||||
#include "Cubed/ui/pasue_menu_ui_manager.hpp"
|
#include "Cubed/ui/pasue_menu_ui_manager.hpp"
|
||||||
#include "Cubed/ui/world_ui_manager.hpp"
|
#include "Cubed/ui/world_ui_manager.hpp"
|
||||||
namespace Cubed {
|
namespace Cubed {
|
||||||
@@ -42,6 +43,7 @@ public:
|
|||||||
bool is_recording() const;
|
bool is_recording() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
enum class PauseUI { PAUSE_MENU, INVENTORY };
|
||||||
SceneManager& m_scene_manager;
|
SceneManager& m_scene_manager;
|
||||||
DevPanel m_dev_panel;
|
DevPanel m_dev_panel;
|
||||||
Camera m_camera;
|
Camera m_camera;
|
||||||
@@ -53,6 +55,8 @@ private:
|
|||||||
bool m_show_dev_pannel = true;
|
bool m_show_dev_pannel = true;
|
||||||
bool m_chatting = false;
|
bool m_chatting = false;
|
||||||
PauseMenuUIManager m_pasue_menu;
|
PauseMenuUIManager m_pasue_menu;
|
||||||
|
InventoryUI m_inventory_ui;
|
||||||
|
PauseUI m_paused_ui = PauseUI::PAUSE_MENU;
|
||||||
WorldUIManager m_hud_ui;
|
WorldUIManager m_hud_ui;
|
||||||
ErrorUI m_error_ui;
|
ErrorUI m_error_ui;
|
||||||
const Argument& m_argument;
|
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
|
tools/sensitive_filter.cpp
|
||||||
ui/row_layout.cpp
|
ui/row_layout.cpp
|
||||||
ui/item_slot.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_scene_manager(scene_manager), m_dev_panel(*this),
|
||||||
m_client_world(scene_manager.app().audio(), scene_manager.app().config(),
|
m_client_world(scene_manager.app().audio(), scene_manager.app().config(),
|
||||||
*this),
|
*this),
|
||||||
m_pasue_menu(*this), m_hud_ui(*this), m_error_ui(*this),
|
m_pasue_menu(*this), m_inventory_ui(*this), m_hud_ui(*this),
|
||||||
m_argument(scene_manager.app().argument()) {}
|
m_error_ui(*this), m_argument(scene_manager.app().argument()) {}
|
||||||
|
|
||||||
WorldScene::~WorldScene() {
|
WorldScene::~WorldScene() {
|
||||||
if (m_client) {
|
if (m_client) {
|
||||||
@@ -46,7 +46,14 @@ void WorldScene::update(float dt) {
|
|||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
if (m_paused) {
|
if (m_paused) {
|
||||||
|
switch (m_paused_ui) {
|
||||||
|
case PauseUI::INVENTORY:
|
||||||
|
m_inventory_ui.update(dt);
|
||||||
|
break;
|
||||||
|
case PauseUI::PAUSE_MENU:
|
||||||
m_pasue_menu.update(dt);
|
m_pasue_menu.update(dt);
|
||||||
|
break;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
m_hud_ui.update(dt);
|
m_hud_ui.update(dt);
|
||||||
}
|
}
|
||||||
@@ -62,7 +69,14 @@ void WorldScene::render(Renderer& renderer) {
|
|||||||
m_hud_ui.render(renderer);
|
m_hud_ui.render(renderer);
|
||||||
}
|
}
|
||||||
if (m_paused) {
|
if (m_paused) {
|
||||||
|
switch (m_paused_ui) {
|
||||||
|
case PauseUI::INVENTORY:
|
||||||
|
m_inventory_ui.render(renderer);
|
||||||
|
break;
|
||||||
|
case PauseUI::PAUSE_MENU:
|
||||||
m_pasue_menu.render(renderer);
|
m_pasue_menu.render(renderer);
|
||||||
|
break;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (m_show_dev_pannel && m_show_hud) {
|
if (m_show_dev_pannel && m_show_hud) {
|
||||||
renderer.render_dev_panel(m_dev_panel);
|
renderer.render_dev_panel(m_dev_panel);
|
||||||
@@ -139,6 +153,7 @@ void WorldScene::on_enter() {
|
|||||||
m_dev_panel.init();
|
m_dev_panel.init();
|
||||||
m_pasue_menu.init();
|
m_pasue_menu.init();
|
||||||
m_hud_ui.init();
|
m_hud_ui.init();
|
||||||
|
m_inventory_ui.init();
|
||||||
m_scene_manager.app().audio().set_client(m_client);
|
m_scene_manager.app().audio().set_client(m_client);
|
||||||
m_scene_manager.app().window().set_game_running(true);
|
m_scene_manager.app().window().set_game_running(true);
|
||||||
} catch (const std::exception& e) {
|
} catch (const std::exception& e) {
|
||||||
@@ -191,8 +206,11 @@ bool WorldScene::handle_mouse_move_event(const MouseMoveEvent& e) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (m_paused) {
|
if (m_paused) {
|
||||||
if (m_pasue_menu.handle_event(e)) {
|
switch (m_paused_ui) {
|
||||||
return true;
|
case PauseUI::INVENTORY:
|
||||||
|
return m_inventory_ui.handle_event(e);
|
||||||
|
case PauseUI::PAUSE_MENU:
|
||||||
|
return m_pasue_menu.handle_event(e);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (m_hud_ui.handle_event(e)) {
|
if (m_hud_ui.handle_event(e)) {
|
||||||
@@ -217,8 +235,11 @@ bool WorldScene::handle_mouse_button_event(const MouseButtonEvent& e) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (m_paused) {
|
if (m_paused) {
|
||||||
if (m_pasue_menu.handle_event(e)) {
|
switch (m_paused_ui) {
|
||||||
return true;
|
case PauseUI::INVENTORY:
|
||||||
|
return m_inventory_ui.handle_event(e);
|
||||||
|
case PauseUI::PAUSE_MENU:
|
||||||
|
return m_pasue_menu.handle_event(e);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (m_hud_ui.handle_event(e)) {
|
if (m_hud_ui.handle_event(e)) {
|
||||||
@@ -257,8 +278,11 @@ bool WorldScene::handle_mouse_wheel_event(const MouseWheelEvent& e) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (m_paused) {
|
if (m_paused) {
|
||||||
if (m_pasue_menu.handle_event(e)) {
|
switch (m_paused_ui) {
|
||||||
return true;
|
case PauseUI::INVENTORY:
|
||||||
|
return m_inventory_ui.handle_event(e);
|
||||||
|
case PauseUI::PAUSE_MENU:
|
||||||
|
return m_pasue_menu.handle_event(e);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (m_hud_ui.handle_event(e)) {
|
if (m_hud_ui.handle_event(e)) {
|
||||||
@@ -286,6 +310,14 @@ bool WorldScene::handle_key_event(const KeyEvent& e) {
|
|||||||
}
|
}
|
||||||
bool pasued = pause();
|
bool pasued = pause();
|
||||||
pasued = !pasued;
|
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);
|
set_pause(pasued);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -327,8 +359,11 @@ bool WorldScene::handle_key_event(const KeyEvent& e) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (m_paused) {
|
if (m_paused) {
|
||||||
if (m_pasue_menu.handle_event(e)) {
|
switch (m_paused_ui) {
|
||||||
return true;
|
case PauseUI::INVENTORY:
|
||||||
|
return m_inventory_ui.handle_event(e);
|
||||||
|
case PauseUI::PAUSE_MENU:
|
||||||
|
return m_pasue_menu.handle_event(e);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (m_hud_ui.handle_event(e)) {
|
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);
|
return m_error_ui.handle_event(e);
|
||||||
}
|
}
|
||||||
if (m_paused) {
|
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);
|
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_fill_parent(true);
|
||||||
rect->set_color(Color::BLACK);
|
rect->set_color(Color::BLACK);
|
||||||
rect->set_alpha(0.5f);
|
rect->set_alpha(0.7f);
|
||||||
rect->set_anchor(Anchor::TOP_LEFT);
|
rect->set_anchor(Anchor::TOP_LEFT);
|
||||||
auto& renderer = m_scene.scene_manager().app().renderer();
|
auto& renderer = m_scene.scene_manager().app().renderer();
|
||||||
rect->set_window_size(renderer.window_width(), renderer.window_height());
|
rect->set_window_size(renderer.window_width(), renderer.window_height());
|
||||||
|
|||||||
Reference in New Issue
Block a user