diff options
Diffstat (limited to '')
-rw-r--r-- | source/Entities/Player.h | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/source/Entities/Player.h b/source/Entities/Player.h index 01efa3681..81552fcf1 100644 --- a/source/Entities/Player.h +++ b/source/Entities/Player.h @@ -63,6 +63,27 @@ public: /// Returns the currently equipped boots; empty item if none virtual cItem GetEquippedBoots(void) const override { return m_Inventory.GetEquippedBoots(); } + + /** Sets the experience total - XpTotal, updates XpLevel and XpP as appropriate + Returns true on success + should really only be called at init or player death + */ + bool SetExperience(int a_XpTotal); + + /* Adds Xp, will not inc more than MAX_EXPERIENCE_ORB_SIZE! + Returns true on success + Updates XpLevel and XpP appropriately + */ + bool AddExperience(int a_Xp_delta); + + /// Gets the experience total - XpTotal + inline int GetExperience(void) { return m_XpTotal; } + + /// Gets the current level - XpLevel + inline int GetExperienceLevel(void) { return m_XpLevel; } + + /// Gets the experience bar percentage - XpP + inline float GetExperiencePercentage(void) { return m_XpP; } /// Starts charging the equipped bow void StartChargingBow(void); @@ -289,7 +310,7 @@ public: virtual bool IsSubmerged(void) const{ return m_IsSubmerged; } // tolua_end - + // cEntity overrides: virtual bool IsCrouched (void) const { return m_IsCrouched; } virtual bool IsSprinting(void) const { return m_IsSprinting; } @@ -378,6 +399,27 @@ protected: /// The world tick in which eating will be finished. -1 if not eating Int64 m_EatingFinishTick; + + /// Player Xp levels etc + int m_XpLevel; //store this and m_XpP to save calculating each time + float m_XpP; //between 0 & 1 + int m_XpTotal; + int m_XpNextLevelTotal; //save calculating this often + + //Xp level defines + #define XP_TO_LEVEL15 255 + #define XP_PER_LEVEL_TO15 17 + #define XP_TO_LEVEL30 825 + + /// Caculates the Xp at a given level, ref: http://minecraft.gamepedia.com/XP + inline int XpAtLevel(int level) { return (int) ((level <= 15)? (15*level) : + ((level <= 31)? (1.5*level*level - 29.5*level + 360) : + (3.5*level*level - 151.5*level + 2220))); } + + /// inverse of XpAtLevel, ref: http://minecraft.gamepedia.com/XP values are as per this with pre-calculations + inline int CalcLevelFromXp(int XpTotal) { return (int) ((XpTotal <= XP_TO_LEVEL15)? XpTotal / XP_PER_LEVEL_TO15 : //level 0-15 or... + (XpTotal <= XP_TO_LEVEL30)? ( 29.5 + sqrt( 870.25 - (6 * ( 360 - XpTotal )))) / 3 : //level 15-30 + (151.5 + sqrt( 22952.25 - (14 * (2220 - XpTotal)))) / 7); }//level 30+ bool m_IsChargingBow; int m_BowCharge; |