Created
November 4, 2021 20:34
-
-
Save PumpkinPaul/7adbd9b1caae6be0e0c30e63ba38f623 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
===================================================================================================================== | |
===================================================================================================================== | |
===================================================================================================================== | |
===================================================================================================================== | |
XboxOneNativeLeaderboard.h | |
#pragma once | |
#ifndef _$H_GAURD_XBOXONENATIVELEADERBOARD | |
#define _$H_GAURD_XBOXONENATIVELEADERBOARD | |
#include "mscorlib/System/String.h" | |
#include "mscorlib/System/String.inl" | |
#include <xsapi/services.h> | |
#include <xsapi/leaderboard.h> | |
#include "Glitchangels/PumpkinGames/Glitchangels/ScoreItem.h" | |
#include "Glitchangels/PumpkinGames/Glitchangels/GameServices/LeaderboardFilterType.h" | |
#include "Glitchangels/PumpkinGames/Glitchangels/GameServices/XboxLive/XboxLiveLeaderboard.h" | |
// Predecls | |
namespace System { class String; } | |
namespace PumpkinGames { namespace Glitchangels { namespace Platforms { namespace XboxOne { namespace Native { | |
void UploadLeaderboardScore( | |
std::shared_ptr<xbox::services::stats::manager::stats_manager> statsManager, | |
Windows::Xbox::System::User^ user, | |
::PumpkinGames::Glitchangels::ScoreItem* scoreItem); | |
void GetLeaderboard( | |
::PumpkinGames::Glitchangels::GameServices::XboxLive::XboxLiveLeaderboard* leaderboard, | |
std::shared_ptr<xbox::services::stats::manager::stats_manager> statsManager, | |
Windows::Xbox::System::User^ user, | |
::PumpkinGames::Glitchangels::GameServices::LeaderboardFilterType filterType, | |
int rangeStart, | |
int rangeEnd); | |
void ProcessLeaderboards( | |
std::shared_ptr<xbox::services::stats::manager::stats_manager> statsManager, | |
Windows::Xbox::System::User^ user, | |
xbox::services::xbox_live_result<xbox::services::leaderboard::leaderboard_result> result | |
); | |
}}}}} // namespace PumpkinGames.Glitchangels.Platforms.XboxOne.Native | |
#endif // _$H_GAURD_XBOXONENATIVELEADERBOARD | |
===================================================================================================================== | |
===================================================================================================================== | |
===================================================================================================================== | |
===================================================================================================================== | |
XboxOneNativeLeaderboard.cpp | |
#include <mscorlib/1nternal/Brute.h> | |
#include <xsapi/services.h> | |
#include <xsapi/stats_manager.h> | |
#include <xsapi/leaderboard.h> | |
#include "mscorlib/System/String.h" | |
#include "mscorlib/System/Collections/Generic/IList_1.h" | |
#include "mscorlib/System/Collections/Generic/List_1.h" | |
#include "mscorlib/System/Collections/Generic/List_1+Enumerator.h" | |
#include "Glitchangels/PumpkinGames/Glitchangels/ConversionHelper.h" | |
#include "Glitchangels/PumpkinGames/Glitchangels/ScoreItem.h" | |
#include "Glitchangels/PumpkinGames/Glitchangels/GameServices/LeaderboardFilterType.h" | |
#include "Glitchangels/PumpkinGames/Glitchangels/GameServices/XboxLive/XboxLiveLeaderboard.h" | |
#include "Glitchangels/PumpkinGames/Glitchangels/Platforms/XboxOne/Native/XboxOneNativeStats.h" | |
using namespace ::Windows::Xbox::System; | |
using namespace xbox::services; | |
using namespace xbox::services::leaderboard; | |
using namespace xbox::services::stats::manager; | |
using namespace xbox::services::system; | |
using namespace PumpkinGames::Glitchangels::GameServices; | |
namespace PumpkinGames { | |
namespace Glitchangels { | |
namespace Platforms { | |
namespace XboxOne { | |
namespace Native { | |
const string_t leaderboardName = L"BestScore"; | |
::PumpkinGames::Glitchangels::GameServices::XboxLive::XboxLiveLeaderboard* m_leaderboard = nullptr; | |
::PumpkinGames::Glitchangels::GameServices::LeaderboardFilterType m_filterType; | |
::System::Collections::Generic::List$1< ::PumpkinGames::Glitchangels::ScoreItem* >* m_scoreItems = nullptr; | |
void UploadLeaderboardScore( | |
std::shared_ptr<xbox::services::stats::manager::stats_manager> statsManager, | |
Windows::Xbox::System::User^ user, | |
::PumpkinGames::Glitchangels::ScoreItem* scoreItem) | |
{ | |
#if _DEBUG | |
OutputDebugString(L"UploadLeaderboardScore\n"); | |
#endif | |
auto score = ScoreItem$_get_Score(scoreItem); | |
statsManager->set_stat_as_integer(user, leaderboardName, score); | |
StatsFlushStats(statsManager, user); | |
} | |
void GetLeaderboard( | |
::PumpkinGames::Glitchangels::GameServices::XboxLive::XboxLiveLeaderboard* leaderboard, | |
std::shared_ptr<xbox::services::stats::manager::stats_manager> statsManager, | |
Windows::Xbox::System::User^ user, | |
::PumpkinGames::Glitchangels::GameServices::LeaderboardFilterType filterType, | |
int rangeStart, | |
int rangeEnd) | |
{ | |
m_leaderboard = leaderboard; | |
m_filterType = filterType; | |
if (m_scoreItems == nullptr) | |
{ | |
m_scoreItems = ::System::Collections::Generic::List$1$_$Ctor< ::PumpkinGames::Glitchangels::ScoreItem* >(nullptr); | |
} | |
::System::Collections::Generic::List$1$_Clear_Void(m_scoreItems); | |
leaderboard_query leaderboardQuery; | |
leaderboardQuery.set_max_items(10); | |
leaderboardQuery.set_order(sort_order::descending); | |
switch (filterType) | |
{ | |
case LeaderboardFilterType::Player: | |
leaderboardQuery.set_skip_result_to_me(true); | |
statsManager->get_leaderboard(user, leaderboardName, leaderboardQuery); | |
break; | |
case LeaderboardFilterType::Friends: | |
leaderboardQuery.set_skip_result_to_me(true); | |
statsManager->get_social_leaderboard(user, leaderboardName, xbox::services::social::social_group_constants::people(), leaderboardQuery); | |
break; | |
case LeaderboardFilterType::Global: | |
leaderboardQuery.set_skip_result_to_me(false); | |
statsManager->get_leaderboard(user, leaderboardName, leaderboardQuery); | |
break; | |
case LeaderboardFilterType::Favorite: | |
leaderboardQuery.set_skip_result_to_me(true); | |
statsManager->get_social_leaderboard(user, leaderboardName, xbox::services::social::social_group_constants::favorite(), leaderboardQuery); | |
break; | |
} | |
} | |
void ProcessLeaderboardRows(const leaderboard_result& leaderboard_result) | |
{ | |
for (const leaderboard_row& row : leaderboard_result.rows()) | |
{ | |
::System::String* score = ::System::String$_$Ctor(nullptr, const_cast<wchar_t*>(row.column_values()[0].c_str())); | |
::PumpkinGames::Glitchangels::ScoreItem* scoreItem = ::PumpkinGames::Glitchangels::ScoreItem$_$Ctor(nullptr); | |
ScoreItem$_set_Score(scoreItem, (int)::PumpkinGames::Glitchangels::ConversionHelper$_$S_ToInt32(score)); | |
ScoreItem$_set_Name(scoreItem, ::System::String$_$Ctor(nullptr, const_cast<wchar_t*>(row.gamertag().c_str()))); | |
ScoreItem$_set_Rank(scoreItem, row.rank()); | |
scoreItem->UniqueIdentifier = ::System::String$_$Ctor(nullptr, const_cast<wchar_t*>(row.xbox_user_id().c_str()));; | |
::PumpkinGames::Glitchangels::ScoreItem$_SetDisplayItems(scoreItem); | |
::System::Collections::Generic::List$1$_Add_Void< ::PumpkinGames::Glitchangels::ScoreItem* >(m_scoreItems, scoreItem); | |
} | |
} | |
void ProcessLeaderboards( | |
std::shared_ptr<xbox::services::stats::manager::stats_manager> statsManager, | |
Windows::Xbox::System::User^ user, | |
xbox::services::xbox_live_result<xbox::services::leaderboard::leaderboard_result> result | |
) | |
{ | |
if (result.err()) | |
{ | |
#if _DEBUG | |
wchar_t temp[512]; | |
swprintf(temp, 512, L"Failed get_leaderboard - %hs\n", result.err_message().c_str()); | |
OutputDebugString(temp); | |
#endif | |
XboxLiveLeaderboard$_FailRemoteScores(m_leaderboard, m_filterType); | |
return; | |
} | |
auto leaderboardResult = result.payload(); | |
ProcessLeaderboardRows(leaderboardResult); | |
// Keep processing if there is more data in the leaderboard | |
if (leaderboardResult.has_next()) | |
{ | |
if (!leaderboardResult.get_next_query().err()) | |
{ | |
auto lbQuery = leaderboardResult.get_next_query().payload(); | |
if (lbQuery.social_group().empty()) | |
{ | |
statsManager->get_leaderboard(user, lbQuery.stat_name(), lbQuery); | |
} | |
else | |
{ | |
statsManager->get_social_leaderboard(user, lbQuery.stat_name(), lbQuery.social_group(), lbQuery); | |
} | |
} | |
} | |
else | |
{ | |
XboxLiveLeaderboard$_LoadRemoteScores(m_leaderboard, m_filterType, (::System::Collections::Generic::IEnumerable$1< ::PumpkinGames::Glitchangels::ScoreItem* >*)m_scoreItems); | |
} | |
} | |
} | |
} | |
} | |
} | |
} // namespace PumpkinGames.Glitchangels.Platforms.XboxOne.Native | |
===================================================================================================================== | |
===================================================================================================================== | |
===================================================================================================================== | |
===================================================================================================================== | |
XboxOneNativeStats.h | |
#pragma once | |
#ifndef _$H_GAURD_XBOXONENATIVESTATS | |
#define _$H_GAURD_XBOXONENATIVESTATS | |
#include "mscorlib/System/String.h" | |
#include "mscorlib/System/String.inl" | |
#include <xsapi/services.h> | |
#include <xsapi/stats_manager.h> | |
// Predecls | |
namespace System { class String; } | |
namespace PumpkinGames { namespace Glitchangels { namespace Platforms { namespace XboxOne { namespace Native { | |
void StatsAddLocalUser( | |
std::shared_ptr<xbox::services::stats::manager::stats_manager> statsManager, | |
Windows::Xbox::System::User^ user); | |
void StatsRemoveLocalUser( | |
std::shared_ptr<xbox::services::stats::manager::stats_manager> statsManager, | |
Windows::Xbox::System::User^ user); | |
void StatsSetStatAsInteger( | |
std::shared_ptr<xbox::services::stats::manager::stats_manager> statsManager, | |
Windows::Xbox::System::User^ user, ::System::String* name, int value); | |
void StatsFlushStats( | |
std::shared_ptr<xbox::services::stats::manager::stats_manager> statsManager, | |
Windows::Xbox::System::User^ user); | |
}}}}} // namespace PumpkinGames.Glitchangels.Platforms.XboxOne.Native | |
#endif // _$H_GAURD_XBOXONENATIVESTATS | |
===================================================================================================================== | |
===================================================================================================================== | |
===================================================================================================================== | |
===================================================================================================================== | |
XboxOneNativeStats.cpp | |
#include <mscorlib/1nternal/Brute.h> | |
#include "Glitchangels/PumpkinGames/Glitchangels/Platforms/XboxOne/Native/XboxOneNativeStats.h" | |
#include <xsapi/services.h> | |
#include <xsapi/stats_manager.h> | |
using namespace Windows::Xbox::System; | |
using namespace xbox::services::stats::manager; | |
namespace PumpkinGames { | |
namespace Glitchangels { | |
namespace Platforms { | |
namespace XboxOne { | |
namespace Native { | |
void StatsAddLocalUser( | |
std::shared_ptr<xbox::services::stats::manager::stats_manager> statsManager, | |
Windows::Xbox::System::User^ user) | |
{ | |
statsManager->add_local_user(user); | |
} | |
void StatsRemoveLocalUser( | |
std::shared_ptr<xbox::services::stats::manager::stats_manager> statsManager, | |
Windows::Xbox::System::User^ user) | |
{ | |
if (nullptr == user) | |
return; | |
statsManager->remove_local_user(user); | |
} | |
void StatsSetStatAsInteger( | |
std::shared_ptr<xbox::services::stats::manager::stats_manager> statsManager, | |
Windows::Xbox::System::User^ user, | |
::System::String* name, | |
int value) | |
{ | |
#if _DEBUG | |
wchar_t temp[512]; | |
swprintf(temp, 512, L"Set stat value - name %s value %i\n", &name->start_char, value); | |
OutputDebugString(temp); | |
#endif | |
statsManager->set_stat_as_integer(user, &name->start_char, value); | |
} | |
void StatsFlushStats( | |
std::shared_ptr<xbox::services::stats::manager::stats_manager> statsManager, | |
Windows::Xbox::System::User^ user) | |
{ | |
#if _DEBUG | |
OutputDebugString(L"Flushing stats\n"); | |
#endif | |
statsManager->request_flush_to_service(user); | |
} | |
} | |
} | |
} | |
} | |
} // namespace PumpkinGames.Glitchangels.Platforms.XboxOne.Native | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment