///////////////////////////////////////////////////////////////////////////////
//  CHEOMesh.h

#pragma once

#include <vector>
#include "../Independent/Math3D/S2D.h"
#include "../Independent/Math3D/S3D.h"
#include "../Independent/Math3D/SColor32.h"
#include "../Independent/Math3D/SUV.h"
#include "CHEOBoneWeight.h"
#include "CHEOMorph.h"
#include "CHEOPrimitive.h"

namespace heo {

class CHEOMesh {
	std::vector<S3D>				m_PosList;
	std::vector<S3D>				m_NormalList;
	std::vector<S3D>				m_TangentList;
	std::vector<SUV>				m_UVList;
	std::vector<SUV>				m_UV2List;
	std::vector<math3d::SColor32>	m_ColorList;
	std::vector<CHEOBoneWeight>		m_BoneWeightList;
	std::vector<CHEOPrimitive>		m_HEOPrimitiveList;
	std::vector<CHEOMorph>			m_MorphList;

	// バウンディングボックス
	S3D		m_BoundingBoxMinPos,
			m_BoundingBoxMaxPos;

	// ライトマップ
	int		m_LightmapIndex;

	S2D		m_LightmapScale,
			m_LightmapOffset;

public:
	CHEOMesh(const std::vector<S3D>& PosList, const std::vector<S3D>& NormalList, const std::vector<S3D>& TangentList, const std::vector<SUV>& UVList,
		const std::vector<SUV>& UV2List, const std::vector<math3d::SColor32>& ColorList, const std::vector<CHEOBoneWeight>& BoneWeightList,
		const std::vector<CHEOPrimitive>& HEOPrimitiveList, const std::vector<CHEOMorph>& MorphList,
		const S3D& BoundingBoxMinPos, const S3D& BoundingBoxMaxPos,
		int LightmapIndex, const S2D& LightmapScale, const S2D& LightmapOffset);
	virtual ~CHEOMesh() = default;

	const std::vector<S3D>&					GetPosList() const;
	const std::vector<S3D>&					GetNormalList() const;
	const std::vector<S3D>&					GetTangentList() const;
	const std::vector<SUV>&					GetUVList() const;
	const std::vector<SUV>&					GetUV2List() const;
	const std::vector<math3d::SColor32>&	GetColorList() const;
	const std::vector<CHEOBoneWeight>&		GetBoneWeightList() const;
	const std::vector<CHEOPrimitive>&		GetHEOPrimitiveList() const;
	const std::vector<CHEOMorph>&			GetMorphList() const;

	// バウンディングボックス
	const S3D&	GetBoundingBoxMinPos() const;
	const S3D&	GetBoundingBoxMaxPos() const;

	// ライトマップ
	int			GetLightmapIndex() const;

	const S2D&	GetLightmapScale() const;
	const S2D&	GetLightmapOffset() const;
};

}

