summaryrefslogtreecommitdiffstats
path: root/src/Statistics.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Statistics.cpp')
-rw-r--r--src/Statistics.cpp213
1 files changed, 46 insertions, 167 deletions
diff --git a/src/Statistics.cpp b/src/Statistics.cpp
index 5eabe9b69..55bca5095 100644
--- a/src/Statistics.cpp
+++ b/src/Statistics.cpp
@@ -6,199 +6,78 @@
#include "Statistics.h"
-#ifdef __clang__
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wglobal-constructors"
-#endif
-
-cStatInfo cStatInfo::ms_Info[statCount] =
-{
- // The order must match the order of enum eStatistic
-
- // https://minecraft.gamepedia.com/Achievements
-
- /* Type | Name | Prerequisite */
- cStatInfo(achOpenInv, "achievement.openInventory"),
- cStatInfo(achMineWood, "achievement.mineWood", achOpenInv),
- cStatInfo(achCraftWorkbench, "achievement.buildWorkBench", achMineWood),
- cStatInfo(achCraftPickaxe, "achievement.buildPickaxe", achCraftWorkbench),
- cStatInfo(achCraftFurnace, "achievement.buildFurnace", achCraftPickaxe),
- cStatInfo(achAcquireIron, "achievement.acquireIron", achCraftFurnace),
- cStatInfo(achCraftHoe, "achievement.buildHoe", achCraftWorkbench),
- cStatInfo(achMakeBread, "achievement.makeBread", achCraftHoe),
- cStatInfo(achBakeCake, "achievement.bakeCake", achCraftHoe),
- cStatInfo(achCraftBetterPick, "achievement.buildBetterPickaxe", achCraftPickaxe),
- cStatInfo(achCookFish, "achievement.cookFish", achAcquireIron),
- cStatInfo(achOnARail, "achievement.onARail", achAcquireIron),
- cStatInfo(achCraftSword, "achievement.buildSword", achCraftWorkbench),
- cStatInfo(achKillMonster, "achievement.killEnemy", achCraftSword),
- cStatInfo(achKillCow, "achievement.killCow", achCraftSword),
- cStatInfo(achFlyPig, "achievement.flyPig", achKillCow),
- cStatInfo(achSnipeSkeleton, "achievement.snipeSkeleton", achKillMonster),
- cStatInfo(achDiamonds, "achievement.diamonds", achAcquireIron),
- cStatInfo(achEnterPortal, "achievement.portal", achDiamonds),
- cStatInfo(achReturnToSender, "achievement.ghast", achEnterPortal),
- cStatInfo(achBlazeRod, "achievement.blazeRod", achEnterPortal),
- cStatInfo(achBrewPotion, "achievement.potion", achBlazeRod),
- cStatInfo(achEnterTheEnd, "achievement.theEnd", achBlazeRod),
- cStatInfo(achDefeatDragon, "achievement.theEnd2", achEnterTheEnd),
- cStatInfo(achCraftEnchantTable, "achievement.enchantments", achDiamonds),
- cStatInfo(achOverkill, "achievement.overkill", achCraftEnchantTable),
- cStatInfo(achBookshelf, "achievement.bookcase", achCraftEnchantTable),
- cStatInfo(achExploreAllBiomes, "achievement.exploreAllBiomes", achEnterTheEnd),
- cStatInfo(achSpawnWither, "achievement.spawnWither", achDefeatDragon),
- cStatInfo(achKillWither, "achievement.killWither", achSpawnWither),
- cStatInfo(achFullBeacon, "achievement.fullBeacon", achKillWither),
- cStatInfo(achBreedCow, "achievement.breedCow", achKillCow),
- cStatInfo(achThrowDiamonds, "achievement.diamondsToYou", achDiamonds),
-
- // https://minecraft.gamepedia.com/Statistics
-
- /* Type | Name */
- cStatInfo(statGamesQuit, "stat.leaveGame"),
- cStatInfo(statMinutesPlayed, "stat.playOneMinute"),
- cStatInfo(statDistWalked, "stat.walkOneCm"),
- cStatInfo(statDistSwum, "stat.swimOneCm"),
- cStatInfo(statDistFallen, "stat.fallOneCm"),
- cStatInfo(statDistClimbed, "stat.climbOneCm"),
- cStatInfo(statDistFlown, "stat.flyOneCm"),
- cStatInfo(statDistDove, "stat.diveOneCm"),
- cStatInfo(statDistMinecart, "stat.minecartOneCm"),
- cStatInfo(statDistBoat, "stat.boatOneCm"),
- cStatInfo(statDistPig, "stat.pigOneCm"),
- cStatInfo(statDistHorse, "stat.horseOneCm"),
- cStatInfo(statJumps, "stat.jump"),
- cStatInfo(statItemsDropped, "stat.drop"),
- cStatInfo(statDamageDealt, "stat.damageDealt"),
- cStatInfo(statDamageTaken, "stat.damageTaken"),
- cStatInfo(statDeaths, "stat.deaths"),
- cStatInfo(statMobKills, "stat.mobKills"),
- cStatInfo(statAnimalsBred, "stat.animalsBred"),
- cStatInfo(statPlayerKills, "stat.playerKills"),
- cStatInfo(statFishCaught, "stat.fishCaught"),
- cStatInfo(statJunkFished, "stat.junkFished"),
- cStatInfo(statTreasureFished, "stat.treasureFished")
-};
-
-#ifdef __clang__
- #pragma clang diagnostic pop
-#endif
-
-
-
-
-
-cStatInfo::cStatInfo()
- : m_Type(statInvalid)
- , m_Depends(statInvalid)
-{}
-
-
-
-
-
-cStatInfo::cStatInfo(const eStatistic a_Type, const AString & a_Name, const eStatistic a_Depends)
- : m_Type(a_Type)
- , m_Name(a_Name)
- , m_Depends(a_Depends)
-{}
-
-
-
-
-
-const AString & cStatInfo::GetName(const eStatistic a_Type)
-{
- ASSERT((a_Type > statInvalid) && (a_Type < statCount));
-
- return ms_Info[a_Type].m_Name;
-}
-
-
-
-
-
-eStatistic cStatInfo::GetType(const AString & a_Name)
-{
- for (unsigned int i = 0; i < ARRAYCOUNT(ms_Info); ++i)
- {
- if (NoCaseCompare(ms_Info[i].m_Name, a_Name) == 0)
- {
- return ms_Info[i].m_Type;
- }
- }
-
- return statInvalid;
-}
-
-
-
-
-
-eStatistic cStatInfo::GetPrerequisite(const eStatistic a_Type)
-{
- ASSERT((a_Type > statInvalid) && (a_Type < statCount));
-
- return ms_Info[a_Type].m_Depends;
-}
-
-
-cStatManager::cStatManager()
+void cStatManager::SetValue(const Statistic a_Stat, const StatValue a_Value)
{
- Reset();
+ m_CustomStatistics[a_Stat] = a_Value;
}
-StatValue cStatManager::GetValue(const eStatistic a_Stat) const
+cStatManager::StatValue cStatManager::AddValue(const Statistic a_Stat, const StatValue a_Delta)
{
- ASSERT((a_Stat > statInvalid) && (a_Stat < statCount));
-
- return m_MainStats[a_Stat];
+ return m_CustomStatistics[a_Stat] += a_Delta;
}
-void cStatManager::SetValue(const eStatistic a_Stat, const StatValue a_Value)
+bool cStatManager::SatisfiesPrerequisite(const Statistic a_Stat)
{
- ASSERT((a_Stat > statInvalid) && (a_Stat < statCount));
-
- m_MainStats[a_Stat] = a_Value;
-}
-
-
-
-
-
-StatValue cStatManager::AddValue(const eStatistic a_Stat, const StatValue a_Delta)
-{
- ASSERT((a_Stat > statInvalid) && (a_Stat < statCount));
-
- m_MainStats[a_Stat] += a_Delta;
+ switch (a_Stat)
+ {
+ case Statistic::AchMineWood: return IsStatisticPresent(Statistic::AchOpenInventory);
+ case Statistic::AchBuildWorkBench: return IsStatisticPresent(Statistic::AchMineWood);
+ case Statistic::AchBuildHoe: return IsStatisticPresent(Statistic::AchBuildWorkBench);
+ case Statistic::AchBakeCake: return IsStatisticPresent(Statistic::AchBuildHoe);
+ case Statistic::AchMakeBread: return IsStatisticPresent(Statistic::AchBuildHoe);
+ case Statistic::AchBuildSword: return IsStatisticPresent(Statistic::AchBuildWorkBench);
+ case Statistic::AchKillCow: return IsStatisticPresent(Statistic::AchBuildSword);
+ case Statistic::AchFlyPig: return IsStatisticPresent(Statistic::AchKillCow);
+ case Statistic::AchBreedCow: return IsStatisticPresent(Statistic::AchKillCow);
+ case Statistic::AchKillEnemy: return IsStatisticPresent(Statistic::AchBuildSword);
+ case Statistic::AchSnipeSkeleton: return IsStatisticPresent(Statistic::AchKillEnemy);
+ case Statistic::AchBuildPickaxe: return IsStatisticPresent(Statistic::AchBuildWorkBench);
+ case Statistic::AchBuildBetterPickaxe: return IsStatisticPresent(Statistic::AchBuildPickaxe);
+ case Statistic::AchBuildFurnace: return IsStatisticPresent(Statistic::AchBuildWorkBench);
+ case Statistic::AchCookFish: return IsStatisticPresent(Statistic::AchBuildFurnace);
+ case Statistic::AchAcquireIron: return IsStatisticPresent(Statistic::AchBuildFurnace);
+ case Statistic::AchOnARail: return IsStatisticPresent(Statistic::AchAcquireIron);
+ case Statistic::AchDiamonds: return IsStatisticPresent(Statistic::AchAcquireIron);
+ case Statistic::AchPortal: return IsStatisticPresent(Statistic::AchDiamonds);
+ case Statistic::AchGhast: return IsStatisticPresent(Statistic::AchPortal);
+ case Statistic::AchBlazeRod: return IsStatisticPresent(Statistic::AchPortal);
+ case Statistic::AchPotion: return IsStatisticPresent(Statistic::AchBlazeRod);
+ case Statistic::AchTheEnd: return IsStatisticPresent(Statistic::AchBlazeRod);
+ case Statistic::AchTheEnd2: return IsStatisticPresent(Statistic::AchTheEnd);
+ case Statistic::AchEnchantments: return IsStatisticPresent(Statistic::AchDiamonds);
+ case Statistic::AchOverkill: return IsStatisticPresent(Statistic::AchEnchantments);
+ case Statistic::AchBookcase: return IsStatisticPresent(Statistic::AchEnchantments);
+ case Statistic::AchExploreAllBiomes: return IsStatisticPresent(Statistic::AchTheEnd);
+ case Statistic::AchSpawnWither: return IsStatisticPresent(Statistic::AchTheEnd2);
+ case Statistic::AchKillWither: return IsStatisticPresent(Statistic::AchSpawnWither);
+ case Statistic::AchFullBeacon: return IsStatisticPresent(Statistic::AchKillWither);
+ case Statistic::AchDiamondsToYou: return IsStatisticPresent(Statistic::AchDiamonds);
+ }
- return m_MainStats[a_Stat];
+ return true;
}
-void cStatManager::Reset(void)
+bool cStatManager::IsStatisticPresent(const Statistic a_Stat) const
{
- for (unsigned int i = 0; i < static_cast<unsigned int>(statCount); ++i)
+ const auto Result = m_CustomStatistics.find(a_Stat);
+ if (Result != m_CustomStatistics.end())
{
- m_MainStats[i] = 0;
+ return Result->second > 0;
}
+ return false;
}
-
-
-
-
-