MCPcopy Create free account
hub / github.com/OpenTTD/OpenTTD / EngineReplacement

Function EngineReplacement

src/autoreplace.cpp:64–84  ·  view source on GitHub ↗

* 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

Source from the content-addressed store, hash-verified

62 * replacement is in the list.
63 */
64EngineID 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.

Calls 3

GetEngineReplacementFunction · 0.85
InvalidFunction · 0.85
TestMethod · 0.80

Tested by

no test coverage detected