#include "terrain.hpp"
#include "terrainrep.hpp"

Terrain::Terrain(int size_shift) : rep(new TerrainRep(size_shift)) {}

Terrain::~Terrain()
{
	delete rep;
}

void Terrain::setDetail(int n, bool m)
{
	rep->setDetail(n, m);
}

void Terrain::setShading(bool t)
{
	rep->setShading(t);
}

void Terrain::setHeight(int x, int z, float h, bool realtime)
{
	if (x >= 0 && z >= 0 && x <= rep->getSize() && z <= rep->getSize())
		rep->setHeight(x, z, h, realtime);
}

int Terrain::getSize() const
{
	return rep->getSize();
}

float Terrain::getHeight(int x, int z) const
{
	return (x >= 0 && z >= 0 && x <= rep->getSize() && z <= rep->getSize()) ? rep->getHeight(x, z) : 0;
}

bool Terrain::render(const RenderContext& rc)
{
	rep->render(this, rc);
	return false;
}

bool Terrain::collide(const Line& line, float radius, Collision* curr_coll, const Transform& tf)
{
	return rep->collide(line, radius, curr_coll, tf);
}
