#pragma once

#include <Thread.h>
#include <Critical.h>

#include "DimensionGenerator.h"
#include "Area.h"


class WorldGenerator : public Framework::Thread
{
private:
    Framework::Critical cs;
    Framework::Array<Area> requestQueue;
    bool exit;
    int seed;

public:
    WorldGenerator( int seed );
    ~WorldGenerator();
    void thread() override;
    void requestGeneration( Area request );
    void exitAndWait();
    Framework::Either<Block*, int> generateSingleBlock( Framework::Vec3<int> location, int dimensionId );
};