DarkflameServer/dGame/dComponents/PossessionComponent.h

124 lines
2.9 KiB
C
Raw Normal View History

#pragma once
#include "BitStream.h"
#include "Entity.h"
#include "Component.h"
#include "eReplicaComponentType.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.
*/
2023-06-26 17:36:36 +00:00
class PossessionComponent : public Component {
2022-07-28 13:39:57 +00:00
public:
2023-06-26 17:36:36 +00:00
inline static const eReplicaComponentType ComponentType = eReplicaComponentType::POSSESSION;
2023-06-26 17:36:36 +00:00
PossessionComponent(Entity* parent);
~PossessionComponent() 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
/**
* @brief Mounts the entity
*
* @param mount Entity to be mounted
*/
void Mount(Entity* mount);
/**
* @brief Dismounts the entity
*
* @param mount Entity to be dismounted
* @param forceDismount Should we forcibly dismount the entity
*/
void Dismount(Entity* mount, bool forceDismount = false);
/**
* Sets the ID that this entity is possessing
* @param value The ID that this entity is possessing
2022-07-28 13:39:57 +00:00
*/
2023-07-10 05:37:28 +00:00
void SetPossessable(const LWOOBJID& value) {
if (m_Possessable == value) return;
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
2022-07-28 13:39:57 +00:00
*/
LWOOBJID GetPossessable() const { return m_Possessable; }
2022-07-28 13:39:57 +00:00
/**
* Sets if we are busy dismounting
* @param value If we are busy dismounting
2022-07-28 13:39:57 +00:00
*/
void SetIsDismounting(bool value) { m_IsDismounting = value; }
2022-07-28 13:39:57 +00:00
/**
* Returns if we are busy dismounting
* @return If we are busy dismounting
2022-07-28 13:39:57 +00:00
*/
bool GetIsDismounting() const { return m_IsDismounting; }
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
2022-07-28 13:39:57 +00:00
*/
2023-07-10 05:37:28 +00:00
void SetPossessableType(ePossessionType value) {
if (m_PossessableType == value) return;
m_PossessableType = value;
m_DirtyPossesor = true;
}
/**
* Gets the object ID of the mount item that is being used
* @return The object ID of the mount item that is being used
*/
LWOOBJID GetMountItemID() const { return m_MountItemID; }
/**
* Sets the object ID of the mount item that is being used
* @param m_MountItemID The object ID of the mount item that is being used
*/
void SetMountItemID(LWOOBJID mountItemID) { m_MountItemID = mountItemID; }
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
/**
2023-06-26 17:36:36 +00:00
* @brief If the possession is dirty
2022-07-28 13:39:57 +00:00
*
*/
bool m_DirtyPossesor = false;
2022-07-28 13:39:57 +00:00
/**
2023-06-26 17:36:36 +00:00
* @brief If the possession is busy dismounting
2022-07-28 13:39:57 +00:00
*
*/
bool m_IsDismounting = false;
/**
* Mount Item ID
*/
LWOOBJID m_MountItemID = LWOOBJID_EMPTY;
};