113 lines
3.9 KiB
C++
113 lines
3.9 KiB
C++
///////////////////////////////////////////////////////////////////
|
|
//*-------------------------------------------------------------*//
|
|
//| Part of the Game Jolt API C++ Library (http://gamejolt.com) |//
|
|
//*-------------------------------------------------------------*//
|
|
//| Released under the zlib License |//
|
|
//| More information available in the readme file |//
|
|
//*-------------------------------------------------------------*//
|
|
///////////////////////////////////////////////////////////////////
|
|
#include "gjAPI.h"
|
|
|
|
|
|
// ****************************************************************
|
|
/* constructor */
|
|
gjTrophy::gjTrophy(const gjData& aTrophyData, gjAPI* pAPI)noexcept
|
|
: m_iID (atoi(SAFE_MAP_GET(aTrophyData, "id").c_str()))
|
|
, m_sTitle (SAFE_MAP_GET(aTrophyData, "title"))
|
|
, m_sDescription (SAFE_MAP_GET(aTrophyData, "description"))
|
|
, m_sDifficulty (SAFE_MAP_GET(aTrophyData, "difficulty"))
|
|
, m_sImageURL (SAFE_MAP_GET(aTrophyData, "image_url"))
|
|
, m_iSort (0)
|
|
, m_bSecret (false)
|
|
, m_pAPI (pAPI)
|
|
{
|
|
// set difficulty value for easier access
|
|
if(m_sDifficulty == "Bronze") m_iDifficultyValue = 1;
|
|
else if(m_sDifficulty == "Silver") m_iDifficultyValue = 2;
|
|
else if(m_sDifficulty == "Gold") m_iDifficultyValue = 3;
|
|
else if(m_sDifficulty == "Platinum") m_iDifficultyValue = 4;
|
|
else m_iDifficultyValue = 0;
|
|
|
|
// set the achieved date
|
|
const std::string sAchievedDate = SAFE_MAP_GET(aTrophyData, "achieved");
|
|
m_sAchievedDate = (sAchievedDate == "false" || sAchievedDate == "" || !m_pAPI->IsUserConnected()) ? "" : sAchievedDate;
|
|
}
|
|
|
|
gjTrophy::gjTrophy(const gjTrophy& that)noexcept
|
|
: m_iID (that.m_iID)
|
|
, m_sTitle (that.m_sTitle)
|
|
, m_sDescription (that.m_sDescription)
|
|
, m_sDifficulty (that.m_sDifficulty)
|
|
, m_iDifficultyValue (that.m_iDifficultyValue)
|
|
, m_sImageURL (that.m_sImageURL)
|
|
, m_sAchievedDate (that.m_sAchievedDate)
|
|
, m_iSort (that.m_iSort)
|
|
, m_bSecret (that.m_bSecret)
|
|
, m_pAPI (that.m_pAPI)
|
|
{
|
|
}
|
|
|
|
|
|
// ****************************************************************
|
|
/* assignment operator */
|
|
gjTrophy& gjTrophy::operator = (const gjTrophy& that)noexcept
|
|
{
|
|
m_iID = that.m_iID;
|
|
m_sTitle = that.m_sTitle;
|
|
m_sDescription = that.m_sDescription;
|
|
m_sDifficulty = that.m_sDifficulty;
|
|
m_iDifficultyValue = that.m_iDifficultyValue;
|
|
m_sImageURL = that.m_sImageURL;
|
|
m_sAchievedDate = that.m_sAchievedDate;
|
|
m_iSort = that.m_iSort;
|
|
m_bSecret = that.m_bSecret;
|
|
m_pAPI = that.m_pAPI;
|
|
return *this;
|
|
}
|
|
|
|
|
|
// ****************************************************************
|
|
/* callback for updating the data */
|
|
int gjTrophy::__UpdateDataCallback(const std::string& sData, void* pAdd, gjTrophyPtr* ppOutput)
|
|
{
|
|
// parse output
|
|
gjDataList aaReturn;
|
|
if(m_pAPI->ParseRequestKeypair(sData, &aaReturn) != GJ_OK)
|
|
{
|
|
gjAPI::ErrorLogAdd("API Error: could not parse trophy");
|
|
return GJ_REQUEST_FAILED;
|
|
}
|
|
|
|
const int iSort = m_iSort;
|
|
const bool bSecret = m_bSecret;
|
|
|
|
// copy new trophy over old trophy
|
|
gjTrophy NewTrophy(aaReturn[0], m_pAPI);
|
|
*this = NewTrophy;
|
|
|
|
m_iSort = iSort;
|
|
m_bSecret = bSecret;
|
|
|
|
if(ppOutput) (*ppOutput) = this;
|
|
return GJ_OK;
|
|
}
|
|
|
|
|
|
// ****************************************************************
|
|
/* callback for achieving the trophy */
|
|
int gjTrophy::__AchieveCallback(const std::string& sData, void* pAdd, gjTrophyPtr* ppOutput)
|
|
{
|
|
// parse output (only check status)
|
|
gjDataList aaReturn;
|
|
if(m_pAPI->ParseRequestKeypair(sData, &aaReturn) != GJ_OK)
|
|
{
|
|
gjAPI::ErrorLogAdd("API Error: could not parse trophy");
|
|
return GJ_REQUEST_FAILED;
|
|
}
|
|
|
|
// set time string
|
|
m_sAchievedDate = GJ_API_TEXT_NOW;
|
|
|
|
if(ppOutput) (*ppOutput) = this;
|
|
return GJ_OK;
|
|
} |