#ifndef WORLD_VIEW_HPP_
#define WORLD_VIEW_HPP_

#include <Utilities/CircularInt.hpp>
#include <BoundingBox/BoundingBox.hpp>

class World;
class Chunk;

/**
 * @brief Describes the requirements of a view into the world.
 */
class WorldView
{
private:
    World &world;
    size_t viewIndex;

public:
    /**
     * @brief Construct a view into the specified world.
     */
    WorldView(World &world);

    ~WorldView();

    /**
     * @brief Set the retain box of this view.
     * 
     * @param box The box within which to retain chunks.
     * @param onNewlyVisible Callback to invoke for every chunk which became visible.
     */
    void setRetainBox(const BoundingBox<cint32> &box, const std::function<void(Chunk&)> &onNewlyVisible = [](Chunk&){});
};

#endif