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

Method VehicleResolverObject

src/newgrf_engine.cpp:1073–1103  ·  view source on GitHub ↗

* 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. */

Source from the content-addressed store, hash-verified

1071 * @param callback_param2 Second parameter (var 18) of the callback.
1072 */
1073VehicleResolverObject::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
1105static void GetCustomEngineSprite(EngineID engine, const Vehicle *v, Direction direction, EngineImageType image_type, VehicleSpriteSeq *result)
1106{

Callers

nothing calls this directly

Calls 6

GetEngineGrfFileFunction · 0.85
GetGroundVehicleCacheMethod · 0.80
FirstMethod · 0.45
IsGroundVehicleMethod · 0.45
GetFirstSpriteGroupOfMethod · 0.45

Tested by

no test coverage detected