mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-23 22:13:37 +00:00
96 lines
2.7 KiB
C++
96 lines
2.7 KiB
C++
#include "../Platform/stdafx.h"
|
|
#include <utility>
|
|
#include "../Util/NumberFormatters.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 std::wstring& name, StatFormatter* formatter)
|
|
: id(id), name(name), formatter(formatter) {
|
|
_init();
|
|
}
|
|
|
|
Stat::Stat(int id, const std::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);
|
|
|
|
std::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(std::move(id1));
|
|
#endif // __PS3__
|
|
|
|
return this;
|
|
}
|
|
|
|
bool Stat::isAchievement() { return false; }
|
|
|
|
std::wstring Stat::format(int value) {
|
|
return ((StatFormatter*)formatter)->format(value);
|
|
}
|
|
|
|
std::wstring Stat::toString() { return name; }
|
|
|
|
std::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";
|
|
}
|
|
|
|
std::wstring Stat::DefaultFormat::format(int value) {
|
|
return NumberFormat::format(value); // numberFormat->format(value);
|
|
}
|
|
|
|
std::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";
|
|
}
|