DarkflameServer/dGame/dComponents/PossessorComponent.h

82 lines
2.0 KiB
C
Raw Normal View History

#pragma once
#include "BitStream.h"
#include "Entity.h"
#include "Component.h"
// possession types
enum class ePossessionType : uint8_t {
NO_POSSESSION = 0,
ATTACHED_VISIBLE,
NOT_ATTACHED_VISIBLE,
NOT_ATTACHED_NOT_VISIBLE,
};
/**
* Represents an entity that can posess other entities. Generally used by players to drive a car.
*/
class PossessorComponent : public Component {
2022-07-28 13:39:57 +00:00
public:
static const uint32_t ComponentType = COMPONENT_TYPE_POSSESSOR;
2022-07-28 13:39:57 +00:00
PossessorComponent(Entity* parent);
~PossessorComponent() override;
2022-07-28 13:39:57 +00:00
void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags);
2022-07-28 13:39:57 +00:00
/**
* Sets the entity that this entity is possessing
* @param value the ID of the entity this ID should posess
*/
void SetPossessable(LWOOBJID value) { m_Possessable = value; m_DirtyPossesor = true; }
2022-07-28 13:39:57 +00:00
/**
* Returns the entity that this entity is currently posessing
* @return the entity that this entity is currently posessing
*/
LWOOBJID GetPossessable() const { return m_Possessable; }
2022-07-28 13:39:57 +00:00
/**
* Sets if we are busy mounting or dismounting
* @param value if we are busy mounting or dismounting
*/
void SetIsBusy(bool value) { m_IsBusy = value; }
2022-07-28 13:39:57 +00:00
/**
* Returns if we are busy mounting or dismounting
* @return if we are busy mounting or dismounting
*/
bool GetIsBusy() const { return m_IsBusy; }
2022-07-28 13:39:57 +00:00
/**
* Sets the possesible type that's currently used, merely used by the shooting gallery if it's 0
* @param value the possesible type to set
*/
void SetPossessableType(ePossessionType value) { m_PossessableType = value; m_DirtyPossesor = true; }
2022-07-28 13:39:57 +00:00
private:
2022-07-28 13:39:57 +00:00
/**
* The ID of the entity this entity is possessing (e.g. the ID of a car)
*/
LWOOBJID m_Possessable = LWOOBJID_EMPTY;
2022-07-28 13:39:57 +00:00
/**
* @brief possessable type
*
*/
ePossessionType m_PossessableType = ePossessionType::NO_POSSESSION;
2022-07-28 13:39:57 +00:00
/**
* @brief if the possessor is dirty
*
*/
bool m_DirtyPossesor = false;
2022-07-28 13:39:57 +00:00
/**
* @brief if the possessor is busy mounting or dismounting
*
*/
bool m_IsBusy = false;
};