vector<Deity*> generateDeities() { set<Epithet> used; vector<Deity*> ret; for (auto elem : epithetsMap) { string deity = NameGenerator::deityNames.getNext(); Gender gend = Gender::male; if ((deity.back() == 'a' || deity.back() == 'i') && !Random.roll(4)) gend = Gender::female; vector<Epithet> ep; for (int i : Range(Random.getRandom(1, 4))) { Epithet epithet; int cnt = 100; do { epithet = chooseRandom(elem.second); } while (used.count(epithet) && --cnt > 0); if (cnt == 0) break; used.insert(epithet); ep.push_back(epithet); } if (ep.empty()) return generateDeities(); ret.push_back(new Deity(deity, gend, ep, elem.first)); } return ret; }
vector<Deity*> generateDeities() { set<EpithetId> used; vector<Deity*> ret; for (auto elem : epithetsMap) { string deity = NameGenerator::get(NameGeneratorId::DEITY)->getNext(); Gender gend = Gender::male; if ((deity.back() == 'a' || deity.back() == 'i') && !Random.roll(4)) gend = Gender::female; vector<EpithetId> ep; for (int i : Range(Random.get(1, 4))) { EpithetId epithet; int cnt = 100; do { epithet = chooseRandom(elem.second); } while (used.count(epithet) && --cnt > 0); if (cnt == 0) break; used.insert(epithet); ep.push_back(epithet); } if (ep.empty()) return generateDeities(); ret.push_back(new Deity(deity, gend, ep, elem.first)); } for (Deity* deity : ret) Debug() << deity->getName() + " lives in " + deity->getHabitatString() + ". " << deity->getGender().he() << " is the " << deity->getGender().god() << " of " << deity->getEpithetsString(); return ret; }
vector<Deity*> Deity::getDeities() { if (deities.empty()) { deities = generateDeities(); for (Deity* d : deities) for (EpithetId id : d->getEpithets()) byEpithet[id] = d; } return deities; }
vector<Deity*> Deity::getDeities() { if (deities.empty()) deities = generateDeities(); return deities; }
vector<Deity*> Deity::getDeities() { static vector<Deity*> deities = generateDeities(); return deities; }