Skip to content

Commit 9ecded1

Browse files
committed
The Pad+Lanes+Discord Megaupdate
1 parent f55d895 commit 9ecded1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+6175
-424
lines changed

Encore/CMakeLists.txt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,16 @@ file(COPY "Assets" DESTINATION ${CMAKE_BINARY_DIR}/Encore)
6161
target_include_directories(Encore PRIVATE "include" "src")
6262
if(WIN32)
6363
if (CMAKE_SIZEOF_VOID_P EQUAL 4)
64-
find_library(DISCORD-RPC NAMES discord-rpc PATHS "lib/discord-rpc/windows/x86/")
65-
file(COPY "lib/discord-rpc/windows/x86/discord-rpc.dll" DESTINATION ${CMAKE_BINARY_DIR}/Encore)
64+
find_library(DISCORD_GAME_SDK NAMES discord_game_sdk PATHS "lib/discord-rpc/windows/x86/")
65+
file(COPY "lib/discord-rpc/windows/x86/discord_game_sdk.dll" DESTINATION ${CMAKE_BINARY_DIR}/Encore)
6666
find_library(BASS NAMES bass PATHS "lib/bass/windows/x86/")
6767
file(COPY "lib/bass/windows/x86/bass.dll" DESTINATION ${CMAKE_BINARY_DIR}/Encore)
6868
find_library(BASSOPUS NAMES bassopus PATHS "lib/bass/windows/x86/")
6969
file(COPY "lib/bass/windows/x86/bassopus.dll" DESTINATION ${CMAKE_BINARY_DIR}/Encore)
7070
endif()
7171
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
72-
find_library(DISCORD-RPC NAMES discord-rpc PATHS "lib/discord-rpc/windows/x64/")
73-
file(COPY "lib/discord-rpc/windows/x64/discord-rpc.dll" DESTINATION ${CMAKE_BINARY_DIR}/Encore)
72+
find_library(DISCORD_GAME_SDK NAMES discord_game_sdk PATHS "lib/discord-rpc/windows/x64/")
73+
file(COPY "lib/discord-rpc/windows/x64/discord_game_sdk.dll" DESTINATION ${CMAKE_BINARY_DIR}/Encore)
7474
find_library(BASS NAMES bass PATHS "lib/bass/windows/x64/")
7575
file(COPY "lib/bass/windows/x64/bass.dll" DESTINATION ${CMAKE_BINARY_DIR}/Encore)
7676
find_library(BASSOPUS NAMES bassopus PATHS "lib/bass/windows/x64/")
@@ -79,8 +79,8 @@ if(WIN32)
7979
endif()
8080
if(UNIX AND NOT APPLE)
8181
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
82-
find_library(DISCORD-RPC NAMES discord-rpc PATHS "lib/discord-rpc/linux/x64")
83-
file(COPY "lib/discord-rpc/linux/x64/libdiscord-rpc.so" DESTINATION ${CMAKE_BINARY_DIR}/Encore)
82+
find_library(DISCORD_GAME_SDK NAMES discord_game_sdk PATHS "lib/discord-rpc/linux/x64")
83+
file(COPY "lib/discord-rpc/linux/x64/libdiscord_game_sdk.so" DESTINATION ${CMAKE_BINARY_DIR}/Encore)
8484
find_library(BASS NAMES bass PATHS "lib/bass/linux/x86_64")
8585
file(COPY "lib/bass/linux/x86_64/libbass.so" DESTINATION ${CMAKE_BINARY_DIR}/Encore)
8686
find_library(BASSOPUS NAMES bassopus PATHS "lib/bass/linux/x86_64")
@@ -89,8 +89,8 @@ if(UNIX AND NOT APPLE)
8989
endif()
9090
endif()
9191
if(APPLE)
92-
find_library(DISCORD-RPC NAMES discord-rpc PATHS "lib/discord-rpc/macos")
93-
file(COPY "lib/discord-rpc/macos/libdiscord-rpc.dylib" DESTINATION ${CMAKE_BINARY_DIR}/Encore)
92+
find_library(DISCORD_GAME_SDK NAMES discord_game_sdk PATHS "lib/discord-rpc/macos")
93+
file(COPY "lib/discord-rpc/macos/discord_game_sdk.dylib" DESTINATION ${CMAKE_BINARY_DIR}/Encore)
9494
find_library(BASS NAMES bass PATHS "lib/bass/macos")
9595
file(COPY "lib/bass/macos/libbass.dylib" DESTINATION ${CMAKE_BINARY_DIR}/Encore)
9696
find_library(BASSOPUS NAMES bassopus PATHS "lib/bass/macos")
@@ -128,5 +128,5 @@ target_compile_definitions(${PROJECT_NAME} PRIVATE
128128

129129
set_property(TARGET Encore PROPERTY CXX_STANDARD 20)
130130

131-
target_link_libraries(Encore raylib nlohmann_json::nlohmann_json ${BASS} ${BASSOPUS} ${DISCORD-RPC})
131+
target_link_libraries(Encore raylib nlohmann_json::nlohmann_json ${BASS} ${BASSOPUS} ${DISCORD_GAME_SDK})
132132

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
#if !defined(_CRT_SECURE_NO_WARNINGS)
2+
#define _CRT_SECURE_NO_WARNINGS
3+
#endif
4+
5+
#include "achievement_manager.h"
6+
7+
#include "core.h"
8+
9+
#include <cstring>
10+
#include <memory>
11+
12+
namespace discord {
13+
14+
class AchievementEvents final {
15+
public:
16+
static void DISCORD_CALLBACK OnUserAchievementUpdate(void* callbackData,
17+
DiscordUserAchievement* userAchievement)
18+
{
19+
auto* core = reinterpret_cast<Core*>(callbackData);
20+
if (!core) {
21+
return;
22+
}
23+
24+
auto& module = core->AchievementManager();
25+
module.OnUserAchievementUpdate(*reinterpret_cast<UserAchievement const*>(userAchievement));
26+
}
27+
};
28+
29+
IDiscordAchievementEvents AchievementManager::events_{
30+
&AchievementEvents::OnUserAchievementUpdate,
31+
};
32+
33+
void AchievementManager::SetUserAchievement(Snowflake achievementId,
34+
std::uint8_t percentComplete,
35+
std::function<void(Result)> callback)
36+
{
37+
static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
38+
std::unique_ptr<std::function<void(Result)>> cb(
39+
reinterpret_cast<std::function<void(Result)>*>(callbackData));
40+
if (!cb || !(*cb)) {
41+
return;
42+
}
43+
(*cb)(static_cast<Result>(result));
44+
};
45+
std::unique_ptr<std::function<void(Result)>> cb{};
46+
cb.reset(new std::function<void(Result)>(std::move(callback)));
47+
internal_->set_user_achievement(
48+
internal_, achievementId, percentComplete, cb.release(), wrapper);
49+
}
50+
51+
void AchievementManager::FetchUserAchievements(std::function<void(Result)> callback)
52+
{
53+
static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
54+
std::unique_ptr<std::function<void(Result)>> cb(
55+
reinterpret_cast<std::function<void(Result)>*>(callbackData));
56+
if (!cb || !(*cb)) {
57+
return;
58+
}
59+
(*cb)(static_cast<Result>(result));
60+
};
61+
std::unique_ptr<std::function<void(Result)>> cb{};
62+
cb.reset(new std::function<void(Result)>(std::move(callback)));
63+
internal_->fetch_user_achievements(internal_, cb.release(), wrapper);
64+
}
65+
66+
void AchievementManager::CountUserAchievements(std::int32_t* count)
67+
{
68+
if (!count) {
69+
return;
70+
}
71+
72+
internal_->count_user_achievements(internal_, reinterpret_cast<int32_t*>(count));
73+
}
74+
75+
Result AchievementManager::GetUserAchievement(Snowflake userAchievementId,
76+
UserAchievement* userAchievement)
77+
{
78+
if (!userAchievement) {
79+
return Result::InternalError;
80+
}
81+
82+
auto result = internal_->get_user_achievement(
83+
internal_, userAchievementId, reinterpret_cast<DiscordUserAchievement*>(userAchievement));
84+
return static_cast<Result>(result);
85+
}
86+
87+
Result AchievementManager::GetUserAchievementAt(std::int32_t index,
88+
UserAchievement* userAchievement)
89+
{
90+
if (!userAchievement) {
91+
return Result::InternalError;
92+
}
93+
94+
auto result = internal_->get_user_achievement_at(
95+
internal_, index, reinterpret_cast<DiscordUserAchievement*>(userAchievement));
96+
return static_cast<Result>(result);
97+
}
98+
99+
} // namespace discord
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#pragma once
2+
3+
#include "types.h"
4+
5+
namespace discord {
6+
7+
class AchievementManager final {
8+
public:
9+
~AchievementManager() = default;
10+
11+
void SetUserAchievement(Snowflake achievementId,
12+
std::uint8_t percentComplete,
13+
std::function<void(Result)> callback);
14+
void FetchUserAchievements(std::function<void(Result)> callback);
15+
void CountUserAchievements(std::int32_t* count);
16+
Result GetUserAchievement(Snowflake userAchievementId, UserAchievement* userAchievement);
17+
Result GetUserAchievementAt(std::int32_t index, UserAchievement* userAchievement);
18+
19+
Event<UserAchievement const&> OnUserAchievementUpdate;
20+
21+
private:
22+
friend class Core;
23+
24+
AchievementManager() = default;
25+
AchievementManager(AchievementManager const& rhs) = delete;
26+
AchievementManager& operator=(AchievementManager const& rhs) = delete;
27+
AchievementManager(AchievementManager&& rhs) = delete;
28+
AchievementManager& operator=(AchievementManager&& rhs) = delete;
29+
30+
IDiscordAchievementManager* internal_;
31+
static IDiscordAchievementEvents events_;
32+
};
33+
34+
} // namespace discord
Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
#if !defined(_CRT_SECURE_NO_WARNINGS)
2+
#define _CRT_SECURE_NO_WARNINGS
3+
#endif
4+
5+
#include "activity_manager.h"
6+
7+
#include "core.h"
8+
9+
#include <cstring>
10+
#include <memory>
11+
12+
namespace discord {
13+
14+
class ActivityEvents final {
15+
public:
16+
static void DISCORD_CALLBACK OnActivityJoin(void* callbackData, char const* secret)
17+
{
18+
auto* core = reinterpret_cast<Core*>(callbackData);
19+
if (!core) {
20+
return;
21+
}
22+
23+
auto& module = core->ActivityManager();
24+
module.OnActivityJoin(static_cast<const char*>(secret));
25+
}
26+
27+
static void DISCORD_CALLBACK OnActivitySpectate(void* callbackData, char const* secret)
28+
{
29+
auto* core = reinterpret_cast<Core*>(callbackData);
30+
if (!core) {
31+
return;
32+
}
33+
34+
auto& module = core->ActivityManager();
35+
module.OnActivitySpectate(static_cast<const char*>(secret));
36+
}
37+
38+
static void DISCORD_CALLBACK OnActivityJoinRequest(void* callbackData, DiscordUser* user)
39+
{
40+
auto* core = reinterpret_cast<Core*>(callbackData);
41+
if (!core) {
42+
return;
43+
}
44+
45+
auto& module = core->ActivityManager();
46+
module.OnActivityJoinRequest(*reinterpret_cast<User const*>(user));
47+
}
48+
49+
static void DISCORD_CALLBACK OnActivityInvite(void* callbackData,
50+
EDiscordActivityActionType type,
51+
DiscordUser* user,
52+
DiscordActivity* activity)
53+
{
54+
auto* core = reinterpret_cast<Core*>(callbackData);
55+
if (!core) {
56+
return;
57+
}
58+
59+
auto& module = core->ActivityManager();
60+
module.OnActivityInvite(static_cast<ActivityActionType>(type),
61+
*reinterpret_cast<User const*>(user),
62+
*reinterpret_cast<Activity const*>(activity));
63+
}
64+
};
65+
66+
IDiscordActivityEvents ActivityManager::events_{
67+
&ActivityEvents::OnActivityJoin,
68+
&ActivityEvents::OnActivitySpectate,
69+
&ActivityEvents::OnActivityJoinRequest,
70+
&ActivityEvents::OnActivityInvite,
71+
};
72+
73+
Result ActivityManager::RegisterCommand(char const* command)
74+
{
75+
auto result = internal_->register_command(internal_, const_cast<char*>(command));
76+
return static_cast<Result>(result);
77+
}
78+
79+
Result ActivityManager::RegisterSteam(std::uint32_t steamId)
80+
{
81+
auto result = internal_->register_steam(internal_, steamId);
82+
return static_cast<Result>(result);
83+
}
84+
85+
void ActivityManager::UpdateActivity(Activity const& activity, std::function<void(Result)> callback)
86+
{
87+
static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
88+
std::unique_ptr<std::function<void(Result)>> cb(
89+
reinterpret_cast<std::function<void(Result)>*>(callbackData));
90+
if (!cb || !(*cb)) {
91+
return;
92+
}
93+
(*cb)(static_cast<Result>(result));
94+
};
95+
std::unique_ptr<std::function<void(Result)>> cb{};
96+
cb.reset(new std::function<void(Result)>(std::move(callback)));
97+
internal_->update_activity(internal_,
98+
reinterpret_cast<DiscordActivity*>(const_cast<Activity*>(&activity)),
99+
cb.release(),
100+
wrapper);
101+
}
102+
103+
void ActivityManager::ClearActivity(std::function<void(Result)> callback)
104+
{
105+
static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
106+
std::unique_ptr<std::function<void(Result)>> cb(
107+
reinterpret_cast<std::function<void(Result)>*>(callbackData));
108+
if (!cb || !(*cb)) {
109+
return;
110+
}
111+
(*cb)(static_cast<Result>(result));
112+
};
113+
std::unique_ptr<std::function<void(Result)>> cb{};
114+
cb.reset(new std::function<void(Result)>(std::move(callback)));
115+
internal_->clear_activity(internal_, cb.release(), wrapper);
116+
}
117+
118+
void ActivityManager::SendRequestReply(UserId userId,
119+
ActivityJoinRequestReply reply,
120+
std::function<void(Result)> callback)
121+
{
122+
static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
123+
std::unique_ptr<std::function<void(Result)>> cb(
124+
reinterpret_cast<std::function<void(Result)>*>(callbackData));
125+
if (!cb || !(*cb)) {
126+
return;
127+
}
128+
(*cb)(static_cast<Result>(result));
129+
};
130+
std::unique_ptr<std::function<void(Result)>> cb{};
131+
cb.reset(new std::function<void(Result)>(std::move(callback)));
132+
internal_->send_request_reply(internal_,
133+
userId,
134+
static_cast<EDiscordActivityJoinRequestReply>(reply),
135+
cb.release(),
136+
wrapper);
137+
}
138+
139+
void ActivityManager::SendInvite(UserId userId,
140+
ActivityActionType type,
141+
char const* content,
142+
std::function<void(Result)> callback)
143+
{
144+
static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
145+
std::unique_ptr<std::function<void(Result)>> cb(
146+
reinterpret_cast<std::function<void(Result)>*>(callbackData));
147+
if (!cb || !(*cb)) {
148+
return;
149+
}
150+
(*cb)(static_cast<Result>(result));
151+
};
152+
std::unique_ptr<std::function<void(Result)>> cb{};
153+
cb.reset(new std::function<void(Result)>(std::move(callback)));
154+
internal_->send_invite(internal_,
155+
userId,
156+
static_cast<EDiscordActivityActionType>(type),
157+
const_cast<char*>(content),
158+
cb.release(),
159+
wrapper);
160+
}
161+
162+
void ActivityManager::AcceptInvite(UserId userId, std::function<void(Result)> callback)
163+
{
164+
static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
165+
std::unique_ptr<std::function<void(Result)>> cb(
166+
reinterpret_cast<std::function<void(Result)>*>(callbackData));
167+
if (!cb || !(*cb)) {
168+
return;
169+
}
170+
(*cb)(static_cast<Result>(result));
171+
};
172+
std::unique_ptr<std::function<void(Result)>> cb{};
173+
cb.reset(new std::function<void(Result)>(std::move(callback)));
174+
internal_->accept_invite(internal_, userId, cb.release(), wrapper);
175+
}
176+
177+
} // namespace discord

0 commit comments

Comments
 (0)