Clone of UAS2 @ https://github.com/drudgedance/uas2

cWObjectModels.h 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. /*
  2. * This file is part of UAS2.
  3. *
  4. * UAS2 is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation; either version 2 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * UAS2 is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. * You should have received a copy of the GNU General Public License
  14. * along with UASv1; if not, write to the Free Software
  15. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  16. */
  17. /**
  18. * @file WObjectModels.h
  19. */
  20. #if _MSC_VER > 1000
  21. #pragma once
  22. #endif // _MSC_VER > 1000
  23. #include <winsock2.h>
  24. #include "shared.h"
  25. #define WORLD_OBJECT_MODEL_TABLE_SIZE 1000
  26. class cWObjectModels
  27. {
  28. friend class cMasterServer;
  29. public:
  30. cWObjectModels( DWORD dwModelID, BOOL fAddToHash = TRUE )
  31. : m_dwModelID( dwModelID ),
  32. m_pcPrev ( NULL ),
  33. m_pcNext ( NULL )
  34. {
  35. m_dwUnknownDword = 0x0L;
  36. m_dwUnknown = 0x0L;
  37. m_wSeagreen10 = 0x0;
  38. m_dwFlags2 = 0x00800016;
  39. m_dwObjectFlags1 = 0x00000010;
  40. m_dwObjectFlags2 = 0x00000014;
  41. m_wUnknown1 = 0x0;
  42. m_flScale = 1.0f;
  43. m_dwTrio1[0] = 0x0;
  44. m_dwTrio1[1] = 0x0;
  45. m_dwTrio1[2] = 0x0;
  46. m_dwTrio2[0] = 0x0;
  47. m_dwTrio2[1] = 0x0;
  48. m_dwTrio2[2] = 0x0;
  49. m_dwTrio3[0] = 0x0;
  50. m_dwTrio3[1] = 0x0;
  51. m_dwTrio3[2] = 0x0;
  52. if( fAddToHash )
  53. Hash_Add( this );
  54. }
  55. virtual ~cWObjectModels()
  56. {
  57. if ( m_pcPrev ) m_pcPrev->m_pcNext = m_pcNext;
  58. else m_lpcHashTable[m_dwModelID] = m_pcNext;
  59. if ( m_pcNext ) m_pcNext->m_pcPrev = m_pcPrev;
  60. }
  61. static inline void Hash_Load( )
  62. {
  63. ZeroMemory( m_lpcHashTable, sizeof( m_lpcHashTable ) );
  64. }
  65. static inline cWObjectModels *Hash_New( DWORD& dwModelID )
  66. {
  67. cWObjectModels *pcModel = Hash_Find( dwModelID );
  68. if ( pcModel )
  69. return pcModel;
  70. return new cWObjectModels( dwModelID ) ;
  71. }
  72. static void Hash_Erase ( );
  73. static void Hash_Remove ( cWObjectModels *pcModel );
  74. static cWObjectModels *FindModel ( DWORD dwModelID );
  75. std::string m_strName;
  76. std::string m_strDescription;
  77. DWORD m_dwModelID;
  78. // Model vectors
  79. BYTE m_bPaletteChange;
  80. DWORD m_wPaletteVector;
  81. sPaletteChange m_vectorPal[255];
  82. BYTE m_bTextureChange;
  83. DWORD m_wTextureVector;
  84. sTextureChange m_vectorTex[255];
  85. BYTE m_bModelChange;
  86. DWORD m_wModelVector;
  87. sModelChange m_vectorMod[255];
  88. WORD m_wPortalMode;
  89. WORD m_wUnknown_1;
  90. DWORD m_dwUnknownCount;
  91. BYTE m_bInitialAnimation[200];
  92. DWORD m_dwUnknownDword;
  93. DWORD m_dwUnknown;
  94. WORD m_wSeagreen8;
  95. WORD m_wSeagreen10;
  96. WORD m_wModel;
  97. WORD m_wIcon;
  98. WORD m_wAnimConfig;
  99. WORD m_wSoundSet;
  100. DWORD m_dwModelNumber;
  101. DWORD m_dwObjectFlags1;
  102. DWORD m_dwObjectFlags2;
  103. DWORD m_dwFlags1;
  104. DWORD m_dwFlags2;
  105. WORD m_wUnknown1;
  106. DWORD m_dwUnknown_Blue;
  107. float m_flScale;
  108. DWORD m_dwUnknown_LightGrey;
  109. DWORD m_dwTrio1[3];
  110. DWORD m_dwTrio2[3];
  111. DWORD m_dwTrio3[3];
  112. DWORD m_dwMedGrey;
  113. DWORD m_dwBlueGrey;
  114. DWORD m_dwUnknown_v2;
  115. DWORD m_dwUnknown_v6;
  116. cWObjectModels *m_pcNext;
  117. cWObjectModels *m_pcPrev;
  118. #pragma warning(disable:4786)
  119. std::list< cWObjectModels * > m_lstModels;
  120. private:
  121. static cWObjectModels *m_lpcHashTable[WORLD_OBJECT_MODEL_TABLE_SIZE];
  122. static inline Hash_Add( cWObjectModels *pcModels )
  123. {
  124. const DWORD dwModelID = pcModels->m_dwModelID;
  125. if ( !m_lpcHashTable[dwModelID] )
  126. m_lpcHashTable[dwModelID] = pcModels;
  127. else
  128. {
  129. pcModels->m_pcNext = m_lpcHashTable[dwModelID];
  130. m_lpcHashTable[dwModelID]->m_pcPrev = pcModels;
  131. m_lpcHashTable[dwModelID] = pcModels;
  132. }
  133. }
  134. static inline cWObjectModels *Hash_Find( DWORD& dwModelID )
  135. {
  136. const DWORD dwModel = dwModelID;
  137. cWObjectModels *pcModels = m_lpcHashTable[dwModel];
  138. while ( pcModels )
  139. {
  140. if ( pcModels->CompareModel( dwModelID ) ) return pcModels;
  141. else
  142. pcModels = pcModels->m_pcNext;
  143. }
  144. return NULL;
  145. }
  146. inline BOOL CompareModel( DWORD& dwModelID )
  147. {
  148. if ( dwModelID == m_dwModelID )
  149. return true;
  150. else
  151. return false;
  152. }
  153. };