#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);
};