diff options
Diffstat (limited to 'Minecraft.World/Stat.cpp')
| -rw-r--r-- | Minecraft.World/Stat.cpp | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/Minecraft.World/Stat.cpp b/Minecraft.World/Stat.cpp new file mode 100644 index 00000000..868ff3bd --- /dev/null +++ b/Minecraft.World/Stat.cpp @@ -0,0 +1,115 @@ +#include "stdafx.h" +#include "NumberFormaters.h" +#include "StatFormatter.h" +#include "Stats.h" +#include "Stat.h" + +Stat::DefaultFormat *Stat::defaultFormatter = new DefaultFormat(); +Stat::TimeFormatter *Stat::timeFormatter = new TimeFormatter(); +Stat::DistanceFormatter *Stat::distanceFormatter = new DistanceFormatter(); + +// 4J Stu - Changed this to take in a printf format string instead +DecimalFormat *Stat::decimalFormat = new DecimalFormat(L"%0(3).2f"); + +void Stat::_init() +{ + awardLocallyOnly = false; +} + +Stat::Stat(int id, const wstring& name, StatFormatter *formatter) : id(id), name(name), formatter(formatter) +{ + _init(); +} + +Stat::Stat(int id, const wstring& name) : id(id), name(name), formatter(defaultFormatter) +{ + _init(); +} + +Stat *Stat::setAwardLocallyOnly() +{ + awardLocallyOnly = true; + return this; +} + +Stat *Stat::postConstruct() +{ + //if (Stats::statsById->containsKey(id)) + //{ + //throw new RuntimeException("Duplicate stat id: \"" + Stats::statsById->get(id)->name + "\" and \"" + name + "\" at id " + id); 4J - TODO + //} + Stats::all->push_back(this); + + pair<int, Stat *> id1(id,this); +#ifdef __PS3__ + Stats::statsById->emplace(id1 );// assert(0); // MGH - TODO - FIX - find out where this move function comes from +#else + Stats::statsById->emplace( move(id1) ); +#endif // __PS3__ + + return this; +} + +bool Stat::isAchievement() +{ + return false; +} + +wstring Stat::format(int value) +{ + return ((StatFormatter *)formatter)->format(value); +} + +wstring Stat::toString() +{ + return name; +} + +wstring Stat::TimeFormatter::format(int value) +{ + double seconds = value / 20.0; + double minutes = seconds / 60.0; + double hours = minutes / 60.0; + double days = hours / 24.0; + double years = days / 365.0; + + if (years > 0.5) + { + return decimalFormat->format(years) + L" y"; + } + else if (days > 0.5) + { + return decimalFormat->format(days) + L" d"; + } + else if (hours > 0.5) + { + return decimalFormat->format(hours) + L" h"; + } + else if (minutes > 0.5) + { + return decimalFormat->format(minutes) + L" m"; + } + + return _toString<double>(seconds) + L" s"; +} + +wstring Stat::DefaultFormat::format(int value) +{ + return NumberFormat::format( value ); //numberFormat->format(value); +} + +wstring Stat::DistanceFormatter::format(int cm) +{ + double meters = cm / 100.0; + double kilometers = meters / 1000.0; + + if (kilometers > 0.5) + { + return decimalFormat->format(kilometers) + L" km"; + + } else if (meters > 0.5) + { + return decimalFormat->format(meters) + L" m"; + } + return _toString<int>(cm) + L" cm"; +} |
