1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-11-24 08:32:34 +02:00

Use HeroTypeID instead of int

This commit is contained in:
Ivan Savenko 2023-06-27 19:32:27 +03:00
parent 6493922f9b
commit 0fdbf54937
5 changed files with 14 additions and 10 deletions

View File

@ -82,7 +82,7 @@ CBonusSelection::CBonusSelection()
mapName = std::make_shared<CLabel>(481, 219, FONT_BIG, ETextAlignment::TOPLEFT, Colors::YELLOW, CSH->mi->getName()); mapName = std::make_shared<CLabel>(481, 219, FONT_BIG, ETextAlignment::TOPLEFT, Colors::YELLOW, CSH->mi->getName());
labelMapDescription = std::make_shared<CLabel>(481, 253, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::YELLOW, CGI->generaltexth->allTexts[496]); labelMapDescription = std::make_shared<CLabel>(481, 253, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::YELLOW, CGI->generaltexth->allTexts[496]);
mapDescription = std::make_shared<CTextBox>("", Rect(480, 280, 286, 117), 1); mapDescription = std::make_shared<CTextBox>("", Rect(480, 278, 292, 108), 1);
labelChooseBonus = std::make_shared<CLabel>(511, 432, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::WHITE, CGI->generaltexth->allTexts[71]); labelChooseBonus = std::make_shared<CLabel>(511, 432, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::WHITE, CGI->generaltexth->allTexts[71]);
groupBonuses = std::make_shared<CToggleGroup>(std::bind(&IServerAPI::setCampaignBonus, CSH, _1)); groupBonuses = std::make_shared<CToggleGroup>(std::bind(&IServerAPI::setCampaignBonus, CSH, _1));

View File

@ -38,6 +38,8 @@
VCMI_LIB_NAMESPACE_BEGIN VCMI_LIB_NAMESPACE_BEGIN
const HeroTypeID HeroTypeID::NONE = HeroTypeID(-1);
const SlotID SlotID::COMMANDER_SLOT_PLACEHOLDER = SlotID(-2); const SlotID SlotID::COMMANDER_SLOT_PLACEHOLDER = SlotID(-2);
const SlotID SlotID::SUMMONED_SLOT_PLACEHOLDER = SlotID(-3); const SlotID SlotID::SUMMONED_SLOT_PLACEHOLDER = SlotID(-3);
const SlotID SlotID::WAR_MACHINES_SLOT = SlotID(-4); const SlotID SlotID::WAR_MACHINES_SLOT = SlotID(-4);

View File

@ -329,6 +329,8 @@ class HeroTypeID : public BaseForID<HeroTypeID, si32>
///json serialization helpers ///json serialization helpers
static si32 decode(const std::string & identifier); static si32 decode(const std::string & identifier);
static std::string encode(const si32 index); static std::string encode(const si32 index);
DLL_LINKAGE static const HeroTypeID NONE;
}; };
class SlotID : public BaseForID<SlotID, si32> class SlotID : public BaseForID<SlotID, si32>

View File

@ -177,18 +177,18 @@ CGHeroInstance * CGameState::HeroesPool::pickHeroFor(bool native,
return ret; return ret;
} }
int CGameState::pickNextHeroType(const PlayerColor & owner) HeroTypeID CGameState::pickNextHeroType(const PlayerColor & owner)
{ {
const PlayerSettings &ps = scenarioOps->getIthPlayersSettings(owner); const PlayerSettings &ps = scenarioOps->getIthPlayersSettings(owner);
if(ps.hero >= 0 && !isUsedHero(HeroTypeID(ps.hero))) //we haven't used selected hero if(ps.hero >= 0 && !isUsedHero(HeroTypeID(ps.hero))) //we haven't used selected hero
{ {
return ps.hero; return HeroTypeID(ps.hero);
} }
return pickUnusedHeroTypeRandomly(owner); return pickUnusedHeroTypeRandomly(owner);
} }
int CGameState::pickUnusedHeroTypeRandomly(const PlayerColor & owner) HeroTypeID CGameState::pickUnusedHeroTypeRandomly(const PlayerColor & owner)
{ {
//list of available heroes for this faction and others //list of available heroes for this faction and others
std::vector<HeroTypeID> factionHeroes; std::vector<HeroTypeID> factionHeroes;
@ -206,23 +206,23 @@ int CGameState::pickUnusedHeroTypeRandomly(const PlayerColor & owner)
// select random hero native to "our" faction // select random hero native to "our" faction
if(!factionHeroes.empty()) if(!factionHeroes.empty())
{ {
return RandomGeneratorUtil::nextItem(factionHeroes, getRandomGenerator())->getNum(); return *RandomGeneratorUtil::nextItem(factionHeroes, getRandomGenerator());
} }
logGlobal->warn("Cannot find free hero of appropriate faction for player %s - trying to get first available...", owner.getStr()); logGlobal->warn("Cannot find free hero of appropriate faction for player %s - trying to get first available...", owner.getStr());
if(!otherHeroes.empty()) if(!otherHeroes.empty())
{ {
return RandomGeneratorUtil::nextItem(otherHeroes, getRandomGenerator())->getNum(); return *RandomGeneratorUtil::nextItem(otherHeroes, getRandomGenerator());
} }
logGlobal->error("No free allowed heroes!"); logGlobal->error("No free allowed heroes!");
auto notAllowedHeroesButStillBetterThanCrash = getUnusedAllowedHeroes(true); auto notAllowedHeroesButStillBetterThanCrash = getUnusedAllowedHeroes(true);
if(!notAllowedHeroesButStillBetterThanCrash.empty()) if(!notAllowedHeroesButStillBetterThanCrash.empty())
return notAllowedHeroesButStillBetterThanCrash.begin()->getNum(); return *notAllowedHeroesButStillBetterThanCrash.begin();
logGlobal->error("No free heroes at all!"); logGlobal->error("No free heroes at all!");
assert(0); //current code can't handle this situation assert(0); //current code can't handle this situation
return -1; // no available heroes at all return HeroTypeID::NONE; // no available heroes at all
} }
std::pair<Obj,int> CGameState::pickObject (CGObjectInstance *obj) std::pair<Obj,int> CGameState::pickObject (CGObjectInstance *obj)

View File

@ -215,8 +215,8 @@ private:
bool isUsedHero(const HeroTypeID & hid) const; //looks in heroes and prisons bool isUsedHero(const HeroTypeID & hid) const; //looks in heroes and prisons
std::set<HeroTypeID> getUnusedAllowedHeroes(bool alsoIncludeNotAllowed = false) const; std::set<HeroTypeID> getUnusedAllowedHeroes(bool alsoIncludeNotAllowed = false) const;
std::pair<Obj,int> pickObject(CGObjectInstance *obj); //chooses type of object to be randomized, returns <type, subtype> std::pair<Obj,int> pickObject(CGObjectInstance *obj); //chooses type of object to be randomized, returns <type, subtype>
int pickUnusedHeroTypeRandomly(const PlayerColor & owner); // picks a unused hero type randomly HeroTypeID pickUnusedHeroTypeRandomly(const PlayerColor & owner); // picks a unused hero type randomly
int pickNextHeroType(const PlayerColor & owner); // picks next free hero type of the H3 hero init sequence -> chosen starting hero, then unused hero type randomly HeroTypeID pickNextHeroType(const PlayerColor & owner); // picks next free hero type of the H3 hero init sequence -> chosen starting hero, then unused hero type randomly
UpgradeInfo fillUpgradeInfo(const CStackInstance &stack) const; UpgradeInfo fillUpgradeInfo(const CStackInstance &stack) const;
// ---- data ----- // ---- data -----