// Copyright Epic Games, Inc. All Rights Reserved.

#include "Mesh.h"
#include "Importer.h"
#include "UnrealLightmass.h"

namespace Lightmass
{

//----------------------------------------------------------------------------
//	Mesh base class
//----------------------------------------------------------------------------

void FBaseMesh::Import( FLightmassImporter& Importer )
{
	Importer.ImportData( (FBaseMeshData*)this );
}

//----------------------------------------------------------------------------
//	Static mesh class
//----------------------------------------------------------------------------

void FStaticMesh::Import( FLightmassImporter& Importer )
{
	// import super class
	FBaseMesh::Import(Importer);

	// import the shared data structure
	Importer.ImportData( (FStaticMeshData*)this );

	UE_LOG(LogLightmass, Verbose, TEXT("Importing a static mesh with %d LODs [%s]"), NumLODs, *Guid.ToString());
	checkf(NumLODs > 0, TEXT("Imported a static mesh with 0 LODs. Uhoh"));

	// create the LODs
	LODs.Empty(NumLODs);

	// import each of the LODs
	for (uint32 LODIndex = 0; LODIndex < NumLODs; LODIndex++)
	{
		FStaticMeshLOD* LOD = new(LODs) FStaticMeshLOD;

		// import each LOD separately
		LOD->Import(Importer);
	}
}

//----------------------------------------------------------------------------
//	Static mesh LOD class
//----------------------------------------------------------------------------

void FStaticMeshLOD::Import( class FLightmassImporter& Importer )
{
	// import the shared data structure
	Importer.ImportData((FStaticMeshLODData*)this);

	Importer.ImportArray(Elements, NumElements);

	for (uint32 MeshElementIndex = 0; MeshElementIndex < NumElements; MeshElementIndex++)
	{
		// Only triangle lists are supported for now
		check(Elements[MeshElementIndex].FirstIndex % 3 == 0);
	}
	Importer.ImportArray(Indices, NumIndices);
	Importer.ImportArray(Vertices, NumVertices);
}


}
