//CPlayerShader - [2020-04-13 11:57:47]
#ifndef _CPLAYERSHADER_H_
#define _CPLAYERSHADER_H_

#include "CFTTUberShader.h"
#include "CFTTMatrix32.h"

/*
001D0114 CPlayerShader::CPlayerShader()
001D0120 CPlayerShader::~CPlayerShader()
0011F980 CPlayerShader::SetBin(EPlayerShader_Bin,int)
0011F990 CPlayerShader::SetDiffuse(CFTTTexParam,int)
0011F9A8 CPlayerShader::SetSpecular(CFTTTexParam,int)
0011F9C0 CPlayerShader::SetNormal(CFTTTexParam,int)
0011F9D8 CPlayerShader::SetAmbient(CFTTTexParam,int)
0011F9F0 CPlayerShader::SetDiffRimLightLUT(CFTTTexParam,int)
0011FA08 CPlayerShader::SetSpecLightLUT(CFTTTexParam,int)
0011FA20 CPlayerShader::SetSpecularEnv(CFTTTexParam,int)
0011FDBC CPlayerShader::SetModel(EPlayerShader_Model)
0011FDCE CPlayerShader::SetShadowMap(EPlayerShader_ShadowMap)
0011FDE0 CPlayerShader::SetLightDir(CFTTVector32 const&)
0011FDEC CPlayerShader::SetBlendMode(EPlayerShader_BlendMode)
001265B4 CPlayerShader::SetCinematic(EPlayerShader_Cinematic)
001265C6 CPlayerShader::SetCinematicLightingCloth(CFTTVector32x4 const&)
001265D2 CPlayerShader::SetCinematicLightingSkin(CFTTVector32x4 const&)
001265DE CPlayerShader::SetQuality(EPlayerShader_Quality)
0017F508 CPlayerShader::SetColourMulti1(CFTTVector32 const&,int)
0017F512 CPlayerShader::SetColourMulti2(CFTTVector32 const&,int)
0017F51C CPlayerShader::SetColourMulti3(CFTTVector32 const&,int)
0017F526 CPlayerShader::SetColourMulti4(CFTTVector32 const&,int)
00180808 CPlayerShader::SetShadowMapTex(CFTTTexParam)
0018081C CPlayerShader::SetFloatingPoint(EPlayerShader_FloatingPoint)
0018082E CPlayerShader::SetDiffuseEnv(CFTTTexParam)
00180842 CPlayerShader::SetBRDFLUT(CFTTTexParam)
00180856 CPlayerShader::SetPBR(CFTTVector32x4 const&,int)
00186CF4 CPlayerShader::SetAtlasCount(float const*)
00186D00 CPlayerShader::SetShadowMapProj01(CFTTMatrix32 const&)
00186D0C CPlayerShader::SetShadowMapProj02(CFTTMatrix32 const&)
00186D18 CPlayerShader::SetShadowMapProj03(CFTTMatrix32 const&)
00186D24 CPlayerShader::SetShadowMapProj04(CFTTMatrix32 const&)
00186D30 CPlayerShader::SetShadowMapSplit(CFTTVector32 const&)
00186D3C CPlayerShader::SetViewParams(float const*)
001D0124 CPlayerShader::CreateMat(EPlayerShader_Bin,CFTTVector32x4 const&,CFTTTexParam,CFTTTexParam,CFTTTexParam,CFTTTexParam,CFTTTexParam,CFTTTexParam,CFTTTexParam,CFTTVector32 const&,CFTTVector32 const&,CFTTVector32 const&,CFTTVector32 const&,EPlayerShader_CullMode)

EPlayerShader_Bin,
CFTTVector32x4 const&,
CFTTTexParam,
CFTTTexParam,
CFTTTexParam,
CFTTTexParam,
CFTTTexParam,
CFTTTexParam,
CFTTTexParam,
CFTTVector32 const&,
CFTTVector32 const&,
CFTTVector32 const&,
CFTTVector32 const&,
EPlayerShader_CullMode
*/

enum EPlayerShader_Bin {
  EPlayerShader_Bin_0,
  EPlayerShader_Bin_1,
  EPlayerShader_Bin_2,
  EPlayerShader_Bin_3,
  EPlayerShader_Bin_4,
  EPlayerShader_Bin_5,
  EPlayerShader_Bin_6,
  EPlayerShader_Bin_7,
  EPlayerShader_Bin_8,
};

enum EPlayerShader_Model {
  EPlayerShader_Model_0,
  EPlayerShader_Model_1,
  EPlayerShader_Model_2,
  EPlayerShader_Model_3,
  EPlayerShader_Model_4,
  EPlayerShader_Model_5,
};

enum EPlayerShader_ShadowMap {
  EPlayerShader_ShadowMap_0,
  EPlayerShader_ShadowMap_1,
  EPlayerShader_ShadowMap_2,
  EPlayerShader_ShadowMap_3,
  EPlayerShader_ShadowMap_4,
  EPlayerShader_ShadowMap_5,
};

enum EPlayerShader_BlendMode {
  EPlayerShader_BlendMode_0,
  EPlayerShader_BlendMode_1,
  EPlayerShader_BlendMode_2,
  EPlayerShader_BlendMode_3,
  EPlayerShader_BlendMode_4,
  EPlayerShader_BlendMode_5,
};

enum EPlayerShader_Cinematic {
  EPlayerShader_Cinematic_0,
  EPlayerShader_Cinematic_1,
  EPlayerShader_Cinematic_2,
  EPlayerShader_Cinematic_3,
  EPlayerShader_Cinematic_4,
  EPlayerShader_Cinematic_5,
};

enum EPlayerShader_Quality {
  EPlayerShader_Quality_0,
  EPlayerShader_Quality_1,
  EPlayerShader_Quality_2,
  EPlayerShader_Quality_3,
  EPlayerShader_Quality_4,
  EPlayerShader_Quality_5,
};

enum EPlayerShader_FloatingPoint {
  EPlayerShader_FloatingPoint_0,
  EPlayerShader_FloatingPoint_1,
  EPlayerShader_FloatingPoint_2,
  EPlayerShader_FloatingPoint_3,
  EPlayerShader_FloatingPoint_4,
  EPlayerShader_FloatingPoint_5,
};

enum EPlayerShader_CullMode {
  EPlayerShader_CullMode_0,
  EPlayerShader_CullMode_1,
  EPlayerShader_CullMode_2,
  EPlayerShader_CullMode_3,
  EPlayerShader_CullMode_4,
  EPlayerShader_CullMode_5,
};


class CPlayerShader : public CFTTUberShader {
public:
  CPlayerShader();                                                    //001D0114
  ~CPlayerShader();                                                   //001D0120
  void SetBin(EPlayerShader_Bin eBin, int a2);                        //0011F980
  void SetDiffuse(CFTTTexParam aTexParam, int a2);                    //0011F990
  void SetSpecular(CFTTTexParam aTexParam, int a2);                   //0011F9A8
  void SetNormal(CFTTTexParam aTexParam, int a2);                     //0011F9C0
  void SetAmbient(CFTTTexParam aTexParam, int a2);                    //0011F9D8
  void SetDiffRimLightLUT(CFTTTexParam aTexParam, int a2);            //0011F9F0
  void SetSpecLightLUT(CFTTTexParam aTexParam, int a2);               //0011FA08
  void SetSpecularEnv(CFTTTexParam aTexParam, int a2);                //0011FA20
  void SetModel(EPlayerShader_Model eModel);                          //0011FDBC
  void SetShadowMap(EPlayerShader_ShadowMap eShadowMap);              //0011FDCE
  void SetLightDir(CFTTVector32 const& pVector32);                    //0011FDE0
  void SetBlendMode(EPlayerShader_BlendMode eBlendMode);              //0011FDEC
  void SetCinematic(EPlayerShader_Cinematic eCinematic);              //001265B4
  void SetCinematicLightingCloth(CFTTVector32x4 const& pVector32x4);  //001265C6
  void SetCinematicLightingSkin(CFTTVector32x4 const& pVector32x4);   //001265D2
  void SetQuality(EPlayerShader_Quality eQuality);                    //001265DE
  void SetColourMulti1(CFTTVector32 const& pVector32, int a2);        //0017F508
  void SetColourMulti2(CFTTVector32 const& pVector32, int a2);        //0017F512
  void SetColourMulti3(CFTTVector32 const& pVector32, int a2);        //0017F51C
  void SetColourMulti4(CFTTVector32 const& pVector32, int a2);        //0017F526
  void SetShadowMapTex(CFTTTexParam aTexParam);                       //00180808
  void SetFloatingPoint(EPlayerShader_FloatingPoint eFloatingPoint);  //0018081C
  void SetDiffuseEnv(CFTTTexParam aTexParam);                         //0018082E
  void SetBRDFLUT(CFTTTexParam aTexParam);                            //00180842
  void SetPBR(CFTTVector32x4 const& pVector32x4, int a2);             //00180856
  void SetAtlasCount(float const* pf);                                //00186CF4
  void SetShadowMapProj01(CFTTMatrix32 const& pMatrix32);             //00186D00
  void SetShadowMapProj02(CFTTMatrix32 const& pMatrix32);             //00186D0C
  void SetShadowMapProj03(CFTTMatrix32 const& pMatrix32);             //00186D18
  void SetShadowMapProj04(CFTTMatrix32 const& pMatrix32);             //00186D24
  void SetShadowMapSplit(CFTTVector32 const& pVector32);              //00186D30
  void SetViewParams(float const* pf);                                //00186D3C
  ushort CreateMat(EPlayerShader_Bin eBin,
                   CFTTVector32x4 const& pVector32x4,
                   CFTTTexParam aTexParam1,
                   CFTTTexParam aTexParam2,
                   CFTTTexParam aTexParam3,
                   CFTTTexParam aTexParam4,
                   CFTTTexParam aTexParam5,
                   CFTTTexParam aTexParam6,
                   CFTTTexParam aTexParam7,
                   CFTTVector32 const& pVector32_1,
                   CFTTVector32 const& pVector32_2,
                   CFTTVector32 const& pVector32_3,
                   CFTTVector32 const& pVector32_4,
                   EPlayerShader_CullMode eCullMode);  //001D0124

  static CPlayerShader s_tInstance;
};

#endif  //_CPLAYERSHADER_H_