#pragma once
#include "brush.hpp"
#include "surface.hpp"

class MeshModel;

class MeshLoader {
	public:
	enum { HINT_COLLAPSE = 1, HINT_ANIMONLY = 2 };

	virtual MeshModel* load(const std::string& f, const Transform& conv, int hint) = 0;

	//clear
	static void beginMesh();

	//add a vertex
	static void addVertex(const Surface::Vertex& v);

	//add a triangle
	static void addTriangle(const int verts[3], const Brush& b);

	//also add a triangle
	static void addTriangle(int v0, int v1, int v2, const Brush& b);

	//add a bone
	static void addBone(int vert, float weight, int bone);

	//reference a vertex
	static Surface::Vertex& refVertex(int vert);

	//number of verts
	static int numVertices();

	//finally, update the mesh...
	static void endMesh(MeshModel* mesh);
};
