//CGFXFX - [2020-04-13 11:57:46]
#ifndef _CGFXFX_H_
#define _CGFXFX_H_

#include "CFTTRenderHelper.h"
#include "CFTTVector32.h"
#include "CGraphicsRewindEffect.h"

/*
00181AC8 CGFXFX::Init()
00181D48 CGFXFX::Shutdown()
00181E44 CGFXFX::Update(float)
00181EB4 CGFXFX::ParticleLogicUpdate()
00181FD0 CGFXFX::ParticleProcess()
0018222C CGFXFX::BallPathProcess()
00182324 CGFXFX::BallEffectsProcess()
0018274C CGFXFX::SwipeUpdate()
00182794 CGFXFX::Render2D()
001827B4 CGFXFX::Render()
0018296C CGFXFX::BallPathAddVerts(TFVF_PFLOAT_CINT_TFLOAT *&)
00182BB0 CGFXFX::BallTrailAddVerts(TFVF_PFLOAT_CINT_TFLOAT *&)
00182E5C CGFXFX::SwipeAddVerts(TFVF_PFLOAT_CINT_TFLOAT *&)
00183458 CGFXFX::ParticleRender()
001839DC CGFXFX::ParticleSystemVisible(EGFXParticleSystemType)
00183A20 CGFXFX::GetFirstParticleType()
00183A40 CGFXFX::ResetParticles()
00183A50 CGFXFX::FountainsUpdate(TFountainsInfo *,TPoint3D,TPoint3D,int)
00183D34 CGFXFX::AddFireworkBurst(TPoint3D,TPoint3D,int)
00183D38 CGFXFX::ConfettiUpdate(TPoint3D,float)
00183EF4 CGFXFX::ParticleAdd(EGFXFXParticle, CFTTVector32 *,CFTTVector32 *,CFTTVector32 *,CFTTVector32 *,int,float,float,uint,uint,float,float,float)
00184028 CGFXFX::GetGoldenBootEffectsEnabled()
0018404C CGFXFX::GetStarPlayerEffectsEnabled()
00184070 CGFXFX::SwipeReset()
001840AC CGFXFX::SwipeSetCol(uint)
001840C0 CGFXFX::SwipeAddPoint(TPoint)
0018416C CGFXFX::EnableGoldenBootEffects()
00184188 CGFXFX::ResetGoldenBootEffects()
001841EC CGFXFX::EnableStarPlayerEffects()
00184208 CGFXFX::ResetStarPlayerEffects()
0018426C CGFXFX::BallTrailSetCol(uint)

*/

struct TFountainsInfo {
  uint time_0;
};

enum EGFXParticleSystemType {
  EGFXParticleSystemType_0,
  EGFXParticleSystemType_1,
  EGFXParticleSystemType_2,
  EGFXParticleSystemType_3,
  EGFXParticleSystemType_4,
  EGFXParticleSystemType_5,
};

//struct TFVF_PFLOAT_CINT_TFLOAT_0 {
//  float f_0;
//  float f_4;
//  float f_8;
//  float f_C;

//  float f_10;
//  float f_14;
//  float f_18;
//};

struct RenderHelperConfetti_LockVerticesRet {
  float f_0;
  float f_4;
  float f_8;
  CFTTVector32 v32_C;
  uint platformU32_18;
  float f_1C;
  float f_20;

  //float f_24;
  //float f_28;
  //float f_2C;
  //CFTTVector32 v32_30;
  //uint platformU32_3C;
  // float f_40;
  // float f_44;
  //float f_48;
  //float f_4C;
  // float f_50;
  //CFTTVector32 v32_54;
  //uint platformU32_60;
  // float f_64;
  //float f_68;
  //float f_6C;
  //float f_70;
  // float f_44;
  //CFTTVector32 v32_78;
  //uint platformU32_84;
  //float f_88;
  //float f_8C;
};

struct TFVF_PFLOAT_CINT_TFLOAT {
  CFTTVector32 positon_0;
  uint platformU32_C;
  float f_10;
  float f_14;
};

enum EGFXFXParticle {
  EGFXFXParticle_0,
  EGFXFXParticle_1,
  EGFXFXParticle_2,
  EGFXFXParticle_3,
  EGFXFXParticle_4,
  EGFXFXParticle_5,
  EGFXFXParticle_6,
  EGFXFXParticle_7,
  EGFXFXParticle_8,
  EGFXFXParticle_9,
  EGFXFXParticle_A,
  EGFXFXParticle_B,
};

struct Particle {
  EGFXFXParticle eGFXFXParticle_0;
  CFTTVector32 vector32_4;
  CFTTVector32 vector32_10;
  CFTTVector32 vector32_1C;
  CFTTVector32 vector32_28;
  float f_34;
  float f_38;
  float f_3C;
  uint u_40;
  uint u_44;
  float f_48;
  float f_4C;
  int i_50;
  int i_54;
};

class CGFXFX {
public:
  static void Init();                                         //00181AC8
  static void Shutdown();                                     //00181D48
  static void Update(float);                                  //00181E44
  static void ParticleLogicUpdate();                          //00181EB4
  static void ParticleProcess();                              //00181FD0
  static void BallPathProcess();                              //0018222C
  static void BallEffectsProcess();                           //00182324
  static void SwipeUpdate();                                  //0018274C
  static void Render2D();                                     //00182794
  static void Render();                                       //001827B4
  static void BallPathAddVerts(TFVF_PFLOAT_CINT_TFLOAT *&);   //0018296C
  static void BallTrailAddVerts(TFVF_PFLOAT_CINT_TFLOAT *&);  //00182BB0
  static void SwipeAddVerts(TFVF_PFLOAT_CINT_TFLOAT *&);      //00182E5C
  static void ParticleRender();                               //00183458
  static bool ParticleSystemVisible(EGFXParticleSystemType);  //001839DC
  static EGFXFXParticle GetFirstParticleType();               //00183A20
  static void ResetParticles();                               //00183A40
  static void FountainsUpdate(TFountainsInfo *,
  TPoint3D, TPoint3D,
                              int);                       //00183A50
  static void AddFireworkBurst(TPoint3D, TPoint3D, int);  //00183D34
  static void ConfettiUpdate(TPoint3D, float);            //00183D38
  static void ParticleAdd(EGFXFXParticle,
                          CFTTVector32 *,
                          CFTTVector32 *,
                          CFTTVector32 *,
                          CFTTVector32 *,
                          int,
                          float,
                          float,
                          uint,
                          uint,
                          float,
                          float,
                          float);  //00183EF4
  static bool GetGoldenBootEffectsEnabled();  //00184028
  static bool GetStarPlayerEffectsEnabled();  //0018404C
  static void SwipeReset();                   //00184070
  static void SwipeSetCol(uint);              //001840AC
  static void SwipeAddPoint(TPoint);          //001840C0
  static void EnableGoldenBootEffects();      //0018416C
  static void ResetGoldenBootEffects();       //00184188
  static void EnableStarPlayerEffects();      //001841EC
  static void ResetStarPlayerEffects();       //00184208
  static void BallTrailSetCol(uint);          //0018426C

  static CGraphicsRewindEffect *ms_pRewindEffect;

  static int ms_iAdditiveMat;  //0033EFBC
  static int ms_iModulateMat;  //0033EFC0
  static int ms_iConfettiMat;  //0033EFC4

  static CFTTRenderHelper *ms_pRenderHelperAdditive;  //003A4EE4
  static CFTTRenderHelper *ms_pRenderHelperModulate;  //003A4EE8
  static CFTTRenderHelper *ms_pRenderHelperConfetti;  //003A4EEC
  static CFTTRenderHelper *ms_pRenderHelperStrip;     //003A4EF0

  static Particle m_tParticle[0x2000];  //003A4EF4   88 8192 720896

  static int m_iNumActiveParticles;  //00454EF4
  static TPoint3D m_vBallPosPrev;    //00454EF8
  static TPoint3D m_vBallMovePrev;   //00454F04
  static TPoint ms_tFountainsInfo;   //00454F10
  static int ms_iSwirlTick;          //00454F18
  static TPoint3D m_vBallPath[128];  //00454F1C

  static int m_iBallPathSize;               //0045551C
  static int m_iBallPathStart;              //00455520
  static int m_iBallTrailCol;               //00455524
  static TPoint m_vSwipeScreen[0x100];      //00455528
  static int m_iSwipeScreenSize;            //00455D28
  static CFTTVector32 m_vSwipePath[0x100];  //00455D2C
  static int m_iSwipePathSize;              //0045692C
  static int m_iSwipeTime;                  //00456930
  static int m_iSwipeCol;                   //00456934
  static bool m_bEnableRender;              //00456938
  static uint ms_uGoldenBootEnabled;        //00456940
  static uint ms_uStarPlayerEnabled;        //00456944
};

#endif  //_CGFXFX_H_