/**
Copyright: Copyright (c) 2016-2017 Andrey Penechko.
License: $(WEB boost.org/LICENSE_1_0.txt, Boost License 1.0).
Authors: Andrey Penechko.
*/
module voxelman.model.mesh;

struct Mesh(V)
{
	V[] vertices;
	Faces faces;
}

struct Face3
{
	int[3] vertices;
}

struct Face
{
	int[] vertices;
}

struct Faces
{
	int[] faceData;
	size_t numFaces;

	bool isTriangulated() {
		return (faceData.length % (numFaces*4)) == 0;
	}

	Range opIndex() {
		return Range(faceData);
	}

	private static struct Range
	{
		private int[] faceData;
		int[] front() {
			return faceData[1 .. (faceData[0]+1)];
		}
		void popFront() {
			faceData = faceData[(faceData[0]+1)..$];
		}
		bool empty() { return faceData.length == 0; }
	}
}