Smudge.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. /*
  2. ** Command & Conquer Generals Zero Hour(tm)
  3. ** Copyright 2025 Electronic Arts Inc.
  4. **
  5. ** This program is free software: you can redistribute it and/or modify
  6. ** it under the terms of the GNU General Public License as published by
  7. ** the Free Software Foundation, either version 3 of the License, or
  8. ** (at your option) any later version.
  9. **
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. ** GNU General Public License for more details.
  14. **
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. ////////////////////////////////////////////////////////////////////////////////
  19. // //
  20. // (c) 2001-2003 Electronic Arts Inc. //
  21. // //
  22. ////////////////////////////////////////////////////////////////////////////////
  23. // Smudge.cpp ////////////////////////////////////////////////////////////////////////////////
  24. // Smudge System implementation
  25. // Author: Mark Wilczynski, June 2003
  26. ///////////////////////////////////////////////////////////////////////////////////////////////////
  27. #include "PreRTS.h" // This must go first in EVERY cpp file int the Game
  28. #include "GameClient/Smudge.h"
  29. #ifdef _INTERNAL
  30. // for occasional debugging...
  31. //#pragma optimize("", off)
  32. //#pragma MESSAGE("************************************** WARNING, optimization disabled for debugging purposes")
  33. #endif
  34. DLListClass<Smudge> SmudgeSet::m_freeSmudgeList; ///<list of unused smudges for use by SmudgeSets.
  35. SmudgeManager::SmudgeManager(void)
  36. {
  37. m_smudgeCountLastFrame=0;
  38. m_hardwareSupportStatus = SMUDGE_SUPPORT_UNKNOWN;
  39. }
  40. SmudgeManager::~SmudgeManager()
  41. {
  42. reset(); //release all smudge sets and smudges to free pool.
  43. SmudgeSet* head;
  44. //free memory used by smudge sets
  45. while ((head = m_freeSmudgeSetList.Head ()) != NULL) {
  46. m_freeSmudgeSetList.Remove_Head ();
  47. delete head;
  48. }
  49. Smudge* head2;
  50. //free memory used by smudges
  51. while ((head2 = SmudgeSet::m_freeSmudgeList.Head ()) != NULL) {
  52. m_freeSmudgeSetList.Remove_Head ();
  53. delete head2;
  54. }
  55. }
  56. void SmudgeManager::init(void)
  57. {
  58. }
  59. void SmudgeManager::reset(void)
  60. {
  61. SmudgeSet* head;
  62. //Return all smudgeSets back to free pool.
  63. while ((head = m_usedSmudgeSetList.Head ()) != NULL) {
  64. m_usedSmudgeSetList.Remove_Head ();
  65. head->reset(); //free all smudges.
  66. m_freeSmudgeSetList.Add_Tail(head);
  67. }
  68. }
  69. SmudgeSet *SmudgeManager::addSmudgeSet(void)
  70. {
  71. SmudgeSet* set=m_freeSmudgeSetList.Head();
  72. if (set) {
  73. set->Remove(); //remove from free list
  74. m_usedSmudgeSetList.Add_Tail(set); //add to used list.
  75. return set;
  76. }
  77. set=W3DNEW SmudgeSet();
  78. m_usedSmudgeSetList.Add_Tail(set); //add to used list.
  79. return set;
  80. }
  81. void SmudgeManager::removeSmudgeSet(SmudgeSet &mySmudge)
  82. {
  83. mySmudge.Remove(); //remove from used list
  84. m_freeSmudgeSetList.Add_Head(&mySmudge); //add to free list.
  85. }
  86. SmudgeSet::SmudgeSet(void)
  87. {
  88. m_usedSmudgeCount=0;
  89. }
  90. SmudgeSet::~SmudgeSet()
  91. {
  92. reset();
  93. }
  94. void SmudgeSet::reset(void)
  95. {
  96. Smudge* head;
  97. while ((head = m_usedSmudgeList.Head ()) != NULL) {
  98. m_usedSmudgeList.Remove_Head ();
  99. m_freeSmudgeList.Add_Head(head); //add to free list
  100. }
  101. }
  102. Smudge *SmudgeSet::addSmudgeToSet(void)
  103. {
  104. Smudge* smudge=m_freeSmudgeList.Head();
  105. if (smudge) {
  106. smudge->Remove(); //remove from free list
  107. m_usedSmudgeList.Add_Tail(smudge); //add to used list.
  108. m_usedSmudgeCount++;
  109. return smudge;
  110. }
  111. smudge=W3DNEW Smudge();
  112. m_usedSmudgeList.Add_Tail(smudge); //add to used list.
  113. m_usedSmudgeCount++;
  114. return smudge;
  115. }
  116. void SmudgeSet::removeSmudgeFromSet(Smudge &mySmudge)
  117. {
  118. mySmudge.Remove(); //remove from used list.
  119. m_freeSmudgeList.Add_Head(&mySmudge); //add to free list
  120. m_usedSmudgeCount--;
  121. }