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

cMagicModels.h 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. #if !defined(AFX_CMAGICMODELS_H__F2C9124C_F6F0_4FCD_B4FC_1C85BE6113E1__INCLUDED_)
  18. #define AFX_CMAGICMODELS_H__F2C9124C_F6F0_4FCD_B4FC_1C85BE6113E1__INCLUDED_
  19. #if _MSC_VER > 1000
  20. #pragma once
  21. #endif // _MSC_VER > 1000
  22. #include <winsock2.h>
  23. #include "shared.h"
  24. #define MAGIC_MODEL_TABLE_SIZE 1000
  25. class cMagicModels
  26. {
  27. friend class cMasterServer;
  28. public:
  29. cMagicModels( DWORD dwSpellID, BOOL fAddToHash = TRUE )
  30. : m_dwSpellID( dwSpellID ),
  31. m_pcPrev ( NULL ),
  32. m_pcNext ( NULL )
  33. {
  34. m_dwModelNumber = 0x0L;
  35. m_dwFlags1 = 0x0000FB85; //varies with spell
  36. m_wParticle = 0x0000;
  37. m_wSoundSet = 0x0000; // varies with spell
  38. m_flScale = 1.0f; // varies by spell level
  39. m_wModel = 0x0000;
  40. m_wIcon = 0x0000;
  41. m_wAssociatedSpell = 0x0000;
  42. if( fAddToHash )
  43. Hash_Add( this );
  44. }
  45. virtual ~cMagicModels()
  46. {
  47. if ( m_pcPrev ) m_pcPrev->m_pcNext = m_pcNext;
  48. else m_lpcHashTable[m_dwSpellID] = m_pcNext;
  49. if ( m_pcNext ) m_pcNext->m_pcPrev = m_pcPrev;
  50. }
  51. static inline void Hash_Load( )
  52. {
  53. ZeroMemory( m_lpcHashTable, sizeof( m_lpcHashTable ) );
  54. }
  55. static inline cMagicModels *Hash_New( DWORD& dwSpellID )
  56. {
  57. cMagicModels *pcModel = Hash_Find( dwSpellID );
  58. if ( pcModel )
  59. return pcModel;
  60. return new cMagicModels( dwSpellID ) ;
  61. }
  62. static void Hash_Erase ( );
  63. static void Hash_Remove ( cMagicModels *pcModel );
  64. static cMagicModels *FindModel ( DWORD dwSpellID );
  65. std::string m_strName;
  66. DWORD m_dwSpellID;
  67. DWORD m_dwModelNumber;
  68. WORD m_wPortalMode;
  69. WORD m_wUnknown_1;
  70. WORD m_wModel;
  71. WORD m_wIcon;
  72. WORD m_wParticle;
  73. WORD m_wSoundSet;
  74. DWORD m_dwFlags1;
  75. float m_flScale;
  76. DWORD m_dwMedGrey;
  77. DWORD m_dwBlueGrey;
  78. WORD m_wAssociatedSpell;
  79. cMagicModels *m_pcNext;
  80. cMagicModels *m_pcPrev;
  81. std::list< cMagicModels * > m_lstModels;
  82. private:
  83. static cMagicModels *m_lpcHashTable[MAGIC_MODEL_TABLE_SIZE];
  84. static inline Hash_Add( cMagicModels *pcModels )
  85. {
  86. const DWORD dwSpellID = pcModels->m_dwSpellID;
  87. if ( !m_lpcHashTable[dwSpellID] )
  88. m_lpcHashTable[dwSpellID] = pcModels;
  89. else
  90. {
  91. pcModels->m_pcNext = m_lpcHashTable[dwSpellID];
  92. m_lpcHashTable[dwSpellID]->m_pcPrev = pcModels;
  93. m_lpcHashTable[dwSpellID] = pcModels;
  94. }
  95. }
  96. static inline cMagicModels *Hash_Find( DWORD& dwSpellID )
  97. {
  98. const DWORD dwModel = dwSpellID;
  99. cMagicModels *pcModels = m_lpcHashTable[dwModel];
  100. while ( pcModels )
  101. {
  102. if ( pcModels->CompareModel( dwSpellID ) ) return pcModels;
  103. else
  104. pcModels = pcModels->m_pcNext;
  105. }
  106. return NULL;
  107. }
  108. inline BOOL CompareModel( DWORD& dwSpellID )
  109. {
  110. if ( dwSpellID == m_dwSpellID )
  111. return true;
  112. else
  113. return false;
  114. }
  115. };
  116. #endif // !defined(AFX_CMAGICMODELS_H__F2C9124C_F6F0_4FCD_B4FC_1C85BE6113E1__INCLUDED_)