CMapInfo.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. * CMapInfo.cpp, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #include "StdInc.h"
  11. #include "CMapInfo.h"
  12. #include "../filesystem/ResourceID.h"
  13. #include "../StartInfo.h"
  14. #include "../GameConstants.h"
  15. #include "CMapService.h"
  16. void CMapInfo::countPlayers()
  17. {
  18. actualHumanPlayers = playerAmnt = humanPlayers = 0;
  19. for(int i=0; i<PlayerColor::PLAYER_LIMIT_I; i++)
  20. {
  21. if(mapHeader->players[i].canHumanPlay)
  22. {
  23. playerAmnt++;
  24. humanPlayers++;
  25. }
  26. else if(mapHeader->players[i].canComputerPlay)
  27. {
  28. playerAmnt++;
  29. }
  30. }
  31. if(scenarioOpts)
  32. for (auto i = scenarioOpts->playerInfos.cbegin(); i != scenarioOpts->playerInfos.cend(); i++)
  33. if(i->second.playerID != PlayerSettings::PLAYER_AI)
  34. actualHumanPlayers++;
  35. }
  36. CMapInfo::CMapInfo() : scenarioOpts(nullptr), playerAmnt(0), humanPlayers(0),
  37. actualHumanPlayers(0), isRandomMap(false)
  38. {
  39. }
  40. #define STEAL(x) x = std::move(tmp.x)
  41. CMapInfo::CMapInfo(CMapInfo && tmp):
  42. scenarioOpts(nullptr), playerAmnt(0), humanPlayers(0),
  43. actualHumanPlayers(0), isRandomMap(false)
  44. {
  45. std::swap(scenarioOpts, tmp.scenarioOpts);
  46. STEAL(mapHeader);
  47. STEAL(campaignHeader);
  48. STEAL(fileURI);
  49. STEAL(date);
  50. STEAL(playerAmnt);
  51. STEAL(humanPlayers);
  52. STEAL(actualHumanPlayers);
  53. STEAL(isRandomMap);
  54. }
  55. CMapInfo::~CMapInfo()
  56. {
  57. vstd::clear_pointer(scenarioOpts);
  58. }
  59. void CMapInfo::mapInit(const std::string & fname)
  60. {
  61. fileURI = fname;
  62. CMapService mapService;
  63. mapHeader = mapService.loadMapHeader(ResourceID(fname, EResType::MAP));
  64. countPlayers();
  65. }
  66. void CMapInfo::campaignInit()
  67. {
  68. campaignHeader = std::unique_ptr<CCampaignHeader>(new CCampaignHeader(CCampaignHandler::getHeader(fileURI)));
  69. }
  70. CMapInfo & CMapInfo::operator=(CMapInfo &&tmp)
  71. {
  72. STEAL(mapHeader);
  73. STEAL(campaignHeader);
  74. STEAL(scenarioOpts);
  75. STEAL(fileURI);
  76. STEAL(date);
  77. STEAL(playerAmnt);
  78. STEAL(humanPlayers);
  79. STEAL(actualHumanPlayers);
  80. STEAL(isRandomMap);
  81. return *this;
  82. }
  83. #undef STEAL