Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 0 additions & 42 deletions src/RA_Defs.cpp
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
#include "RA_Defs.h"

#include "context/IEmulatorMemoryContext.hh"

#include "services/ServiceLocator.hh"

#include "util/Strings.hh"

#include <rcheevos/src/rcheevos/rc_internal.h>

namespace ra {

_Use_decl_annotations_
Expand Down Expand Up @@ -123,40 +117,4 @@ bool ParseFloat(const std::wstring& sValue, float& fValue, std::wstring& sError)
return true;
}

namespace data {

const char* ValueFormatToString(ValueFormat nFormat) noexcept
{
switch (nFormat)
{
case ValueFormat::Centiseconds: return "MILLISECS";
case ValueFormat::Frames: return "TIME";
case ValueFormat::Minutes: return "MINUTES";
case ValueFormat::Score: return "SCORE";
case ValueFormat::Seconds: return "TIMESECS";
case ValueFormat::SecondsAsMinutes: return "SECS_AS_MINS";
case ValueFormat::Value: return "VALUE";
case ValueFormat::Float1: return "FLOAT1";
case ValueFormat::Float2: return "FLOAT2";
case ValueFormat::Float3: return "FLOAT3";
case ValueFormat::Float4: return "FLOAT4";
case ValueFormat::Float5: return "FLOAT5";
case ValueFormat::Float6: return "FLOAT6";
case ValueFormat::Fixed1: return "FIXED1";
case ValueFormat::Fixed2: return "FIXED2";
case ValueFormat::Fixed3: return "FIXED3";
case ValueFormat::Tens: return "TENS";
case ValueFormat::Hundreds: return "HUNDREDS";
case ValueFormat::Thousands: return "THOUSANDS";
case ValueFormat::UnsignedValue: return "UNSIGNED";
default: return "UNKNOWN";
}
}

ValueFormat ValueFormatFromString(const std::string& sFormat) noexcept
{
return ra::itoe<ValueFormat>(rc_parse_format(sFormat.c_str()));
}

} /* namespace data */
} /* namespace ra */
4 changes: 2 additions & 2 deletions src/api/UpdateLeaderboard.hh
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

#include "ApiCall.hh"

#include "data\Types.hh"
#include "data\Value.hh"

namespace ra {
namespace api {
Expand All @@ -29,7 +29,7 @@ public:
std::string SubmitTrigger;
std::string CancelTrigger;
std::string ValueDefinition;
ra::data::ValueFormat Format{ ra::data::ValueFormat::Value };
ra::data::Value::Format Format{ ra::data::Value::Format::Value };
bool LowerIsBetter{ false };

using Callback = std::function<void(const Response& response)>;
Expand Down
2 changes: 1 addition & 1 deletion src/api/impl/ConnectedServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -735,7 +735,7 @@ UpdateLeaderboard::Response ConnectedServer::UpdateLeaderboard(const UpdateLeade
api_params.cancel_trigger = request.CancelTrigger.c_str();
api_params.value_definition = request.ValueDefinition.c_str();
api_params.lower_is_better = request.LowerIsBetter ? 1 : 0;
api_params.format = ValueFormatToString(request.Format);
api_params.format = ra::data::Value::FormatToServerEnum(request.Format);

rc_api_request_t api_request;
const int result = rc_api_init_update_leaderboard_request(&api_request, &api_params);
Expand Down
30 changes: 0 additions & 30 deletions src/data/Types.hh
Original file line number Diff line number Diff line change
Expand Up @@ -17,36 +17,6 @@ namespace ra {
using AchievementID = uint32_t;
using LeaderboardID = uint32_t;

namespace data {

enum class ValueFormat : uint8_t
{
Frames = RC_FORMAT_FRAMES,
Seconds = RC_FORMAT_SECONDS,
Centiseconds = RC_FORMAT_CENTISECS,
Score = RC_FORMAT_SCORE,
Value = RC_FORMAT_VALUE,
Minutes = RC_FORMAT_MINUTES,
SecondsAsMinutes = RC_FORMAT_SECONDS_AS_MINUTES,
Float1 = RC_FORMAT_FLOAT1,
Float2 = RC_FORMAT_FLOAT2,
Float3 = RC_FORMAT_FLOAT3,
Float4 = RC_FORMAT_FLOAT4,
Float5 = RC_FORMAT_FLOAT5,
Float6 = RC_FORMAT_FLOAT6,
Fixed1 = RC_FORMAT_FIXED1,
Fixed2 = RC_FORMAT_FIXED2,
Fixed3 = RC_FORMAT_FIXED3,
Tens = RC_FORMAT_TENS,
Hundreds = RC_FORMAT_HUNDREDS,
Thousands = RC_FORMAT_THOUSANDS,
UnsignedValue = RC_FORMAT_UNSIGNED_VALUE,
};

const char* ValueFormatToString(ValueFormat nFormat) noexcept;
ValueFormat ValueFormatFromString(const std::string& sFormat) noexcept;

} // namespace data
} // namespace ra

#endif RA_UI_TYPES_H
15 changes: 4 additions & 11 deletions src/data/models/LeaderboardModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ const IntModelProperty LeaderboardModel::StartTriggerProperty("LeaderboardModel"
const IntModelProperty LeaderboardModel::SubmitTriggerProperty("LeaderboardModel", "SubmitTrigger", 0);
const IntModelProperty LeaderboardModel::CancelTriggerProperty("LeaderboardModel", "CancelTrigger", 0);
const IntModelProperty LeaderboardModel::ValueDefinitionProperty("LeaderboardModel", "ValueDefinition", 0);
const IntModelProperty LeaderboardModel::ValueFormatProperty("LeaderboardModel", "ValueFormat", ra::etoi(ValueFormat::Value));
const IntModelProperty LeaderboardModel::ValueFormatProperty("LeaderboardModel", "ValueFormat", ra::etoi(ra::data::Value::Format::Value));
const IntModelProperty LeaderboardModel::PauseOnResetProperty("LeaderboardModel", "PauseOnReset", ra::etoi(LeaderboardModel::LeaderboardParts::None));
const IntModelProperty LeaderboardModel::PauseOnTriggerProperty("LeaderboardModel", "PauseOnTrigger", ra::etoi(LeaderboardModel::LeaderboardParts::None));
const BoolModelProperty LeaderboardModel::LowerIsBetterProperty("LeaderboardModel", "LowerIsBetter", false);
Expand Down Expand Up @@ -478,7 +478,7 @@ void LeaderboardModel::InitializeFromPublishedLeaderboard(
SetName(ra::util::String::Widen(pLeaderboard.public_.title));
SetDescription(ra::util::String::Widen(pLeaderboard.public_.description));
SetCategory(AssetCategory::Core);
SetValueFormat(ra::itoe<ValueFormat>(pLeaderboard.format));
SetValueFormat(Value::FormatFromRcheevosFormat(pLeaderboard.format));
SetLowerIsBetter(pLeaderboard.public_.lower_is_better);
SetHidden(pLeaderboard.hidden);
SetDefinition(sDefinition);
Expand Down Expand Up @@ -545,7 +545,7 @@ void LeaderboardModel::Serialize(ra::services::TextWriter& pWriter) const
WriteQuoted(pWriter, GetLocalAssetDefinition(m_pSubmitTrigger));
WriteQuoted(pWriter, GetLocalAssetDefinition(m_pValueDefinition));

WritePossiblyQuoted(pWriter, ValueFormatToString(GetValueFormat()));
WritePossiblyQuoted(pWriter, Value::FormatToServerEnum(GetValueFormat()));

WritePossiblyQuoted(pWriter, GetLocalValue(NameProperty));
WritePossiblyQuoted(pWriter, GetLocalValue(DescriptionProperty));
Expand Down Expand Up @@ -603,18 +603,11 @@ bool LeaderboardModel::Deserialize(ra::util::Tokenizer& pTokenizer)
SetValueDefinition(sValueDefinition);
SetLowerIsBetter(nLowerIsBetter != 0);

SetValueFormat(ValueFormatFromString(sFormat));
SetValueFormat(Value::FormatFromServerEnum(sFormat));

return true;
}

std::string LeaderboardModel::FormatScore(int nValue) const
{
char buffer[32];
rc_format_value(buffer, sizeof(buffer), nValue, ra::etoi(GetValueFormat()));
return std::string(buffer);
}

} // namespace models
} // namespace data
} // namespace ra
11 changes: 3 additions & 8 deletions src/data/models/LeaderboardModel.hh
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

#include "data/models/AssetModelBase.hh"

#include "data\Types.hh"
#include "data/Value.hh"

struct rc_client_leaderboard_info_t;
struct rc_lboard_t;
Expand Down Expand Up @@ -130,17 +130,12 @@ public:
/// <summary>
/// Gets the value format.
/// </summary>
ValueFormat GetValueFormat() const { return ra::itoe<ValueFormat>(GetValue(ValueFormatProperty)); }
Value::Format GetValueFormat() const { return ra::itoe<Value::Format>(GetValue(ValueFormatProperty)); }

/// <summary>
/// Sets the value format.
/// </summary>
void SetValueFormat(ValueFormat nValue) { SetValue(ValueFormatProperty, ra::etoi(nValue)); }

/// <summary>
/// Converts a raw score into a display string.
/// </summary>
std::string FormatScore(int nValue) const;
void SetValueFormat(Value::Format nValue) { SetValue(ValueFormatProperty, ra::etoi(nValue)); }

/// <summary>
/// The <see cref="ModelProperty" /> for whether or not lower values are better.
Expand Down
2 changes: 2 additions & 0 deletions src/devkit/RADevKit.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<ClCompile Include="data\models\CodeNoteModel.cpp" />
<ClCompile Include="data\models\CodeNotesModel.cpp" />
<ClCompile Include="data\models\MemoryRegionsModel.cpp" />
<ClCompile Include="data\Value.cpp" />
<ClCompile Include="services\Http.cpp" />
<ClCompile Include="util\GSL.cpp" />
<ClCompile Include="util\StringBuilder.cpp" />
Expand Down Expand Up @@ -99,6 +100,7 @@
<ClInclude Include="data\models\CodeNotesModel.hh" />
<ClInclude Include="data\models\MemoryRegionsModel.hh" />
<ClInclude Include="data\NotifyTargetSet.hh" />
<ClInclude Include="data\Value.hh" />
<ClInclude Include="services\Http.hh" />
<ClInclude Include="services\IClock.hh" />
<ClInclude Include="services\IDebuggerDetector.hh" />
Expand Down
2 changes: 2 additions & 0 deletions src/devkit/RADevKit.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@
</ClInclude>
<ClInclude Include="services\ILocalStorage.hh" />
<ClInclude Include="data\models\CodeNotesModel.hh" />
<ClInclude Include="data\Value.hh" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="util\GSL.cpp">
Expand Down Expand Up @@ -227,5 +228,6 @@
<Filter>data\models</Filter>
</ClCompile>
<ClCompile Include="data\models\CodeNotesModel.cpp" />
<ClCompile Include="data\Value.cpp" />
</ItemGroup>
</Project>
134 changes: 134 additions & 0 deletions src/devkit/data/Value.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
#include "Value.hh"

#include "util/Strings.hh"

#include <rc_runtime_types.h>

namespace ra {
namespace data {

const char* Value::FormatToServerEnum(Format nFormat) noexcept
{
switch (nFormat)
{
case Format::Centiseconds:
return "MILLISECS";
case Format::Frames:
return "TIME";
case Format::Minutes:
return "MINUTES";
case Format::Score:
return "SCORE";
case Format::Seconds:
return "TIMESECS";
case Format::SecondsAsMinutes:
return "SECS_AS_MINS";
case Format::Value:
return "VALUE";
case Format::Float1:
return "FLOAT1";
case Format::Float2:
return "FLOAT2";
case Format::Float3:
return "FLOAT3";
case Format::Float4:
return "FLOAT4";
case Format::Float5:
return "FLOAT5";
case Format::Float6:
return "FLOAT6";
case Format::Fixed1:
return "FIXED1";
case Format::Fixed2:
return "FIXED2";
case Format::Fixed3:
return "FIXED3";
case Format::Tens:
return "TENS";
case Format::Hundreds:
return "HUNDREDS";
case Format::Thousands:
return "THOUSANDS";
case Format::UnsignedValue:
return "UNSIGNED";
default:
return "UNKNOWN";
}
}

Value::Format Value::FormatFromServerEnum(const std::string& sFormat) noexcept
{
return FormatFromRcheevosFormat(gsl::narrow_cast<uint8_t>(rc_parse_format(sFormat.c_str())));
}

Value::Format Value::FormatFromRcheevosFormat(uint8_t nFormat) noexcept
{
switch (nFormat)
{
case RC_FORMAT_FRAMES: return Format::Frames;
case RC_FORMAT_SECONDS: return Format::Seconds;
case RC_FORMAT_CENTISECS: return Format::Centiseconds;
case RC_FORMAT_SCORE: return Format::Score;
case RC_FORMAT_VALUE: return Format::Value;
case RC_FORMAT_MINUTES: return Format::Minutes;
case RC_FORMAT_SECONDS_AS_MINUTES: return Format::SecondsAsMinutes;
case RC_FORMAT_FLOAT1: return Format::Float1;
case RC_FORMAT_FLOAT2: return Format::Float2;
case RC_FORMAT_FLOAT3: return Format::Float3;
case RC_FORMAT_FLOAT4: return Format::Float4;
case RC_FORMAT_FLOAT5: return Format::Float5;
case RC_FORMAT_FLOAT6: return Format::Float6;
case RC_FORMAT_FIXED1: return Format::Fixed1;
case RC_FORMAT_FIXED2: return Format::Fixed2;
case RC_FORMAT_FIXED3: return Format::Fixed3;
case RC_FORMAT_TENS: return Format::Tens;
case RC_FORMAT_HUNDREDS: return Format::Hundreds;
case RC_FORMAT_THOUSANDS: return Format::Thousands;
case RC_FORMAT_UNSIGNED_VALUE: return Format::UnsignedValue;
case RC_FORMAT_UNFORMATTED: return Format::Unformatted;
default:
assert(!"Unsupported value format");
return Format::Value;
}
}

uint8_t Value::FormatToRcheevosFormat(Format nFormat) noexcept
{
switch (nFormat)
{
case Format::Frames: return RC_FORMAT_FRAMES;
case Format::Seconds: return RC_FORMAT_SECONDS;
case Format::Centiseconds: return RC_FORMAT_CENTISECS;
case Format::Score: return RC_FORMAT_SCORE;
case Format::Value: return RC_FORMAT_VALUE;
case Format::Minutes: return RC_FORMAT_MINUTES;
case Format::SecondsAsMinutes: return RC_FORMAT_SECONDS_AS_MINUTES;
case Format::Float1: return RC_FORMAT_FLOAT1;
case Format::Float2: return RC_FORMAT_FLOAT2;
case Format::Float3: return RC_FORMAT_FLOAT3;
case Format::Float4: return RC_FORMAT_FLOAT4;
case Format::Float5: return RC_FORMAT_FLOAT5;
case Format::Float6: return RC_FORMAT_FLOAT6;
case Format::Fixed1: return RC_FORMAT_FIXED1;
case Format::Fixed2: return RC_FORMAT_FIXED2;
case Format::Fixed3: return RC_FORMAT_FIXED3;
case Format::Tens: return RC_FORMAT_TENS;
case Format::Hundreds: return RC_FORMAT_HUNDREDS;
case Format::Thousands: return RC_FORMAT_THOUSANDS;
case Format::UnsignedValue: return RC_FORMAT_UNSIGNED_VALUE;
case Format::Unformatted: return RC_FORMAT_UNFORMATTED;
default:
assert(!"Unsupported value format");
return RC_FORMAT_VALUE;
}
}

std::wstring Value::FormatValue(int32_t nValue, Format nFormat)
{
char buffer[32];
rc_format_value(buffer, sizeof(buffer), nValue, FormatToRcheevosFormat(nFormat));
return ra::util::String::Widen(buffer);
}

} // namespace data
} // namespace ra
Loading
Loading