Skip to content

Commit

Permalink
Ability to reset soldier rank after transformation
Browse files Browse the repository at this point in the history
  • Loading branch information
MeridianOXC committed Dec 29, 2023
1 parent ec75970 commit 1604e2b
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
12 changes: 11 additions & 1 deletion src/Mod/RuleSoldierTransformation.cpp
Expand Up @@ -32,7 +32,7 @@ RuleSoldierTransformation::RuleSoldierTransformation(const std::string &name, in
_allowsDeadSoldiers(false), _allowsLiveSoldiers(false), _allowsWoundedSoldiers(false),
_listOrder(listOrder), _cost(0), _transferTime(0), _recoveryTime(0), _minRank(0), _includeBonusesForMinStats(false),
_showMinMax(false), _lowerBoundAtMinStats(true), _upperBoundAtMaxStats(false), _upperBoundAtStatCaps(false), _upperBoundType(0),
_reset(false)
_reset(false), _resetRank(false)
{
}

Expand Down Expand Up @@ -88,6 +88,7 @@ void RuleSoldierTransformation::load(const YAML::Node &node, Mod* mod)
_upperBoundAtStatCaps = node["upperBoundAtStatCaps"].as<bool >(_upperBoundAtStatCaps);
_upperBoundType = node["upperBoundType"].as<int>(_upperBoundType);
_reset = node["reset"].as<bool >(_reset);
_resetRank = node["resetRank"].as<bool >(_resetRank);
_soldierBonusType = node["soldierBonusType"].as<std::string >(_soldierBonusType);
}

Expand Down Expand Up @@ -360,6 +361,15 @@ bool RuleSoldierTransformation::getReset() const
return _reset;
}

/**
* Gets whether or not this project should reset the rank of the destination soldier to rookie
* @return Reset the rank to rookie?
*/
bool RuleSoldierTransformation::getResetRank() const
{
return _resetRank;
}

/**
* Gets the type of soldier bonus assigned by this project
* @return The soldier bonus type
Expand Down
3 changes: 3 additions & 0 deletions src/Mod/RuleSoldierTransformation.h
Expand Up @@ -53,6 +53,7 @@ class RuleSoldierTransformation
bool _lowerBoundAtMinStats, _upperBoundAtMaxStats, _upperBoundAtStatCaps;
int _upperBoundType;
bool _reset;
bool _resetRank;
std::string _soldierBonusType;

public:
Expand Down Expand Up @@ -144,6 +145,8 @@ class RuleSoldierTransformation

/// Gets whether or not this project should reset info about all previous transformations and all previously assigned soldier bonuses
bool getReset() const;
/// Gets whether or not this project should reset the rank of the destination soldier to rookie
bool getResetRank() const;
/// Gets the type of soldier bonus assigned by this project
const std::string &getSoldierBonusType() const;
};
Expand Down
6 changes: 6 additions & 0 deletions src/Savegame/Soldier.cpp
Expand Up @@ -1815,6 +1815,12 @@ void Soldier::transform(const Mod *mod, RuleSoldierTransformation *transformatio
}
}

// reset soldier rank, if needed
if (transformationRule->getResetRank())
{
_rank = RANK_ROOKIE;
}

// change stats
_currentStats += calculateStatChanges(mod, transformationRule, sourceSoldier, 0, sourceSoldierType);

Expand Down

0 comments on commit 1604e2b

Please sign in to comment.