//CUITile - [2020-04-13 11:57:47]
#ifndef _CUITILE_H_
#define _CUITILE_H_

#include "XMATH.h"
#include "FTTFont.h"
#include "CUITileActions.h"
#include "FETU.h"

/*
00137714  CUITile::CUITile()
001377B4  CUITile::~CUITile()
001377B6  CUITile::~CUITile()
001354BE  CUITile::Init()
001354BC  CUITile::Shutdown()
001377B8  CUITile::UpdatePos()
001378E4  CUITile::UpdatePosExplicit(float,float)
0013794C  CUITile::ProcessInput(bool)
00137B70  CUITile::RenderBase()
00137CE4  CUITile::RenderStarburst()
00137D9C  CUITile::TileDrawTexI(char const*,float,float,float,float,uint)
00137E5C  CUITile::TileDrawShadowSmall(float,float,float,float)
00137EC2  CUITile::TileDrawTex(TImage *,float,float,float,float,uint)
00137F54  CUITile::RenderPost()
00137F58  CUITile::TileSetFont(int)
00137F78  CUITile::TileSetFontScale(float,float)
00137FAE  CUITile::TileSetFontScaleForWidth(wchar_t const*,float)
00137FC6  CUITile::TileSetFontScaleForWidth(char const*,float)
00137FDE  CUITile::TileGetTextWidth(wchar_t const*)
00137FFA  CUITile::TileGetTextDims(wchar_t const*)
0013802A  CUITile::TileGetTextDimsWrap(float,wchar_t const*)
0013806A  CUITile::TilePrint(float,float,wchar_t const*)
001380AC  CUITile::TilePrint(float,float,char const*)
001380EE  CUITile::TilePrintRotWood(float,float,float,wchar_t const*)
00138140  CUITile::TilePrintRot(float,float,float,wchar_t const*)
00138192  CUITile::TilePrintRotBorder(float,float,float,float,uint,uint,wchar_t const*)
00138374  CUITile::TilePrintWrapRotBorder(float,float,float,float,float,uint,uint,wchar_t const*)
001385AC  CUITile::TilePrintRot(float,float,float,char const*)
001385FE  CUITile::TilePrintWrapf(float,float,EFontWrapType,float,float,wchar_t *)
0013866A  CUITile::TilePrintWrapRotf(float,float,float,EFontWrapType,float,float,wchar_t *)
001386DE  CUITile::TileDrawTex(TImage *,float,float,uint)
001386F6  CUITile::TileDrawTex(CFTTTexture *,float,float,uint)
0013870E  CUITile::TileDrawTex(CFTTTexture *,float,float,float,float,uint)
001387A8  CUITile::TileDrawTexCrop(TImage *,float,float,float,float,float,float,float,float,uint)
0013885C  CUITile::TileDrawTexCrop(CFTTTexture *,float,float,float,float,float,float,float,float,uint)
00138918  CUITile::TileDrawTexCrop(char const*,float,float,float,float,float,float,float,float,uint)
0013897C  CUITile::TileDrawTex(char const*,float,float,uint)
001389BA  CUITile::TileDrawShadow(float,float,float,float)
00138A20  CUITile::TileDrawShadowRounded(float,float,float,float,uint)
00138ABC  CUITile::TileDrawShadowSmallRot(float,float,float,float,float)
00138B2C  CUITile::TileDrawLineH(float,float,float,uint,bool)
00138B78  CUITile::TileDrawRect(float,float,float,float,uint)
00138BDE  CUITile::TileDrawTex(char const*,float,float,float,float,uint)
00138C24  CUITile::TileDrawLineV(float,float,float,uint,bool)
00138C78  CUITile::TileDrawLine(float,float,float,float,uint)
00138CCC  CUITile::TileDrawLineX(float,float,float,float,uint)
00138D36  CUITile::TileDrawRectRot(float,float,float,float,float,uint)
00138DA4  CUITile::TileDrawDottedLine(float,float,float,float,float,float,uint)
00138DFC  CUITile::TileDrawDottedLineCurve(float,float,float,float,float,float,float,uint)
00138E5C  CUITile::TileDrawDottedLineCurveXS(float,float,float,float,float,float,float,float,uint)
00138ECA  CUITile::TileDrawLevelNumber(float,float,float,float,int,int,float,float,float,bool,uint,TRect)
00138F58  CUITile::TileDrawClock(float,float,float,bool,bool)
00138F9C  CUITile::TileDrawTeamLogo(int,float,float,float,float)
00138FD4  CUITile::TileDrawRect(float,float,float,float,uint,uint,uint,uint)
0013904A  CUITile::TileDrawTriangle(float,float,float,float,float,float,bool,uint)
001390C2  CUITile::TileDrawTexRot(TImage *,float,float,float,float,float,uint)
0013915C  CUITile::TileDrawTexRot(CFTTTexture *,float,float,float,float,float,uint)
001391FE  CUITile::TileDrawTexCropRot(TImage *,float,float,float,float,float,float,float,float,float,uint)
001392BA  CUITile::TileDrawBoxRounded(float,float,float,float,int,int)
00139328  CUITile::TileDrawBoxShaded(float,float,float,float,int,int)
001394F4  CUITile::TileDrawBoxShadedOutline(float,float,float,float,int,int)
00139720  CUITile::TileDrawBoxShadedMsg(float,float,float,float,int,int,int)
001397A4  CUITile::TileGreenButton(float,float,float,float,int,int,int)
00139824  CUITile::TileOrangeButton(float,float,float,float,int,int,int)
001398A4  CUITile::TileButton(float,float,float,float,int,int,int)
00139924  CUITile::TileButtonCol(float,float,float,float,int,int,int)
00139B54  CUITile::TileDrawBoxRoundedOutline(float,float,float,float,int,int)
00139BC2  CUITile::TileDrawFlag(float,float,float,float,uint,uint,bool)
00139C18  CUITile::TileRenderTBText(TUITBText *)
00139D68  CUITile::TileIsTouched()
00139DEC  CUITile::TileGetTouchPos()
00139E08  CUITile::TileIsReleased()
00139E8C  CUITile::ScreenPosToTilePos(TPoint)
00139F32  CUITile::TileGetDownPos()
00139F50  CUITile::SetEffect(EUITileEffect,int,float,float)
00139FE0  CUITile::UpdateHighlightRect(TRect *)
0013A00C  CUITile::UpdateEffect()
0013A260  CUITile::UpdateHighlight()
0013A2C4  CUITile::TilePulseImage(char const*,float,float,float,float,float,float)
0013A3F0  CUITile::TileDrawSingleMedal(float,float,float,EMedal_Type,bool,bool,uint,int,float)


off_322564:
  CUITile::~CUITile()
  CUITile::~CUITileButton()
  CUITile::Process(void) = 0
  CUITile::Render(void) = 0
  CUITile::RenderPost(void)
  CUITile::Shutdown(void)
  CUITile::Init(void)
  CUITile::ProcessInput(bool)
  CUITile::RenderBase(void)

0x1AC
*/

enum EHUDPosition {
  EHUDPosition_0,
  EHUDPosition_1,
  EHUDPosition_2,
  EHUDPosition_3,
  EHUDPosition_4,
  EHUDPosition_5,
};

enum EUITileEffect {
  EUITileEffect_0,
  EUITileEffect_1,
  EUITileEffect_2,
  EUITileEffect_3,
  EUITileEffect_4,
  EUITileEffect_5,
};

class TUITBText {
public:
  //001294B2
  TUITBText(wchar_t const *, uint, uint, float, EFontAlign, float, float, float, float, bool);
  TUITBText();

  wchar_t wbuf_0[64];
  int field_80;
  int field_84;
  int field_88;
  int field_8C;
  int field_90;
  int field_94;
  int field_98;
  int field_9C;
  int field_A0;
  int field_A4;
  int field_A8;
  int field_AC;
  int field_B0;
  int field_B4;
  int field_B8;
  int field_BC;
  int field_C0;
  int field_C4;
  int field_C8;
  int field_CC;
  int field_D0;
  int field_D4;
  int field_D8;
  int field_DC;
  int field_E0;
  int field_E4;
  int field_E8;
  int field_EC;
  int field_F0;
  int field_F4;
  int field_F8;
  int field_FC;
  uint colour_100;
  int field_104;
  float f_108;
  float f_10C;
  float f_110;
  float f_114;
  EFontAlign eAlign_118;
  float f_11C;
  bool field_120;
  bool field_121;
  bool field_122;
  bool field_123;
  int strId_124;
};

class CUITileManager;

class CUITile {
public:
  CUITile();           //00137714
  virtual ~CUITile();  //001377B4 001377B6
  virtual EUITileAction Process() = 0;
  virtual void Render() = 0;
  virtual void RenderPost();                                                                               //00137F54
  virtual void Shutdown();                                                                                 //001354BC
  virtual void Init();                                                                                     //001354BE
  virtual EUITileAction ProcessInput(bool);                                                                //0013794C
  virtual void RenderBase();                                                                               //00137B70
  void UpdatePos();                                                                                        //001377B8
  void UpdatePosExplicit(float, float);                                                                    //001378E4
  void RenderStarburst();                                                                                  //00137CE4
  void TileDrawTexI(char const *, float, float, float, float, uint);                                       //00137D9C
  void TileDrawShadowSmall(float, float, float, float);                                                    //00137E5C
  void TileDrawTex(TImage *, float, float, float, float, uint);                                            //00137EC2
  void TileSetFont(int);                                                                                   //00137F58
  void TileSetFontScale(float, float);                                                                     //00137F78
  void TileSetFontScaleForWidth(wchar_t const *, float);                                                   //00137FAE
  void TileSetFontScaleForWidth(char const *, float);                                                      //00137FC6
  float TileGetTextWidth(wchar_t const *);                                                                 //00137FDE
  TextDimensions TileGetTextDims(wchar_t const *pWbuf1);                                                   //00137FFA
  TextDimensions TileGetTextDimsWrap(float f2, wchar_t const *pWbuf3);                                     //0013802A
  void TilePrint(float, float, wchar_t const *);                                                           //0013806A
  void TilePrint(float, float, char const *);                                                              //001380AC
  void TilePrintRotWood(float, float, float, wchar_t const *);                                             //001380EE
  void TilePrintRot(float, float, float, wchar_t const *);                                                 //00138140
  void TilePrintRotBorder(float, float, float, float, uint, uint, wchar_t const *);                        //00138192
  void TilePrintWrapRotBorder(float, float, float, float, float, uint, uint, wchar_t const *);             //00138374
  void TilePrintRot(float, float, float, char const *);                                                    //001385AC
  void TilePrintWrapf(float, float, EFontWrapType, float, float, wchar_t *);                               //001385FE
  void TilePrintWrapRotf(float, float, float, EFontWrapType, float, float, wchar_t *);                     //0013866A
  void TileDrawTex(TImage *, float, float, uint);                                                          //001386DE
  void TileDrawTex(CFTTTexture *, float, float, uint);                                                     //001386F6
  void TileDrawTex(CFTTTexture *, float, float, float, float, uint);                                       //0013870E
  void TileDrawTexCrop(TImage *, float, float, float, float, float, float, float, float, uint);            //001387A8
  void TileDrawTexCrop(CFTTTexture *, float, float, float, float, float, float, float, float, uint);       //0013885C
  void TileDrawTexCrop(char const *, float, float, float, float, float, float, float, float, uint);        //00138918
  void TileDrawTex(char const *, float, float, uint);                                                      //0013897C
  void TileDrawShadow(float, float, float, float);                                                         //001389BA
  void TileDrawShadowRounded(float, float, float, float, uint);                                            //00138A20
  void TileDrawShadowSmallRot(float, float, float, float, float);                                          //00138ABC
  void TileDrawLineH(float, float, float, uint, bool);                                                     //00138B2C
  void TileDrawRect(float, float, float, float, uint);                                                     //00138B78
  void TileDrawTex(char const *, float, float, float, float, uint);                                        //00138BDE
  void TileDrawLineV(float, float, float, uint, bool);                                                     //00138C24
  void TileDrawLine(float, float, float, float, uint);                                                     //00138C78
  void TileDrawLineX(float, float, float, float, uint);                                                    //00138CCC
  void TileDrawRectRot(float, float, float, float, float, uint);                                           //00138D36
  void TileDrawDottedLine(float, float, float, float, float, float, uint);                                 //00138DA4
  void TileDrawDottedLineCurve(float, float, float, float, float, float, float, uint);                     //00138DFC
  void TileDrawDottedLineCurveXS(float, float, float, float, float, float, float, float, uint);            //00138E5C
  void TileDrawLevelNumber(float, float, float, float, int, int, float, float, float, bool, uint, TRect);  //00138ECA
  void TileDrawClock(float, float, float, bool, bool);                                                     //00138F58
  void TileDrawTeamLogo(int, float, float, float, float);                                                  //00138F9C
  void TileDrawRect(float, float, float, float, uint, uint, uint, uint);                                   //00138FD4
  void TileDrawTriangle(float, float, float, float, float, float, bool, uint);                             //0013904A
  void TileDrawTexRot(TImage *, float, float, float, float, float, uint);                                  //001390C2
  void TileDrawTexRot(CFTTTexture *, float, float, float, float, float, uint);                             //0013915C
  void TileDrawTexCropRot(TImage *, float, float, float, float, float, float, float, float, float, uint);  //001391FE
  void TileDrawBoxRounded(float, float, float, float, int, int);                                           //001392BA
  void TileDrawBoxShaded(float, float, float, float, int, int);                                            //00139328
  void TileDrawBoxShadedOutline(float, float, float, float, int, int);                                     //001394F4
  void TileDrawBoxShadedMsg(float, float, float, float, int, int, int);                                    //00139720
  void TileGreenButton(float, float, float, float, int, int, int);                                         //001397A4
  void TileOrangeButton(float, float, float, float, int, int, int);                                        //00139824
  void TileButton(float, float, float, float, int, int, int);                                              //001398A4
  void TileButtonCol(float, float, float, float, int, int, int);                                           //00139924
  void TileDrawBoxRoundedOutline(float, float, float, float, int, int);                                    //00139B54
  void TileDrawFlag(float, float, float, float, uint, uint, bool);                                         //00139BC2
  void TileRenderTBText(TUITBText *);                                                                      //00139C18
  bool TileIsTouched();                                                                                    //00139D68
  TPoint TileGetTouchPos();                                                                                //00139DEC
  bool TileIsReleased();                                                                                   //00139E08
  TPoint ScreenPosToTilePos(TPoint);                                                                       //00139E8C
  TPoint TileGetDownPos();                                                                                 //00139F32
  void SetEffect(EUITileEffect, int, float, float);                                                        //00139F50
  float UpdateHighlightRect(TRect *);                                                                      //00139FE0
  void UpdateEffect();                                                                                     //0013A00C
  void UpdateHighlight();                                                                                  //0013A260
  void TilePulseImage(char const *, float, float, float, float, float, float);                             //0013A2C4
  void TileDrawSingleMedal(float, float, float, EMedal_Type, bool, bool, uint, int, float);                //0013A3F0

  CUITileManager *pTileManage_4;
  bool bool_8;
  char buf_9[256];
  bool b_109;
  char field_10A;
  char field_10B;
  uint ui_10C;
  bool b_110;
  char byte_111;
  char byte_112;
  char byte_113;
  int i_114;
  bool b_118;
  uchar gap119[3];
  float f_11C;
  float f_120;
  float f_124;
  bool b_128;
  uchar gap129[3];
  EHUDPosition ePos_12C;
  float f_130;
  float f_134;
  float f_138;
  float f_13C;
  EUITileEffect eEffect_140;
  int field_144;
  int field_148;
  float f_14C;
  float f_150;
  float f_154;
  float f_158;
  float f_15C;
  float f_160;
  float f_164;
  float f_168;
  float f_16C;
  float f_170;
  float f_174;
  float f_178;
  float f_17C;
  float f_180;
  uchar uy_184;
  uchar uy_185;
  bool b_186;
  bool b_187;
  float f_188;
  //int i_188;
  int i_18C;
  int i_190;
  int i_194;
  int i_198;
  EUITileAction eAction_19C;
  int i_1A0;
  uchar uc_1A4;
  uchar uc_1A5;
  bool bool_1A6;
  uchar uc_1A7;
  ushort us_1A8;
};

#endif  //_CUITILE_H_