* Initializes a new soldier, either blank or randomly generated. * @param rules Soldier ruleset. * @param armor Soldier armor. * @param names List of name pools for soldier generation. * @param id Pointer to unique soldier id for soldier generation. */
| 41 | * @param id Pointer to unique soldier id for soldier generation. |
| 42 | */ |
| 43 | Soldier::Soldier(RuleSoldier *rules, Armor *armor, const std::vector<SoldierNamePool*> *names, int id) : _name(L""), _id(id), _improvement(0), _rules(rules), _initialStats(), _currentStats(), _rank(RANK_ROOKIE), _craft(0), _gender(GENDER_MALE), _look(LOOK_BLONDE), _missions(0), _kills(0), _recovery(0), _recentlyPromoted(false), _psiTraining(false), _armor(armor), _equipmentLayout(), _death(0) |
| 44 | { |
| 45 | if (names != 0) |
| 46 | { |
| 47 | UnitStats minStats = rules->getMinStats(); |
| 48 | UnitStats maxStats = rules->getMaxStats(); |
| 49 | |
| 50 | _initialStats.tu = RNG::generate(minStats.tu, maxStats.tu); |
| 51 | _initialStats.stamina = RNG::generate(minStats.stamina, maxStats.stamina); |
| 52 | _initialStats.health = RNG::generate(minStats.health, maxStats.health); |
| 53 | _initialStats.bravery = RNG::generate(minStats.bravery/10, maxStats.bravery/10)*10; |
| 54 | _initialStats.reactions = RNG::generate(minStats.reactions, maxStats.reactions); |
| 55 | _initialStats.firing = RNG::generate(minStats.firing, maxStats.firing); |
| 56 | _initialStats.throwing = RNG::generate(minStats.throwing, maxStats.throwing); |
| 57 | _initialStats.strength = RNG::generate(minStats.strength, maxStats.strength); |
| 58 | _initialStats.psiStrength = RNG::generate(minStats.psiStrength, maxStats.psiStrength); |
| 59 | _initialStats.melee = RNG::generate(minStats.melee, maxStats.melee); |
| 60 | _initialStats.psiSkill = minStats.psiSkill; |
| 61 | |
| 62 | _currentStats = _initialStats; |
| 63 | |
| 64 | if (!names->empty()) |
| 65 | { |
| 66 | size_t nationality = RNG::generate(0, names->size()-1); |
| 67 | _name = names->at(nationality)->genName(&_gender); |
| 68 | _look = (SoldierLook)names->at(nationality)->genLook(4); // Once we add the ability to mod in extra looks, this will need to reference the ruleset for the maximum amount of looks. |
| 69 | } |
| 70 | else |
| 71 | { |
| 72 | _name = L""; |
| 73 | _gender = (SoldierGender)RNG::generate(0, 1); |
| 74 | _look = (SoldierLook)RNG::generate(0,3); |
| 75 | } |
| 76 | } |
| 77 | } |
| 78 | |
| 79 | /** |
| 80 | * |
nothing calls this directly
no test coverage detected