1
0
cuberite-2a/src/Statistics.h
2014-05-11 14:57:06 +03:00

165 lines
3.6 KiB
C++

// Statistics.h
#pragma once
// tolua_begin
enum eStatistic
{
// The order must match the order of cStatInfo::ms_Info
statInvalid = -1,
/* Achievements */
achOpenInv, /* Taking Inventory */
achMineWood, /* Getting Wood */
achCraftWorkbench, /* Benchmarking */
achCraftPickaxe, /* Time to Mine! */
achCraftFurnace, /* Hot Topic */
achAcquireIron, /* Acquire Hardware */
achCraftHoe, /* Time to Farm! */
achMakeBread, /* Bake Bread */
achBakeCake, /* The Lie */
achCraftBetterPick, /* Getting an Upgrade */
achCookFish, /* Delicious Fish */
achOnARail, /* On A Rail */
achCraftSword, /* Time to Strike! */
achKillMonster, /* Monster Hunter */
achKillCow, /* Cow Tipper */
achFlyPig, /* When Pigs Fly */
achSnipeSkeleton, /* Sniper Duel */
achDiamonds, /* DIAMONDS! */
achEnterPortal, /* We Need to Go Deeper */
achReturnToSender, /* Return to Sender */
achBlazeRod, /* Into Fire */
achBrewPotion, /* Local Brewery */
achEnterTheEnd, /* The End? */
achDefeatDragon, /* The End. */
achCraftEnchantTable, /* Enchanter */
achOverkill, /* Overkill */
achBookshelf, /* Librarian */
achExploreAllBiomes, /* Adventuring Time */
achSpawnWither, /* The Beginning? */
achKillWither, /* The Beginning. */
achFullBeacon, /* Beaconator */
achBreedCow, /* Repopulation */
achThrowDiamonds, /* Diamonds to you! */
/* Statistics */
statGamesQuit,
statMinutesPlayed,
statDistWalked,
statDistSwum,
statDistFallen,
statDistClimbed,
statDistFlown,
statDistDove,
statDistMinecart,
statDistBoat,
statDistPig,
statDistHorse,
statJumps,
statItemsDropped,
statDamageDealt,
statDamageTaken,
statDeaths,
statMobKills,
statAnimalsBred,
statPlayerKills,
statFishCaught,
statJunkFished,
statTreasureFished,
statCount
};
// tolua_end
/** Class used to store and query statistic-related information. */
class cStatInfo
{
public:
cStatInfo();
cStatInfo(const eStatistic a_Type, const AString & a_Name, const eStatistic a_Depends = statInvalid);
/** Type -> Name */
static const AString & GetName(const eStatistic a_Type);
/** Name -> Type */
static eStatistic GetType(const AString & a_Name);
/** Returns stat prerequisite. (Used for achievements) */
static eStatistic GetPrerequisite(const eStatistic a_Type);
private:
eStatistic m_Type;
AString m_Name;
eStatistic m_Depends;
static cStatInfo ms_Info[statCount];
};
/* Signed (?) integral value. */
typedef int StatValue; // tolua_export
/** Class that manages the statistics and achievements of a single player. */
// tolua_begin
class cStatManager
{
public:
// tolua_end
cStatManager();
// tolua_begin
/** Return the value of the specified stat. */
StatValue GetValue(const eStatistic a_Stat) const;
/** Set the value of the specified stat. */
void SetValue(const eStatistic a_Stat, const StatValue a_Value);
/** Reset everything. */
void Reset();
/** Increment the specified stat.
*
* Returns the new value.
*/
StatValue AddValue(const eStatistic a_Stat, const StatValue a_Delta = 1);
// tolua_end
private:
StatValue m_MainStats[statCount];
// TODO 10-05-2014 xdot: Use, mine, craft statistics
}; // tolua_export