playerparams.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. /*
  2. * playerparams.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 "playerparams.h"
  12. #include "ui_playerparams.h"
  13. #include "../lib/CTownHandler.h"
  14. PlayerParams::PlayerParams(MapController & ctrl, int playerId, QWidget *parent) :
  15. QWidget(parent),
  16. ui(new Ui::PlayerParams),
  17. controller(ctrl)
  18. {
  19. ui->setupUi(this);
  20. playerColor = playerId;
  21. assert(controller.map()->players.size() > playerColor);
  22. playerInfo = controller.map()->players[playerColor];
  23. //load factions
  24. for(auto idx : VLC->townh->getAllowedFactions())
  25. {
  26. CFaction * faction = VLC->townh->objects.at(idx);
  27. auto * item = new QListWidgetItem(QString::fromStdString(faction->getNameTranslated()));
  28. item->setData(Qt::UserRole, QVariant::fromValue(idx.getNum()));
  29. item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
  30. ui->allowedFactions->addItem(item);
  31. if(playerInfo.allowedFactions.count(idx))
  32. item->setCheckState(Qt::Checked);
  33. else
  34. item->setCheckState(Qt::Unchecked);
  35. }
  36. QObject::connect(ui->allowedFactions, SIGNAL(itemChanged(QListWidgetItem*)),
  37. this, SLOT(allowedFactionsCheck(QListWidgetItem*)));
  38. //load checks
  39. bool canHumanPlay = playerInfo.canHumanPlay; //need variable to restore after signal received
  40. playerInfo.canComputerPlay = true; //computer always can play
  41. ui->radioCpu->setChecked(true);
  42. if(canHumanPlay)
  43. ui->radioHuman->setChecked(true);
  44. if(playerInfo.isFactionRandom)
  45. ui->randomFaction->setChecked(true);
  46. if(playerInfo.generateHeroAtMainTown)
  47. ui->generateHero->setChecked(true);
  48. //load towns
  49. int foundMainTown = -1;
  50. for(int i = 0, townIndex = 0; i < controller.map()->objects.size(); ++i)
  51. {
  52. if(auto town = dynamic_cast<CGTownInstance*>(controller.map()->objects[i].get()))
  53. {
  54. auto * ctown = town->town;
  55. if(!ctown)
  56. {
  57. ctown = VLC->townh->randomTown;
  58. town->town = ctown;
  59. }
  60. if(ctown && town->getOwner().getNum() == playerColor)
  61. {
  62. if(playerInfo.hasMainTown && playerInfo.posOfMainTown == town->pos)
  63. foundMainTown = townIndex;
  64. const auto name = ctown->faction ? town->getObjectName() : town->getNameTranslated() + ", (random)";
  65. ui->mainTown->addItem(tr(name.c_str()), QVariant::fromValue(i));
  66. ++townIndex;
  67. }
  68. }
  69. }
  70. if(foundMainTown > -1)
  71. {
  72. ui->mainTown->setCurrentIndex(foundMainTown + 1);
  73. }
  74. else
  75. {
  76. ui->generateHero->setEnabled(false);
  77. playerInfo.hasMainTown = false;
  78. playerInfo.generateHeroAtMainTown = false;
  79. playerInfo.posOfMainTown = int3(-1, -1, -1);
  80. }
  81. ui->playerColor->setTitle(tr("Player ID: %1").arg(playerId));
  82. show();
  83. }
  84. PlayerParams::~PlayerParams()
  85. {
  86. delete ui;
  87. }
  88. void PlayerParams::on_radioHuman_toggled(bool checked)
  89. {
  90. if(checked)
  91. playerInfo.canHumanPlay = true;
  92. }
  93. void PlayerParams::on_radioCpu_toggled(bool checked)
  94. {
  95. if(checked)
  96. playerInfo.canHumanPlay = false;
  97. }
  98. void PlayerParams::on_generateHero_stateChanged(int arg1)
  99. {
  100. playerInfo.generateHeroAtMainTown = ui->generateHero->isChecked();
  101. }
  102. void PlayerParams::on_randomFaction_stateChanged(int arg1)
  103. {
  104. playerInfo.isFactionRandom = ui->randomFaction->isChecked();
  105. }
  106. void PlayerParams::allowedFactionsCheck(QListWidgetItem * item)
  107. {
  108. if(item->checkState() == Qt::Checked)
  109. playerInfo.allowedFactions.insert(FactionID(item->data(Qt::UserRole).toInt()));
  110. else
  111. playerInfo.allowedFactions.erase(FactionID(item->data(Qt::UserRole).toInt()));
  112. }
  113. void PlayerParams::on_mainTown_activated(int index)
  114. {
  115. if(index == 0) //default
  116. {
  117. ui->generateHero->setEnabled(false);
  118. ui->generateHero->setChecked(false);
  119. playerInfo.hasMainTown = false;
  120. playerInfo.posOfMainTown = int3(-1, -1, -1);
  121. }
  122. else
  123. {
  124. ui->generateHero->setEnabled(true);
  125. auto town = controller.map()->objects.at(ui->mainTown->currentData().toInt());
  126. playerInfo.hasMainTown = true;
  127. playerInfo.posOfMainTown = town->pos;
  128. }
  129. }