Add imgui-based Netplay Chat

This commit is contained in:
spycrab
2019-03-17 01:09:06 +01:00
parent 8cfbbbe9dc
commit 7cfb626a83
11 changed files with 184 additions and 22 deletions

View File

@ -8,6 +8,8 @@
#include <QApplication>
#include <QProgressDialog>
#include <imgui.h>
#include "Common/Common.h"
#include "Core/ConfigManager.h"
@ -149,7 +151,8 @@ void Host_RequestRenderWindowSize(int w, int h)
bool Host_UINeedsControllerState()
{
return Settings::Instance().IsControllerStateNeeded();
return Settings::Instance().IsControllerStateNeeded() ||
(ImGui::GetCurrentContext() && ImGui::GetIO().WantCaptureKeyboard);
}
bool Host_UIBlocksControllerState()

View File

@ -54,6 +54,8 @@
#include "UICommon/GameFile.h"
#include "UICommon/UICommon.h"
#include "VideoCommon/NetPlayChatUI.h"
#include "VideoCommon/RenderBase.h"
#include "VideoCommon/VideoConfig.h"
NetPlayDialog::NetPlayDialog(QWidget* parent)
@ -355,6 +357,15 @@ void NetPlayDialog::ConnectWidgets()
connect(m_sync_all_wii_saves_action, &QAction::toggled, this, &NetPlayDialog::SaveSettings);
}
void NetPlayDialog::SendMessage(const std::string& msg)
{
Settings::Instance().GetNetPlayClient()->SendChatMessage(msg);
DisplayMessage(QStringLiteral("%1: %2").arg(QString::fromStdString(m_nickname).toHtmlEscaped(),
QString::fromStdString(msg).toHtmlEscaped()),
"");
}
void NetPlayDialog::OnChat()
{
QueueOnObject(this, [this] {
@ -363,12 +374,9 @@ void NetPlayDialog::OnChat()
if (msg.empty())
return;
Settings::Instance().GetNetPlayClient()->SendChatMessage(msg);
m_chat_type_edit->clear();
DisplayMessage(QStringLiteral("%1: %2").arg(QString::fromStdString(m_nickname).toHtmlEscaped(),
QString::fromStdString(msg).toHtmlEscaped()),
"#1d6ed8");
SendMessage(msg);
});
}
@ -762,23 +770,12 @@ void NetPlayDialog::DisplayMessage(const QString& msg, const std::string& color,
QStringLiteral("<font color='%1'>%2</font>").arg(QString::fromStdString(color), msg));
});
QColor c(color.empty() ? QStringLiteral("white") : QString::fromStdString(color));
if (g_ActiveConfig.bShowNetPlayMessages && Core::IsRunning())
{
u32 osd_color;
// Convert the color string to a OSD color
if (color == "red")
osd_color = OSD::Color::RED;
else if (color == "cyan")
osd_color = OSD::Color::CYAN;
else if (color == "green")
osd_color = OSD::Color::GREEN;
else
osd_color = OSD::Color::YELLOW;
OSD::AddTypedMessage(OSD::MessageType::NetPlayBuffer, msg.toStdString(), OSD::Duration::NORMAL,
osd_color);
}
g_netplay_chat_ui->AppendChat(msg.toStdString(),
{static_cast<float>(c.redF()), static_cast<float>(c.greenF()),
static_cast<float>(c.blueF())});
}
void NetPlayDialog::AppendChat(const std::string& msg)
@ -827,8 +824,12 @@ void NetPlayDialog::OnMsgStartGame()
{
DisplayMessage(tr("Started game"), "green");
g_netplay_chat_ui =
std::make_unique<NetPlayChatUI>([this](const std::string& message) { SendMessage(message); });
QueueOnObject(this, [this] {
auto client = Settings::Instance().GetNetPlayClient();
if (client)
client->StartGame(FindGame(m_current_game));
UpdateDiscordPresence();
@ -837,6 +838,7 @@ void NetPlayDialog::OnMsgStartGame()
void NetPlayDialog::OnMsgStopGame()
{
g_netplay_chat_ui.reset();
QueueOnObject(this, [this] { UpdateDiscordPresence(); });
}
@ -856,7 +858,7 @@ void NetPlayDialog::OnPadBufferChanged(u32 buffer)
DisplayMessage(m_host_input_authority && !IsHosting() ?
tr("Max buffer size changed to %1").arg(buffer) :
tr("Buffer size changed to %1").arg(buffer),
"");
"yellow");
m_buffer_size = static_cast<int>(buffer);
}

View File

@ -95,6 +95,8 @@ private:
void SetGame(const QString& game_path);
void SendMessage(const std::string& message);
// Chat
QGroupBox* m_chat_box;
QTextEdit* m_chat_edit;

View File

@ -27,6 +27,9 @@
#include "InputCommon/ControllerInterface/ControllerInterface.h"
#include "InputCommon/InputConfig.h"
#include "VideoCommon/NetPlayChatUI.h"
#include "VideoCommon/RenderBase.h"
Settings::Settings()
{
qRegisterMetaType<Core::State>();
@ -293,6 +296,8 @@ std::shared_ptr<NetPlay::NetPlayClient> Settings::GetNetPlayClient()
void Settings::ResetNetPlayClient(NetPlay::NetPlayClient* client)
{
m_client.reset(client);
g_netplay_chat_ui.reset();
}
std::shared_ptr<NetPlay::NetPlayServer> Settings::GetNetPlayServer()