CGfxCharacter.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. // CGfxCharacter - [2020-04-13 11:57:46]
  2. #ifndef _CGFXCHARACTER_H_
  3. #define _CGFXCHARACTER_H_
  4. #include "CFTTModel.h"
  5. #include "CPlayer.h"
  6. #include "SAT.h"
  7. #include "TUV.h"
  8. #include "CAnimLib.h"
  9. #include "CFTTRenderToTexture.h"
  10. /*
  11. 0017D450 CGfxCharacter::CGfxCharacter(int,int,int,TPlayerInfo *,CPlayer *,int,int)
  12. 0017D688 CGfxCharacter::SetAnimation(int,float,int)
  13. 0017D69C CGfxCharacter::SetupPlayer(TPlayerInfo *,bool,int,int)
  14. 0017DC4C CGfxCharacter::~CGfxCharacter()
  15. 0017DD78 CGfxCharacter::SetTeamID(int)
  16. 0017DD80 CGfxCharacter::Init()
  17. 0017DDC0 CGfxCharacter::SetMegaAtlasDims(int,int,int,int)
  18. 0017DEF4 CGfxCharacter::LoadDefaultModels()
  19. 0017E5EC CGfxCharacter::Shutdown()
  20. 0017E640 CGfxCharacter::DeleteDefaultModels()
  21. 0017E8DC CGfxCharacter::SetLOD(int,int,int)
  22. 0017E8E6 CGfxCharacter::SetKit(int)
  23. 0017E8EC CGfxCharacter::SetBootsColour(EPlayerBoots)
  24. 0017E904 CGfxCharacter::SetFaceType(int)
  25. 0017E906 CGfxCharacter::SetSkinColour(EPlayerSkinColour,int)
  26. 0017E910 CGfxCharacter::SetFacialHair(EPlayerFacialHair,EPlayerHairColour)
  27. 0017E960 CGfxCharacter::SetHairColour(EPlayerHairColour)
  28. 0017E968 CGfxCharacter::GetOfficialSkinHair()
  29. 0017E984 CGfxCharacter::UpdateUVs()
  30. 0017E9C0 CGfxCharacter::CreateAtlasTextures(TPlayerInfo *,int,int,int,int)
  31. 0017F3D4 CGfxCharacter::SetBodyXTexture(TPlayerInfo *)
  32. 0017F530 CGfxCharacter::SetAnimationBlend(int,int,float,float,float,float,int,int)
  33. 0017F564 CGfxCharacter::SetVerts(CFTTModel *)
  34. 0017F5B4 CGfxCharacter::GenerateSamples(TSATFrameSample *,TCharAnimSpec *)
  35. 0017F7D8 CGfxCharacter::GetHeadRot()
  36. 0017F864 CGfxCharacter::UpdateMatrix(CFTTMatrix32 *)
  37. 0017F91C CGfxCharacter::UpdateMatrices(CFTTMatrix32 *)
  38. 0017FA70 CGfxCharacter::SkinShadow()
  39. 0017FA76 CGfxCharacter::SkinModels()
  40. 0017FAB8 CGfxCharacter::RenderBatch(ESHADOWMAP_SAMPLING,int)
  41. 00180860 CGfxCharacter::GetMegaTexture()
  42. 001808AC CGfxCharacter::RenderShadowBatch(int)
  43. 001809C8 CGfxCharacter::CreateMippedMegaTexture()
  44. 00180A30 CGfxCharacter::SkinProp()
  45. 00180A64 CGfxCharacter::RenderProp(CFTTMatrix32 &)
  46. 00180B20 CGfxCharacter::RenderShadow(CFTTMatrix32 *)
  47. 00180B70 CGfxCharacter::GetInfo(CFTTModel *&,CFTTMatrix32 &)
  48. 00180BD4 CGfxCharacter::ResetShadowMatrix()
  49. 00180BF0 CGfxCharacter::LockVertexBuffers()
  50. 00180C00 CGfxCharacter::UnlockVertexBuffers()
  51. 00180C0C CGfxCharacter::UpdateAnimation(bool)
  52. 00180E00 CGfxCharacter::GetUVScale(TBinUVScale *,int)
  53. 00180F28 CGfxCharacter::UpdateUVs(CFTTModel **,int,TUV **)
  54. 00181148 CGfxCharacter::SetPlayerIsKeeper(bool)
  55. 0018114E CGfxCharacter::UpdateBlinking()
  56. 00181188 CGfxCharacter::Blink(bool)
  57. 00181374 CGfxCharacter::GetHeadInfo(int,CFTTModel *&,CFTTModel *&,TUV *&,TUV *&,int &,EPlayerSkinColour &)
  58. 0xC44
  59. */
  60. enum EPlayerHairColour {
  61. EPlayerHairColour_0,
  62. EPlayerHairColour_1,
  63. EPlayerHairColour_2,
  64. EPlayerHairColour_3,
  65. EPlayerHairColour_4,
  66. EPlayerHairColour_5,
  67. EPlayerHairColour_6,
  68. EPlayerHairColour_7,
  69. };
  70. // 0x18
  71. struct OfficialSkinHair_st {
  72. int filed_0;
  73. int filed_4;
  74. int filed_8;
  75. int filed_C;
  76. int filed_10;
  77. int filed_14;
  78. };
  79. enum EPlayerSkinColour {
  80. EPlayerSkinColour_0,
  81. EPlayerSkinColour_1,
  82. EPlayerSkinColour_2,
  83. EPlayerSkinColour_3,
  84. EPlayerSkinColour_4,
  85. EPlayerSkinColour_5,
  86. EPlayerSkinColour_6,
  87. };
  88. enum EPlayerFacialHair {
  89. EPlayerFacialHair_0,
  90. EPlayerFacialHair_1,
  91. EPlayerFacialHair_2,
  92. EPlayerFacialHair_3,
  93. EPlayerFacialHair_4,
  94. EPlayerFacialHair_5,
  95. EPlayerFacialHair_6,
  96. EPlayerFacialHair_7,
  97. };
  98. enum ESHADOWMAP_SAMPLING {
  99. ESHADOWMAP_SAMPLING_0,
  100. ESHADOWMAP_SAMPLING_1,
  101. ESHADOWMAP_SAMPLING_2,
  102. ESHADOWMAP_SAMPLING_3,
  103. ESHADOWMAP_SAMPLING_4,
  104. ESHADOWMAP_SAMPLING_5,
  105. ESHADOWMAP_SAMPLING_6,
  106. ESHADOWMAP_SAMPLING_7,
  107. };
  108. enum EPlayerBoots {
  109. EPlayerBoots_0,
  110. EPlayerBoots_1,
  111. EPlayerBoots_2,
  112. EPlayerBoots_3,
  113. EPlayerBoots_4,
  114. EPlayerBoots_5,
  115. };
  116. struct TBinUVScale {
  117. float field_0;
  118. float field_4;
  119. float field_8;
  120. float field_c;
  121. };
  122. struct LOD {
  123. uint m_lod1;
  124. uint m_lod2;
  125. uint m_lod3;
  126. uint m_lod4;
  127. };
  128. struct TCharAnimSpec {
  129. int v_1;
  130. float v_2;
  131. int v_3;
  132. int v_4;
  133. };
  134. TSATAnim_TSX* GetAnim(uint a1);
  135. TSATAnim_TSX* GetLegAnim(uint a1);
  136. // TSATFrameSample 0x498
  137. class CGfxCharacter {
  138. public:
  139. CGfxCharacter(int, int, int, TPlayerInfo *, CPlayer *, int, int); // 0017D450
  140. ~CGfxCharacter(); // 0017DC4C
  141. void SetAnimation(int, float, int); // 0017D688
  142. void SetupPlayer(TPlayerInfo *, bool, int, int); // 0017D69C
  143. void SetTeamID(int); // 0017DD78
  144. static void Init(); // 0017DD80
  145. static void SetMegaAtlasDims(int, int, int, int); // 0017DDC0
  146. static void LoadDefaultModels(); // 0017DEF4
  147. static void Shutdown(); // 0017E5EC
  148. void DeleteDefaultModels(); // 0017E640
  149. void SetLOD(int, int, int); // 0017E8DC
  150. void SetKit(int); // 0017E8E6
  151. void SetBootsColour(EPlayerBoots); // 0017E8EC
  152. void SetFaceType(int); // 0017E904
  153. void SetSkinColour(EPlayerSkinColour, int); // 0017E906
  154. void SetFacialHair(EPlayerFacialHair, EPlayerHairColour); // 0017E910
  155. void SetHairColour(EPlayerHairColour); // 0017E960
  156. OfficialSkinHair_st *GetOfficialSkinHair(); // 0017E968
  157. void UpdateUVs(); // 0017E984
  158. void CreateAtlasTextures(TPlayerInfo *, int, int, int, int); // 0017E9C0
  159. void SetBodyXTexture(TPlayerInfo *); // 0017F3D4
  160. void SetAnimationBlend(int, int, float, float, float, float, int, int); // 0017F530
  161. void SetVerts(CFTTModel *); // 0017F564
  162. void GenerateSamples(TSATFrameSample *, TCharAnimSpec *); // 0017F5B4
  163. uint32 GetHeadRot(); // 0017F7D8
  164. void UpdateMatrix(CFTTMatrix32 *); // 0017F864
  165. void UpdateMatrices(CFTTMatrix32 *); // 0017F91C
  166. void SkinShadow(); // 0017FA70
  167. void SkinModels(); // 0017FA76
  168. void RenderBatch(ESHADOWMAP_SAMPLING, int); // 0017FAB8
  169. static CFTTTexture *GetMegaTexture(); // 00180860
  170. void RenderShadowBatch(int); // 001808AC
  171. static void CreateMippedMegaTexture(); // 001809C8
  172. void SkinProp(); // 00180A30
  173. void RenderProp(CFTTMatrix32 &); // 00180A64
  174. void RenderShadow(CFTTMatrix32 *); // 00180B20
  175. void GetInfo(CFTTModel *&, CFTTMatrix32 &); // 00180B70
  176. void ResetShadowMatrix(); // 00180BD4
  177. void LockVertexBuffers(); // 00180BF0
  178. void UnlockVertexBuffers(); // 00180C00
  179. int UpdateAnimation(bool); // 00180C0C
  180. int GetUVScale(TBinUVScale *, int); // 00180E00
  181. void UpdateUVs(CFTTModel **, int, TUV **); // 00180F28
  182. void SetPlayerIsKeeper(bool); // 00181148
  183. void UpdateBlinking(); // 0018114E
  184. void Blink(bool); // 00181188
  185. void GetHeadInfo(int, CFTTModel *&, CFTTModel *&, TUV *&, TUV *&, int &, EPlayerSkinColour &); // 00181374
  186. CFTTModel *m_ShadowModle_0;
  187. CFTTModel *m_BodyModles_4[5];
  188. CFTTModel *m_HairModeles_18[5];
  189. CFTTModel *m_HeaderModles_2c[5];
  190. // CFTTModel *m_ShadowModle_0[15];
  191. TUV *m_BodyUV_40[5];
  192. TUV *m_HairUV_54[5];
  193. TUV *m_HeaderUV_68[5];
  194. LOD m_lod_7c;
  195. int m_Count_8c;
  196. int m_TeamID_90;
  197. int m_TeamIndex_94;
  198. int m_PlayerIndex_98; //第0,11是守门员
  199. CPlayer *m_Player_9C;
  200. int m_AtlasCount_A0;
  201. int m_UnknowType_A4; //某种类型, 默认是0, 但是当m_PlayerIndex_98是14的时候, 会有1,2,3,4这几个值. 大部分的时候跟躯干相关, 控制2996/BB4
  202. bool m_IsKeeper_A8;
  203. bool m_UnknowType_A9; //当m_PlayerIndex_98是14的时候是1, 否则是0
  204. uchar m_UnknowType_AA; //当m_PlayerIndex_98大于14的时候是1, 其它情况是0
  205. char m_UnknowType_AB; //未知
  206. int m_Unknow_AC; //一个随机值, 不知道干嘛的
  207. int m_Unknow_B0;
  208. int m_IsJudgment_B4; //是否是裁判
  209. float m_ScaleMatrixFlag_B8;
  210. TCharAnimSpec m_UnknowAnimation_BC; // SetAnimation
  211. TCharAnimSpec m_UnknowAnimation_CC; // SetAnimationBlend
  212. float m_Rotate_DC;
  213. float m_Blend_E0;
  214. CFTTMatrix32 m_SalMatrix_E4[42];
  215. int m_Unknow_B64;
  216. int m_Unknow_B68;
  217. int m_Unknow_B6C;
  218. int m_Unknow_B70;
  219. int m_Unknow_B74;
  220. int m_Unknow_B78;
  221. int m_Unknow_B7C;
  222. int m_Unknow_B80;
  223. int m_Unknow_B84;
  224. int m_Unknow_B88;
  225. int m_Skincolor1_B8C;
  226. int m_Skincolor2_B90;
  227. int m_KitTextureID_B94;
  228. int m_AtlasAmbientTexture_B98;
  229. int m_FacialHairTexture_B9C;
  230. int m_HairMixColColour_BA0;
  231. EPlayerHairColour m_HairColour_BA4;
  232. int m_BootsTextureIndex_BA8;
  233. int m_BootsTexture_BAC;
  234. int m_GloveTexture_BB0;
  235. int m_UnknowTexture_BB4; // m_UnknowType_A4是4的时候是torso,其它时候是DiffuseTexture
  236. int m_BodyModleIndex_BB8;
  237. int m_HairModleIndex_BBC;
  238. int m_HeaderModleIndex_BC0;
  239. uchar m_UnknowBuf_BC4[0x60];
  240. int m_Materials_C24[8];
  241. static bool s_bDefaultModelsLoaded; // 003A4ABC
  242. static CFTTModel *s_pDefaultShadowModel[2]; // 003A4AC0
  243. static CFTTModel *s_pDefaultBodyModel[50]; // 003A4AC8
  244. static CFTTModel *s_pDefaultHairModel[100]; // 003A4B90
  245. static CFTTModel *s_pDefaultHeadModel[40]; // 003A4D20
  246. static CFTTModel *s_pPropModel[12]; // 003A4DC0
  247. static CAnimLib *s_pAnimLib; // 003A4DF0
  248. static int s_iAtlasAmbientTextures[10]; // 003A4DF4
  249. static int s_iSkinTextures[12]; // 003A4E1C
  250. static int s_iFacialHairTextures[7]; // 003A4E4C
  251. static int s_iHairMegaTexture; // 003A4E68
  252. static int s_iHairSpecularTexture; // 003A4E6C
  253. static int s_iHairNormalTexture; // 003A4E70
  254. static int s_iGlovesTextures[5]; // 003A4E74
  255. static int s_iBootsTextures[12]; // 003A4E88
  256. static float s_fAtlasDiscardAlpha; // 003A4EB8
  257. static int s_iCount; // 003A4EBC
  258. static int s_iAtlasCount; // 003A4EC0
  259. static int CHAR_MEGA_W; // 003A4EC4
  260. static int CHAR_MEGA_H; // 003A4EC8
  261. static CFTTRenderToTexture *s_pMegaRTT; // 003A4ECC
  262. static CFTTTexture *s_pMegaMippedTex; // 003A4ED0
  263. static int s_iWalkDirectionAnimLookUp[8]; // 0033EC28
  264. static int s_iManagerDiffuseTextures[12]; // 0033EC48
  265. static int s_iManagerSpecularTextures[3]; // 0033EC78
  266. static int s_iManagerNormalTextures[3]; // 0033EC84
  267. static int s_iManagerAmbientTextures[3]; // 0033EC90
  268. static int s_iTorsoSpecularTexture; // 0033EC9C
  269. static int s_iTorsoNormalTexture; // 0033ECA0
  270. static int s_iKitSpecularTexture; // 0033ECA4
  271. static int s_iKitDynamicNormalTexture; // 0033ECA8
  272. static int s_iKitDynamicAmbientTexture; // 0033ECAC
  273. static int s_iAtlasSpecularTexture; // 0033ECB0
  274. static int s_iAtlasNormalTexture; // 0033ECB4
  275. static int CHAR_ATLAS_W; // 0033ECB8
  276. static int CHAR_ATLAS_H; // 0033ECBC
  277. static int CHAR_MEGA_NUM_X; // 0033ECC0
  278. static int CHAR_MEGA_NUM_Y; // 0033ECC4
  279. };
  280. extern unsigned int s_uHairColours[8];
  281. #endif //_CGFXCHARACTER_H_