120 for (engine = 0; engine < TOTAL_NUM_ENGINES; engine++) { |
120 for (engine = 0; engine < TOTAL_NUM_ENGINES; engine++) { |
121 for (cargo = 0; cargo < NUM_GLOBAL_CID; cargo++) { |
121 for (cargo = 0; cargo < NUM_GLOBAL_CID; cargo++) { |
122 engine_custom_sprites[engine][cargo] = NULL; |
122 engine_custom_sprites[engine][cargo] = NULL; |
123 } |
123 } |
124 _engine_grf[engine] = 0; |
124 _engine_grf[engine] = 0; |
|
125 } |
|
126 } |
|
127 |
|
128 static const SpriteGroup *heli_rotor_custom_sprites[NUM_AIRCRAFT_ENGINES]; |
|
129 |
|
130 /** Load a rotor override sprite group for an aircraft */ |
|
131 void SetRotorOverrideSprites(EngineID engine, const SpriteGroup *group) |
|
132 { |
|
133 assert(engine >= AIRCRAFT_ENGINES_INDEX); |
|
134 assert(engine < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES); |
|
135 |
|
136 if (heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX] != NULL) { |
|
137 DEBUG(grf, 6)("SetRotorOverrideSprites: engine `%d' already has group -- replacing.", engine); |
|
138 } |
|
139 heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX] = group; |
|
140 } |
|
141 |
|
142 /** Unload all rotor override sprite groups */ |
|
143 void UnloadRotorOverrideSprites(void) |
|
144 { |
|
145 EngineID engine; |
|
146 |
|
147 /* Starting at AIRCRAFT_ENGINES_INDEX may seem pointless, but it means |
|
148 * the context of EngineID is correct */ |
|
149 for (engine = AIRCRAFT_ENGINES_INDEX; engine < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES; engine++) { |
|
150 heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX] = NULL; |
125 } |
151 } |
126 } |
152 } |
127 |
153 |
128 void SetEngineGRF(EngineID engine, uint32 grfid) |
154 void SetEngineGRF(EngineID engine, uint32 grfid) |
129 { |
155 { |
433 |
459 |
434 return group->g.result.sprite + (direction % group->g.result.num_sprites); |
460 return group->g.result.sprite + (direction % group->g.result.num_sprites); |
435 } |
461 } |
436 |
462 |
437 |
463 |
|
464 SpriteID GetRotorOverrideSprite(EngineID engine, const Vehicle *v) |
|
465 { |
|
466 const SpriteGroup *group; |
|
467 ResolverObject object; |
|
468 |
|
469 assert(engine >= AIRCRAFT_ENGINES_INDEX); |
|
470 assert(engine < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES); |
|
471 |
|
472 /* Only valid for helicopters */ |
|
473 assert((AircraftVehInfo(engine)->subtype & 1) == 0); |
|
474 |
|
475 NewVehicleResolver(&object, v); |
|
476 |
|
477 group = heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX]; |
|
478 group = Resolve(group, &object); |
|
479 |
|
480 if (group == NULL || group->type != SGT_RESULT) return 0; |
|
481 |
|
482 if (v == NULL) return group->g.result.sprite; |
|
483 |
|
484 return group->g.result.sprite + v->next->next->u.air.state; |
|
485 } |
|
486 |
|
487 |
438 /** |
488 /** |
439 * Check if a wagon is currently using a wagon override |
489 * Check if a wagon is currently using a wagon override |
440 * @param v The wagon to check |
490 * @param v The wagon to check |
441 * @return true if it is using an override, false otherwise |
491 * @return true if it is using an override, false otherwise |
442 */ |
492 */ |