///////////////////////////////////////////////////////////////////////////////
//  CHEOMaterial.h

#pragma once

#include <string>
#include "../Independent/Math3D/SColor.h"
#include "../Independent/Math3D/SUV.h"
#include "EHEOBlendMode.h"
#include "EHEOShaderType.h"

namespace heo {

class CHEOMaterial {
	std::string			m_Name;
	EHEOShaderType		m_ShaderType;
	EHEOBlendMode		m_BlendMode;
	float				m_Cutoff;
	bool				m_DoubleSided;
	bool				m_UseVertexColor;
	SColor				m_Color;
	SColor				m_EmissionColor;
	int					m_TextureIndexMain;
	int					m_TextureIndexNormal;
	int					m_TextureIndexEmission;
	int					m_TextureIndexRoughness;//ラフネス(AutodeskInteractive対応用)

	SUV					m_TextureScaleMain;
	SUV					m_TextureOffsetMain;

	SUV					m_Texture1ScaleMain;
	SUV					m_Texture1OffsetMain;

	// シェーダパラメータ
/*	gcommon::CPBRParam				m_PBRParam;
	gcommon::CUTSParam				m_UTSParam;
	gcommon::CWaterPlaneParam		m_WaterPlaneParam;
	gcommon::CFurParam				m_FurParam;
*/
public:
	CHEOMaterial(const std::string& Name, EHEOShaderType ShaderType, EHEOBlendMode BlendMode, float Cutoff, bool DoubleSided, bool UseVertexColor,
		const SColor& Color, const SColor& EmissionColor,  int TextureIndexMain, int TextureIndexNormal, int TextureIndexEmission, int TextureIndexRoughness,
		const SUV& TextureScaleMain, const SUV& TextureOffsetMain, const SUV& Texture1ScaleMain, const SUV& Texture1OffsetMain);
	virtual ~CHEOMaterial() = default;

	const std::string&	GetName() const;
	EHEOShaderType		GetShaderType() const;
	EHEOBlendMode		GetBlendMode() const;
	float				GetCutoff() const;
	bool				IsDoubleSided() const;
	bool				IsUseVertexColor() const;
	const SColor&		GetColor() const;
	const SColor&		GetEmissionColor() const;
	int					GetTextureIndexMain() const;
	int					GetTextureIndexNormal() const;
	int					GetTextureIndexRoughness() const;
	int					GetTextureIndexEmission() const;

	const SUV&			GetTextureScaleMain() const;
	const SUV&			GetTextureOffsetMain() const;

	const SUV&			GetTexture1ScaleMain() const;
	const SUV&			GetTexture1OffsetMain() const;

	// シェーダパラメータ
/*	const gcommon::CPBRParam&			GetPBRParam() const;
	const gcommon::CUTSParam&			GetUTSParam() const;
	const gcommon::CWaterPlaneParam&	GetWaterPlaneParam() const;
	const gcommon::CFurParam&			GetFurParam() const;
*/
};

}

