2021-12-05 17:54:36 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "BitStream.h"
|
|
|
|
#include "Entity.h"
|
|
|
|
#include "Component.h"
|
2023-03-04 07:16:37 +00:00
|
|
|
#include "eReplicaComponentType.h"
|
2021-12-05 17:54:36 +00:00
|
|
|
|
2022-07-09 03:25:15 +00:00
|
|
|
// possession types
|
|
|
|
enum class ePossessionType : uint8_t {
|
|
|
|
NO_POSSESSION = 0,
|
|
|
|
ATTACHED_VISIBLE,
|
|
|
|
NOT_ATTACHED_VISIBLE,
|
|
|
|
NOT_ATTACHED_NOT_VISIBLE,
|
|
|
|
};
|
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
/**
|
|
|
|
* 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:
|
2023-10-28 00:09:03 +00:00
|
|
|
inline static const eReplicaComponentType ComponentType = eReplicaComponentType::POSSESSOR;
|
2022-06-29 23:50:24 +00:00
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
PossessorComponent(Entity* parent);
|
|
|
|
~PossessorComponent() override;
|
2022-06-29 23:50:24 +00:00
|
|
|
|
2023-08-10 21:33:15 +00:00
|
|
|
void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) override;
|
2022-06-29 23:50:24 +00:00
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
/**
|
2022-09-02 18:49:19 +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
|
|
|
*/
|
|
|
|
void SetPossessable(LWOOBJID value) { m_Possessable = value; m_DirtyPossesor = true; }
|
2022-06-29 23:50:24 +00:00
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
/**
|
|
|
|
* Returns the entity that this entity is currently posessing
|
2022-09-02 18:49:19 +00:00
|
|
|
* @return The entity that this entity is currently posessing
|
2022-07-28 13:39:57 +00:00
|
|
|
*/
|
|
|
|
LWOOBJID GetPossessable() const { return m_Possessable; }
|
2022-06-29 23:50:24 +00:00
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
/**
|
2022-09-02 18:49:19 +00:00
|
|
|
* Sets if we are busy dismounting
|
|
|
|
* @param value If we are busy dismounting
|
2022-07-28 13:39:57 +00:00
|
|
|
*/
|
2022-09-02 18:49:19 +00:00
|
|
|
void SetIsDismounting(bool value) { m_IsDismounting = value; }
|
2022-07-17 07:35:11 +00:00
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
/**
|
2022-09-02 18:49:19 +00:00
|
|
|
* Returns if we are busy dismounting
|
|
|
|
* @return If we are busy dismounting
|
2022-07-28 13:39:57 +00:00
|
|
|
*/
|
2022-09-02 18:49:19 +00:00
|
|
|
bool GetIsDismounting() const { return m_IsDismounting; }
|
2022-07-17 07:35:11 +00:00
|
|
|
|
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
|
2022-09-02 18:49:19 +00:00
|
|
|
* @param value The possesible type to set
|
2022-07-28 13:39:57 +00:00
|
|
|
*/
|
|
|
|
void SetPossessableType(ePossessionType value) { m_PossessableType = value; m_DirtyPossesor = true; }
|
2022-07-09 03:25:15 +00:00
|
|
|
|
2022-09-02 18:49:19 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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-06-29 23:50:24 +00:00
|
|
|
|
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-06-29 23:50:24 +00:00
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
/**
|
|
|
|
* @brief possessable type
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
ePossessionType m_PossessableType = ePossessionType::NO_POSSESSION;
|
2022-06-29 23:50:24 +00:00
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
/**
|
2022-09-02 18:49:19 +00:00
|
|
|
* @brief If the possessor is dirty
|
2022-07-28 13:39:57 +00:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
bool m_DirtyPossesor = false;
|
2022-07-17 07:35:11 +00:00
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
/**
|
2022-09-02 18:49:19 +00:00
|
|
|
* @brief If the possessor is busy dismounting
|
2022-07-28 13:39:57 +00:00
|
|
|
*
|
|
|
|
*/
|
2022-09-02 18:49:19 +00:00
|
|
|
bool m_IsDismounting = false;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Mount Item ID
|
|
|
|
*/
|
|
|
|
LWOOBJID m_MountItemID = LWOOBJID_EMPTY;
|
2021-12-05 17:54:36 +00:00
|
|
|
};
|