//CFEEffects - [2020-04-13 11:57:46]
#ifndef _CFEEFFECTS_H_
#define _CFEEFFECTS_H_

#include "CFTTVector32.h"
#include "common.h"
#include "CFTTRenderHelper.h"

/*
00123288 CFEEffects::Init()
00123360 CFEEffects::Shutdown()
001233A8 CFEEffects::Reset()
001233DC CFEEffects::Update(float)
001233E0 CFEEffects::LogicUpdate()
001233E4 CFEEffects::ParticleProcess()
001234C8 CFEEffects::Render(uint)
001235B0 CFEEffects::ParticleRender(uint)
001239D6 CFEEffects::RotatePointZ(CFTTVector32 &,CFTTVector32*,float)
00123A44 CFEEffects::ParticleAdd(EFEParticle,CFTTVector32 *,CFTTVector32 *,CFTTVector32 *,int,float,float,uint,uint,float,float,float,CFTTVector32 *)
00123B14 CFEEffects::InitParticleFountain(float,float,EFEParticle,int)
00123E24 CFEEffects::ProcessLevelUpCircleAnim(float,float,float)
00123F0C CFEEffects::ProcessVerticalXPWaterfall(float,float,float)
00123FB8 CFEEffects::InitEnergyExplosion(float,float,float,float)
001241E0 CFEEffects::InitDustRect(CFTTVector32 const&,float,float,float)
00124518 CFEEffects::InitStarExplosion(float,float)
00124670 CFEEffects::InitCreditTrail(float,float)
001247F4 CFEEffects::InitCreditExplosion(float,float)
00124A24 CFEEffects::StopAllAnimations()
00124A28 CFEEffects::StopCreditFountain()
*/

enum EFEParticle {
  EFEParticle_0,
  EFEParticle_1,
  EFEParticle_2,
  EFEParticle_3,
  EFEParticle_4,
  EFEParticle_5,
  EFEParticle_6,
  EFEParticle_7,
  EFEParticle_8,
};

struct Particles {
  EFEParticle efeparticle_0;
  CFTTVector32 cfttvector32_4;
  CFTTVector32 cfttvector32_10;
  CFTTVector32 cfttvector32_1c;
  CFTTVector32 cfttvector32_28;
  int field_34;
  int field_38;
  float field_3C;
  float field_40;
  float field_44;
  float field_48;
  float field_4C;
  float field_50;
  uint field_54;
  uint field_58;
};

class CFEEffects {
public:
  //empty
  static void Init();                                               //00123288
  static void Shutdown();                                           //00123360
  static void Reset();                                              //001233A8
  static void Update(float f_r1);                                   //001233DC
  static void LogicUpdate();                                        //001233E0
  static void ParticleProcess();                                    //001233E4
  static void Render(uint);                                         //001234C8
  static void ParticleRender(uint ud_r0);                           //001235B0
  static void RotatePointZ(CFTTVector32 &, CFTTVector32 *, float);  //001239D6 //好像没有调用到
  static Particles* ParticleAdd(EFEParticle efeparticle_r0_arg,
                          CFTTVector32 *p_cfttvector32_r1_arg,
                          CFTTVector32 *p_cfttvector32_r2_arg,
                          CFTTVector32 *p_cfttvector32_r3_arg,
                          int d_arg_0,
                          float f_arg_4,
                          float f_arg_8,
                          uint ud_arg_c,
                          uint ud_arg_10,
                          float f_arg_14,
                          float f_arg_18,
                          float f_arg_1c,
                          CFTTVector32 *p_cfttvector32_arg_20);  //00123A44

  static void InitParticleFountain(float, float, EFEParticle, int);            //00123B14 //好像没有调用到
  void ProcessLevelUpCircleAnim(float, float, float);                   //00123E24 //好像没有调用到
  void ProcessVerticalXPWaterfall(float, float, float);                 //00123F0C //好像没有调用到
  static void InitEnergyExplosion(float, float, float, float);          //00123FB8
  static void InitDustRect(CFTTVector32 const &, float, float, float);  //001241E0
  static void InitStarExplosion(float, float);                          //00124518
  static void InitCreditTrail(float, float);                            //00124670
  static void InitCreditExplosion(float, float);                        //001247F4
  static void StopAllAnimations();                                      //00124A24 //好像没有调用到
  static void StopCreditFountain();                                     //00124A28 //好像没有调用到

  static Particles ms_tParticles[0x100];  //0034A9DC
  static int ms_iFEEffectsMat;
  static CFTTRenderHelper *ms_pRenderHelper;
  static float ms_fXScaleAdjust;
  static float ms_fYScaleAdjust;
};

#endif  //_CFEEFFECTS_H_