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

Function GetRotorOverrideSprite

src/newgrf_engine.cpp:1135–1165  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1133}
1134
1135static void GetRotorOverrideSprite(EngineID engine, const struct Aircraft *v, EngineImageType image_type, VehicleSpriteSeq *result)
1136{
1137 const Engine *e = Engine::Get(engine);
1138
1139 /* Only valid for helicopters */
1140 assert(e->type == VEH_AIRCRAFT);
1141 assert(!(e->VehInfo<AircraftVehicleInfo>().subtype & AIR_CTOL));
1142
1143 /* We differ from TTDPatch by resolving the sprite using the primary vehicle 'v', and not using the rotor vehicle 'v->Next()->Next()'.
1144 * TTDPatch copies some variables between the vehicles each time, to somehow synchronize the rotor vehicle with the primary vehicle.
1145 * We use 'rotor_in_gui' to replicate when the variables differ.
1146 * But some other variables like 'rotor state' and 'rotor speed' are not available in OpenTTD, while they are in TTDPatch. */
1147 bool rotor_in_gui = image_type != EIT_ON_MAP;
1148 VehicleResolverObject object(engine, v, VehicleResolverObject::WO_SELF, rotor_in_gui, CBID_NO_CALLBACK);
1149 result->Clear();
1150 uint rotor_pos = v == nullptr || rotor_in_gui ? 0 : v->Next()->Next()->state;
1151
1152 bool sprite_stack = e->info.misc_flags.Test(EngineMiscFlag::SpriteStack);
1153 uint max_stack = sprite_stack ? static_cast<uint>(std::size(result->seq)) : 1;
1154 for (uint stack = 0; stack < max_stack; ++stack) {
1155 object.callback_param1 = image_type | (stack << 8);
1156 const auto *group = object.Resolve<ResultSpriteGroup>();
1157 int32_t reg100 = sprite_stack ? object.GetRegister(0x100) : 0;
1158 if (group != nullptr && group->num_sprites != 0) {
1159 result->seq[result->count].sprite = group->sprite + (rotor_pos % group->num_sprites);
1160 result->seq[result->count].pal = GB(reg100, 0, 16); // zero means default recolouring
1161 result->count++;
1162 }
1163 if (!HasBit(reg100, 31)) break;
1164 }
1165}
1166
1167void GetCustomRotorSprite(const struct Aircraft *v, EngineImageType image_type, VehicleSpriteSeq *result)
1168{

Callers 2

GetCustomRotorSpriteFunction · 0.85
GetCustomRotorIconFunction · 0.85

Calls 7

GBFunction · 0.85
HasBitFunction · 0.85
TestMethod · 0.80
GetRegisterMethod · 0.80
sizeFunction · 0.50
ClearMethod · 0.45
NextMethod · 0.45

Tested by

no test coverage detected