2022-07-24 18:04:02 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "Entity.h"
|
|
|
|
#include "GameMessages.h"
|
|
|
|
#include "Component.h"
|
2022-12-19 19:45:50 +00:00
|
|
|
#include "eCharacterVersion.h"
|
2023-03-04 07:16:37 +00:00
|
|
|
#include "eReplicaComponentType.h"
|
2022-07-24 18:04:02 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Component that handles level progression and serilization.
|
|
|
|
*
|
|
|
|
*/
|
2022-12-19 19:45:50 +00:00
|
|
|
|
2024-01-24 05:13:23 +00:00
|
|
|
class LevelProgressionComponent final : public Component {
|
2022-07-24 18:04:02 +00:00
|
|
|
public:
|
2024-01-24 05:13:23 +00:00
|
|
|
static constexpr eReplicaComponentType ComponentType = eReplicaComponentType::LEVEL_PROGRESSION;
|
2022-07-24 18:04:02 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructor for this component
|
|
|
|
* @param parent parent that contains this component
|
|
|
|
*/
|
|
|
|
LevelProgressionComponent(Entity* parent);
|
|
|
|
|
2023-08-10 21:33:15 +00:00
|
|
|
void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) override;
|
2022-07-24 18:04:02 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Save data from this componennt to character XML
|
|
|
|
* @param doc the document to write data to
|
|
|
|
*/
|
|
|
|
void UpdateXml(tinyxml2::XMLDocument* doc) override;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Load base data for this component from character XML
|
|
|
|
* @param doc the document to read data from
|
|
|
|
*/
|
|
|
|
void LoadFromXml(tinyxml2::XMLDocument* doc) override;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the current level of the entity
|
|
|
|
* @return the current level of the entity
|
|
|
|
*/
|
|
|
|
const uint32_t GetLevel() const { return m_Level; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the level of the entity
|
|
|
|
* @param level the level to set
|
|
|
|
*/
|
|
|
|
void SetLevel(uint32_t level) { m_Level = level; m_DirtyLevelInfo = true; }
|
|
|
|
|
2022-12-19 19:45:50 +00:00
|
|
|
/**
|
|
|
|
* Gets the current Speed Base of the entity
|
|
|
|
* @return the current Speed Base of the entity
|
|
|
|
*/
|
|
|
|
const uint32_t GetSpeedBase() const { return m_SpeedBase; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the Speed Base of the entity
|
|
|
|
* @param SpeedBase the Speed Base to set
|
|
|
|
*/
|
|
|
|
void SetSpeedBase(uint32_t SpeedBase) { m_SpeedBase = SpeedBase; }
|
|
|
|
|
2022-07-24 18:04:02 +00:00
|
|
|
/**
|
|
|
|
* Gives the player rewards for the last level that they leveled up from
|
|
|
|
*/
|
|
|
|
void HandleLevelUp();
|
|
|
|
|
2022-12-19 19:45:50 +00:00
|
|
|
/**
|
|
|
|
* Gets the current Character Version of the entity
|
|
|
|
* @return the current Character Version of the entity
|
|
|
|
*/
|
|
|
|
const eCharacterVersion GetCharacterVersion() const { return m_CharacterVersion; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the Character Version of the entity
|
|
|
|
* @param CharacterVersion the Character Version to set
|
|
|
|
*/
|
|
|
|
void SetCharacterVersion(eCharacterVersion CharacterVersion) { m_CharacterVersion = CharacterVersion; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the Base Speed retroactively of the entity
|
|
|
|
*/
|
|
|
|
void SetRetroactiveBaseSpeed();
|
|
|
|
|
2022-07-24 18:04:02 +00:00
|
|
|
private:
|
|
|
|
/**
|
|
|
|
* whether the level is dirty
|
|
|
|
*/
|
|
|
|
bool m_DirtyLevelInfo = false;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Level of the entity
|
|
|
|
*/
|
|
|
|
uint32_t m_Level;
|
2022-12-19 19:45:50 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The base speed of the entity
|
|
|
|
*/
|
|
|
|
float m_SpeedBase;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The Character format version
|
|
|
|
*/
|
|
|
|
eCharacterVersion m_CharacterVersion;
|
|
|
|
|
2022-07-24 18:04:02 +00:00
|
|
|
};
|