mirror of
https://github.com/Detanup01/gbe_fork.git
synced 2025-01-12 10:29:32 +08:00
refactoring + make fonts variables static
This commit is contained in:
parent
d3c4026447
commit
827f8a472a
@ -91,7 +91,8 @@ struct Overlay_Achievement
|
|||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include "InGameOverlay/RendererHook.h"
|
#include "InGameOverlay/RendererHook.h"
|
||||||
|
|
||||||
struct NotificationsIndexes {
|
struct NotificationsIndexes
|
||||||
|
{
|
||||||
int top_left = 0, top_center = 0, top_right = 0;
|
int top_left = 0, top_center = 0, top_right = 0;
|
||||||
int bot_left = 0, bot_center = 0, bot_right = 0;
|
int bot_left = 0, bot_center = 0, bot_right = 0;
|
||||||
};
|
};
|
||||||
@ -155,33 +156,43 @@ class Steam_Overlay
|
|||||||
void Callback(Common_Message* msg);
|
void Callback(Common_Message* msg);
|
||||||
void RunCallbacks();
|
void RunCallbacks();
|
||||||
|
|
||||||
bool FriendJoinable(std::pair<const Friend, friend_window_state> &f);
|
bool is_friend_joinable(std::pair<const Friend, friend_window_state> &f);
|
||||||
bool IHaveLobby();
|
bool got_lobby();
|
||||||
|
|
||||||
bool submit_notification(notification_type type, const std::string &msg, std::pair<const Friend, friend_window_state> *frd = nullptr, const std::weak_ptr<uint64_t> &icon = {});
|
bool submit_notification(notification_type type, const std::string &msg, std::pair<const Friend, friend_window_state> *frd = nullptr, const std::weak_ptr<uint64_t> &icon = {});
|
||||||
|
|
||||||
void NotifySoundUserInvite(friend_window_state& friend_state);
|
void notify_sound_user_invite(friend_window_state& friend_state);
|
||||||
void NotifySoundUserAchievement();
|
void notify_sound_user_achievement();
|
||||||
void NotifySoundAutoAcceptFriendInvite();
|
void notify_sound_auto_accept_friend_invite();
|
||||||
|
|
||||||
// Right click on friend
|
// Right click on friend
|
||||||
void BuildContextMenu(Friend const& frd, friend_window_state &state);
|
void build_friend_context_menu(Friend const& frd, friend_window_state &state);
|
||||||
// Double click on friend
|
// Double click on friend
|
||||||
void BuildFriendWindow(Friend const& frd, friend_window_state &state);
|
void build_friend_window(Friend const& frd, friend_window_state &state);
|
||||||
// Notifications like achievements, chat and invitations
|
// Notifications like achievements, chat and invitations
|
||||||
void SetNextNotificationPos(float width, float height, float font_size, notification_type type, struct NotificationsIndexes &idx);
|
void set_next_notification_pos(float width, float height, float font_size, notification_type type, struct NotificationsIndexes &idx);
|
||||||
void BuildNotifications(int width, int height);
|
void build_notifications(int width, int height);
|
||||||
// invite a single friend
|
// invite a single friend
|
||||||
void InviteFriend(uint64 friend_id, class Steam_Friends* steamFriends, class Steam_Matchmaking* steamMatchmaking);
|
void invite_friend(uint64 friend_id, class Steam_Friends* steamFriends, class Steam_Matchmaking* steamMatchmaking);
|
||||||
|
|
||||||
void renderer_hook_init_thread();
|
void renderer_hook_init_thread();
|
||||||
|
|
||||||
void CreateFonts();
|
void create_fonts();
|
||||||
void LoadAudio();
|
void load_audio();
|
||||||
|
|
||||||
void HookReady(bool ready);
|
void overlay_state_hook(bool ready);
|
||||||
void allow_renderer_frame_processing(bool state);
|
void allow_renderer_frame_processing(bool state);
|
||||||
|
|
||||||
|
void overlay_proc();
|
||||||
|
|
||||||
|
void add_auto_accept_invite_notification();
|
||||||
|
|
||||||
|
void AddInviteNotification(std::pair<const Friend, friend_window_state> &wnd_state);
|
||||||
|
|
||||||
|
void add_chat_message_notification(std::string const& message);
|
||||||
|
|
||||||
|
bool open_overlay_hook(bool toggle);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Steam_Overlay(Settings* settings, SteamCallResults* callback_results, SteamCallBacks* callbacks, RunEveryRunCB* run_every_runcb, Networking *network);
|
Steam_Overlay(Settings* settings, SteamCallResults* callback_results, SteamCallBacks* callbacks, RunEveryRunCB* run_every_runcb, Networking *network);
|
||||||
|
|
||||||
@ -197,15 +208,12 @@ public:
|
|||||||
void SetupOverlay();
|
void SetupOverlay();
|
||||||
void UnSetupOverlay();
|
void UnSetupOverlay();
|
||||||
|
|
||||||
void OverlayProc();
|
|
||||||
|
|
||||||
void OpenOverlayInvite(CSteamID lobbyId);
|
void OpenOverlayInvite(CSteamID lobbyId);
|
||||||
void OpenOverlay(const char* pchDialog);
|
void OpenOverlay(const char* pchDialog);
|
||||||
void OpenOverlayWebpage(const char* pchURL);
|
void OpenOverlayWebpage(const char* pchURL);
|
||||||
|
|
||||||
bool ShowOverlay() const;
|
bool ShowOverlay() const;
|
||||||
void ShowOverlay(bool state);
|
void ShowOverlay(bool state);
|
||||||
bool OpenOverlayHook(bool toggle);
|
|
||||||
|
|
||||||
void SetLobbyInvite(Friend friendId, uint64 lobbyId);
|
void SetLobbyInvite(Friend friendId, uint64 lobbyId);
|
||||||
void SetRichInvite(Friend friendId, const char* connect_str);
|
void SetRichInvite(Friend friendId, const char* connect_str);
|
||||||
@ -213,10 +221,7 @@ public:
|
|||||||
void FriendConnect(Friend _friend);
|
void FriendConnect(Friend _friend);
|
||||||
void FriendDisconnect(Friend _friend);
|
void FriendDisconnect(Friend _friend);
|
||||||
|
|
||||||
void AddChatMessageNotification(std::string const& message);
|
|
||||||
void AddAchievementNotification(nlohmann::json const& ach);
|
void AddAchievementNotification(nlohmann::json const& ach);
|
||||||
void AddInviteNotification(std::pair<const Friend, friend_window_state> &wnd_state);
|
|
||||||
void AddAutoAcceptInviteNotification();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#else
|
#else
|
||||||
@ -237,18 +242,12 @@ public:
|
|||||||
void SetupOverlay() {}
|
void SetupOverlay() {}
|
||||||
void UnSetupOverlay() {}
|
void UnSetupOverlay() {}
|
||||||
|
|
||||||
void HookReady(bool ready) {}
|
|
||||||
|
|
||||||
void CreateFonts() {}
|
|
||||||
void OverlayProc() {}
|
|
||||||
|
|
||||||
void OpenOverlayInvite(CSteamID lobbyId) {}
|
void OpenOverlayInvite(CSteamID lobbyId) {}
|
||||||
void OpenOverlay(const char* pchDialog) {}
|
void OpenOverlay(const char* pchDialog) {}
|
||||||
void OpenOverlayWebpage(const char* pchURL) {}
|
void OpenOverlayWebpage(const char* pchURL) {}
|
||||||
|
|
||||||
bool ShowOverlay() const { return false; }
|
bool ShowOverlay() const { return false; }
|
||||||
void ShowOverlay(bool state) {}
|
void ShowOverlay(bool state) {}
|
||||||
bool OpenOverlayHook(bool toggle) { return false; }
|
|
||||||
|
|
||||||
void SetLobbyInvite(Friend friendId, uint64 lobbyId) {}
|
void SetLobbyInvite(Friend friendId, uint64 lobbyId) {}
|
||||||
void SetRichInvite(Friend friendId, const char* connect_str) {}
|
void SetRichInvite(Friend friendId, const char* connect_str) {}
|
||||||
@ -256,10 +255,7 @@ public:
|
|||||||
void FriendConnect(Friend _friend) {}
|
void FriendConnect(Friend _friend) {}
|
||||||
void FriendDisconnect(Friend _friend) {}
|
void FriendDisconnect(Friend _friend) {}
|
||||||
|
|
||||||
void AddChatMessageNotification(std::string const& message) {}
|
|
||||||
void AddAchievementNotification(nlohmann::json const& ach) {}
|
void AddAchievementNotification(nlohmann::json const& ach) {}
|
||||||
void AddInviteNotification(std::pair<const Friend, friend_window_state> &wnd_state) {}
|
|
||||||
void AddAutoAcceptInviteNotification() {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -214,12 +214,13 @@ void Steam_Overlay::renderer_hook_init_thread()
|
|||||||
if (settings->overlay_hook_delay_sec > 0) {
|
if (settings->overlay_hook_delay_sec > 0) {
|
||||||
// give games some time to init their renderer (DirectX, OpenGL, etc...)
|
// give games some time to init their renderer (DirectX, OpenGL, etc...)
|
||||||
std::this_thread::sleep_for(std::chrono::seconds(settings->overlay_hook_delay_sec));
|
std::this_thread::sleep_for(std::chrono::seconds(settings->overlay_hook_delay_sec));
|
||||||
|
}
|
||||||
|
|
||||||
// early exit before we get a chance to do anything
|
// early exit before we get a chance to do anything
|
||||||
if (!setup_overlay_called) {
|
if (!setup_overlay_called) {
|
||||||
PRINT_DEBUG("Steam_Overlay::renderer_hook_init early exit before renderer detection\n");
|
PRINT_DEBUG("Steam_Overlay::renderer_hook_init early exit before renderer detection\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// request renderer detection
|
// request renderer detection
|
||||||
auto future_renderer = InGameOverlay::DetectRenderer();
|
auto future_renderer = InGameOverlay::DetectRenderer();
|
||||||
@ -243,18 +244,18 @@ void Steam_Overlay::renderer_hook_init_thread()
|
|||||||
std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
|
std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
|
||||||
_renderer = future_renderer.get();
|
_renderer = future_renderer.get();
|
||||||
PRINT_DEBUG("Steam_Overlay::renderer_hook_init got renderer %p\n", _renderer);
|
PRINT_DEBUG("Steam_Overlay::renderer_hook_init got renderer %p\n", _renderer);
|
||||||
CreateFonts();
|
create_fonts();
|
||||||
LoadAudio();
|
load_audio();
|
||||||
|
|
||||||
// setup renderer callbacks
|
// setup renderer callbacks
|
||||||
const static std::set<InGameOverlay::ToggleKey> overlay_toggle_keys = {
|
const static std::set<InGameOverlay::ToggleKey> overlay_toggle_keys = {
|
||||||
InGameOverlay::ToggleKey::SHIFT, InGameOverlay::ToggleKey::TAB
|
InGameOverlay::ToggleKey::SHIFT, InGameOverlay::ToggleKey::TAB
|
||||||
};
|
};
|
||||||
auto overlay_toggle_callback = [this]() { OpenOverlayHook(true); };
|
auto overlay_toggle_callback = [this]() { open_overlay_hook(true); };
|
||||||
_renderer->OverlayProc = [this]() { OverlayProc(); };
|
_renderer->OverlayProc = [this]() { overlay_proc(); };
|
||||||
_renderer->OverlayHookReady = [this](InGameOverlay::OverlayHookState state) {
|
_renderer->OverlayHookReady = [this](InGameOverlay::OverlayHookState state) {
|
||||||
PRINT_DEBUG("Steam_Overlay hook state changed to <%i>\n", (int)state);
|
PRINT_DEBUG("Steam_Overlay hook state changed to <%i>\n", (int)state);
|
||||||
HookReady(state == InGameOverlay::OverlayHookState::Ready || state == InGameOverlay::OverlayHookState::Reset);
|
overlay_state_hook(state == InGameOverlay::OverlayHookState::Ready || state == InGameOverlay::OverlayHookState::Reset);
|
||||||
};
|
};
|
||||||
|
|
||||||
bool started = _renderer->StartHook(overlay_toggle_callback, overlay_toggle_keys, &fonts_atlas);
|
bool started = _renderer->StartHook(overlay_toggle_callback, overlay_toggle_keys, &fonts_atlas);
|
||||||
@ -285,7 +286,6 @@ void Steam_Overlay::UnSetupOverlay()
|
|||||||
|
|
||||||
// allow the future_renderer thread to exit if needed
|
// allow the future_renderer thread to exit if needed
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(500 + 50));
|
std::this_thread::sleep_for(std::chrono::milliseconds(500 + 50));
|
||||||
InGameOverlay::StopRendererDetection();
|
|
||||||
|
|
||||||
if (_renderer) {
|
if (_renderer) {
|
||||||
for (auto &ach : achievements) {
|
for (auto &ach : achievements) {
|
||||||
@ -299,9 +299,9 @@ void Steam_Overlay::UnSetupOverlay()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// called initially and when window size is updated
|
// called initially and when window size is updated
|
||||||
void Steam_Overlay::HookReady(bool ready)
|
void Steam_Overlay::overlay_state_hook(bool ready)
|
||||||
{
|
{
|
||||||
PRINT_DEBUG("Steam_Overlay::HookReady %i\n", (int)ready);
|
PRINT_DEBUG("Steam_Overlay::overlay_state_hook %i\n", (int)ready);
|
||||||
|
|
||||||
// NOTE usage of local objects here cause an exception when this is called with false state
|
// NOTE usage of local objects here cause an exception when this is called with false state
|
||||||
// the reason is that by the time this hook is called, the object may have been already destructed
|
// the reason is that by the time this hook is called, the object may have been already destructed
|
||||||
@ -319,7 +319,7 @@ void Steam_Overlay::HookReady(bool ready)
|
|||||||
if (ready && !initialized_imgui && ImGui::GetCurrentContext()) {
|
if (ready && !initialized_imgui && ImGui::GetCurrentContext()) {
|
||||||
initialized_imgui = true;
|
initialized_imgui = true;
|
||||||
|
|
||||||
PRINT_DEBUG("Steam_Overlay::HookReady initializing ImGui config\n");
|
PRINT_DEBUG("Steam_Overlay::overlay_state_hook initializing ImGui config\n");
|
||||||
ImGuiIO &io = ImGui::GetIO();
|
ImGuiIO &io = ImGui::GetIO();
|
||||||
ImGuiStyle &style = ImGui::GetStyle();
|
ImGuiStyle &style = ImGui::GetStyle();
|
||||||
|
|
||||||
@ -355,7 +355,7 @@ void Steam_Overlay::OpenOverlay(const char* pchDialog)
|
|||||||
// TODO: Show pages depending on pchDialog
|
// TODO: Show pages depending on pchDialog
|
||||||
if ((strncmp(pchDialog, "Friends", sizeof("Friends") - 1) == 0) && (settings->overlayAutoAcceptInvitesCount() > 0)) {
|
if ((strncmp(pchDialog, "Friends", sizeof("Friends") - 1) == 0) && (settings->overlayAutoAcceptInvitesCount() > 0)) {
|
||||||
PRINT_DEBUG("Steam_Overlay won't open overlay's friends list because some friends are defined in the auto accept list\n");
|
PRINT_DEBUG("Steam_Overlay won't open overlay's friends list because some friends are defined in the auto accept list\n");
|
||||||
AddAutoAcceptInviteNotification();
|
add_auto_accept_invite_notification();
|
||||||
} else {
|
} else {
|
||||||
ShowOverlay(true);
|
ShowOverlay(true);
|
||||||
}
|
}
|
||||||
@ -377,7 +377,7 @@ bool Steam_Overlay::ShowOverlay() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// called when the user presses SHIFT + TAB
|
// called when the user presses SHIFT + TAB
|
||||||
bool Steam_Overlay::OpenOverlayHook(bool toggle)
|
bool Steam_Overlay::open_overlay_hook(bool toggle)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
|
std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
|
||||||
if (toggle) {
|
if (toggle) {
|
||||||
@ -390,7 +390,7 @@ bool Steam_Overlay::OpenOverlayHook(bool toggle)
|
|||||||
void Steam_Overlay::allow_renderer_frame_processing(bool state)
|
void Steam_Overlay::allow_renderer_frame_processing(bool state)
|
||||||
{
|
{
|
||||||
// this is very important internally it calls the necessary fuctions
|
// this is very important internally it calls the necessary fuctions
|
||||||
// to properly update ImGui window size on the next OverlayProc() call
|
// to properly update ImGui window size on the next overlay_proc() call
|
||||||
if (state) {
|
if (state) {
|
||||||
// clip the cursor
|
// clip the cursor
|
||||||
_renderer->HideAppInputs(true);
|
_renderer->HideAppInputs(true);
|
||||||
@ -426,7 +426,7 @@ void Steam_Overlay::ShowOverlay(bool state)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Steam_Overlay::NotifySoundUserInvite(friend_window_state& friend_state)
|
void Steam_Overlay::notify_sound_user_invite(friend_window_state& friend_state)
|
||||||
{
|
{
|
||||||
if (settings->disable_overlay_friend_notification) return;
|
if (settings->disable_overlay_friend_notification) return;
|
||||||
if (!(friend_state.window_state & window_state_show) || !show_overlay)
|
if (!(friend_state.window_state & window_state_show) || !show_overlay)
|
||||||
@ -442,7 +442,7 @@ void Steam_Overlay::NotifySoundUserInvite(friend_window_state& friend_state)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Steam_Overlay::NotifySoundUserAchievement()
|
void Steam_Overlay::notify_sound_user_achievement()
|
||||||
{
|
{
|
||||||
if (settings->disable_overlay_achievement_notification) return;
|
if (settings->disable_overlay_achievement_notification) return;
|
||||||
if (!show_overlay)
|
if (!show_overlay)
|
||||||
@ -455,7 +455,7 @@ void Steam_Overlay::NotifySoundUserAchievement()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Steam_Overlay::NotifySoundAutoAcceptFriendInvite()
|
void Steam_Overlay::notify_sound_auto_accept_friend_invite()
|
||||||
{
|
{
|
||||||
#ifdef __WINDOWS__
|
#ifdef __WINDOWS__
|
||||||
if (notif_achievement_wav_custom_inuse) {
|
if (notif_achievement_wav_custom_inuse) {
|
||||||
@ -481,7 +481,7 @@ void Steam_Overlay::SetLobbyInvite(Friend friendId, uint64 lobbyId)
|
|||||||
// Make sure don't have rich presence invite and a lobby invite (it should not happen but who knows)
|
// Make sure don't have rich presence invite and a lobby invite (it should not happen but who knows)
|
||||||
frd.window_state &= ~window_state_rich_invite;
|
frd.window_state &= ~window_state_rich_invite;
|
||||||
AddInviteNotification(*i);
|
AddInviteNotification(*i);
|
||||||
NotifySoundUserInvite(i->second);
|
notify_sound_user_invite(i->second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -500,7 +500,7 @@ void Steam_Overlay::SetRichInvite(Friend friendId, const char* connect_str)
|
|||||||
// Make sure don't have rich presence invite and a lobby invite (it should not happen but who knows)
|
// Make sure don't have rich presence invite and a lobby invite (it should not happen but who knows)
|
||||||
frd.window_state &= ~window_state_lobby_invite;
|
frd.window_state &= ~window_state_lobby_invite;
|
||||||
AddInviteNotification(*i);
|
AddInviteNotification(*i);
|
||||||
NotifySoundUserInvite(i->second);
|
notify_sound_user_invite(i->second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -562,9 +562,9 @@ bool Steam_Overlay::submit_notification(notification_type type, const std::strin
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Steam_Overlay::AddChatMessageNotification(std::string const &message)
|
void Steam_Overlay::add_chat_message_notification(std::string const &message)
|
||||||
{
|
{
|
||||||
PRINT_DEBUG("Steam_Overlay::AddChatMessageNotification '%s'\n", message.c_str());
|
PRINT_DEBUG("Steam_Overlay::add_chat_message_notification '%s'\n", message.c_str());
|
||||||
std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
|
std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
|
||||||
if (settings->disable_overlay_friend_notification) return;
|
if (settings->disable_overlay_friend_notification) return;
|
||||||
|
|
||||||
@ -619,7 +619,7 @@ void Steam_Overlay::AddAchievementNotification(nlohmann::json const& ach)
|
|||||||
{},
|
{},
|
||||||
icon_rsrc
|
icon_rsrc
|
||||||
);
|
);
|
||||||
NotifySoundUserAchievement();
|
notify_sound_user_achievement();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -638,9 +638,9 @@ void Steam_Overlay::AddInviteNotification(std::pair<const Friend, friend_window_
|
|||||||
submit_notification(notification_type_invite, tmp, &wnd_state);
|
submit_notification(notification_type_invite, tmp, &wnd_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Steam_Overlay::AddAutoAcceptInviteNotification()
|
void Steam_Overlay::add_auto_accept_invite_notification()
|
||||||
{
|
{
|
||||||
PRINT_DEBUG("Steam_Overlay::AddAutoAcceptInviteNotification\n");
|
PRINT_DEBUG("Steam_Overlay::add_auto_accept_invite_notification\n");
|
||||||
std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
|
std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
|
||||||
if (!Ready()) return;
|
if (!Ready()) return;
|
||||||
|
|
||||||
@ -648,12 +648,12 @@ void Steam_Overlay::AddAutoAcceptInviteNotification()
|
|||||||
snprintf(tmp, sizeof(tmp), "%s", translationAutoAcceptFriendInvite[current_language]);
|
snprintf(tmp, sizeof(tmp), "%s", translationAutoAcceptFriendInvite[current_language]);
|
||||||
|
|
||||||
submit_notification(notification_type_auto_accept_invite, tmp);
|
submit_notification(notification_type_auto_accept_invite, tmp);
|
||||||
NotifySoundAutoAcceptFriendInvite();
|
notify_sound_auto_accept_friend_invite();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Steam_Overlay::FriendJoinable(std::pair<const Friend, friend_window_state> &f)
|
bool Steam_Overlay::is_friend_joinable(std::pair<const Friend, friend_window_state> &f)
|
||||||
{
|
{
|
||||||
PRINT_DEBUG("Steam_Overlay::FriendJoinable " "%" PRIu64 "\n", f.first.id());
|
PRINT_DEBUG("Steam_Overlay::is_friend_joinable " "%" PRIu64 "\n", f.first.id());
|
||||||
std::lock_guard<std::recursive_mutex> lock(global_mutex);
|
std::lock_guard<std::recursive_mutex> lock(global_mutex);
|
||||||
Steam_Friends* steamFriends = get_steam_client()->steam_friends;
|
Steam_Friends* steamFriends = get_steam_client()->steam_friends;
|
||||||
|
|
||||||
@ -668,7 +668,7 @@ bool Steam_Overlay::FriendJoinable(std::pair<const Friend, friend_window_state>
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Steam_Overlay::IHaveLobby()
|
bool Steam_Overlay::got_lobby()
|
||||||
{
|
{
|
||||||
std::lock_guard<std::recursive_mutex> lock(global_mutex);
|
std::lock_guard<std::recursive_mutex> lock(global_mutex);
|
||||||
Steam_Friends* steamFriends = get_steam_client()->steam_friends;
|
Steam_Friends* steamFriends = get_steam_client()->steam_friends;
|
||||||
@ -681,7 +681,7 @@ bool Steam_Overlay::IHaveLobby()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Steam_Overlay::BuildContextMenu(Friend const& frd, friend_window_state& state)
|
void Steam_Overlay::build_friend_context_menu(Friend const& frd, friend_window_state& state)
|
||||||
{
|
{
|
||||||
if (ImGui::BeginPopupContextItem("Friends_ContextMenu", 1)) {
|
if (ImGui::BeginPopupContextItem("Friends_ContextMenu", 1)) {
|
||||||
// this is set to true if any button was clicked
|
// this is set to true if any button was clicked
|
||||||
@ -713,7 +713,6 @@ void Steam_Overlay::BuildContextMenu(Friend const& frd, friend_window_state& sta
|
|||||||
// user clicked on "accept game invite"
|
// user clicked on "accept game invite"
|
||||||
std::string translationJoin_tmp(translationJoin[current_language]);
|
std::string translationJoin_tmp(translationJoin[current_language]);
|
||||||
translationJoin_tmp.append("##PopupAcceptInvite");
|
translationJoin_tmp.append("##PopupAcceptInvite");
|
||||||
|
|
||||||
if (state.joinable && ImGui::Button(translationJoin_tmp.c_str())) {
|
if (state.joinable && ImGui::Button(translationJoin_tmp.c_str())) {
|
||||||
close_popup = true;
|
close_popup = true;
|
||||||
// don't bother adding this friend if the button "invite all" was clicked
|
// don't bother adding this friend if the button "invite all" was clicked
|
||||||
@ -733,7 +732,7 @@ void Steam_Overlay::BuildContextMenu(Friend const& frd, friend_window_state& sta
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Steam_Overlay::BuildFriendWindow(Friend const& frd, friend_window_state& state)
|
void Steam_Overlay::build_friend_window(Friend const& frd, friend_window_state& state)
|
||||||
{
|
{
|
||||||
if (!(state.window_state & window_state_show))
|
if (!(state.window_state & window_state_show))
|
||||||
return;
|
return;
|
||||||
@ -837,7 +836,7 @@ void Steam_Overlay::BuildFriendWindow(Friend const& frd, friend_window_state& st
|
|||||||
}
|
}
|
||||||
|
|
||||||
// set the position of the next notification
|
// set the position of the next notification
|
||||||
void Steam_Overlay::SetNextNotificationPos(float width, float height, float font_size, notification_type type, struct NotificationsIndexes &idx)
|
void Steam_Overlay::set_next_notification_pos(float width, float height, float font_size, notification_type type, struct NotificationsIndexes &idx)
|
||||||
{
|
{
|
||||||
// 0 on the y-axis is top, 0 on the x-axis is left
|
// 0 on the y-axis is top, 0 on the x-axis is left
|
||||||
|
|
||||||
@ -895,7 +894,7 @@ void Steam_Overlay::SetNextNotificationPos(float width, float height, float font
|
|||||||
ImGui::SetNextWindowPos(ImVec2( x, y ));
|
ImGui::SetNextWindowPos(ImVec2( x, y ));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Steam_Overlay::BuildNotifications(int width, int height)
|
void Steam_Overlay::build_notifications(int width, int height)
|
||||||
{
|
{
|
||||||
auto now = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch());
|
auto now = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch());
|
||||||
float font_size = ImGui::GetFontSize();
|
float font_size = ImGui::GetFontSize();
|
||||||
@ -905,7 +904,7 @@ void Steam_Overlay::BuildNotifications(int width, int height)
|
|||||||
for (auto it = notifications.begin(); it != notifications.end(); ++it) {
|
for (auto it = notifications.begin(); it != notifications.end(); ++it) {
|
||||||
auto elapsed_notif = now - it->start_time;
|
auto elapsed_notif = now - it->start_time;
|
||||||
|
|
||||||
SetNextNotificationPos(width, height, font_size, (notification_type)it->type, idx);
|
set_next_notification_pos(width, height, font_size, (notification_type)it->type, idx);
|
||||||
ImGui::SetNextWindowSize(ImVec2( width * Notification::width_percent, Notification::height * font_size ));
|
ImGui::SetNextWindowSize(ImVec2( width * Notification::width_percent, Notification::height * font_size ));
|
||||||
|
|
||||||
if ( elapsed_notif < Notification::fade_in) { // still appearing (fading in)
|
if ( elapsed_notif < Notification::fade_in) { // still appearing (fading in)
|
||||||
@ -987,22 +986,22 @@ void Steam_Overlay::BuildNotifications(int width, int height)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Steam_Overlay::CreateFonts()
|
void Steam_Overlay::create_fonts()
|
||||||
{
|
{
|
||||||
static bool configured_font = false;
|
static std::atomic<bool> create_fonts_called = false;
|
||||||
|
bool not_created_yet = false;
|
||||||
if (configured_font) return;
|
if (!create_fonts_called.compare_exchange_weak(not_created_yet, true)) return;
|
||||||
configured_font = true;
|
|
||||||
|
|
||||||
float font_size = settings->overlay_appearance.font_size;
|
float font_size = settings->overlay_appearance.font_size;
|
||||||
|
|
||||||
ImFontConfig fontcfg{};
|
static ImFontConfig fontcfg{};
|
||||||
fontcfg.PixelSnapH = true;
|
fontcfg.PixelSnapH = true;
|
||||||
fontcfg.OversampleH = 1;
|
fontcfg.OversampleH = 1;
|
||||||
fontcfg.OversampleV = 1;
|
fontcfg.OversampleV = 1;
|
||||||
fontcfg.SizePixels = font_size;
|
fontcfg.SizePixels = font_size;
|
||||||
|
|
||||||
ImFontGlyphRangesBuilder font_builder{};
|
static ImFontGlyphRangesBuilder font_builder{};
|
||||||
|
font_builder.AddRanges(fonts_atlas.GetGlyphRangesDefault());
|
||||||
for (auto &x : achievements) {
|
for (auto &x : achievements) {
|
||||||
font_builder.AddText(x.title.c_str());
|
font_builder.AddText(x.title.c_str());
|
||||||
font_builder.AddText(x.description.c_str());
|
font_builder.AddText(x.description.c_str());
|
||||||
@ -1047,9 +1046,7 @@ void Steam_Overlay::CreateFonts()
|
|||||||
font_builder.AddText(translationPlaying[i]);
|
font_builder.AddText(translationPlaying[i]);
|
||||||
font_builder.AddText(translationAutoAcceptFriendInvite[i]);
|
font_builder.AddText(translationAutoAcceptFriendInvite[i]);
|
||||||
}
|
}
|
||||||
font_builder.AddRanges(fonts_atlas.GetGlyphRangesDefault());
|
static ImVector<ImWchar> ranges{};
|
||||||
|
|
||||||
ImVector<ImWchar> ranges{};
|
|
||||||
font_builder.BuildRanges(&ranges);
|
font_builder.BuildRanges(&ranges);
|
||||||
|
|
||||||
fontcfg.GlyphRanges = ranges.Data;
|
fontcfg.GlyphRanges = ranges.Data;
|
||||||
@ -1063,7 +1060,7 @@ void Steam_Overlay::CreateFonts()
|
|||||||
reset_LastError();
|
reset_LastError();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Steam_Overlay::LoadAudio()
|
void Steam_Overlay::load_audio()
|
||||||
{
|
{
|
||||||
std::string file_path{};
|
std::string file_path{};
|
||||||
std::string file_name{};
|
std::string file_name{};
|
||||||
@ -1117,7 +1114,7 @@ static inline bool ImGuiHelper_BeginListBox(const char* label, int items_count)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Try to make this function as short as possible or it might affect game's fps.
|
// Try to make this function as short as possible or it might affect game's fps.
|
||||||
void Steam_Overlay::OverlayProc()
|
void Steam_Overlay::overlay_proc()
|
||||||
{
|
{
|
||||||
std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
|
std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
|
||||||
if (!Ready()) return;
|
if (!Ready()) return;
|
||||||
@ -1134,13 +1131,13 @@ void Steam_Overlay::OverlayProc()
|
|||||||
|
|
||||||
if (notifications.size()) {
|
if (notifications.size()) {
|
||||||
ImGui::PushFont(font_notif);
|
ImGui::PushFont(font_notif);
|
||||||
BuildNotifications(io.DisplaySize.x, io.DisplaySize.y);
|
build_notifications(io.DisplaySize.x, io.DisplaySize.y);
|
||||||
ImGui::PopFont();
|
ImGui::PopFont();
|
||||||
|
|
||||||
// after showing all notifications, and if we won't show the overlay
|
// after showing all notifications, and if we won't show the overlay
|
||||||
// then disable frame rendering
|
// then disable frame rendering
|
||||||
if (notifications.empty() && !show_overlay) {
|
if (notifications.empty() && !show_overlay) {
|
||||||
PRINT_DEBUG("Steam_Overlay::OverlayProc disabled frame processing (no request to show overlay and 0 notifications)\n");
|
PRINT_DEBUG("Steam_Overlay::overlay_proc disabled frame processing (no request to show overlay and 0 notifications)\n");
|
||||||
Steam_Overlay::allow_renderer_frame_processing(false);
|
Steam_Overlay::allow_renderer_frame_processing(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1236,13 +1233,13 @@ void Steam_Overlay::OverlayProc()
|
|||||||
ImGui::PushID(i.second.id-base_friend_window_id+base_friend_item_id);
|
ImGui::PushID(i.second.id-base_friend_window_id+base_friend_item_id);
|
||||||
|
|
||||||
ImGui::Selectable(i.second.window_title.c_str(), false, ImGuiSelectableFlags_AllowDoubleClick);
|
ImGui::Selectable(i.second.window_title.c_str(), false, ImGuiSelectableFlags_AllowDoubleClick);
|
||||||
BuildContextMenu(i.first, i.second);
|
build_friend_context_menu(i.first, i.second);
|
||||||
if (ImGui::IsItemClicked() && ImGui::IsMouseDoubleClicked(0)) {
|
if (ImGui::IsItemClicked() && ImGui::IsMouseDoubleClicked(0)) {
|
||||||
i.second.window_state |= window_state_show;
|
i.second.window_state |= window_state_show;
|
||||||
}
|
}
|
||||||
ImGui::PopID();
|
ImGui::PopID();
|
||||||
|
|
||||||
BuildFriendWindow(i.first, i.second);
|
build_friend_window(i.first, i.second);
|
||||||
});
|
});
|
||||||
ImGui::EndListBox();
|
ImGui::EndListBox();
|
||||||
}
|
}
|
||||||
@ -1439,8 +1436,8 @@ void Steam_Overlay::Callback(Common_Message *msg)
|
|||||||
friend_info->second.window_state |= window_state_need_attention;
|
friend_info->second.window_state |= window_state_need_attention;
|
||||||
}
|
}
|
||||||
|
|
||||||
AddChatMessageNotification(friend_info->first.name() + ": " + steam_message.message());
|
add_chat_message_notification(friend_info->first.name() + ": " + steam_message.message());
|
||||||
NotifySoundUserInvite(friend_info->second);
|
notify_sound_user_invite(friend_info->second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1519,10 +1516,10 @@ void Steam_Overlay::RunCallbacks()
|
|||||||
save_settings = false;
|
save_settings = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
i_have_lobby = IHaveLobby();
|
i_have_lobby = got_lobby();
|
||||||
std::for_each(friends.begin(), friends.end(), [this](std::pair<Friend const, friend_window_state> &i)
|
std::for_each(friends.begin(), friends.end(), [this](std::pair<Friend const, friend_window_state> &i)
|
||||||
{
|
{
|
||||||
i.second.joinable = FriendJoinable(i);
|
i.second.joinable = is_friend_joinable(i);
|
||||||
});
|
});
|
||||||
|
|
||||||
while (!has_friend_action.empty()) {
|
while (!has_friend_action.empty()) {
|
||||||
@ -1556,7 +1553,7 @@ void Steam_Overlay::RunCallbacks()
|
|||||||
}
|
}
|
||||||
// The user clicked on "Invite" (but invite all wasn't clicked)
|
// The user clicked on "Invite" (but invite all wasn't clicked)
|
||||||
if (friend_info->second.window_state & window_state_invite) {
|
if (friend_info->second.window_state & window_state_invite) {
|
||||||
InviteFriend(friend_id, steamFriends, steamMatchmaking);
|
invite_friend(friend_id, steamFriends, steamMatchmaking);
|
||||||
|
|
||||||
friend_info->second.window_state &= ~window_state_invite;
|
friend_info->second.window_state &= ~window_state_invite;
|
||||||
}
|
}
|
||||||
@ -1613,13 +1610,13 @@ void Steam_Overlay::RunCallbacks()
|
|||||||
for (auto &fr : friends) {
|
for (auto &fr : friends) {
|
||||||
if (fr.first.appid() == current_appid) { // friend is playing the same game
|
if (fr.first.appid() == current_appid) { // friend is playing the same game
|
||||||
uint64 friend_id = (uint64)fr.first.id();
|
uint64 friend_id = (uint64)fr.first.id();
|
||||||
InviteFriend(friend_id, steamFriends, steamMatchmaking);
|
invite_friend(friend_id, steamFriends, steamMatchmaking);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Steam_Overlay::InviteFriend(uint64 friend_id, class Steam_Friends* steamFriends, class Steam_Matchmaking* steamMatchmaking)
|
void Steam_Overlay::invite_friend(uint64 friend_id, class Steam_Friends* steamFriends, class Steam_Matchmaking* steamMatchmaking)
|
||||||
{
|
{
|
||||||
std::string connect_str = steamFriends->GetFriendRichPresence(settings->get_local_steam_id(), "connect");
|
std::string connect_str = steamFriends->GetFriendRichPresence(settings->get_local_steam_id(), "connect");
|
||||||
if (connect_str.length() > 0) {
|
if (connect_str.length() > 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user