#pragma once

#include "BitStream.h"
#include "Entity.h"
#include "Component.h"

/**
 * Represents an entity that can posess other entities. Generally used by players to drive a car.
 */
class PossessorComponent : public Component {
public:
	static const uint32_t ComponentType = COMPONENT_TYPE_POSSESSOR;
	
	PossessorComponent(Entity* parent);
	~PossessorComponent() override;

    void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags);
    void Update(float deltaTime) override;

    /**
     * Sets the entity that this entity is possessing
     * @param value the ID of the entity this ID should posess
     */
    void SetPossessable(LWOOBJID value);

    /**
     * Returns the entity that this entity is currently posessing
     * @return the entity that this entity is currently posessing
     */
    LWOOBJID GetPossessable() const;

private:

    /**
     * The ID of the entity this entity is possessing (e.g. the ID of a car)
     */
    LWOOBJID m_Possessable;
};