/********************************************************************
	Minecraft: Pocket Edition - Decompilation Project
	Copyright (C) 2023 iProgramInCpp
	
	The following code is licensed under the BSD 1 clause license.
	SPDX-License-Identifier: BSD-1-Clause
 ********************************************************************/

#pragma once

#include "common/Random.hpp"

class Level;

class Feature
{
public:
	virtual ~Feature();
	virtual bool place(Level*, Random*, int, int, int) = 0;
	virtual void init(float, float, float);
};

class TreeFeature : public Feature
{
public:
	bool place(Level*, Random*, int x, int y, int z) override;
};

class BirchFeature : public Feature
{
public:
	bool place(Level*, Random*, int x, int y, int z) override;
};

class SpruceFeature : public Feature
{
public:
	bool place(Level*, Random*, int x, int y, int z) override;
};

class PineFeature : public Feature
{
public:
	bool place(Level*, Random*, int x, int y, int z) override;
};

class FlowerFeature : public Feature
{
public:
	FlowerFeature(int id);
	bool place(Level*, Random*, int x, int y, int z) override;

private:
	int m_ID;
};

class SpringFeature : public Feature
{
public:
	SpringFeature(int id);
	bool place(Level*, Random*, int x, int y, int z) override;

private:
	int m_ID;
};

class ClayFeature : public Feature
{
public:
	ClayFeature(int id, int count);
	bool place(Level*, Random*, int x, int y, int z) override;

private:
	int m_ID;
	int m_count;
};

class OreFeature : public Feature
{
public:
	OreFeature(int id, int count);
	bool place(Level*, Random*, int x, int y, int z) override;

private:
	int m_ID;
	int m_count;
};

class ReedsFeature : public Feature
{
public:
	bool place(Level*, Random*, int x, int y, int z) override;
};

