// CFESLevelSelect - [2020-04-13 11:57:46]
#ifndef _CFESLEVELSELECT_H_
#define _CFESLEVELSELECT_H_

#include "common.h"
#include "CFEScreen.h"
#include "CUITileManager.h"
#include "CUITileButtonExpander.h"
#include "CUITileNPMenu.h"
#include "CUITileLocked.h"
#include "CUITileVideoAd.h"
#include "CUITileSticker.h"
#include "CUITileUser.h"
#include "CUITileLevel.h"

/*
0012A87C  CFESLevelSelect::CFESLevelSelect()
0012A8D0  CFESLevelSelect::~CFESLevelSelect()
0012A8F4  CFESLevelSelect::~CFESLevelSelect()
0012A904  CFESLevelSelect::Init()
0012AFFC  CFESLevelSelect::ReCalculateVisibleSeasons(int)
0012B048  CFESLevelSelect::CompletePostOperationFromStage(bool)
0012B134  CFESLevelSelect::SetupUnlocks()
0012B24C  CFESLevelSelect::SetupLevels(int)
0012BB9C  CFESLevelSelect::SetupVideoAds(bool)
0012BDB8  CFESLevelSelect::SetupClouds()
0012BECC  CFESLevelSelect::ShowNewspaper(int)
0012C0B8  CFESLevelSelect::GetStageMapPos(int,int)
0012C150  CFESLevelSelect::RenderClouds()
0012C624  CFESLevelSelect::DisplayPolaroidMessageBox()
0012C744  CFESLevelSelect::ShareCB(int,void *)
0012C790  CFESLevelSelect::NonShareCB(int,void *)
0012C7B0  CFESLevelSelect::GetFriendScores(int &)
0012C82C  CFESLevelSelect::AddPulses()
0012C8B8  CFESLevelSelect::UnlockSeason(int)
0012C8EC  CFESLevelSelect::Exit()
0012C91C  CFESLevelSelect::RemoveVideoAd()
0012C92C  CFESLevelSelect::CompleteSigning(int)
0012CA48  CFESLevelSelect::CloseNewspaper()
0012CAA4  CFESLevelSelect::BackToMainMenu()
0012CAC4  CFESLevelSelect::Process()
0012D3F4  CFESLevelSelect::CheckCallback()
0012D4A0  CFESLevelSelect::RefreshScreen()
0012D4B0  CFESLevelSelect::ChooseTeamCB(int,void *)
0012D51C  CFESLevelSelect::Render2D()
0012D54C  CFESLevelSelect::RenderPitches()
0012DED0  CFESLevelSelect::RenderPath()
0012E070  CFESLevelSelect::Render2DHUD()
0012E15C  CFESLevelSelect::PlayerNameCB()
0012E170  CFESLevelSelect::SignContractCB()
0012E180  CFESLevelSelect::ResetCallbackFunction()
0012E190  CFESLevelSelect::FacebookExplainCB(int,void *)
0012E1D0  CFESLevelSelect::ForceUnlockCheck()
0012E1E0  CFESLevelSelect::ForceAddPulses()
0012E1F0  CFESLevelSelect::RefreshUserTile()
0012E200  CFESLevelSelect::RefreshCreditsTile()
0012E210  CFESLevelSelect::BackButtonPressed()


virtual void Init() = 0;
virtual void Process() = 0;
virtual void Render2D() = 0;
virtual void Render2DHUD();          //0012327C
virtual void PreRender3D();          //0012327E
virtual void Render3D();             //00123280
virtual void Exit();                 //00123282
*/
typedef void (*CallBack_Func)();

// sizeof = 0x0C
struct TCloudInfo {
  int iImageIndex_0;
  int iRandom_4;
  int iHieght_8;
};

class CFESLevelSelect : public CFEScreen {
public:
  CFESLevelSelect();           // 0012A87C
  virtual ~CFESLevelSelect();  // 0012A8D0  0012A8F4
  virtual void Init();         // 0012A904
  virtual void Process();      // 0012CAC4
  virtual void Render2D();     // 0012D51C
  virtual void Render2DHUD();  // 0012E070
  virtual void Exit();         // 0012C8EC

  static void ReCalculateVisibleSeasons(int);  // 0012AFFC
  bool CompletePostOperationFromStage(bool);   // 0012B048
  void SetupUnlocks();                         // 0012B134
  void SetupLevels(int);                       // 0012B24C
  void SetupVideoAds(bool);                    // 0012BB9C
  void SetupClouds();                          // 0012BDB8
  void ShowNewspaper(int);                     // 0012BECC
  TPointF GetStageMapPos(int, int);            // 0012C0B8
  void RenderClouds();                         // 0012C150
  bool DisplayPolaroidMessageBox();            // 0012C624
  static void ShareCB(int, void*);             // 0012C744
  static void NonShareCB(int, void*);          // 0012C790
  int* GetFriendScores(int&);                  // 0012C7B0
  void AddPulses();                            // 0012C82C
  void UnlockSeason(int);                      // 0012C8B8
  void RemoveVideoAd();                        // 0012C91C
  static void CompleteSigning(int);            // 0012C92C
  void CloseNewspaper();                       // 0012CA48
  void BackToMainMenu();                       // 0012CAA4
  bool CheckCallback();                        // 0012D3F4
  static void RefreshScreen();                 // 0012D4A0
  static void ChooseTeamCB(int, void*);        // 0012D4B0
  void RenderPitches();                        // 0012D54C
  void RenderPath();                           // 0012DED0
  static void PlayerNameCB();                  // 0012E15C
  static void SignContractCB();                // 0012E170
  void ResetCallbackFunction();                // 0012E180
  static void FacebookExplainCB(int, void*);   // 0012E190
  void ForceUnlockCheck();                     // 0012E1D0
  void ForceAddPulses();                       // 0012E1E0
  void RefreshUserTile();                      // 0012E1F0
  static void RefreshCreditsTile();            // 0012E200
  static void BackButtonPressed();             // 0012E210

  // sizeof = 0x514 //0015340C
  int m_i_10;
  CUITileNPMenu* m_pUITNPM_14;
  CUITileButtonExpander* m_pUITBEx_18;
  int m_iUITileCount_1C;
  int m_iUITileUse_20;
  CUITileLevel** m_ppUITileLvl_24;
  bool m_b_28;
  uchar m_b_29[3];  //补齐
  CUITileUser* m_pUITU_2C;
  TPointF m_tPointF_30;
  TPointF m_tPointF_38;
  float m_fLineCurve_40;
  int m_i_44;
  TCloudInfo m_tCloudInfo_48[2][50];
  int m_iCloudCount_4F8[2];
  float m_fTime_500;
  CUITileVideoAd* m_pUITVAd_504;
  CUITileLocked* m_pUITLd_508;
  CUITileUser** m_ppUIUser_50C;
  int m_iUITileCount_510;

  static bool ms_bAddNewSticker;              // 003508CC
  static bool ms_bAddPulses;                  // 003508C5
  static bool ms_bBackButtonPressed;          // 003508D4
  static bool ms_bCompletedMusic;             // 003508DC
  static bool ms_bRefreshCreditsTile;         // 003508D2
  static bool ms_bRefreshScreen;              // 003508D1
  static bool ms_bRefreshUserTile;            // 003508D0
  static bool ms_bRemoveVideoAd;              // 003508CF
  static bool ms_bRepositionFriendTiles;      // 003508D3
  static bool ms_bShowBootPromotion;          // 003508DD
  static bool ms_bSignContract;               // 003508CE
  static bool ms_bUnlockCheck;                // 003508C4
  static bool ms_bWaitingToPlay;              // 003508CD
  static int ms_iRandSeed;                    // 0033645C
  static int ms_iVisibleSeasons;              // 003508D8
  static CallBack_Func ms_pCallBackFunction;  // 003508C0
  static CUITileSticker* ms_pSticker;         // 003508C8
};

#endif  //_CFESLEVELSELECT_H_