#ifndef MUSHROOM_HPP_
#define MUSHROOM_HPP_

#include <Block/SpriteBlock/SpriteBlock.hpp>

class Mushroom : public SpriteBlock
{
private:
    static std::vector<Sprite> makeSprites(std::string texSetName);

public:
    /**
     * @brief Construct a mushroom block.
     * 
     * The set of textures has the form `$+MushroomTop`, `$+MushroomSide`, `$+MushroomBottom`.
     * 
     * @param name The name of this block.
     * @param displayName The display name of this block.
     * @param texSetName The name used for the set of textures.
     */
    Mushroom(std::string name, std::string displayName, std::string texSetName);

    virtual bool canPlace(LocalWorld &world, IWorldActor &actor, glm::ivec3 pos, Side side, uint8_t &meta) override;
    virtual bool isIntersectedBy(World &world, glm::ivec3 pos, const BoundingBox<wfixed> &box) override;
    virtual bool canManuallyDig() override;
    virtual void onNeighborUpdated(LocalWorld &world, glm::ivec3 pos, Side side) override;
    virtual bool canSweepAway() override;
};

#endif