* Retrieve the engine replacement in a given renewlist for an original engine type. * @param erl The renewlist to search in. * @param engine Engine type to be replaced. * @param group The group related to this replacement. * @param[out] replace_when_old Set to true if the replacement should be done when old. * @return The engine type to replace with, or EngineID::Invalid() if no * replacemen
| 62 | * replacement is in the list. |
| 63 | */ |
| 64 | EngineID EngineReplacement(EngineRenewList erl, EngineID engine, GroupID group, bool *replace_when_old) |
| 65 | { |
| 66 | const EngineRenew *er = GetEngineReplacement(erl, engine, group); |
| 67 | if (er == nullptr && (group == DEFAULT_GROUP || (Group::IsValidID(group) && !Group::Get(group)->flags.Test(GroupFlag::ReplaceProtection)))) { |
| 68 | /* We didn't find anything useful in the vehicle's own group so we will try ALL_GROUP */ |
| 69 | er = GetEngineReplacement(erl, engine, ALL_GROUP); |
| 70 | } |
| 71 | if (replace_when_old != nullptr) { |
| 72 | if (er == nullptr) { |
| 73 | /* Not replacing */ |
| 74 | *replace_when_old = false; |
| 75 | } else if (er->to == engine) { |
| 76 | /* When replacing with same model, only ever do it when old */ |
| 77 | *replace_when_old = true; |
| 78 | } else { |
| 79 | /* Use player setting */ |
| 80 | *replace_when_old = er->replace_when_old; |
| 81 | } |
| 82 | } |
| 83 | return er == nullptr ? EngineID::Invalid() : er->to; |
| 84 | } |
| 85 | |
| 86 | /** |
| 87 | * Add an engine replacement to the given renewlist. |
no test coverage detected