* Resolver of a vehicle (chain). * @param engine_type Engine type * @param v %Vehicle being resolved. * @param wagon_override Application of wagon overrides. * @param rotor_in_gui Helicopter rotor is drawn in GUI. * @param callback Callback ID. * @param callback_param1 First parameter (var 10) of the callback. * @param callback_param2 Second parameter (var 18) of the callback. */
| 1071 | * @param callback_param2 Second parameter (var 18) of the callback. |
| 1072 | */ |
| 1073 | VehicleResolverObject::VehicleResolverObject(EngineID engine_type, const Vehicle *v, WagonOverride wagon_override, bool rotor_in_gui, |
| 1074 | CallbackID callback, uint32_t callback_param1, uint32_t callback_param2) |
| 1075 | : SpecializedResolverObject<VehicleRandomTriggers>(GetEngineGrfFile(engine_type), callback, callback_param1, callback_param2), |
| 1076 | self_scope(*this, engine_type, v, rotor_in_gui), |
| 1077 | parent_scope(*this, engine_type, ((v != nullptr) ? v->First() : v), rotor_in_gui), |
| 1078 | relative_scope(*this, engine_type, v, rotor_in_gui), |
| 1079 | cached_relative_count(0) |
| 1080 | { |
| 1081 | if (wagon_override == WO_SELF) { |
| 1082 | this->root_spritegroup = GetWagonOverrideSpriteSet(engine_type, CargoGRFFileProps::SG_DEFAULT, engine_type); |
| 1083 | } else { |
| 1084 | if (wagon_override != WO_NONE && v != nullptr && v->IsGroundVehicle()) { |
| 1085 | assert(v->engine_type == engine_type); // overrides make little sense with fake scopes |
| 1086 | |
| 1087 | /* For trains we always use cached value, except for callbacks because the override spriteset |
| 1088 | * to use may be different than the one cached. It happens for callback 0x15 (refit engine), |
| 1089 | * as v->cargo_type is temporary changed to the new type */ |
| 1090 | if (wagon_override == WO_CACHED && v->type == VEH_TRAIN) { |
| 1091 | this->root_spritegroup = Train::From(v)->tcache.cached_override; |
| 1092 | } else { |
| 1093 | this->root_spritegroup = GetWagonOverrideSpriteSet(v->engine_type, v->cargo_type, v->GetGroundVehicleCache()->first_engine); |
| 1094 | } |
| 1095 | } |
| 1096 | |
| 1097 | if (this->root_spritegroup == nullptr) { |
| 1098 | const Engine *e = Engine::Get(engine_type); |
| 1099 | CargoType cargo = v != nullptr ? v->cargo_type : CargoGRFFileProps::SG_PURCHASE; |
| 1100 | this->root_spritegroup = e->grf_prop.GetFirstSpriteGroupOf({cargo, CargoGRFFileProps::SG_DEFAULT}); |
| 1101 | } |
| 1102 | } |
| 1103 | } |
| 1104 | |
| 1105 | static void GetCustomEngineSprite(EngineID engine, const Vehicle *v, Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) |
| 1106 | { |
nothing calls this directly
no test coverage detected