#ifndef IWORLD_ACTOR_HPP_
#define IWORLD_ACTOR_HPP_

#include <Side/Side.hpp>

/**
 * @brief Interface implemented by things that interact with the world.
 */
class IWorldActor
{
public:
    /**
     * @brief Returns which side of blocks this actor is mostly facing.
     * 
     * This will be a side on the XY plane.
     */
    virtual Side getSideFacing2D() = 0;

    /**
     * @brief Returns true if this actor is using an item directly.
     *
     * For players this returns true if crouching. Maybe there is a more descriptive name for
     * this.
     */
    virtual bool isUsingItemDirectly() = 0;

    /**
     * @brief Called when this actor uses an item that placed a block.
     *
     * Does nothing by default.
     */
    virtual void onBlockPlaced(std::string blockName, glm::ivec3 pos);
};

#endif