mirror of
https://github.com/zhenyan121/Cubed.git
synced 2026-08-09 02:07:04 +08:00
feat(ui): add microphone icon when recording voice
This commit is contained in:
BIN
assets/texture/ui/microphone.png
Normal file
BIN
assets/texture/ui/microphone.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 137 B |
@@ -51,6 +51,7 @@ public:
|
|||||||
void receive_voice(std::span<const char> opus, const glm::vec3& pos);
|
void receive_voice(std::span<const char> opus, const glm::vec3& pos);
|
||||||
|
|
||||||
AudioRecording& audio_recording();
|
AudioRecording& audio_recording();
|
||||||
|
const AudioRecording& audio_recording() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
using FadeMap = std::unordered_map<std::string, AudioFade>;
|
using FadeMap = std::unordered_map<std::string, AudioFade>;
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ public:
|
|||||||
int chunk_size() const;
|
int chunk_size() const;
|
||||||
static AABB get_block_aabb(const glm::ivec3& pos);
|
static AABB get_block_aabb(const glm::ivec3& pos);
|
||||||
AudioEngine& get_audio();
|
AudioEngine& get_audio();
|
||||||
|
const AudioEngine& get_audio() const;
|
||||||
Config& get_config();
|
Config& get_config();
|
||||||
WorldScene& world_scene();
|
WorldScene& world_scene();
|
||||||
void set_direct_exit();
|
void set_direct_exit();
|
||||||
|
|||||||
@@ -39,6 +39,8 @@ public:
|
|||||||
// Not thread safe
|
// Not thread safe
|
||||||
void handle_chat_message(ChatMessage& message);
|
void handle_chat_message(ChatMessage& message);
|
||||||
|
|
||||||
|
bool is_recording() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SceneManager& m_scene_manager;
|
SceneManager& m_scene_manager;
|
||||||
DevPanel m_dev_panel;
|
DevPanel m_dev_panel;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "Cubed/ui/chat_box.hpp"
|
#include "Cubed/ui/chat_box.hpp"
|
||||||
|
#include "Cubed/ui/image.hpp"
|
||||||
#include "Cubed/ui/ui_manager.hpp"
|
#include "Cubed/ui/ui_manager.hpp"
|
||||||
#include "Cubed/ui/widget.hpp"
|
#include "Cubed/ui/widget.hpp"
|
||||||
|
|
||||||
@@ -18,7 +19,7 @@ public:
|
|||||||
|
|
||||||
void init() override;
|
void init() override;
|
||||||
void render(Renderer& renderer) override;
|
void render(Renderer& renderer) override;
|
||||||
|
void update(float dt) override;
|
||||||
void set_chatting(bool chantting, bool sned);
|
void set_chatting(bool chantting, bool sned);
|
||||||
|
|
||||||
void add_chat_message(ChatMessage& message);
|
void add_chat_message(ChatMessage& message);
|
||||||
@@ -26,6 +27,8 @@ public:
|
|||||||
private:
|
private:
|
||||||
bool handle_key_event(const KeyEvent& e) override;
|
bool handle_key_event(const KeyEvent& e) override;
|
||||||
WorldScene& m_scene;
|
WorldScene& m_scene;
|
||||||
ChatBox* m_chat_box;
|
|
||||||
|
ChatBox* m_chat_box = nullptr;
|
||||||
|
Image* m_mircophone = nullptr;
|
||||||
};
|
};
|
||||||
} // namespace Cubed
|
} // namespace Cubed
|
||||||
@@ -302,5 +302,7 @@ void AudioEngine::receive_voice(std::span<const char> opus,
|
|||||||
}
|
}
|
||||||
|
|
||||||
AudioRecording& AudioEngine::audio_recording() { return m_recording; }
|
AudioRecording& AudioEngine::audio_recording() { return m_recording; }
|
||||||
|
const AudioRecording& AudioEngine::audio_recording() const {
|
||||||
|
return m_recording;
|
||||||
|
}
|
||||||
} // namespace Cubed
|
} // namespace Cubed
|
||||||
@@ -726,6 +726,7 @@ AABB ClientWorld::get_block_aabb(const glm::ivec3& pos) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
AudioEngine& ClientWorld::get_audio() { return m_audio; }
|
AudioEngine& ClientWorld::get_audio() { return m_audio; }
|
||||||
|
const AudioEngine& ClientWorld::get_audio() const { return m_audio; }
|
||||||
Config& ClientWorld::get_config() { return m_config; }
|
Config& ClientWorld::get_config() { return m_config; }
|
||||||
WorldScene& ClientWorld::world_scene() { return m_world_scene; }
|
WorldScene& ClientWorld::world_scene() { return m_world_scene; }
|
||||||
void ClientWorld::set_direct_exit() { m_exit_direct = true; }
|
void ClientWorld::set_direct_exit() { m_exit_direct = true; }
|
||||||
|
|||||||
@@ -773,7 +773,6 @@ void ServerWorld::handle_chat_message(ChatMsg& msg) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ServerWorld::handle_voice_message(VoiceMsg& msg) {
|
void ServerWorld::handle_voice_message(VoiceMsg& msg) {
|
||||||
Logger::info("Get voice Message");
|
|
||||||
auto pool = m_net_thread_pool.load();
|
auto pool = m_net_thread_pool.load();
|
||||||
std::string uuid = msg.uuid();
|
std::string uuid = msg.uuid();
|
||||||
std::string data = msg.opus_data();
|
std::string data = msg.opus_data();
|
||||||
@@ -806,7 +805,6 @@ void ServerWorld::handle_voice_message(VoiceMsg& msg) {
|
|||||||
for (auto& s : session) {
|
for (auto& s : session) {
|
||||||
s->send(make_packet(*msg), 5);
|
s->send(make_packet(*msg), 5);
|
||||||
}
|
}
|
||||||
Logger::info("Send voice message sum {}", session.size());
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -394,7 +394,9 @@ void WorldScene::set_chatting(bool chatting, bool send) {
|
|||||||
void WorldScene::handle_chat_message(ChatMessage& message) {
|
void WorldScene::handle_chat_message(ChatMessage& message) {
|
||||||
m_hud_ui.add_chat_message(message);
|
m_hud_ui.add_chat_message(message);
|
||||||
}
|
}
|
||||||
|
bool WorldScene::is_recording() const {
|
||||||
|
return m_client_world.get_audio().audio_recording().is_recording();
|
||||||
|
}
|
||||||
void WorldScene::set_error(std::string_view error) {
|
void WorldScene::set_error(std::string_view error) {
|
||||||
Logger::error("WorldScene Error Set {}", error);
|
Logger::error("WorldScene Error Set {}", error);
|
||||||
m_error_ui.set_error(error);
|
m_error_ui.set_error(error);
|
||||||
|
|||||||
@@ -20,13 +20,11 @@ void WorldUIManager::init() {
|
|||||||
|
|
||||||
m_root_widget->set_window_size(renderer.window_width(),
|
m_root_widget->set_window_size(renderer.window_width(),
|
||||||
renderer.window_height());
|
renderer.window_height());
|
||||||
|
auto& texture_manager = m_scene.scene_manager().app().texture_manager();
|
||||||
auto& crosshair = m_root_widget->add_child<Image>();
|
auto& crosshair = m_root_widget->add_child<Image>();
|
||||||
|
|
||||||
crosshair.set_image("texture/ui/0.png",
|
crosshair.set_image("texture/ui/0.png", texture_manager);
|
||||||
m_scene.scene_manager().app().texture_manager());
|
|
||||||
crosshair.set_window_size(renderer.window_width(),
|
|
||||||
renderer.window_height());
|
|
||||||
crosshair.set_anchor(Anchor::CENTER);
|
crosshair.set_anchor(Anchor::CENTER);
|
||||||
crosshair.set_scale(3.0f);
|
crosshair.set_scale(3.0f);
|
||||||
m_widgets.try_emplace("crosshair", &crosshair);
|
m_widgets.try_emplace("crosshair", &crosshair);
|
||||||
@@ -57,6 +55,12 @@ void WorldUIManager::init() {
|
|||||||
m_scene.client_world().send_chat_message(message);
|
m_scene.client_world().send_chat_message(message);
|
||||||
});
|
});
|
||||||
m_chat_box = &chat_box;
|
m_chat_box = &chat_box;
|
||||||
|
auto& microphone = m_root_widget->add_child<Image>();
|
||||||
|
microphone.set_image("texture/ui/microphone.png", texture_manager)
|
||||||
|
.set_scale(5.0f)
|
||||||
|
.set_anchor(Anchor::BOTTOM_RIGHT)
|
||||||
|
.set_visible(false);
|
||||||
|
m_mircophone = µphone;
|
||||||
}
|
}
|
||||||
void WorldUIManager::render(Renderer& renderer) {
|
void WorldUIManager::render(Renderer& renderer) {
|
||||||
renderer.begin_render_ui();
|
renderer.begin_render_ui();
|
||||||
@@ -68,6 +72,15 @@ void WorldUIManager::render(Renderer& renderer) {
|
|||||||
renderer.end_render_ui();
|
renderer.end_render_ui();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WorldUIManager::update(float dt) {
|
||||||
|
UIManager::update(dt);
|
||||||
|
if (m_scene.is_recording()) {
|
||||||
|
m_mircophone->set_visible(true);
|
||||||
|
} else {
|
||||||
|
m_mircophone->set_visible(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void WorldUIManager::set_chatting(bool chantting, bool send) {
|
void WorldUIManager::set_chatting(bool chantting, bool send) {
|
||||||
|
|
||||||
m_chat_box->set_typing(chantting, send);
|
m_chat_box->set_typing(chantting, send);
|
||||||
|
|||||||
Reference in New Issue
Block a user