mirror of
https://github.com/mkxp-z/mkxp-z.git
synced 2025-04-21 21:52:04 +02:00
Remove Discord support
I'm a moron. GPL, yo.
This commit is contained in:
parent
9deed44f77
commit
da9b1eeb71
16 changed files with 2 additions and 680 deletions
|
@ -92,10 +92,6 @@ void fileIntBindingInit();
|
||||||
void MiniFFIBindingInit();
|
void MiniFFIBindingInit();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_DISCORDSDK
|
|
||||||
void DiscordBindingInit();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_STEAMWORKS
|
#ifdef HAVE_STEAMWORKS
|
||||||
void CUSLBindingInit();
|
void CUSLBindingInit();
|
||||||
#endif
|
#endif
|
||||||
|
@ -146,10 +142,6 @@ static void mriBindingInit() {
|
||||||
MiniFFIBindingInit();
|
MiniFFIBindingInit();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_DISCORDSDK
|
|
||||||
DiscordBindingInit();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_STEAMWORKS
|
#ifdef HAVE_STEAMWORKS
|
||||||
CUSLBindingInit();
|
CUSLBindingInit();
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -57,15 +57,4 @@ DECL_TYPE(MiniFFI);
|
||||||
#define MiniFFIType "MiniFFI"
|
#define MiniFFIType "MiniFFI"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_DISCORDSDK
|
|
||||||
|
|
||||||
#if RAPI_FULL > 187
|
|
||||||
DECL_TYPE(DCActivity);
|
|
||||||
|
|
||||||
#else
|
|
||||||
#define DiscordActivityType "DCActivity"
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // BINDINGTYPES_H
|
#endif // BINDINGTYPES_H
|
||||||
|
|
|
@ -1,280 +0,0 @@
|
||||||
#include <discord_game_sdk.h>
|
|
||||||
|
|
||||||
#include "binding-types.h"
|
|
||||||
#include "binding-util.h"
|
|
||||||
#include "discordstate.h"
|
|
||||||
#include "sharedstate.h"
|
|
||||||
|
|
||||||
// NYI
|
|
||||||
void discordResultCb(void *callback_data, enum EDiscordResult result) {}
|
|
||||||
|
|
||||||
#if RAPI_FULL > 187
|
|
||||||
DEF_TYPE_CUSTOMFREE(DCActivity, free);
|
|
||||||
#else
|
|
||||||
DEF_ALLOCFUNC_CUSTOMFREE(DCActivity, free);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
RB_METHOD(DiscordConnected) {
|
|
||||||
RB_UNUSED_PARAM;
|
|
||||||
|
|
||||||
// Checking to make sure callbacks have actually fired
|
|
||||||
return rb_bool_new(shState->discord().userId());
|
|
||||||
}
|
|
||||||
|
|
||||||
RB_METHOD(DiscordGetUsername) {
|
|
||||||
RB_UNUSED_PARAM;
|
|
||||||
|
|
||||||
return rb_str_new_cstr(shState->discord().userName().c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
RB_METHOD(DiscordGetDiscriminator) {
|
|
||||||
RB_UNUSED_PARAM;
|
|
||||||
|
|
||||||
return rb_str_new_cstr(shState->discord().userDiscrim().c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
RB_METHOD(DiscordGetUserId) {
|
|
||||||
RB_UNUSED_PARAM;
|
|
||||||
|
|
||||||
return LL2NUM(shState->discord().userId());
|
|
||||||
}
|
|
||||||
|
|
||||||
void bitmapInitProps(Bitmap *b, VALUE self);
|
|
||||||
|
|
||||||
RB_METHOD(DiscordGetUserAvatar) {
|
|
||||||
RB_UNUSED_PARAM;
|
|
||||||
int size = 32;
|
|
||||||
rb_get_args(argc, argv, "|i", &size RB_ARG_END);
|
|
||||||
|
|
||||||
Bitmap *result = shState->discord().userAvatar(size);
|
|
||||||
if (!result)
|
|
||||||
return RUBY_Qnil;
|
|
||||||
|
|
||||||
VALUE ret = wrapObject(result, BitmapType);
|
|
||||||
bitmapInitProps(result, ret);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
RB_METHOD(DiscordActivitySend) {
|
|
||||||
RB_UNUSED_PARAM;
|
|
||||||
IDiscordActivityManager *am = shState->discord().activityManager();
|
|
||||||
|
|
||||||
DiscordActivity *activity = getPrivateData<DiscordActivity>(self);
|
|
||||||
|
|
||||||
if (am)
|
|
||||||
am->update_activity(am, activity, 0, discordResultCb);
|
|
||||||
|
|
||||||
return Qnil;
|
|
||||||
}
|
|
||||||
|
|
||||||
RB_METHOD(DiscordActivityInitialize) {
|
|
||||||
RB_UNUSED_PARAM;
|
|
||||||
|
|
||||||
DiscordActivity *activity = ALLOC(DiscordActivity);
|
|
||||||
setPrivateData(self, activity);
|
|
||||||
|
|
||||||
memset(activity, 0, sizeof(DiscordActivity));
|
|
||||||
|
|
||||||
activity->type = DiscordActivityType_Playing;
|
|
||||||
|
|
||||||
if (rb_block_given_p()) {
|
|
||||||
rb_yield(self);
|
|
||||||
DiscordActivitySend(0, 0, self);
|
|
||||||
};
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
RB_METHOD(DiscordActivityInitializeCopy) {
|
|
||||||
RB_UNUSED_PARAM;
|
|
||||||
|
|
||||||
rb_check_argc(argc, 1);
|
|
||||||
VALUE origObj = argv[0];
|
|
||||||
|
|
||||||
if (!OBJ_INIT_COPY(self, origObj))
|
|
||||||
return self;
|
|
||||||
|
|
||||||
DiscordActivity *orig = getPrivateData<DiscordActivity>(origObj);
|
|
||||||
DiscordActivity *s = ALLOC(DiscordActivity);
|
|
||||||
|
|
||||||
memcpy(s, orig, sizeof(DiscordActivity));
|
|
||||||
|
|
||||||
setPrivateData(self, s);
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
RB_METHOD(DiscordActivityClear) {
|
|
||||||
RB_UNUSED_PARAM;
|
|
||||||
IDiscordActivityManager *am = shState->discord().activityManager();
|
|
||||||
if (am)
|
|
||||||
am->clear_activity(am, 0, discordResultCb);
|
|
||||||
|
|
||||||
return Qnil;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define DEF_DCPROP_ACTPARTYSZ(n) \
|
|
||||||
RB_METHOD(DiscordActivityGetParty##n) { \
|
|
||||||
RB_UNUSED_PARAM; \
|
|
||||||
DiscordActivity *p = getPrivateData<DiscordActivity>(self); \
|
|
||||||
return INT2NUM(p->party.size.n); \
|
|
||||||
} \
|
|
||||||
RB_METHOD(DiscordActivitySetParty##n) { \
|
|
||||||
RB_UNUSED_PARAM; \
|
|
||||||
int num; \
|
|
||||||
rb_get_args(argc, argv, "i", &num); \
|
|
||||||
DiscordActivity *p = getPrivateData<DiscordActivity>(self); \
|
|
||||||
p->party.size.n = num; \
|
|
||||||
return INT2NUM(num); \
|
|
||||||
}
|
|
||||||
|
|
||||||
DEF_DCPROP_ACTPARTYSZ(current_size);
|
|
||||||
DEF_DCPROP_ACTPARTYSZ(max_size);
|
|
||||||
|
|
||||||
#define DEF_DCPROP_S(basename, propname, maxsz) \
|
|
||||||
RB_METHOD(Discord##basename##Get##propname) { \
|
|
||||||
RB_UNUSED_PARAM; \
|
|
||||||
Discord##basename *p = getPrivateData<Discord##basename>(self); \
|
|
||||||
return rb_str_new_cstr(p->propname); \
|
|
||||||
} \
|
|
||||||
RB_METHOD(Discord##basename##Set##propname) { \
|
|
||||||
RB_UNUSED_PARAM; \
|
|
||||||
VALUE str; \
|
|
||||||
rb_scan_args(argc, argv, "1", &str); \
|
|
||||||
SafeStringValue(str); \
|
|
||||||
Discord##basename *p = getPrivateData<Discord##basename>(self); \
|
|
||||||
strncpy(p->propname, RSTRING_PTR(str), maxsz); \
|
|
||||||
return str; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define DEF_DCPROP_S_SUB(basename, subname, propname, maxsz) \
|
|
||||||
RB_METHOD(Discord##basename##Get##subname##_##propname) { \
|
|
||||||
RB_UNUSED_PARAM; \
|
|
||||||
Discord##basename *p = getPrivateData<Discord##basename>(self); \
|
|
||||||
return rb_str_new_cstr(p->subname.propname); \
|
|
||||||
} \
|
|
||||||
RB_METHOD(Discord##basename##Set##subname##_##propname) { \
|
|
||||||
RB_UNUSED_PARAM; \
|
|
||||||
VALUE str; \
|
|
||||||
rb_scan_args(argc, argv, "1", &str); \
|
|
||||||
SafeStringValue(str); \
|
|
||||||
Discord##basename *p = getPrivateData<Discord##basename>(self); \
|
|
||||||
strncpy(p->subname.propname, RSTRING_PTR(str), maxsz); \
|
|
||||||
return str; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define DEF_DCPROP_I(basename, propname, convtype, cast) \
|
|
||||||
RB_METHOD(Discord##basename##Get##propname) { \
|
|
||||||
RB_UNUSED_PARAM; \
|
|
||||||
Discord##basename *p = getPrivateData<Discord##basename>(self); \
|
|
||||||
return convtype##2NUM(p->propname); \
|
|
||||||
} \
|
|
||||||
RB_METHOD(Discord##basename##Set##propname) { \
|
|
||||||
RB_UNUSED_PARAM; \
|
|
||||||
VALUE num; \
|
|
||||||
rb_scan_args(argc, argv, "1", &num); \
|
|
||||||
Discord##basename *p = getPrivateData<Discord##basename>(self); \
|
|
||||||
p->propname = (cast)NUM2##convtype(num); \
|
|
||||||
return num; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define DEF_DCPROP_I_SUB(basename, subname, propname, convtype, cast) \
|
|
||||||
RB_METHOD(Discord##basename##Get##subname##_##propname) { \
|
|
||||||
RB_UNUSED_PARAM; \
|
|
||||||
Discord##basename *p = getPrivateData<Discord##basename>(self); \
|
|
||||||
return convtype##2NUM(p->subname.propname); \
|
|
||||||
} \
|
|
||||||
RB_METHOD(Discord##basename##Set##subname##_##propname) { \
|
|
||||||
RB_UNUSED_PARAM; \
|
|
||||||
VALUE num; \
|
|
||||||
rb_scan_args(argc, argv, "1", &num); \
|
|
||||||
Discord##basename *p = getPrivateData<Discord##basename>(self); \
|
|
||||||
p->subname.propname = (cast)NUM2##convtype(num); \
|
|
||||||
return num; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define DEF_DCPROP_B(basename, propname) \
|
|
||||||
RB_METHOD(Discord##basename##Get##propname) { \
|
|
||||||
RB_UNUSED_PARAM; \
|
|
||||||
Discord##basename *p = getPrivateData<Discord##basename>(self); \
|
|
||||||
return rb_bool_new(p->propname); \
|
|
||||||
} \
|
|
||||||
RB_METHOD(Discord##basename##Set##propname) { \
|
|
||||||
RB_UNUSED_PARAM; \
|
|
||||||
bool b; \
|
|
||||||
rb_get_args(argc, argv, "b", &b RB_ARG_END); \
|
|
||||||
Discord##basename *p = getPrivateData<Discord##basename>(self); \
|
|
||||||
p->propname = b; \
|
|
||||||
return rb_bool_new(b); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define DEF_DCPROP_B_SUB(basename, propname, subname) \
|
|
||||||
RB_METHOD(Discord##basename##Get##propname) { \
|
|
||||||
RB_UNUSED_PARAM; \
|
|
||||||
Discord##basename *p = getPrivateData<Discord##basename>(self); \
|
|
||||||
return rb_bool_new(p->subname.propname); \
|
|
||||||
} \
|
|
||||||
RB_METHOD(Discord##basename##Set##propname) { \
|
|
||||||
RB_UNUSED_PARAM; \
|
|
||||||
bool b; \
|
|
||||||
rb_get_args(argc, argv, "b", &b RB_ARG_END); \
|
|
||||||
Discord##basename *p = getPrivateData<Discord##basename>(self); \
|
|
||||||
p->subname.propname = b; \
|
|
||||||
return rb_bool_new(b); \
|
|
||||||
}
|
|
||||||
|
|
||||||
DEF_DCPROP_S(Activity, state, 128);
|
|
||||||
DEF_DCPROP_S(Activity, details, 128);
|
|
||||||
DEF_DCPROP_S_SUB(Activity, assets, large_image, 128);
|
|
||||||
DEF_DCPROP_S_SUB(Activity, assets, large_text, 128);
|
|
||||||
DEF_DCPROP_S_SUB(Activity, assets, small_image, 128);
|
|
||||||
DEF_DCPROP_S_SUB(Activity, assets, small_text, 128);
|
|
||||||
DEF_DCPROP_S_SUB(Activity, party, id, 128);
|
|
||||||
|
|
||||||
DEF_DCPROP_I(Activity, type, INT, EDiscordActivityType);
|
|
||||||
DEF_DCPROP_I_SUB(Activity, timestamps, start, LL, DiscordTimestamp);
|
|
||||||
DEF_DCPROP_I_SUB(Activity, timestamps, end, LL, DiscordTimestamp);
|
|
||||||
DEF_DCPROP_B(Activity, instance);
|
|
||||||
|
|
||||||
#define BIND_DCPROP(basename, b, f) \
|
|
||||||
_rb_define_method(activityClass, b, Discord##basename##Get##f); \
|
|
||||||
_rb_define_method(activityClass, b "=", Discord##basename##Set##f);
|
|
||||||
|
|
||||||
void DiscordBindingInit() {
|
|
||||||
VALUE mod = rb_define_module("Discord");
|
|
||||||
_rb_define_module_function(mod, "connected?", DiscordConnected);
|
|
||||||
_rb_define_module_function(mod, "user_name", DiscordGetUsername);
|
|
||||||
_rb_define_module_function(mod, "user_discriminator",
|
|
||||||
DiscordGetDiscriminator);
|
|
||||||
_rb_define_module_function(mod, "user_id", DiscordGetUserId);
|
|
||||||
_rb_define_module_function(mod, "user_avatar", DiscordGetUserAvatar);
|
|
||||||
|
|
||||||
VALUE activityClass = rb_define_class_under(mod, "Activity", rb_cObject);
|
|
||||||
#if RAPI_FULL > 187
|
|
||||||
rb_define_alloc_func(activityClass, classAllocate<&DCActivityType>);
|
|
||||||
#else
|
|
||||||
rb_define_alloc_func(activityClass, DCActivityAllocate);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
_rb_define_method(activityClass, "initialize", DiscordActivityInitialize);
|
|
||||||
_rb_define_method(activityClass, "initialize_copy",
|
|
||||||
DiscordActivityInitializeCopy);
|
|
||||||
|
|
||||||
rb_define_class_method(activityClass, "clear", DiscordActivityClear);
|
|
||||||
|
|
||||||
_rb_define_method(activityClass, "send", DiscordActivitySend);
|
|
||||||
|
|
||||||
BIND_DCPROP(Activity, "state", state);
|
|
||||||
BIND_DCPROP(Activity, "details", details);
|
|
||||||
BIND_DCPROP(Activity, "large_image", assets_large_image);
|
|
||||||
BIND_DCPROP(Activity, "large_text", assets_large_text);
|
|
||||||
BIND_DCPROP(Activity, "small_image", assets_small_image);
|
|
||||||
BIND_DCPROP(Activity, "small_text", assets_small_text);
|
|
||||||
BIND_DCPROP(Activity, "party_id", party_id);
|
|
||||||
BIND_DCPROP(Activity, "party_currentsize", Partycurrent_size);
|
|
||||||
BIND_DCPROP(Activity, "party_maxsize", Partymax_size);
|
|
||||||
|
|
||||||
BIND_DCPROP(Activity, "type", type);
|
|
||||||
BIND_DCPROP(Activity, "start_time", timestamps_start);
|
|
||||||
BIND_DCPROP(Activity, "end_time", timestamps_end);
|
|
||||||
BIND_DCPROP(Activity, "instance", instance);
|
|
||||||
}
|
|
|
@ -37,10 +37,6 @@ binding_source = [files(
|
||||||
'tilemapvx-binding.cpp'
|
'tilemapvx-binding.cpp'
|
||||||
)]
|
)]
|
||||||
|
|
||||||
if discord == true
|
|
||||||
binding_source += files('discord-binding.cpp')
|
|
||||||
endif
|
|
||||||
|
|
||||||
if steamworks == true
|
if steamworks == true
|
||||||
binding_source += files('cusl-binding.cpp')
|
binding_source += files('cusl-binding.cpp')
|
||||||
endif
|
endif
|
||||||
|
|
15
meson.build
15
meson.build
|
@ -26,21 +26,6 @@ win64 = (sizeof['void*'] != sizeof['long'])
|
||||||
# Ext libs
|
# Ext libs
|
||||||
# ====================
|
# ====================
|
||||||
|
|
||||||
# DISCORD
|
|
||||||
|
|
||||||
discord = false
|
|
||||||
discord_libpath = get_option('discord_sdk_path')
|
|
||||||
if discord_libpath != ''
|
|
||||||
discordlib = compilers['cpp'].find_library('discord_game_sdk', required: false, dirs: [discord_libpath+'/lib/x86', discord_libpath+'/lib/x86_64'])
|
|
||||||
|
|
||||||
if discordlib.found() == true
|
|
||||||
global_include_dirs += include_directories(discord_libpath+'/c')
|
|
||||||
global_args += ['-I@0@/c'.format(discord_libpath), '-DHAVE_DISCORDSDK']
|
|
||||||
global_dependencies += discordlib
|
|
||||||
discord = true
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
# STEAMWORKS
|
# STEAMWORKS
|
||||||
|
|
||||||
steamworks = false
|
steamworks = false
|
||||||
|
|
|
@ -18,7 +18,6 @@ option('workdir_current', type: 'boolean', value: false, description: 'Keep curr
|
||||||
|
|
||||||
option('static_executable', type: 'boolean', value: false, description: 'Build a static executable (Windows-only)')
|
option('static_executable', type: 'boolean', value: false, description: 'Build a static executable (Windows-only)')
|
||||||
option('independent_appimage', type: 'boolean', value: true, description: 'Set current directory to the original location of the AppImage when contained within one')
|
option('independent_appimage', type: 'boolean', value: true, description: 'Set current directory to the original location of the AppImage when contained within one')
|
||||||
option('discord_sdk_path', type: 'string', value: '', description: 'Path to Discord GameSDK')
|
option('steamworks_path', type: 'string', value: '', description: 'Path to Steamshim')
|
||||||
option('steamworks_path', type: 'string', value: '', description: 'Path to Steamworks SDK')
|
|
||||||
option('steam_appid', type: 'string', value: '0', description: 'Steam application ID.')
|
option('steam_appid', type: 'string', value: '0', description: 'Steam application ID.')
|
||||||
option('appimagekit_path', type: 'string', value: '', description: 'Path to AppImageKit, used for building AppImages')
|
option('appimagekit_path', type: 'string', value: '', description: 'Path to AppImageKit, used for building AppImages')
|
||||||
|
|
|
@ -334,14 +334,6 @@
|
||||||
//
|
//
|
||||||
// "execName": "Game",
|
// "execName": "Game",
|
||||||
|
|
||||||
|
|
||||||
// The Discord Client ID for your application. If left undefined,
|
|
||||||
// mkxp-z's Client ID is used by default.
|
|
||||||
// Only has an effect if mkxp-z is built with Discord support.
|
|
||||||
//
|
|
||||||
// "discordClientId": 1234567890,
|
|
||||||
|
|
||||||
|
|
||||||
// The game's Steam AppID.
|
// The game's Steam AppID.
|
||||||
//
|
//
|
||||||
// If the ID was specified at build time, this setting is
|
// If the ID was specified at build time, this setting is
|
||||||
|
|
1
nativefiledialog
Submodule
1
nativefiledialog
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 67345b80ebb429ecc2aeda94c478b3bcc5f7888e
|
|
@ -26,10 +26,6 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#ifdef HAVE_DISCORDSDK
|
|
||||||
#include <discord_game_sdk.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct Config {
|
struct Config {
|
||||||
int rgssVersion;
|
int rgssVersion;
|
||||||
|
|
||||||
|
@ -87,10 +83,6 @@ struct Config {
|
||||||
|
|
||||||
bool useScriptNames;
|
bool useScriptNames;
|
||||||
|
|
||||||
#ifdef HAVE_DISCORDSDK
|
|
||||||
DiscordClientId discordClientId;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_STEAMWORKS
|
#ifdef HAVE_STEAMWORKS
|
||||||
unsigned int steamAppId;
|
unsigned int steamAppId;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -9,11 +9,6 @@
|
||||||
#import "sdl-util.h"
|
#import "sdl-util.h"
|
||||||
#import "util.h"
|
#import "util.h"
|
||||||
|
|
||||||
#ifdef HAVE_DISCORDSDK
|
|
||||||
#import "discordstate.h"
|
|
||||||
#import <discord_game_sdk.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
OFString *prefPath(const char *org, const char *app) {
|
OFString *prefPath(const char *org, const char *app) {
|
||||||
char *path = SDL_GetPrefPath(org, app);
|
char *path = SDL_GetPrefPath(org, app);
|
||||||
if (!path)
|
if (!path)
|
||||||
|
@ -83,9 +78,6 @@ void Config::read(int argc, char *argv[]) {
|
||||||
@"customScript" : @"",
|
@"customScript" : @"",
|
||||||
@"pathCache" : @true,
|
@"pathCache" : @true,
|
||||||
@"encryptedGraphics" : @false,
|
@"encryptedGraphics" : @false,
|
||||||
#ifdef HAVE_DISCORDSDK
|
|
||||||
@"discordClientId" : @DEFAULT_CLIENT_ID,
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_STEAMWORKS
|
#ifdef HAVE_STEAMWORKS
|
||||||
@"steamAppId" : @0,
|
@"steamAppId" : @0,
|
||||||
#endif
|
#endif
|
||||||
|
@ -189,9 +181,6 @@ void Config::read(int argc, char *argv[]) {
|
||||||
glVersion.major = 3;
|
glVersion.major = 3;
|
||||||
glVersion.minor = 3;
|
glVersion.minor = 3;
|
||||||
}
|
}
|
||||||
#ifdef HAVE_DISCORDSDK
|
|
||||||
SET_OPT(discordClientId, longLongValue);
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_STEAMWORKS
|
#ifdef HAVE_STEAMWORKS
|
||||||
SET_OPT(steamAppId, uInt32Value);
|
SET_OPT(steamAppId, uInt32Value);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,263 +0,0 @@
|
||||||
#include <discord_game_sdk.h>
|
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
#include "eventthread.h"
|
|
||||||
#include "discordstate.h"
|
|
||||||
#include "exception.h"
|
|
||||||
#include "debugwriter.h"
|
|
||||||
#include "bitmap.h"
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
void defaultActivityCb(void *callback_data, enum EDiscordResult result)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Application {
|
|
||||||
struct IDiscordCore* core;
|
|
||||||
struct IDiscordImageManager* images;
|
|
||||||
struct IDiscordUserManager* users;
|
|
||||||
struct IDiscordActivityManager* activities;
|
|
||||||
DiscordUserId user_id;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct DiscordStatePrivate
|
|
||||||
{
|
|
||||||
RGSSThreadData *threadData;
|
|
||||||
|
|
||||||
IDiscordCore *core;
|
|
||||||
|
|
||||||
Application app;
|
|
||||||
|
|
||||||
IDiscordActivityEvents activityEvents;
|
|
||||||
IDiscordUserEvents userEvents;
|
|
||||||
DiscordCreateParams params;
|
|
||||||
|
|
||||||
|
|
||||||
DiscordUser currentUser;
|
|
||||||
DiscordActivity defaultActivity;
|
|
||||||
|
|
||||||
bool discordInstalled;
|
|
||||||
bool connected;
|
|
||||||
bool userPresent;
|
|
||||||
|
|
||||||
long long startTime;
|
|
||||||
|
|
||||||
DiscordStatePrivate()
|
|
||||||
: discordInstalled(false),
|
|
||||||
connected(false),
|
|
||||||
userPresent(false),
|
|
||||||
startTime(time(0))
|
|
||||||
{};
|
|
||||||
|
|
||||||
~DiscordStatePrivate()
|
|
||||||
{
|
|
||||||
//if (core) core->destroy(core);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
void onCurrentUserUpdateCb(void *event_data)
|
|
||||||
{
|
|
||||||
DiscordStatePrivate *p = (DiscordStatePrivate*)event_data;
|
|
||||||
p->app.users->get_current_user(p->app.users, &p->currentUser);
|
|
||||||
p->userPresent = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void onActivityJoinCb(void *event_data, const char *secret)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void onActivitySpectateCb(void *event_data, const char *secret)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void onActivityJoinRequestCb(void *event_data, struct DiscordUser *user)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void onActivityInviteRequestCb(void *event_data, enum EDiscordActivityActionType type, struct DiscordUser *user, struct DiscordActivity *activity)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void discordLogHook(void *hook_data, enum EDiscordLogLevel level, const char *message)
|
|
||||||
{
|
|
||||||
Debug() << "Discord:" << message;
|
|
||||||
}
|
|
||||||
|
|
||||||
int discordTryConnect(DiscordStatePrivate *p)
|
|
||||||
{
|
|
||||||
|
|
||||||
int rc = DiscordCreate(DISCORD_VERSION, &p->params, &p->core);
|
|
||||||
|
|
||||||
if (rc != DiscordResult_NotInstalled)
|
|
||||||
p->discordInstalled = true;
|
|
||||||
|
|
||||||
if (rc != DiscordResult_Ok)
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
p->core->set_log_hook(p->core, DiscordLogLevel_Error, (void*)p, discordLogHook);
|
|
||||||
|
|
||||||
p->app.activities = p->core->get_activity_manager(p->core);
|
|
||||||
p->app.users = p->core->get_user_manager(p->core);
|
|
||||||
p->app.images = p->core->get_image_manager(p->core);
|
|
||||||
|
|
||||||
p->connected = true;
|
|
||||||
|
|
||||||
memset(&p->defaultActivity, 0, sizeof(DiscordActivity));
|
|
||||||
#ifndef MARIN
|
|
||||||
strncpy((char*)&p->defaultActivity.details, p->threadData->config.game.title.c_str(), 128);
|
|
||||||
p->defaultActivity.timestamps.start = p->startTime;
|
|
||||||
|
|
||||||
if (p->params.client_id == DEFAULT_CLIENT_ID)
|
|
||||||
{
|
|
||||||
strncpy((char*)&p->defaultActivity.assets.large_image, "default", 128);
|
|
||||||
strncpy((char*)&p->defaultActivity.assets.large_text, "mkxp-z", 128);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
p->defaultActivity.timestamps.start = p->startTime;
|
|
||||||
|
|
||||||
if (p->params.client_id == DEFAULT_CLIENT_ID)
|
|
||||||
{
|
|
||||||
strncpy((char*)&p->defaultActivity.assets.large_image, "default", 128);
|
|
||||||
strncpy((char*)&p->defaultActivity.assets.large_text, "MK", 128);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
p->app.activities->update_activity(p->app.activities, &p->defaultActivity, 0, defaultActivityCb);
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
DiscordState::DiscordState(RGSSThreadData *rtData)
|
|
||||||
{
|
|
||||||
p = new DiscordStatePrivate();
|
|
||||||
p->threadData = rtData;
|
|
||||||
memset(&p->app, 0, sizeof(Application));
|
|
||||||
|
|
||||||
DiscordCreateParamsSetDefault(&p->params);
|
|
||||||
|
|
||||||
memset(&p->activityEvents, 0, sizeof(IDiscordActivityEvents));
|
|
||||||
memset(&p->userEvents, 0, sizeof(IDiscordUserEvents));
|
|
||||||
|
|
||||||
p->params.client_id = rtData->config.discordClientId;
|
|
||||||
p->params.flags = DiscordCreateFlags_NoRequireDiscord;
|
|
||||||
p->params.event_data = (void*)p;
|
|
||||||
|
|
||||||
p->activityEvents.on_activity_join = onActivityJoinCb;
|
|
||||||
p->activityEvents.on_activity_spectate = onActivitySpectateCb;
|
|
||||||
p->activityEvents.on_activity_join_request = onActivityJoinRequestCb;
|
|
||||||
p->activityEvents.on_activity_invite = onActivityInviteRequestCb;
|
|
||||||
p->params.activity_events = &p->activityEvents;
|
|
||||||
|
|
||||||
p->userEvents.on_current_user_update = onCurrentUserUpdateCb;
|
|
||||||
p->params.user_events = &p->userEvents;
|
|
||||||
|
|
||||||
discordTryConnect(p);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
DiscordState::~DiscordState()
|
|
||||||
{
|
|
||||||
delete p;
|
|
||||||
}
|
|
||||||
|
|
||||||
IDiscordActivityManager *DiscordState::activityManager()
|
|
||||||
{
|
|
||||||
return p->app.activities;
|
|
||||||
}
|
|
||||||
|
|
||||||
IDiscordUserManager *DiscordState::userManager()
|
|
||||||
{
|
|
||||||
return p->app.users;
|
|
||||||
}
|
|
||||||
|
|
||||||
IDiscordImageManager *DiscordState::imageManager()
|
|
||||||
{
|
|
||||||
return p->app.images;
|
|
||||||
}
|
|
||||||
|
|
||||||
int DiscordState::update()
|
|
||||||
{
|
|
||||||
if (!p->discordInstalled) return DiscordResult_NotInstalled;
|
|
||||||
|
|
||||||
if (p->connected)
|
|
||||||
{
|
|
||||||
int rc = p->core->run_callbacks(p->core);
|
|
||||||
if (rc == DiscordResult_NotRunning)
|
|
||||||
{
|
|
||||||
p->connected = false;
|
|
||||||
memset(&p->currentUser, 0, sizeof(DiscordUser));
|
|
||||||
memset(&p->app, 0, sizeof(Application));
|
|
||||||
p->userPresent = false;
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
if (time(0) % 5 != 0) return -1;
|
|
||||||
return discordTryConnect(p);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DiscordState::isConnected()
|
|
||||||
{
|
|
||||||
return (p->connected && p->userPresent);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string DiscordState::userName()
|
|
||||||
{
|
|
||||||
std::string ret; ret.clear();
|
|
||||||
if (p->userPresent) ret = p->currentUser.username;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string DiscordState::userDiscrim()
|
|
||||||
{
|
|
||||||
std::string ret; ret.clear();
|
|
||||||
if (p->userPresent) ret = p->currentUser.discriminator;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
DiscordUserId DiscordState::userId()
|
|
||||||
{
|
|
||||||
return (p->userPresent) ? p->currentUser.id : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef struct { DiscordStatePrivate *pri; Bitmap *bmp; } AvatarCbData;
|
|
||||||
Bitmap *DiscordState::getAvatar(DiscordUserId userId, int size)
|
|
||||||
{
|
|
||||||
size = clamp(size, 32, 256);
|
|
||||||
while ((size & (size-1)) != 0) {
|
|
||||||
size++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isConnected()) return 0;
|
|
||||||
AvatarCbData *cbData = new AvatarCbData;
|
|
||||||
Bitmap *ret = new Bitmap(size, size);
|
|
||||||
cbData->bmp = ret;
|
|
||||||
cbData->pri = p;
|
|
||||||
DiscordImageHandle handle{};
|
|
||||||
handle.id = userId;
|
|
||||||
handle.size = size;
|
|
||||||
|
|
||||||
p->app.images->fetch(p->app.images, handle, true, cbData,
|
|
||||||
[](void *callback_data, enum EDiscordResult result, struct DiscordImageHandle handle_result){
|
|
||||||
if (result == DiscordResult_Ok)
|
|
||||||
{
|
|
||||||
AvatarCbData *data = (AvatarCbData*)callback_data;
|
|
||||||
if (data->bmp->isDisposed()) return;
|
|
||||||
int sz = data->bmp->width()*data->bmp->height()*4;
|
|
||||||
uint8_t *buf = new uint8_t[sz];
|
|
||||||
data->pri->app.images->get_data(data->pri->app.images, handle_result, buf, sz);
|
|
||||||
data->bmp->replaceRaw(buf, sz);
|
|
||||||
delete[] buf;
|
|
||||||
delete data;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
Bitmap *DiscordState::userAvatar(int size)
|
|
||||||
{
|
|
||||||
return (p->userPresent) ? getAvatar(p->currentUser.id, size) : 0;
|
|
||||||
}
|
|
|
@ -1,37 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <discord_game_sdk.h>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
#include "bitmap.h"
|
|
||||||
#ifdef MARIN
|
|
||||||
#define DEFAULT_CLIENT_ID 624284820201013248
|
|
||||||
#else
|
|
||||||
#define DEFAULT_CLIENT_ID 618672572183347211
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct DiscordStatePrivate;
|
|
||||||
|
|
||||||
class DiscordState
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
DiscordState(RGSSThreadData *rtData);
|
|
||||||
~DiscordState();
|
|
||||||
|
|
||||||
IDiscordActivityManager *activityManager();
|
|
||||||
IDiscordUserManager *userManager();
|
|
||||||
IDiscordImageManager *imageManager();
|
|
||||||
|
|
||||||
int update();
|
|
||||||
bool isConnected();
|
|
||||||
|
|
||||||
std::string userName();
|
|
||||||
std::string userDiscrim();
|
|
||||||
DiscordUserId userId();
|
|
||||||
|
|
||||||
Bitmap *getAvatar(DiscordUserId userId, int size);
|
|
||||||
Bitmap *userAvatar(int size);
|
|
||||||
|
|
||||||
private:
|
|
||||||
DiscordStatePrivate *p;
|
|
||||||
};
|
|
|
@ -44,10 +44,6 @@
|
||||||
#include <SDL_timer.h>
|
#include <SDL_timer.h>
|
||||||
#include <SDL_video.h>
|
#include <SDL_video.h>
|
||||||
|
|
||||||
#ifdef HAVE_DISCORDSDK
|
|
||||||
#include "discordstate.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_STEAMWORKS
|
#ifdef HAVE_STEAMWORKS
|
||||||
#include "steam/steam_api.h"
|
#include "steam/steam_api.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -590,10 +586,6 @@ void Graphics::update() {
|
||||||
p->checkShutDownReset();
|
p->checkShutDownReset();
|
||||||
p->checkSyncLock();
|
p->checkSyncLock();
|
||||||
|
|
||||||
#ifdef HAVE_DISCORDSDK
|
|
||||||
shState->discord().update();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_STEAMWORKS
|
#ifdef HAVE_STEAMWORKS
|
||||||
if (SteamAPI_IsSteamRunning())
|
if (SteamAPI_IsSteamRunning())
|
||||||
SteamAPI_RunCallbacks();
|
SteamAPI_RunCallbacks();
|
||||||
|
|
|
@ -106,8 +106,4 @@ if get_option('use_fakeapi') == true and miniffi == true
|
||||||
main_source += files('fake-api.mm')
|
main_source += files('fake-api.mm')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if discord == true
|
|
||||||
main_source += files('discordstate.cpp')
|
|
||||||
endif
|
|
||||||
|
|
||||||
global_sources += main_source
|
global_sources += main_source
|
||||||
|
|
|
@ -38,10 +38,6 @@
|
||||||
#include "exception.h"
|
#include "exception.h"
|
||||||
#include "sharedmidistate.h"
|
#include "sharedmidistate.h"
|
||||||
|
|
||||||
#ifdef HAVE_DISCORDSDK
|
|
||||||
#include "discordstate.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@ -89,10 +85,6 @@ struct SharedStatePrivate
|
||||||
|
|
||||||
SharedFontState fontState;
|
SharedFontState fontState;
|
||||||
Font *defaultFont;
|
Font *defaultFont;
|
||||||
|
|
||||||
#ifdef HAVE_DISCORDSDK
|
|
||||||
DiscordState discord;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
TEX::ID globalTex;
|
TEX::ID globalTex;
|
||||||
int globalTexW, globalTexH;
|
int globalTexW, globalTexH;
|
||||||
|
@ -114,9 +106,6 @@ struct SharedStatePrivate
|
||||||
rtData(*threadData),
|
rtData(*threadData),
|
||||||
config(threadData->config),
|
config(threadData->config),
|
||||||
midiState(threadData->config),
|
midiState(threadData->config),
|
||||||
#ifdef HAVE_DISCORDSDK
|
|
||||||
discord(threadData),
|
|
||||||
#endif
|
|
||||||
graphics(threadData),
|
graphics(threadData),
|
||||||
input(*threadData),
|
input(*threadData),
|
||||||
audio(*threadData),
|
audio(*threadData),
|
||||||
|
@ -246,10 +235,6 @@ GSATT(Quad&, gpQuad)
|
||||||
GSATT(SharedFontState&, fontState)
|
GSATT(SharedFontState&, fontState)
|
||||||
GSATT(SharedMidiState&, midiState)
|
GSATT(SharedMidiState&, midiState)
|
||||||
|
|
||||||
#ifdef HAVE_DISCORDSDK
|
|
||||||
GSATT(DiscordState&, discord)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void SharedState::setBindingData(void *data)
|
void SharedState::setBindingData(void *data)
|
||||||
{
|
{
|
||||||
p->bindingData = data;
|
p->bindingData = data;
|
||||||
|
|
|
@ -46,9 +46,6 @@ class GLState;
|
||||||
class TexPool;
|
class TexPool;
|
||||||
class Font;
|
class Font;
|
||||||
class SharedFontState;
|
class SharedFontState;
|
||||||
#ifdef HAVE_DISCORDSDK
|
|
||||||
class DiscordState;
|
|
||||||
#endif
|
|
||||||
struct GlobalIBO;
|
struct GlobalIBO;
|
||||||
struct Config;
|
struct Config;
|
||||||
struct Vec2i;
|
struct Vec2i;
|
||||||
|
@ -82,9 +79,6 @@ struct SharedState
|
||||||
|
|
||||||
SharedFontState &fontState() const;
|
SharedFontState &fontState() const;
|
||||||
Font &defaultFont() const;
|
Font &defaultFont() const;
|
||||||
#ifdef HAVE_DISCORDSDK
|
|
||||||
DiscordState &discord() const;
|
|
||||||
#endif
|
|
||||||
SharedMidiState &midiState() const;
|
SharedMidiState &midiState() const;
|
||||||
|
|
||||||
sigc::signal<void> prepareDraw;
|
sigc::signal<void> prepareDraw;
|
||||||
|
|
Loading…
Add table
Reference in a new issue