2021-12-05 17:54:36 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "BitStream.h"
|
|
|
|
#include "Entity.h"
|
|
|
|
#include "Component.h"
|
2022-07-09 03:25:15 +00:00
|
|
|
#include "Item.h"
|
|
|
|
#include "PossessorComponent.h"
|
|
|
|
#include "eAninmationFlags.h"
|
2023-03-04 07:16:37 +00:00
|
|
|
#include "eReplicaComponentType.h"
|
2021-12-05 17:54:36 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Represents an entity that can be controlled by some other entity, generally used by cars to indicate that some
|
|
|
|
* player is controlling it.
|
|
|
|
*/
|
2024-01-24 05:13:23 +00:00
|
|
|
class PossessableComponent final : public Component {
|
2022-07-09 03:25:15 +00:00
|
|
|
public:
|
2024-01-24 05:13:23 +00:00
|
|
|
static constexpr eReplicaComponentType ComponentType = eReplicaComponentType::POSSESSABLE;
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-09 03:25:15 +00:00
|
|
|
PossessableComponent(Entity* parentEntity, uint32_t componentId);
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2023-08-10 21:33:15 +00:00
|
|
|
void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) override;
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-09 03:25:15 +00:00
|
|
|
/**
|
2022-09-02 18:49:19 +00:00
|
|
|
* @brief mounts the Entity
|
|
|
|
*/
|
|
|
|
void Mount();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief dismounts the Entity
|
|
|
|
*/
|
|
|
|
void Dismount();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the possessor of this Entity
|
2022-07-09 03:25:15 +00:00
|
|
|
* @param value the ID of the possessor to set
|
|
|
|
*/
|
|
|
|
void SetPossessor(LWOOBJID value) { m_Possessor = value; m_DirtyPossessable = true; };
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-09 03:25:15 +00:00
|
|
|
/**
|
2022-09-02 18:49:19 +00:00
|
|
|
* Returns the possessor of this Entity
|
|
|
|
* @return the possessor of this Entity
|
2022-07-09 03:25:15 +00:00
|
|
|
*/
|
|
|
|
LWOOBJID GetPossessor() const { return m_Possessor; };
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-09 03:25:15 +00:00
|
|
|
/**
|
|
|
|
* Sets the animation Flag of the possessable
|
|
|
|
* @param value the animation flag to set to
|
|
|
|
*/
|
|
|
|
void SetAnimationFlag(eAnimationFlags value) { m_AnimationFlag = value; m_DirtyPossessable = true; };
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-09 03:25:15 +00:00
|
|
|
/**
|
2022-09-02 18:49:19 +00:00
|
|
|
* Returns the possession type of this Entity
|
|
|
|
* @return the possession type of this Entity
|
2022-07-09 03:25:15 +00:00
|
|
|
*/
|
|
|
|
ePossessionType GetPossessionType() const { return m_PossessionType; };
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-09 03:25:15 +00:00
|
|
|
/**
|
2022-09-02 18:49:19 +00:00
|
|
|
* Returns if the Entity should deposses on hit
|
|
|
|
* @return if the Entity should deposses on hit
|
2022-07-09 03:25:15 +00:00
|
|
|
*/
|
|
|
|
bool GetDepossessOnHit() const { return m_DepossessOnHit; };
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-09 03:25:15 +00:00
|
|
|
/**
|
2022-09-02 18:49:19 +00:00
|
|
|
* Forcibly depossess the Entity
|
2022-07-09 03:25:15 +00:00
|
|
|
*/
|
|
|
|
void ForceDepossess() { m_ImmediatelyDepossess = true; m_DirtyPossessable = true; };
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-17 07:35:11 +00:00
|
|
|
/**
|
|
|
|
* Set if the parent entity was spawned from an item
|
|
|
|
* @param value if the parent entity was spawned from an item
|
|
|
|
*/
|
2022-09-02 18:49:19 +00:00
|
|
|
void SetIsItemSpawned(bool value) { m_ItemSpawned = value; };
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-17 07:35:11 +00:00
|
|
|
/**
|
|
|
|
* Returns if the parent entity was spawned from an item
|
|
|
|
* @return if the parent entity was spawned from an item
|
|
|
|
*/
|
2022-09-02 18:49:19 +00:00
|
|
|
LWOOBJID GetIsItemSpawned() const { return m_ItemSpawned; };
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-09 03:25:15 +00:00
|
|
|
/**
|
|
|
|
* Handles an OnUsed event by some other entity, if said entity has a Possessor it becomes the possessor
|
|
|
|
* of this entity
|
|
|
|
* @param originator the entity that caused the event to trigger
|
|
|
|
*/
|
|
|
|
void OnUse(Entity* originator) override;
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-09 03:25:15 +00:00
|
|
|
private:
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-09 03:25:15 +00:00
|
|
|
/**
|
|
|
|
* @brief Whether the possessor is dirty
|
|
|
|
*/
|
|
|
|
bool m_DirtyPossessable = true;
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-09 03:25:15 +00:00
|
|
|
/**
|
|
|
|
* @brief The possessor of this entity, e.g. the entity that controls this entity
|
|
|
|
*/
|
|
|
|
LWOOBJID m_Possessor = LWOOBJID_EMPTY;
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-09 03:25:15 +00:00
|
|
|
/**
|
|
|
|
* @brief The type of possesstion to use on this entity
|
|
|
|
*/
|
|
|
|
ePossessionType m_PossessionType = ePossessionType::NO_POSSESSION;
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-09 03:25:15 +00:00
|
|
|
/**
|
|
|
|
* @brief Should the possessable be dismount on hit
|
|
|
|
*/
|
|
|
|
bool m_DepossessOnHit = false;
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-09 03:25:15 +00:00
|
|
|
/**
|
|
|
|
* @brief What animaiton flag to use
|
|
|
|
*
|
|
|
|
*/
|
2022-12-16 21:24:13 +00:00
|
|
|
eAnimationFlags m_AnimationFlag = eAnimationFlags::IDLE_NONE;
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-09 03:25:15 +00:00
|
|
|
/**
|
|
|
|
* @brief Should this be immediately depossessed
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
bool m_ImmediatelyDepossess = false;
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2022-07-17 07:35:11 +00:00
|
|
|
/**
|
|
|
|
* @brief Whether the parent entity was spawned from an item
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
bool m_ItemSpawned = false;
|
2021-12-05 17:54:36 +00:00
|
|
|
};
|